'); break; default : $element = $name; } } function unixref_decode(&$item, $key) { $item = html_entity_decode($item, NULL, 'UTF-8'); } function unixref_endElement($parser, $name) { global $node, $nids, $element, $attribute, $terms, $batch_proc, $session_id, $save_node, $auth_category, $contrib_count, $org_count; switch ($name) { case 'doi_record' : array_walk_recursive($node,'unixref_decode' ); $nid = biblio_save_node($node, $batch, $session_id, $save_node); if (isset($nid)) { $nids[] = $nid; } break; case 'person_name' : $node['biblio_contributors'][$auth_category][$contrib_count]['auth_type'] = _biblio_get_auth_type($auth_category, $node['biblio_type']); $node['biblio_contributors'][$auth_category][$contrib_count]['name'] = $node['biblio_contributors'][$auth_category][$contrib_count]['lastname']; if (isset($node['biblio_contributors'][$auth_category][$contrib_count]['firstname'])) { $node['biblio_contributors'][$auth_category][$contrib_count]['name'] .= ', ' . $node['biblio_contributors'][$auth_category][$contrib_count]['firstname']; } $auth_category = ''; $contrib_count++; break; case 'organization' : $node['biblio_contributors'][5][$org_count]['auth_type'] = _biblio_get_auth_type(5, $node['biblio_type']); $org_count++; break; case 'pages': if (isset($node['biblio_first_page'])) $node['biblio_pages'] = $node['biblio_first_page']; if (isset($node{'biblio_last_page'})) $node['biblio_pages'] .= ' - ' . $node['biblio_last_page']; break; case 'publication_date': break; case 'journal_issue': $node['biblio_date'] = (!empty($node['month'])?$node['month'].'/':'').$node['year']; break; case 'journal_article': case 'conference_paper': case 'content_item': case 'report-paper_metadata': case 'standard_metadata': case 'database_date': case 'component': $node['biblio_year'] = $node['year']; $node['biblio_doi'] = $node['doi']; break; case 'issn': if($attribute == 'issn_print') $node['biblio_issn'] = $node['issn']; $node['issn'] = ''; break; case 'isbn': if($attribute == 'isbn_print') $node['biblio_isbn'] = $node['isbn']; $node['isbn'] = ''; break; case 'i': // HTML font style tags case 'b': case 'u': case 'sub': case 'sup': unixref_characterData(NULL, ' '); break; default : } } function unixref_characterData($parser, $data) { global $node, $element, $auth_category, $contrib_count, $org_count; $data = htmlspecialchars_decode($data); if (trim($data)) { switch ($element) { case 'surname' : $node['biblio_contributors'][$auth_category][$contrib_count]['lastname'] .= $data; break; case 'given_name' : $node['biblio_contributors'][$auth_category][$contrib_count]['firstname'] .= $data; break; case 'suffix': $node['biblio_contributors'][$auth_category][$contrib_count]['suffix'] .= $data; break; case 'affiliation' : $node['biblio_contributors'][$auth_category][$contrib_count]['affiliation'] .= $data; break; case 'organization': $node['biblio_contributors'][5][$org_count]['name'] .= $data; break; case 'year': $node['year'] = $data; break; case 'month': $node['month'] = $data; break; case 'day': $node['day'] = $data; break; default: if ($field = _unixref_field_map(trim($element))) { $node[$field] .= $data; } } } } /* * map a unixref XML field to a biblio field */ function _unixref_field_map($field) { static $field_map = array(); if (empty($field_map)) { module_load_include('inc', 'biblio', 'biblio.type.mapper'); $field_map = biblio_get_field_map('unixref'); } return (isset($field_map[$field])) ? $field_map[$field]: FALSE; } function _unixref_type_map($type){ static $map = array(); if (empty($map)) { module_load_include('inc', 'biblio', 'biblio.type.mapper'); $map = biblio_get_type_map('unixref'); } return (isset($map[$type]))?$map[$type]:129; //return the biblio type or 129 (Misc) if type not found } function _unixref_get_contributor_category($role) { if ($role == 'author') return 1; if ($role == 'editor') return 2; if ($role == 'chair') return 3; if ($role == 'translator') return 4; return NULL; }