Index: millennium.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/millennium/millennium.module,v
retrieving revision 1.13.2.33.2.2.2.37
diff -u -r1.13.2.33.2.2.2.37 millennium.module
--- millennium.module	30 Oct 2009 22:22:49 -0000	1.13.2.33.2.2.2.37
+++ millennium.module	30 Nov 2009 21:46:35 -0000
@@ -239,7 +239,7 @@
   $output = "<h2>". t("Import history") . "</h2>";
 
   $items[] = t("WebOPAC: !link", array("!link" => l($data->base_url, $data->base_url)));
-  $items[] = t("Bibliographic record #: !link", array("!link" => l($bib_recnum, millennium_permalink($bib_recnum))));
+  $items[] = t("Bibliographic record #: !link", array("!link" => l($bib_recnum, millennium_permalink($bib_recnum, "plain", $data->base_url))));
   $recnums = millennium_item_recnums_from_node($node->nid);
   if ($recnums) {
     $items[] = t("Item records: @items", array("@items" => implode(", ", $recnums)));
@@ -251,14 +251,14 @@
 
   $output .= "<p></p>";
   $output .= "<h2>". t('MARC record and conversion') ."</h2>";
-  $output .= _millennium_show_conversion($bib_recnum, $node->millennium_biblio_data["marc"]);
+  $output .= _millennium_show_conversion($bib_recnum, $node->millennium_biblio_data["marc"], $data->base_url);
   return $output;
 }
 
 /**
  * Diagnostics to show conversion of MARC into fields for node object
  */
-function _millennium_show_conversion($recnum, $marc_text = false) {
+function _millennium_show_conversion($recnum, $marc_text = false, $base_url = false) {
   $output = "";
 
   $marc_text_msg = "";
@@ -272,7 +272,7 @@
   $output .= $marc_text_msg;
   $output .= "<pre class='millennium marc'>$marc_text</pre>";
 
-  $tmp_node = millennium_marc_to_nodeobject($marc_text, $recnum);
+  $tmp_node = millennium_marc_to_nodeobject($marc_text, $recnum, $base_url);
 
   $output .= "<h3>" .t('Conversion results') ."</h3>";
 
@@ -798,7 +798,7 @@
  * @param recnum Millennium record number (b123456, i123456) to fetch
  * @param mode String specifying type of view: plain, marc, items, xml
  */
-function millennium_fetch_recordpage($recnum, $mode = "plain") {
+function millennium_fetch_recordpage($recnum, $mode = "plain", $base_url = false) {
   global $millennium_fetch_recordpage_cache;
   $key = $recnum . $mode;
   #drupal_set_message("millennium_fetch_recordpage($recnum, $mode): key = $key");
@@ -808,7 +808,7 @@
   }
 
   // Get URL to fetch
-  $url = millennium_permalink($recnum, $mode);
+  $url = millennium_permalink($recnum, $mode, $base_url);
   if ($url == false) {
     return false;
   }
@@ -826,8 +826,10 @@
 /**
  * Returns a URL for a certain item record view in Millennium
  */
-function millennium_permalink($recnum, $mode = 'plain') {
-  $baseurl = millennium_get_real_baseurl();
+function millennium_permalink($recnum, $mode = 'plain', $baseurl = false) {
+  if ($baseurl === false) {
+    $baseurl = millennium_get_real_baseurl();
+  }
   if ($baseurl == false) {
     return false;
   }
@@ -911,8 +913,12 @@
  * @param bib_recnum Millennium record number (b123456) that contains this MARC
  * @param marc_text MARC record (plaintext)
  */
-function millennium_marc_to_nodeobject($marc_text, $recnum = false) {
+function millennium_marc_to_nodeobject($marc_text, $recnum = false, $base_url = false) {
   global $_millennium_field_labels;
+  
+  if ($base_url === false) {
+    $base_url = millennium_get_real_baseurl();
+  }
 
   $marc = millennium_parse_marc($marc_text);
   if (! $marc) {
@@ -926,7 +932,7 @@
   $lcc = millennium_getFieldPlain($marc, "05...");
   // If no LCC, try to get from items
   if (trim($lcc) == "" && $recnum) {
-    $holdings = millennium_get_holdings_info($recnum);
+    $holdings = millennium_get_holdings_info($recnum, null, $base_url);
     // Look for first "classnumber" in items
     if (is_array($holdings)) {
       foreach ($holdings as $holding) {
@@ -1134,7 +1140,7 @@
   // Others
   #$biblio["bib_recnum"] = $bib_recnum;
   $biblio["imprint"] = $biblio["imprint_place"] ." ". $biblio["imprint_name"] ." ". $biblio["imprint_date"];
-  $biblio["url"] = l(t('Link to original record'), millennium_permalink($recnum, "plain"));
+  $biblio["url"] = l(t('Link to original record'), millennium_permalink($recnum, "plain", $base_url));
   $biblio["marc"] = $marc_text;
 
   // Clean up (almost) every $biblio[] value
@@ -1849,7 +1855,8 @@
     return;
   }
 
-  $hold_url = millennium_permalink($bib_recnum, "hold");
+  $base_url = db_result(db_query("SELECT base_url FROM {millennium_node_bib} WHERE nid=%d", $nid));
+  $hold_url = millennium_permalink($bib_recnum, "hold", $base_url);
   $links["millennium_holds"] = array(
     'title' => t('Place hold or request delivery'),
     'href' => $hold_url,
@@ -2019,6 +2026,7 @@
   $output = "";
   $show = "recordlink";
   $msg = t("Show availability and holdings");
+  $baseurl = db_result(db_query("SELECT base_url FROM {millennium_node_bib} WHERE nid=%d", $nid));
   if (!$page) {
     // We are in teaser view
     switch ($option) {
@@ -2064,10 +2072,9 @@
       drupal_add_js("var millenniumLocale = ". drupal_to_js($mil_locale) .";", 'inline');
       drupal_add_js("var millenniumPage = ". drupal_to_js($mil_page) .";", 'inline');
       drupal_add_js( drupal_get_path('module', 'millennium') .'/millennium.js');
-      $baseurl = millennium_get_real_baseurl();
       if ($baseurl) {
         $output .= "<div class='millennium holdings load' id='nid-$nid'>";
-        $output .= l( $msg, millennium_permalink($bib_recnum));
+        $output .= l( $msg, millennium_permalink($bib_recnum, "plain", $baseurl));
         $output .= "</div>";
       }
       break;
@@ -2079,8 +2086,7 @@
 
     case "recordlink":
       $bib_recnum = millennium_bib_recnum_from_node($nid);
-      $baseurl = millennium_get_real_baseurl();
-      $record_link = l( $msg, millennium_permalink($bib_recnum));
+      $record_link = l( $msg, millennium_permalink($bib_recnum, "plain", $baseurl));
       $output .= "<div class='millennium holdings'>". $record_link ."</div>";
       break;
   }
@@ -2265,25 +2271,29 @@
  * Returns an array of arrays with holding information for a bib record
  * @param recnum Bibliographic or item record number
  */
-function millennium_get_holdings_info($recnum, $fetched_html = null, $base_url = null) {
+function millennium_get_holdings_info($recnum, $fetched_html = null, $base_url = false) {
   static $cache;
-
+  
   $items = array();
-  if ($base_url == null) {
+  if ($base_url === false) {
     $base_url = millennium_get_real_baseurl();
   }
-  $parsed_url = parse_url($base_url);
+  
   if ($fetched_html == null) {
-    // Try the static cache
-    if (isset($cache[$recnum])) {
-      return $cache[$recnum];
-    }
-    // Try Drupal's cache
-    $cid = "millennium_get_holdings_info-$recnum-" . $parsed_url["host"];
-    if ($cache[$recnum] = cache_get($cid)) {
-      return $cache[$recnum]->data;
+    // Build a cache id
+    $parsed_url = parse_url($base_url);
+    $cid = "millennium_get_holdings_info-{$recnum}-" . $parsed_url["host"];
+    
+    // Check the static cache
+    if (isset($cache[$cid])) {
+      return $cache[$cid];
+    }
+    // Check Drupal's cache
+    if ($cache[$cid] = cache_get($cid)) {
+      return $cache[$cid]->data;
     }
-    $result = millennium_fetch_recordpage($recnum, "items");
+    // No cache, fetch the item information from WebOPAC
+    $result = millennium_fetch_recordpage($recnum, "items", $base_url);
     if (! $result->data) {
       return false;
     }
@@ -2369,7 +2379,7 @@
       $items[] = $field;
     }
   }
-  $cache[$recnum] = $items;
+  $cache[$cid] = $items;
   cache_set($cid, $items, 'cache', time()+(24*3600)); // Cache for one day
   return $items;
 }
@@ -2993,13 +3003,14 @@
   $cid = "millennium_ajax_{$nid}_{$locale}_{$page}";
 
   // Check if this is cached
-  $cache = cache_get($cid);
+  #$cache = cache_get($cid);
   if (! empty($cache->data)) {
     $output = unserialize($cache->data);
   }
   else {
     $bib_recnum = millennium_bib_recnum_from_node($nid);
-    $holdings = millennium_get_holdings_info($bib_recnum);
+    $base_url = db_result(db_query("SELECT base_url FROM {millennium_node_bib} WHERE nid=%d", $nid));
+    $holdings = millennium_get_holdings_info($bib_recnum, NULL, $base_url);
     $output = theme('millennium_holdings', $nid, $holdings, $page);
     cache_set($cid, serialize($output), 'cache', time() + 900); // 15 minutes
   }

