#!/usr/bin/php5 -q <?php // You may want/need to change this ini_set('memory_limit', '400M'); // Where is Locum? $locum_lib_dir = '/usr/local/lib/locum'; // Include Locum libraries require_once $locum_lib_dir . '/locum-server.php'; // Fire it up $locum = new locum_server(); // Force all records to be updated $db = $locum->db_query("UPDATE locum_bib_items SET bib_last_update = '1970-01-01' WHERE active = '1'"); // Rebuild Facet Heap - first pass $locum->rebuild_facet_heap(); // Data maintenance $locum->verify_bibs(); $locum->new_bib_scan(); $locum->rebuild_holds_cache(); // Rebuild Facet Heap - second pass $locum->rebuild_facet_heap(); // Restart services, reindex, etc. $locum->index(); // This can all be done in situ $locum->verify_status(); $locum->verify_syndetics();
/** * Grabs bib info from XRECORD and returns it in a Locum-ready array. * * @param int $bnum Bib number to scrape * @param boolean $skip_cover Forget about grabbing cover images. Default: FALSE * @return boolean|array Will either return a Locum-ready array or FALSE */ public function scrape_bib($bnum, $skip_cover = FALSE) { $iii_server_info = self::iii_server_info(); $bnum = trim($bnum); $xrecord = @simplexml_load_file($iii_server_info['nosslurl'] . '/xrecord=b' . $bnum); // If there is no record, return false (weeded or non-existent) if ($xrecord->NULLRECORD) { return FALSE; } if ($xrecord->VARFLD) { if (!$xrecord->VARFLD[0]->MARCINFO) { return FALSE; } } else { return 'skip'; } $bib_info_record = $xrecord->RECORDINFO; $bib_info_local = $xrecord->TYPEINFO->BIBLIOGRAPHIC->FIXFLD; $bib_info_marc = self::parse_marc_subfields($xrecord->VARFLD); unset($xrecord); // Process record information $bib['bnum'] = $bnum; $bib['bib_created'] = self::fixdate($bib_info_record->CREATEDATE); $bib['bib_lastupdate'] = self::fixdate($bib_info_record->LASTUPDATEDATE); $bib['bib_prevupdate'] = self::fixdate($bib_info_record->PREVUPDATEDATE); $bib['bib_revs'] = (int) $bib_info_record->REVISIONS; // Process local record data foreach ($bib_info_local as $bil_obj) { switch (trim($bil_obj->FIXLABEL)) { case 'LANG': $bib['lang'] = trim($bil_obj->FIXVALUE); break; case 'LOCATION': $bib['loc_code'] = trim($bil_obj->FIXVALUE); break; case 'MAT TYPE': $bib['mat_code'] = trim($bil_obj->FIXVALUE); break; case 'BCODE3': $bib['suppress'] = in_array(trim($bil_obj->FIXVALUE), locum::csv_parser($this->locum_config['ils_custom_config']['suppress_codes'])) ? 1 : 0; break; } } // Process MARC fields // Process Author information $bib['author'] = ''; $author_arr = self::prepare_marc_values($bib_info_marc['100'], array('a', 'b', 'c', 'd')); $bib['author'] = $author_arr[0]; // In no author info, we'll go for the 110 field if (!$bib['author']) { $author_110 = self::prepare_marc_values($bib_info_marc['110'], array('a')); $bib['author'] = $author_110[0]; } // Additional author information $bib['addl_author'] = ''; $addl_author = self::prepare_marc_values($bib_info_marc['700'], array('a', 'b', 'c', 'd')); if (is_array($addl_author)) { $bib['addl_author'] = serialize($addl_author); } // In no additional author info, we'll go for the 710 field if (!$bib['addl_author']) { $author_710 = self::prepare_marc_values($bib_info_marc['710'], array('a')); if (is_array($author_710)) { $bib['addl_author'] = serialize($author_710); } } // Title information $bib['title'] = ''; $title = self::prepare_marc_values($bib_info_marc['245'], array('a', 'b')); if (substr($title[0], -1) == '/') { $title[0] = trim(substr($title[0], 0, -1)); } $bib['title'] = trim($title[0]); // Title medium information $bib['title_medium'] = ''; $title_medium = self::prepare_marc_values($bib_info_marc['245'], array('h')); if ($title_medium[0]) { if (preg_match('/\\[(.*?)\\]/', $title_medium[0], $medium_match)) { $bib['title_medium'] = $medium_match[1]; } } // Edition information $bib['edition'] = ''; $edition = self::prepare_marc_values($bib_info_marc['250'], array('a')); $bib['edition'] = trim($edition[0]); // Series information $bib['series'] = ''; $series = self::prepare_marc_values($bib_info_marc['490'], array('a', 'v')); if (!$series[0]) { $series = self::prepare_marc_values($bib_info_marc['440'], array('a', 'v')); } if (!$series[0]) { $series = self::prepare_marc_values($bib_info_marc['400'], array('a', 'v')); } if (!$series[0]) { $series = self::prepare_marc_values($bib_info_marc['410'], array('a', 'v')); } if (!$series[0]) { $series = self::prepare_marc_values($bib_info_marc['730'], array('a', 'v')); } if (!$series[0]) { $series = self::prepare_marc_values($bib_info_marc['800'], array('a', 'v')); } if (!$series[0]) { $series = self::prepare_marc_values($bib_info_marc['810'], array('a', 'v')); } if (!$series[0]) { $series = self::prepare_marc_values($bib_info_marc['830'], array('a', 'v')); } $bib['series'] = $series[0]; // Call number $callnum = ''; $callnum_arr = self::prepare_marc_values($bib_info_marc['099'], array('a')); if (is_array($callnum_arr) && count($callnum_arr)) { foreach ($callnum_arr as $cn_sub) { $callnum .= $cn_sub . ' '; } } $bib['callnum'] = trim($callnum); // Publication information $bib['pub_info'] = ''; $pub_info = self::prepare_marc_values($bib_info_marc['260'], array('a', 'b', 'c')); $bib['pub_info'] = $pub_info[0]; // Publication year $bib['pub_year'] = ''; $pub_year = self::prepare_marc_values($bib_info_marc['260'], array('c')); $c_arr = explode(',', $pub_year[0]); $c_key = count($c_arr) - 1; $bib['pub_year'] = substr(ereg_replace("[^0-9]", '', $c_arr[$c_key]), -4); // ISBN / Std. number $bib['stdnum'] = ''; $stdnum = self::prepare_marc_values($bib_info_marc['020'], array('a')); $bib['stdnum'] = $stdnum[0]; // UPC $bib['upc'] = ''; $upc = self::prepare_marc_values($bib_info_marc['024'], array('a')); $bib['upc'] = $upc[0]; if ($bib['upc'] == '') { $bib['upc'] = "000000000000"; } // Grab the cover image URL if we're doing that $bib['cover_img'] = ''; if ($skip_cover != TRUE) { if ($bib['stdnum']) { $bib['cover_img'] = locum_server::get_cover_img($bib['stdnum']); } } // LCCN $bib['lccn'] = ''; $lccn = self::prepare_marc_values($bib_info_marc['010'], array('a')); $bib['lccn'] = $lccn[0]; // Download Link (if it's a downloadable) $bib['download_link'] = ''; $dl_link = self::prepare_marc_values($bib_info_marc['856'], array('u')); $bib['download_link'] = $dl_link[0]; // Description $bib['descr'] = ''; $descr = self::prepare_marc_values($bib_info_marc['300'], array('a', 'b', 'c')); $bib['descr'] = $descr[0]; // Notes $notes = array(); $bib['notes'] = ''; $notes_tags = array('500', '505', '511', '520'); foreach ($notes_tags as $notes_tag) { $notes_arr = self::prepare_marc_values($bib_info_marc[$notes_tag], array('a')); if (is_array($notes_arr)) { foreach ($notes_arr as $notes_arr_val) { array_push($notes, $notes_arr_val); } } } if (count($notes)) { $bib['notes'] = serialize($notes); } // Subject headings $subjects = array(); $subj_tags = array('600', '610', '611', '630', '650', '651', '653', '654', '655', '656', '657', '658', '690', '691', '692', '693', '694', '695', '696', '697', '698', '699'); foreach ($subj_tags as $subj_tag) { $subj_arr = self::prepare_marc_values($bib_info_marc[$subj_tag], array('a', 'b', 'c', 'd', 'e', 'v', 'x', 'y', 'z'), ' -- '); if (is_array($subj_arr)) { foreach ($subj_arr as $subj_arr_val) { array_push($subjects, $subj_arr_val); } } } $bib['subjects'] = ''; if (count($subjects)) { $bib['subjects'] = $subjects; } unset($bib_info_marc); return $bib; }
#!/usr/bin/php5 -q <?php // Init scripts, library locations, and binaries $locum_lib_dir = '/usr/local/lib/locum'; $mysql_init_script = '/etc/init.d/mysql'; $sphinx_init_script = '/etc/init.d/sphinx'; $sphinx_indexer = '/usr/local/sphinx/bin/indexer'; // Include Locum libraries require_once $locum_lib_dir . '/locum-server.php'; // Data Set repair $locum = new locum_server(); $db =& MDB2::connect($locum->dsn); $min_bib_result =& $db->query('SELECT MIN(bnum) FROM locum_bib_items'); $min_bib = $min_bib_result->fetchOne(); $max_bib_result =& $db->query('SELECT MAX(bnum) FROM locum_bib_items'); $max_bib = $max_bib_result->fetchOne(); $bnum_result =& $db->query("SELECT bnum FROM locum_bib_items WHERE bnum >= {$min_bib} AND bnum <= {$max_bib}"); $bnum_arr = $bnum_result->fetchCol(); $bib_range = array(); for ($i = $min_bib; $i < $max_bib; $i++) { $bib_range[] = $i; } $empty_bibs = array_diff($bib_range, $bnum_arr); foreach ($empty_bibs as $empty_bib) { $locum->harvest_bibs($empty_bib, $empty_bib); } $locum->rebuild_holds_cache(); // Restart services, reindex, etc. shell_exec($mysql_init_script . ' restart'); sleep(2); shell_exec($sphinx_indexer . ' --all --rotate');
/** * Reharvest Bib record from ILS and redirect to the record page. * * @access public * @return void */ function sopac_bib_record_reharvest($bnum = NULL) { error_reporting(E_ALL ^ E_NOTICE); ini_set('display_errors', 1); require_once '/usr/local/lib/locum/locum-server.php'; $locum = new locum_server(); $actions = sopac_parse_uri(); if (!$bnum) { $actions = sopac_parse_uri(); $bnum = $actions[1]; } $reharvest = $locum->import_bibs($bnum, $bnum); $path = variable_get('sopac_url_prefix', 'cat/seek') . '/record/' . $bnum; drupal_goto($path); }
#!/usr/bin/php5 -q <?php // Init scripts, library locations, and binaries $locum_lib_dir = '/usr/local/lib/locum'; $insurge_lib_dir = '/usr/local/lib/insurge'; $sphinx_indexer = '/usr/local/sphinx/bin/indexer'; // Include the libraries require_once $locum_lib_dir . '/locum-server.php'; require_once $insurge_lib_dir . '/insurge-server.php'; $locum = new locum_server(); echo "Rebuilding holds cache... "; $locum->rebuild_holds_cache(); echo "Done.\n"; $insurge = new insurge_server(); echo "Rebuilding Insurge index table... "; $insurge->rebuild_index_table(); echo "Done.\n"; //echo "Rebuilding Facet Heap... "; //$locum->rebuild_facet_heap(); //echo "Done.\n"; //echo "Rebuilding the Sphinx index... "; //shell_exec($sphinx_indexer . ' --all --rotate'); echo "Done.\n"; echo "Finished with maintenance tasks.\n";
/** * Grabs bib info from XRECORD and returns it in a Locum-ready array. * * @param int $bnum Bib number to scrape * @param boolean $skip_cover Forget about grabbing cover images. Default: FALSE * @return boolean|array Will either return a Locum-ready array or FALSE */ public function scrape_bib($bnum, $skip_cover = FALSE) { $iii_webcat = $this->locum_config[ils_config][ils_server]; $iii_webcat_port = $this->locum_config[ils_config][ils_harvest_port]; $bnum = trim($bnum); $xrecord = @simplexml_load_file('http://' . $iii_webcat . ':' . $iii_webcat_port . '/xrecord=b' . $bnum); // If there is no record, return false (weeded or non-existent) if ($xrecord->NULLRECORD) { return FALSE; } if ($xrecord->VARFLD) { if (!$xrecord->VARFLD[0]->MARCINFO) { return FALSE; } } else { return FALSE; } $bib_info_record = $xrecord->RECORDINFO; $bib_info_local = $xrecord->TYPEINFO->BIBLIOGRAPHIC->FIXFLD; $bib_info_marc = self::parse_marc_subfields($xrecord->VARFLD); unset($xrecord); // Process record information $bib[bnum] = $bnum; $bib[bib_created] = self::fixdate($bib_info_record->CREATEDATE); $bib[bib_lastupdate] = self::fixdate($bib_info_record->LASTUPDATEDATE); $bib[bib_prevupdate] = self::fixdate($bib_info_record->PREVUPDATEDATE); $bib[bib_revs] = (int) $bib_info_record->REVISIONS; // Process local record data foreach ($bib_info_local as $bil_obj) { switch (trim($bil_obj->FIXLABEL)) { case 'LANG': $bib[lang] = trim($bil_obj->FIXVALUE); break; case 'LOCATION': $bib[loc_code] = trim($bil_obj->FIXVALUE); break; case 'MAT TYPE': $bib[mat_code] = trim($bil_obj->FIXVALUE); break; } } // Process MARC fields // Process Author information $bib[author] = ''; $author_arr = self::prepare_marc_values($bib_info_marc['100'], array('a', 'b', 'c', 'd')); $bib[author] = $author_arr[0]; // In no author info, we'll go for the 110 field if (!$bib[author]) { $author_110 = self::prepare_marc_values($bib_info_marc['110'], array('a')); $bib[author] = $author_110[0]; } // Additional author information $bib[addl_author] = ''; $addl_author = self::prepare_marc_values($bib_info_marc['700'], array('a', 'b', 'c', 'd')); if (is_array($addl_author)) { $bib[addl_author] = serialize($addl_author); } // In no additional author info, we'll go for the 710 field if (!$bib[addl_author]) { $author_710 = self::prepare_marc_values($bib_info_marc['710'], array('a')); if (is_array($author_710)) { $bib[addl_author] = serialize($author_710); } } // Title information $bib[title] = ''; $title = self::prepare_marc_values($bib_info_marc['245'], array('a', 'b')); if (substr($title[0], -1) == '/') { $title[0] = trim(substr($title[0], 0, -1)); } $bib[title] = trim($title[0]); // Title medium information $bib[title_medium] = ''; $title_medium = self::prepare_marc_values($bib_info_marc['245'], array('h')); if ($title_medium[0]) { if (preg_match('/\\[(.*?)\\]/', $title_medium[0], $medium_match)) { $bib[title_medium] = $medium_match[1]; } } // Edition information $bib[edition] = ''; $edition = self::prepare_marc_values($bib_info_marc['250'], array('a')); $bib[edition] = trim($edition[0]); // Series information $bib[series] = ''; $series = self::prepare_marc_values($bib_info_marc['490'], array('a', 'v')); if (!$series[0]) { $series = self::prepare_marc_values($bib_info_marc['440'], array('a', 'v')); } if (!$series[0]) { $series = self::prepare_marc_values($bib_info_marc['400'], array('a', 'v')); } if (!$series[0]) { $series = self::prepare_marc_values($bib_info_marc['410'], array('a', 'v')); } if (!$series[0]) { $series = self::prepare_marc_values($bib_info_marc['800'], array('a', 'v')); } if (!$series[0]) { $series = self::prepare_marc_values($bib_info_marc['810'], array('a', 'v')); } $bib[series] = $series[0]; // Call number $callnum = ''; $callnum_arr = self::prepare_marc_values($bib_info_marc['099'], array('a')); if (is_array($callnum_arr) && count($callnum_arr)) { foreach ($callnum_arr as $cn_sub) { $callnum .= $cn_sub . ' '; } } $bib[callnum] = trim($callnum); // Publication information $bib[pub_info] = ''; $pub_info = self::prepare_marc_values($bib_info_marc['260'], array('a', 'b', 'c')); $bib[pub_info] = $pub_info[0]; // Publication year $bib[pub_year] = ''; $pub_year = self::prepare_marc_values($bib_info_marc['260'], array('c')); $c_arr = explode(',', $pub_year[0]); $c_key = count($c_arr) - 1; $bib[pub_year] = substr(ereg_replace("[^0-9]", '', $c_arr[$c_key]), -4); // ISBN / Std. number $bib[stdnum] = ''; $stdnum = self::prepare_marc_values($bib_info_marc['020'], array('a')); $bib[stdnum] = $stdnum[0]; // Grab the cover image URL if we're doing that $bib[cover_img] = ''; if ($skip_cover != TRUE) { if ($bib[stdnum]) { $bib[cover_img] = locum_server::get_cover_img($bib[stdnum]); } } // LCCN $bib[lccn] = ''; $lccn = self::prepare_marc_values($bib_info_marc['010'], array('a')); $bib[lccn] = $lccn[0]; // Description $bib[descr] = ''; $descr = self::prepare_marc_values($bib_info_marc['300'], array('a', 'b', 'c')); $bib[descr] = $descr[0]; // Notes $notes = array(); $bib[notes] = ''; $notes_tags = array('500', '520'); foreach ($notes_tags as $notes_tag) { $notes_arr = self::prepare_marc_values($bib_info_marc[$notes_tag], array('a')); if (is_array($notes_arr)) { foreach ($notes_arr as $notes_arr_val) { array_push($notes, $notes_arr_val); } } } if (count($notes)) { $bib[notes] = serialize($notes); } // Subject headings $subjects = array(); $subj_tags = array('600', '610', '611', '630', '650', '651', '653', '654', '655', '656', '657', '658', '690', '691', '692', '693', '694', '695', '696', '697', '698', '699'); foreach ($subj_tags as $subj_tag) { $subj_arr = self::prepare_marc_values($bib_info_marc[$subj_tag], array('a', 'b', 'c', 'd', 'e', 'v', 'x', 'y', 'z'), ' -- '); if (is_array($subj_arr)) { foreach ($subj_arr as $subj_arr_val) { array_push($subjects, $subj_arr_val); } } } $bib[subjects] = ''; if (count($subjects)) { $bib[subjects] = $subjects; } unset($bib_info_marc); return $bib; }
#!/usr/bin/php5 -q <?php // Init scripts, library locations, and binaries $locum_lib_dir = '/usr/local/lib/locum'; $mysql_init_script = '/etc/init.d/mysql'; $sphinx_init_script = '/etc/init.d/sphinx'; $sphinx_indexer = '/usr/local/sphinx/bin/indexer'; // Include Locum libraries require_once $locum_lib_dir . '/locum-server.php'; $locum = new locum_server(); $locum->rebuild_holds_cache(); // Restart services, reindex, etc. $locum->index();
#!/usr/bin/php5 -q <?php // You may want/need to change this ini_set('memory_limit', '400M'); $first_record = 1400000; $last_record = 1420000; $large_record_split = 50; // Init scripts, library locations, and binaries $locum_lib_dir = '/usr/local/lib/locum'; // Include Locum libraries require_once $locum_lib_dir . '/locum-server.php'; $locum = new locum_server(); // Data maintenance //$locum->verify_bibs(); // Uncomment to also verify suppressed bibs //$locum->verify_suppressed(); //$locum->new_bib_scan(); //$locum->rebuild_holds_cache(); // Rebuild Facet Heap //$locum->rebuild_facet_heap(); // Restart services, reindex, etc. //$locum->index(); // This can all be done in situ //$locum->verify_status(); $locum->verify_syndetics();
#!/usr/bin/php5 -q <?php // You'll need to change these: $first_record = 1000000; $last_record = 1430000; $large_record_split = 50; // Init scripts, library locations, and binaries $locum_lib_dir = '/usr/local/lib/locum'; $mysql_init_script = '/etc/init.d/mysql'; $sphinx_init_script = '/etc/init.d/sphinx'; $sphinx_indexer = '/usr/local/sphinx/bin/indexer'; // Include Locum libraries require_once $locum_lib_dir . '/locum-server.php'; // Data Set repair $locum = new locum_server(); // Older records tend to be much more weeded, so the child processes // that handle the higher bib nums often work much harder and longer. // This is a way around that. if ($last_record - $first_record > 1000) { $split_amount = ceil(($last_record - $first_record) / $large_record_split); $begin_at_bib = $first_record; for ($i = 0; $i < $large_record_split; $i++) { $split_bib_arr[$i]['first'] = $begin_at_bib; $split_bib_arr[$i]['last'] = $begin_at_bib + $split_amount; $begin_at_bib = $begin_at_bib + $split_amount + 1; } foreach ($split_bib_arr as $split_bib) { $locum->harvest_bibs($split_bib['first'], $split_bib['last'], TRUE, FALSE); } } else { $locum->harvest_bibs($first_record, $last_record, TRUE, FALSE);
/** * Grabs bib info from XRECORD and returns it in a Locum-ready array. * * @param int $bnum Bib number to scrape * @param boolean $skip_cover Forget about grabbing cover images. Default: FALSE * @return boolean|array Will either return a Locum-ready array or FALSE */ public function scrape_bib($bnum, $skip_cover = FALSE) { $iii_server_info = self::iii_server_info(); $bnum = trim($bnum); $xrecord = @simplexml_load_file($iii_server_info['nosslurl'] . '/xrecord=b' . $bnum); // If there is no record, return false (weeded or non-existent) if ($xrecord->NULLRECORD) { return FALSE; } if ($xrecord->VARFLD) { if (!$xrecord->VARFLD[0]->MARCINFO) { return FALSE; } } else { return 'skip'; } $bib_info_record = $xrecord->RECORDINFO; $bib_info_local = $xrecord->TYPEINFO->BIBLIOGRAPHIC->FIXFLD; $bib_info_marc = self::parse_marc_subfields($xrecord->VARFLD); unset($xrecord); // Process record information $bib['bnum'] = $bnum; $bib['bib_created'] = self::fixdate($bib_info_record->CREATEDATE); $bib['bib_lastupdate'] = self::fixdate($bib_info_record->LASTUPDATEDATE); $bib['bib_prevupdate'] = self::fixdate($bib_info_record->PREVUPDATEDATE); $bib['bib_revs'] = (int) $bib_info_record->REVISIONS; // Process local record data foreach ($bib_info_local as $bil_obj) { switch (trim($bil_obj->FIXLABEL)) { case 'LANG': $bib['lang'] = trim($bil_obj->FIXVALUE); break; case 'LOCATION': $bib['loc_code'] = trim($bil_obj->FIXVALUE); break; case 'MAT TYPE': $bib['mat_code'] = trim($bil_obj->FIXVALUE); break; case 'BCODE3': if (trim($bil_obj->FIXVALUE) == '') { $bil_obj->FIXVALUE = "-"; } $bib['suppress'] = in_array(trim($bil_obj->FIXVALUE), locum::csv_parser($this->locum_config['ils_custom_config']['suppress_codes'])) ? 1 : 0; break; } } // Suppression codes but in 2009 the record is actually not returned if ($bib['bcode3'] == 'n' || $bib['bcode3'] == 'd' || $bib['bcode3'] == 'p') { return FALSE; } // Process MARC fields // Process Author information $bib['author'] = ''; $author_arr = self::prepare_marc_values($bib_info_marc['100'], array('a', 'b', 'c', 'd')); $bib['author'] = $author_arr[0]; // In no author info, we'll go for the 110 field if (!$bib['author']) { $author_110 = self::prepare_marc_values($bib_info_marc['110'], array('a')); $bib['author'] = $author_110[0]; } $author880 = self::prepare_marc_880($bib_info_marc['880'], '100'); if (is_array($author880)) { $bib['non_romanized_author'] = trim($author880[0], " =,"); } // Additional author information $bib['addl_author'] = array(); $addl_author = self::prepare_marc_values($bib_info_marc['700'], array('a', 'b', 'c', 'd')); if (is_array($addl_author)) { $bib['addl_author'] = array_merge($bib['addl_author'], $addl_author); } $author_710 = self::prepare_marc_values($bib_info_marc['710'], array('a')); if (is_array($author_710)) { $bib['addl_author'] = array_merge($bib['addl_author'], $author_710); } $addauthor880 = self::prepare_marc_880($bib_info_marc['880'], '700'); if (is_array($addauthor880)) { $bib['addl_author'] = array_merge($bib['addl_author'], $addauthor880); } // Dedupe authors $bib['addl_author'] = array_unique($bib['addl_author']); // Title information $bib['title'] = ''; $title = self::prepare_marc_values($bib_info_marc['245'], array('a', 'b'), " : "); if (substr($title[0], -1) == '/') { $title[0] = trim(substr($title[0], 0, -1)); } $strip_chars = array('[', ']'); $bib['title'] = str_ireplace($strip_chars, '', trim($title[0])); // Title subfield information (disc and season information) $bib['title_medium'] = ''; //$title_medium = self::prepare_marc_values($bib_info_marc['245'], array('h')); $volume = self::prepare_marc_values($bib_info_marc['245'], array('n')); $disc = self::prepare_marc_values($bib_info_marc['245'], array('p')); if (substr($disc[0], -1) == '/') { $disc[0] = trim(substr($disc[0], 0, -1)); } if (substr($volume[0], -1) == '/') { $volume[0] = trim(substr($volume[0], 0, -1)); } if ($volume[0] && $disc[0]) { $bib['title_medium'] = $volume[0] . " " . $disc[0]; } else { if ($volume[0]) { $bib['title_medium'] = $volume[0]; } else { $bib['title_medium'] = $disc[0]; } } // Additional Titles $bib['addl_title'] = ''; $addl_title = array(); $addltitle_tags = array('730', '740', '246', '240'); foreach ($addltitle_tags as $addltitle_tag) { $addltitle_arr = self::prepare_marc_values($bib_info_marc[$addltitle_tag], array('a', 't', 'p')); if (is_array($addltitle_arr)) { foreach ($addltitle_arr as $addltitle_arr_val) { array_push($addl_title, $addltitle_arr_val); } } } if (is_array($addl_title)) { $bib['addl_title'] = $addl_title; } // Non Romanized Titles $titles880 = self::prepare_marc_880($bib_info_marc['880'], '245'); if (!$titles880[0]) { $titles880 = self::prepare_marc_880($bib_info_marc['880'], '246'); } $bib['non_romanized_title'] = trim($titles880[0], " =,"); // Edition information $bib['edition'] = ''; $edition = self::prepare_marc_values($bib_info_marc['250'], array('a')); $bib['edition'] = trim($edition[0]); // Series information $bib['series'] = ''; $series = array(); $series_tags = array('490', '440', '400', '410', '730'); foreach ($series_tags as $series_tag) { $series_arr = self::prepare_marc_values($bib_info_marc[$series_tag], array('a', 'v')); if (is_array($series_arr)) { foreach ($series_arr as $series_arr_val) { if ($split_pos = max(strpos($series_arr_val, ";"), strpos($series_arr_val, ":"), 0)) { $series_arr_val = trim(substr($series_arr_val, 0, $split_pos)); } array_push($series, $series_arr_val); } } } if (count($series)) { $bib['series'] = $series; } // Call number $callnum = ''; $callnum_arr = self::prepare_marc_values($bib_info_marc['099'], array('a')); if (is_array($callnum_arr) && count($callnum_arr)) { foreach ($callnum_arr as $cn_sub) { $callnum .= $cn_sub . ' '; } } $bib['callnum'] = trim($callnum); $shelving_arr = array('a', 'b', 'i', 'l', 'x'); if (in_array($bib['mat_code'], $shelving_arr)) { $shelving = self::prepare_marc_values($bib_info_marc['130'], array('a')); if ($shelving[0]) { $shelving = explode(" ", $shelving[0]); } $bib['callnum'] .= " " . trim(preg_replace('/\\W/', ' ', $shelving[0])); } if (count($this->locum_config['genres'])) { $matcodes = array_flip($this->locum_config['formats']); if ($bib['mat_code'] == $matcodes["CD"]) { $genres = array_flip($this->locum_config['genres']); foreach ($genres as $genre => $crc) { if (stristr($bib['callnum'], $genre)) { $bib['genres'][] = $genre; } } } } // Publication information $bib['pub_info'] = ''; $pub_info = self::prepare_marc_values($bib_info_marc['260'], array('a', 'b', 'c')); if (!$pub_info) { $pub_info = self::prepare_marc_values($bib_info_marc['264'], array('a', 'b', 'c')); } $bib['pub_info'] = $pub_info[0]; // Publication year $bib['pub_year'] = ''; $pub_year = self::prepare_marc_values($bib_info_marc['260'], array('c')); $c_arr = explode(',', $pub_year[0]); $c_key = count($c_arr) - 1; $cyear = explode('-', $c_arr[$c_key]); $bib['pub_year'] = substr(ereg_replace("[^0-9]", '', $cyear[0]), -4); if (strlen($bib['pub_year']) != 4) { $bib['pub_year'] = ''; } // ISBN / Std. number $bib['stdnum'] = ''; $stdnum = self::prepare_marc_values($bib_info_marc['020'], array('a')); $bib['stdnum'] = $stdnum; // UPC $bib['upc'] = ''; $upc = self::prepare_marc_values($bib_info_marc['024'], array('a')); $bib['upc'] = $upc; // Grab the cover image URL if we're doing that $bib['cover_img'] = ''; if ($skip_cover != TRUE) { if ($bib['stdnum']) { $bib['cover_img'] = locum_server::get_cover_img($bib[stdnum]); } } // LCCN $bib['lccn'] = ''; $lccn = self::prepare_marc_values($bib_info_marc['010'], array('a')); $bib['lccn'] = $lccn[0]; // Description $bib['descr'] = ''; $descr = self::prepare_marc_values($bib_info_marc['300'], array('a', 'b', 'c')); $bib['descr'] = $descr[0]; // Notes $notes = array(); $bib['notes'] = ''; $notes_tags = array('500', '505', '511', '520', '538'); foreach ($notes_tags as $notes_tag) { $notes_arr = self::prepare_marc_values($bib_info_marc[$notes_tag], array('a', 't'), " -- "); if (is_array($notes_arr)) { foreach ($notes_arr as $notes_arr_val) { array_push($notes, $notes_arr_val); } } } $contents = self::prepare_marc_values($bib_info_marc['700'], array('t'), " -- "); if (count($contents)) { $notes[] = 'Contents: ' . implode(' -- ', $contents); } if (count($notes)) { $bib['notes'] = $notes; } $notes880 = self::prepare_marc_880($bib_info_marc['880'], '505'); if (is_array($notes880)) { $bib['non_romanized_notes'] = trim($notes880[0], " =,"); } // Subject headings $subjects = array(); $subj_tags = array('600', '610', '611', '630', '650', '651', '653', '654', '655', '656', '657', '658', '690', '691', '692', '693', '694', '696', '697', '698', '699'); foreach ($subj_tags as $subj_tag) { $subj_arr = self::prepare_marc_values($bib_info_marc[$subj_tag], array('a', 'b', 'c', 'd', 'e', 'v', 'x', 'y', 'z'), ' -- '); if (is_array($subj_arr)) { foreach ($subj_arr as $subj_arr_val) { array_push($subjects, $subj_arr_val); } } } $bib['subjects'] = ''; if (count($subjects)) { $bib['subjects'] = $subjects; } unset($bib_info_marc); return $bib; }