Exemple #1
0
#!/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;
 }
Exemple #3
0
#!/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');
Exemple #4
0
/**
 * 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);
}
Exemple #5
0
#!/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;
 }
Exemple #7
0
#!/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();
Exemple #8
0
#!/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();
Exemple #9
0
#!/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;
 }