/** * Serialize the record for storing in the database * * @return string */ public function serialize() { return MetadataUtils::trimXMLWhitespace($this->doc->asXML()); }
/** * Return fields to be indexed in Solr * * @param boolean $prependTitleWithSubtitle If true and title_sub differs from * title_short, title is formed by combining title_sub and title_short * * @return string[] */ public function toSolrArray($prependTitleWithSubtitle) { $data = []; $doc = $this->doc; $data['ctrlnum'] = (string) $this->doc->attributes()->{'id'}; $data['fullrecord'] = MetadataUtils::trimXMLWhitespace($doc->asXML()); $data['allfields'] = $this->getAllFields($doc); if ($doc->scopecontent) { if ($doc->scopecontent->p) { // Join all p-elements into a flat string. $desc = []; foreach ($doc->scopecontent->p as $p) { $desc[] = trim((string) $p); } $desc = implode(' / ', $desc); } else { $desc = (string) $doc->scopecontent; } $data['description'] = $desc; } $authors = []; if ($names = $doc->xpath('controlaccess/persname')) { foreach ($names as $name) { if (trim((string) $name) !== '-') { $authors[] = trim((string) $name); } } } if ($names = $doc->xpath('controlaccess/corpname')) { foreach ($names as $name) { $authors[] = trim((string) $name); } } if ($authors) { $data['author'] = array_shift($authors); $data['author-letter'] = $data['author']; } if ($authors) { $data['author2'] = $authors; } if ($doc->did->origination) { $data['author_additional'] = trim((string) $doc->did->origination->corpname); } if ($geoNames = $doc->xpath('controlaccess/geogname')) { $names = []; foreach ($geoNames as $name) { if (trim((string) $name) !== '-') { $names[] = trim((string) $name); } } $data['geographic'] = $data['geographic_facet'] = $names; } if ($subjects = $doc->xpath('controlaccess/subject')) { $topics = []; foreach ($subjects as $subject) { if (trim((string) $subject) !== '-') { $topics[] = trim((string) $subject); } } $data['topic'] = $data['topic_facet'] = $topics; } $genre = $doc->xpath('controlaccess/genreform'); $data['format'] = (string) ($genre ? $genre[0] : $doc->attributes()->level); if (isset($doc->did->repository)) { $data['institution'] = (string) isset($doc->did->repository->corpname) ? $doc->did->repository->corpname : $doc->did->repository; } $data['title_sub'] = ''; switch ($data['format']) { case 'fonds': break; case 'collection': break; case 'series': case 'subseries': $data['title_sub'] = (string) $doc->did->unitid; break; default: $data['title_sub'] = (string) $doc->did->unitid; if ($doc->{'add-data'}->parent) { $data['series'] = (string) $doc->{'add-data'}->parent->attributes()->unittitle; } break; } $data['title_short'] = (string) $doc->did->unittitle; $data['title'] = ''; if ($prependTitleWithSubtitle) { if ($data['title_sub'] && $data['title_sub'] != $data['title_short']) { $data['title'] = $data['title_sub'] . ' '; } } $data['title'] .= $data['title_short']; $data['title_full'] = $data['title_sort'] = $data['title']; $data['title_sort'] = mb_strtolower(MetadataUtils::stripLeadingPunctuation($data['title_sort']), 'UTF-8'); if ($languages = $doc->did->xpath('langmaterial/language')) { foreach ($languages as $lang) { if (isset($lang->attributes()->langcode)) { $langCode = trim((string) $lang->attributes()->langcode); if ($langCode != '') { $data['language'][] = $langCode; } } } } if ($extents = $doc->did->xpath('physdesc/extent')) { foreach ($extents as $extent) { if (trim((string) $extent) !== '-') { $data['physical'][] = (string) $extent; } } } $nodes = $this->doc->did->daogrp->xpath('daoloc[@role="image_thumbnail"]'); if ($nodes) { // store first thumbnail $node = $nodes[0]; if (isset($node->attributes()->href)) { $data['thumbnail'] = (string) $node->attributes()->href; } } $data['hierarchytype'] = 'Default'; if ($this->doc->{'add-data'}->archive) { $archiveAttr = $this->doc->{'add-data'}->archive->attributes(); $data['hierarchy_top_id'] = (string) $archiveAttr->{'id'}; $data['hierarchy_top_title'] = (string) $archiveAttr->title; if ($archiveAttr->subtitle) { $data['hierarchy_top_title'] .= ' : ' . (string) $archiveAttr->subtitle; } $data['allfields'][] = $data['hierarchy_top_title']; if ($archiveAttr->sequence) { $data['hierarchy_sequence'] = (string) $archiveAttr->sequence; } } if ($this->doc->{'add-data'}->{'parent'}) { $data['hierarchy_parent_id'] = (string) $this->doc->{'add-data'}->{'parent'}->attributes()->{'id'}; $data['allfields'][] = $data['hierarchy_parent_title'] = (string) $this->doc->{'add-data'}->{'parent'}->attributes()->title; } else { $data['is_hierarchy_id'] = $data['hierarchy_top_id'] = $this->getID(); $data['is_hierarchy_title'] = $data['hierarchy_top_title'] = (string) $doc->did->unittitle; } return $data; }