From 02a66dd834bb9b2489242eb44945c552c1eddd2d Mon Sep 17 00:00:00 2001 From: Demian Katz <demian.katz@villanova.edu> Date: Mon, 13 Nov 2017 12:14:19 -0500 Subject: [PATCH] Moved shared support method to better location. --- .../VuFind/RecordDriver/MarcAdvancedTrait.php | 50 ------------------ .../VuFind/RecordDriver/MarcReaderTrait.php | 52 +++++++++++++++++++ 2 files changed, 52 insertions(+), 50 deletions(-) diff --git a/module/VuFind/src/VuFind/RecordDriver/MarcAdvancedTrait.php b/module/VuFind/src/VuFind/RecordDriver/MarcAdvancedTrait.php index 4e564387008..53f0a850cb8 100644 --- a/module/VuFind/src/VuFind/RecordDriver/MarcAdvancedTrait.php +++ b/module/VuFind/src/VuFind/RecordDriver/MarcAdvancedTrait.php @@ -269,56 +269,6 @@ trait MarcAdvancedTrait return in_array('785', $fieldsNames) ? [] : parent::getNewerTitles(); } - /** - * Get the item's publication information - * - * @param string $subfield The subfield to retrieve ('a' = location, 'c' = date) - * - * @return array - */ - protected function getPublicationInfo($subfield = 'a') - { - // Get string separator for publication information: - $separator = isset($this->mainConfig->Record->marcPublicationInfoSeparator) - ? $this->mainConfig->Record->marcPublicationInfoSeparator : ' '; - - // First check old-style 260 field: - $results = $this->getFieldArray('260', [$subfield], true, $separator); - - // Now track down relevant RDA-style 264 fields; we only care about - // copyright and publication places (and ignore copyright places if - // publication places are present). This behavior is designed to be - // consistent with default SolrMarc handling of names/dates. - $pubResults = $copyResults = []; - - $fields = $this->getMarcRecord()->getFields('264'); - if (is_array($fields)) { - foreach ($fields as $currentField) { - $currentVal = $this - ->getSubfieldArray($currentField, [$subfield], true, $separator); - if (!empty($currentVal)) { - switch ($currentField->getIndicator('2')) { - case '1': - $pubResults = array_merge($pubResults, $currentVal); - break; - case '4': - $copyResults = array_merge($copyResults, $currentVal); - break; - } - } - } - } - $replace260 = isset($this->mainConfig->Record->replaceMarc260) - ? $this->mainConfig->Record->replaceMarc260 : false; - if (count($pubResults) > 0) { - return $replace260 ? $pubResults : array_merge($results, $pubResults); - } elseif (count($copyResults) > 0) { - return $replace260 ? $copyResults : array_merge($results, $copyResults); - } - - return $results; - } - /** * Get the item's places of publication. * diff --git a/module/VuFind/src/VuFind/RecordDriver/MarcReaderTrait.php b/module/VuFind/src/VuFind/RecordDriver/MarcReaderTrait.php index af05b1c0406..6a199bbad39 100644 --- a/module/VuFind/src/VuFind/RecordDriver/MarcReaderTrait.php +++ b/module/VuFind/src/VuFind/RecordDriver/MarcReaderTrait.php @@ -33,6 +33,8 @@ namespace VuFind\RecordDriver; * * Assumption: raw MARC data can be found in $this->fields['fullrecord']. * + * Assumption: VuFind config available as $this->mainConfig + * * @category VuFind * @package RecordDrivers * @author Demian Katz <demian.katz@villanova.edu> @@ -137,6 +139,56 @@ trait MarcReaderTrait $matches[0] : null; } + /** + * Get the item's publication information + * + * @param string $subfield The subfield to retrieve ('a' = location, 'c' = date) + * + * @return array + */ + protected function getPublicationInfo($subfield = 'a') + { + // Get string separator for publication information: + $separator = isset($this->mainConfig->Record->marcPublicationInfoSeparator) + ? $this->mainConfig->Record->marcPublicationInfoSeparator : ' '; + + // First check old-style 260 field: + $results = $this->getFieldArray('260', [$subfield], true, $separator); + + // Now track down relevant RDA-style 264 fields; we only care about + // copyright and publication places (and ignore copyright places if + // publication places are present). This behavior is designed to be + // consistent with default SolrMarc handling of names/dates. + $pubResults = $copyResults = []; + + $fields = $this->getMarcRecord()->getFields('264'); + if (is_array($fields)) { + foreach ($fields as $currentField) { + $currentVal = $this + ->getSubfieldArray($currentField, [$subfield], true, $separator); + if (!empty($currentVal)) { + switch ($currentField->getIndicator('2')) { + case '1': + $pubResults = array_merge($pubResults, $currentVal); + break; + case '4': + $copyResults = array_merge($copyResults, $currentVal); + break; + } + } + } + } + $replace260 = isset($this->mainConfig->Record->replaceMarc260) + ? $this->mainConfig->Record->replaceMarc260 : false; + if (count($pubResults) > 0) { + return $replace260 ? $pubResults : array_merge($results, $pubResults); + } elseif (count($copyResults) > 0) { + return $replace260 ? $copyResults : array_merge($results, $copyResults); + } + + return $results; + } + /** * Return an array of non-empty subfield values found in the provided MARC * field. If $concat is true, the array will contain either zero or one -- GitLab