Index: millennium.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/millennium/millennium.module,v
retrieving revision 1.13.2.33.2.2.2.53
diff -u -r1.13.2.33.2.2.2.53 millennium.module
--- millennium.module 9 Dec 2009 22:41:53 -0000 1.13.2.33.2.2.2.53
+++ millennium.module 11 Dec 2009 15:33:30 -0000
@@ -826,14 +826,14 @@
$output .= $marc_text_msg;
$output .= "
$marc_text
";
- $tmp_node = millennium_marc_to_nodeobject($marc_text, $recnum, $base_url);
+ $tmp_node = millennium_record_to_nodeobject($recnum, $marc_text, $base_url);
$output .= "" .t('Conversion results') ."
";
-
+ $output .= t('The conversion has just been generated using current settings.');
$output .= "" . $GLOBALS["_millennium_field_labels"]["type"] ."
";
$output .= $tmp_node->millennium_biblio_data["type"];
- $image = millennium_coverimage_widget($tmp_node);
+ $image = millennium_coverimage_widget($tmp_node->millennium_biblio_data);
$output .= "" . t('Cover image') . "
";
$output .= $image ? $image : t("No image");
@@ -1316,19 +1316,88 @@
* @param recnum Millennium record number (b123456, i123456) to fetch
* @param string $marc_text An optional MARC record to import from.
*/
-function millennium_record_to_nodeobject($recnum, $marc_text = null) {
+function millennium_record_to_nodeobject($recnum, $marc_text = null, $base_url = false) {
$result = new stdClass();
+ $base_url = millennium_get_real_baseurl($base_url);
if ($marc_text == null) {
- $marc_text = millennium_fetch_marc($recnum);
+ $marc_text = millennium_fetch_marc($recnum, $base_url);
if (!$marc_text) {
$result->success = FALSE;
- $result->error = "Could not fetch MARC for $recnum";
+ $result->error = "Could not fetch MARC for $recnum at $base_url";
return $result;
}
}
- //Create a nodeobject from parsed MARC
- $nodeobject = millennium_marc_to_nodeobject($marc_text, $recnum);
+ // Create a bibliographic information array from parsed MARC
+ $biblio = millennium_marc_to_biblio($marc_text);
+ if (!$biblio) {
+ return false;
+ }
+
+ // Add Millennium-only info
+ if ($base_url === false) {
+ $base_url = millennium_get_real_baseurl();
+ }
+ $biblio["url"] = l(t('Link to original record'), millennium_permalink($recnum, "plain", $base_url));
+ $biblio["recnum"] = $recnum;
+ $biblio["base_url"] = $base_url;
+ // If no LCC, try to get from item holdings
+ /*
+ if ($lcc == "" && $recnum) {
+ $holdings = millennium_get_holdings_info($recnum, null, $base_url);
+ // Look for first "classnumber" in items
+ if (is_array($holdings)) {
+ foreach ($holdings as $holding) {
+ if (trim($holding["classnumber"])!= "") {
+ $lcc = $holding["classnumber"];
+ break;
+ }
+ }
+ }
+ }
+ */
+
+ // Let other modules add custom bibliographic data
+ // function signature: mymodulename_millennium_biblio_data_alter($biblio, $marc)
+ // where:
+ // $biblio is the biblio information array
+ // $marc is the parsed MARC record
+ drupal_alter('millennium_biblio_data', &$biblio, $marc);
+
+ // Create node array
+ $log = 'Imported automatically by Millennium module on date '. date('g:i:s a');
+ $node_type = variable_get('millennium_marc_node_type', 'page');
+ $node_type_settings = variable_get("node_options_{$node_type}", array());
+ $user = user_load(1);
+
+ $node = array(
+ "type" => $node_type,
+ "title" => $biblio["title"],
+ "status" => in_array("status", $node_type_settings) ? 1 : 0,
+ "comment" => variable_get("comment_{$node_type}", 0),
+ "promote" => in_array("promote", $node_type_settings) ? 1 : 0,
+ "moderate" => in_array("moderate", $node_type_settings) ? 1 : 0,
+ "format" => 2,
+ "uid" => 1,
+ "name" => $user->name,
+ "log" => $log,
+ "teaser" => '',
+ "body" => '',
+ );
+
+ // Store custom data in node
+ $node["millennium_biblio_data"] = $biblio;
+
+ // Return the node
+ $nodeobject = (object)$node;
+
+ // Add taxonomy
+ $parsed_marc = millennium_parse_marc($marc_text);
+ millennium_add_taxonomy_to_node($nodeobject, $parsed_marc);
+
+ // Add availability info
+ millennium_add_availability_to_node($nodeobject, $recnum);
+
if (!$nodeobject) {
$result->success = false;
$result->error = "Could not create node object from parsed MARC for $recnum";
@@ -1473,46 +1542,27 @@
}
/**
- * Takes a parsed marc record array and generates a nodeobject with type 'biblio'
- * @param bib_recnum Millennium record number (b123456) that contains this MARC
- * @param marc_text MARC record (plaintext)
+ * Takes a parsed marc record array and generates an array of bibliographic info
+ * @param $marc_text
+ * MARC record (plaintext)
*/
-function millennium_marc_to_nodeobject($marc_text, $recnum = false, $base_url = false) {
+function millennium_marc_to_biblio($marc_text) {
global $_millennium_field_labels;
- if ($base_url === false) {
- $base_url = millennium_get_real_baseurl();
- }
+ $biblio = array();
$marc = millennium_parse_marc($marc_text);
if (! $marc) {
- #return array("success" => false, "error" => "Could not parse MARC for $recnum");
+ #return array("success" => false, "error" => "Could not parse MARC");
return false;
}
- $log = 'Imported automatically by Millennium module on date '. date('g:i:s a');
-
// LCC
$lcc = trim(millennium_getFieldPlain($marc, "05"));
- // If no LCC, try to get from items
- /*
- if ($lcc == "" && $recnum) {
- $holdings = millennium_get_holdings_info($recnum, null, $base_url);
- // Look for first "classnumber" in items
- if (is_array($holdings)) {
- foreach ($holdings as $holding) {
- if (trim($holding["classnumber"])!= "") {
- $lcc = $holding["classnumber"];
- break;
- }
- }
- }
- }
- */
$biblio["lcc"] = $lcc;
// Notes
- $notes="";
+ $notes = "";
$tmpfields = millennium_getFields_fixed($marc, "50");
if (is_array($tmpfields)) {
foreach ($tmpfields as $field) {
@@ -1661,43 +1711,13 @@
// 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", $base_url));
$biblio["marc"] = $marc_text;
- $biblio["recnum"] = $recnum;
- $biblio["base_url"] = $base_url;
-
- // Clean up (almost) every $biblio[] value
- $cant_touch_this = array('item_description', 'links', 'url');
- foreach ($biblio as $index => $value) {
- if (!in_array($index, $cant_touch_this)) {
- $biblio[$index] = millennium_trim_marc_value($value);
- }
- }
-
- $node_type = variable_get('millennium_marc_node_type', 'page');
- $node_type_settings = variable_get("node_options_{$node_type}", array());
- $user = user_load(1);
-
- $node = array(
- "type" => $node_type,
- "title" => $biblio["title"],
- "status" => in_array("status", $node_type_settings) ? 1 : 0,
- "comment" => variable_get("comment_{$node_type}", 0),
- "promote" => in_array("promote", $node_type_settings) ? 1 : 0,
- "moderate" => in_array("moderate", $node_type_settings) ? 1 : 0,
- "format" => 2,
- "uid" => 1,
- "name" => $user->name,
- "log" => $log,
- "teaser" => '',
- "body" => '',
-
- /* These are for the Biblio module. As of today, that module is not yet released.
+
+ /* These are for the Biblio module. As of today, that module is not yet released.
"biblio_alternate_title" => $biblio["alternate_title"],
"biblio_short_title" => str_replace(' /', '', $biblio["short_title"]),
"biblio_translated_title" => $biblio["translated_title"],
"biblio_notes" => $body,
-
"biblio_type" => $biblio["type"],
"biblio_authors" => $biblio["authors"],
"biblio_corp_author" => $biblio["corp_author"],
@@ -1715,29 +1735,17 @@
"biblio_lang" => $biblio["lang"],
"biblio_url" => $biblio["url"],
"biblio_custom7" => $biblio["bib_recnum"],
- */
- );
+ */
- // Let other modules add custom bibliographic data
- // function signature: mymodulename_millennium_biblio_data_alter($biblio, $marc)
- // where:
- // $biblio is the biblio information array
- // $marc is the parsed MARC record
- drupal_alter('millennium_biblio_data', &$biblio, $marc);
-
- // Store custom data in node
- $node["millennium_biblio_data"] = $biblio;
-
- // Return the node
- $nodeobject = (object)$node;
-
- // Add taxonomy
- millennium_add_taxonomy_to_node($nodeobject, $marc);
-
- // Add availability info
- millennium_add_availability_to_node($nodeobject, $recnum);
+ // Clean up (almost) every $biblio[] value
+ $cant_touch_this = array('item_description', 'links', 'url');
+ foreach ($biblio as $index => $value) {
+ if (!in_array($index, $cant_touch_this) && is_string($value)) {
+ $biblio[$index] = millennium_trim_marc_value($value);
+ }
+ }
- return $nodeobject;
+ return $biblio;
}
/**
@@ -1851,10 +1859,12 @@
/**
* Scans a parsed MARC record array for important access points and relates them with taxonomy terms in vocabularies stored in module's config.
- * @param nodeobject A drupal node object
- * @param record Array containing parsed marc record
+ * @param $nodeobject
+ * A drupal node object
+ * @param $marc
+ * Array containing parsed marc record
*/
-function millennium_add_taxonomy_to_node(&$nodeobject, $record) {
+function millennium_add_taxonomy_to_node(&$nodeobject, $marc) {
#drupal_set_message("millennium_add_taxonomy_to_node()");
$nid = $nodeobject->nid;
@@ -1894,7 +1904,7 @@
millennium_add_node_taxonomy_terms($nodeobject, variable_get('millennium_marc_vid_year', -1), array($year));
}
- $tmpfields = millennium_getFields_fixed($record, "008"); #get all 008s
+ $tmpfields = millennium_getFields_fixed($marc, "008"); #get all 008s
if (is_array($tmpfields)) {
// Language
@@ -1952,7 +1962,7 @@
*/
// Get all 65x's
- $tmpfields = millennium_getFields_fixed($record, "65");
+ $tmpfields = millennium_getFields_fixed($marc, "65");
if (is_array($tmpfields)) {
foreach ($tmpfields as $field) {
foreach ($field["subfields"] as $subfield) {
@@ -1976,7 +1986,7 @@
}
// Other subjects: 600s, 61xs, 63xs
- $tmpfields = millennium_getFields($record, "6[013]..."); //get'em
+ $tmpfields = millennium_getFields($marc, "6[013]..."); //get'em
if (is_array($tmpfields)) {
foreach ($tmpfields as $field) {
@@ -1993,8 +2003,8 @@
}
// Series
- #$tmpfields = millennium_getFields($record, "4901."); // Only "traced" series; tag 490, indicators "1 "
- $tmpfields = millennium_getFields_fixed($record, "830"); // 830 - Series Added Entry-Uniform Title
+ #$tmpfields = millennium_getFields($marc, "4901."); // Only "traced" series; tag 490, indicators "1 "
+ $tmpfields = millennium_getFields_fixed($marc, "830"); // 830 - Series Added Entry-Uniform Title
if (is_array($tmpfields)) {
foreach ($tmpfields as $field) {
list($tmpsub) = millennium_getSubfields($field, "a");
@@ -2223,7 +2233,7 @@
case 'rss item':
$table = theme("millennium_biblio_data", $node->millennium_biblio_data, "full");
- $coverimage_widget = millennium_coverimage_widget($node);
+ $coverimage_widget = millennium_coverimage_widget($node->millennium_biblio_data);
$content = $coverimage_widget . $table;
return array(array('key' => 'description', 'value' => $content));
break;
@@ -2332,7 +2342,7 @@
}
// Coverimage
- $coverimage_widget = millennium_coverimage_widget($node);
+ $coverimage_widget = millennium_coverimage_widget($node->millennium_biblio_data);
if ($coverimage_widget) {
$node->content['millennium_coverimage'] = array(
'#value' => "". $coverimage_widget ."
\n",
@@ -2442,25 +2452,25 @@
* @param node a node object
* @param link flag that dictates whether include a link to the node
*/
-function millennium_coverimage_widget($node, $link = false) {
+function millennium_coverimage_widget($biblio_data, $link = false) {
$override_url = variable_get("millennium_coverimage_baseurl", false);
$output = "";
$cover_url = "";
if ($override_url) {
- $number = trim(preg_replace('/[^0-9X -].*$/i', '', trim($node->millennium_biblio_data["isbn"]) ));
+ $number = trim(preg_replace('/[^0-9X -].*$/i', '', trim($biblio_data["isbn"]) ));
if ($number == "") {
- $number = trim(preg_replace('/[^0-9X -].*$/i', '', trim($node->millennium_biblio_data["issn"])));
+ $number = trim(preg_replace('/[^0-9X -].*$/i', '', trim($biblio_data["issn"])));
}
$number = preg_replace('/[^0-9X]+/i', '', $number);
- $type = $node->millennium_biblio_data["type"];
+ $type = $biblio_data["type"];
$cover_url = str_replace("!id", $number, $override_url);
$cover_url = str_replace("!type", $type, $cover_url);
$cover_url = str_replace("!tit", urlencode($node->title), $cover_url);
- $cover_url = str_replace("!aut", urlencode($node->millennium_biblio_data["authors"]), $cover_url);
+ $cover_url = str_replace("!aut", urlencode($biblio_data["authors"]), $cover_url);
} else {
// No cover image override, use other sources in biblio information
- $cover_sources = $node->millennium_biblio_data["coverimage_sources"];
+ $cover_sources = $biblio_data["coverimage_sources"];
#dpm($cover_sources);
if (is_array($cover_sources)) {
$cover_info = array_pop($cover_sources);