示例#1
0
 /**
  * Serialize the record for storing in the database
  *
  * @return string
  */
 public function serialize()
 {
     return MetadataUtils::trimXMLWhitespace($this->doc->asXML());
 }
示例#2
0
 /**
  * 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;
 }