function StoreIdentifier($id) { $i = IdentifierKind($id); switch ($i['identifier_type']) { case IDENTIFIER_DOI: $this->id['doi'] = $i['identifier_string']; break; case IDENTIFIER_SICI: $this->id['sici'] = $i['identifier_string']; break; case IDENTIFIER_HANDLE: $this->id['hdl'] = $i['identifier_string']; break; case IDENTIFIER_PUBMED: $this->id['pmid'] = $i['identifier_string']; break; case IDENTIFIER_URL: $this->id['url'] = $i['identifier_string']; break; case IDENTIFIER_GENBANK: $this->id['genbank'] = $i['identifier_string']; break; case IDENTIFIER_GI: $this->id['gi'] = $i['identifier_string']; break; default: break; } }
function process_ris_key($key, $value, &$obj) { global $key_map; global $debug; //echo "|$key|-$value\n"; switch ($key) { case 'AU': case 'A1': // Interpret author names //echo __LINE__ . " author\n"; $value = trim($value); // Handle Highwire author initials such as JM (we want J M) if (preg_match("/,\\s*(?<initials>[A-Z]+)\$/", $value, $m)) { //print_r($m); $spaced = ''; for ($i = 0; $i < strlen($m['initials']); $i++) { $spaced .= $m['initials'][$i] . ' '; } $value = trim(preg_replace("/,\\s*" . $m['initials'] . "\$/", ", " . $spaced, $value)); } //echo __LINE__ . " $value\n"; $p = explode(',', $value); //print_r($p); if (count($p) > 1) { $value = ''; $n = count($p); for ($i = 1; $i < $n; $i++) { $value .= $p[$i] . ' '; } $value .= $p[0]; } // Trim trailing periods and other junk $value = preg_replace("/\\.\$/", "", $value); $value = preg_replace("/ \$/", "", $value); // Clean Ingenta crap $value = preg_replace("/\\[[0-9]\\]/", "", $value); // Space initials nicely $value = preg_replace("/\\.([A-Z])/", ". \$1", $value); // Make nice $value = mb_convert_case($value, MB_CASE_TITLE, mb_detect_encoding($value)); //echo __LINE__ . " $value\n"; // Get parts of name $parts = parse_name($value); $author = new stdClass(); if (isset($parts['last'])) { $author->lastname = $parts['last']; } if (isset($parts['suffix'])) { $author->suffix = $parts['suffix']; } if (isset($parts['first'])) { $author->forename = $parts['first']; /* $author->forename = mb_convert_case($author->forename, MB_CASE_TITLE, mb_detect_encoding($author->forename)); */ if (array_key_exists('middle', $parts)) { $author->forename .= ' ' . $parts['middle']; } } if ($debug) { print_r($authors); } array_push($obj->authors, $author); break; // Handle cases where both pages SP and EP are in this field // Handle cases where both pages SP and EP are in this field case 'SP': if (preg_match('/^(?<spage>[0-9]+)[^\\d]+(?<epage>[0-9]+)$/', trim($value), $matches)) { $obj->spage = $matches['spage']; $obj->epage = $matches['epage']; } else { $obj->{$key_map}[$key] = $value; } break; case 'Y1': $year = ''; $date = $value; // Year might be in YYYY-MM-DD format (e.g., my Zootaxa export) if (preg_match("/[0-9]{4}\\-[0-9]{1,2}\\-[0-9]{1,2}/", $date)) { // Save the date (taxonomists care about this) $obj->date = $date; if (-1 != strtotime($date)) { $year = date("Y", strtotime($date)); } } if (preg_match("/[0-9]{4}\\/[0-9]{1,2}\\/[0-9]{1,2}/", $date)) { // Save the date (taxonomists care about this) $obj->date = $date; if (-1 != strtotime($date)) { $year = date("Y", strtotime($date)); } } // Year is YYYY if (preg_match("/^[0-9]{4}\$/", $date)) { $year = $date; } $obj->year = $year; break; case 'PY': // used by Ingenta, and others (incl. Zotero) $date = trim($value); // Zotero if (preg_match("/^(?<year>[0-9]{4})\\/(?<month>[0-9]{2})?\\/(?<day>[0-9]{2})?\\/\$/", $date, $m)) { //print_r($m); $formatted_date = ''; $year = ''; // Year if (isset($m['year'])) { $obj->year = $m['year']; $formatted_date = $m['year']; } if (isset($m['month'])) { $formatted_date .= '-' . $m['month']; if (isset($m['day'])) { $formatted_date .= '-' . $m['day']; } else { $formatted_date .= '-00'; } $obj->date = $formatted_date; } //print_r($obj); } if (preg_match("/^[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}\$/", $date)) { $obj->date = $date; } if (preg_match("/^[0-9]{4}\$/", $date)) { $obj->year = $date; } break; case 'M3': // used by Ingenta for DOI $id = IdentifierKind($value); switch ($id['identifier_type']) { case IDENTIFIER_DOI: $obj->doi = $id['identifier_string']; break; } break; case 'JO': // Other name for journal, only use if JF not already set if (!isset($obj->{$keyMap}['JF'])) { $obj->{$key_map}[$key] = $value; } break; case 'L3': // May be URL, may be identifier with proxy prefix // May be URL, may be identifier with proxy prefix case 'UR': // May be URL, may be identifier with proxy prefix // May be URL, may be identifier with proxy prefix case 'N1': // Extract any other identifiers $id = IdentifierKind(urldecode($value)); //print_r($id); switch ($id['identifier_type']) { case IDENTIFIER_DOI: $obj->doi = $id['identifier_string']; break; case IDENTIFIER_HANDLE: $obj->hdl = $id['identifier_string']; break; default: if ('UR' == $key) { if (preg_match('/\\.pdf/', $value)) { $obj->{$key_map}['L1'] = $value; } else { $obj->{$key_map}[$key] = $value; } } break; } break; case 'L1': // ignore local URLs if (preg_match('/^http/', $value)) { $obj->{$key_map}[$key] = $value; } break; case 'M1': if (preg_match('/^S/', $value)) { // TreeBASE study id $obj->treebase->StudyID = $value; } break; default: if (array_key_exists($key, $key_map)) { // Only set value if it is not empty if ($value != '') { $obj->{$key_map}[$key] = $value; } } break; } }