/** * 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; }
/** * 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; }
/** * 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; }