/** * Dedup: Return (unique) ISBNs in ISBN-13 format without dashes * * @return string[] */ public function getISBNs() { $arr = []; $fields = $this->getFields('020'); foreach ($fields as $field) { $isbn = $this->getSubfield($field, 'a'); $isbn = MetadataUtils::normalizeISBN($isbn); if ($isbn) { $arr[] = $isbn; } } return array_values(array_unique($arr)); }
/** * Get an array of all fields relevant to allfields search * * @return string[] */ protected function getAllFields() { $subfieldFilter = ['650' => ['0' => 1, '2' => 1, '6' => 1, '8' => 1], '773' => ['0' => 1, '6' => 1, '7' => 1, '8' => 1, 'w' => 1], '856' => ['0' => 1, '6' => 1, '8' => 1, 'q' => 1], '979' => ['0' => 1, 'a' => 1, 'f' => 1]]; $allFields = []; // Include ISBNs, also normalized if possible foreach ($this->getFields('020') as $field) { $isbns = $this->getSubfieldsArray($field, ['a' => 1, 'z' => 1]); foreach ($isbns as $isbn) { $allFields[] = $isbn; $isbn = MetadataUtils::normalizeISBN($isbn); if ($isbn) { $allFields[] = $isbn; } } } foreach ($this->fields as $tag => $fields) { if ($tag >= 100 && $tag < 841 && $tag != 336 && $tag != 337 || $tag == 856 || $tag == 880 || $tag == 979) { foreach ($fields as $field) { $subfields = $this->getAllSubfields($field, isset($subfieldFilter[$tag]) ? $subfieldFilter[$tag] : ['0' => 1, '6' => 1, '8' => 1]); if ($subfields) { $allFields = array_merge($allFields, $subfields); } } } } $allFields = array_map(function ($str) { return MetadataUtils::stripLeadingPunctuation(MetadataUtils::stripTrailingPunctuation($str)); }, $allFields); return array_values(array_unique($allFields)); }