diff --git a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php index ae53d4e3012e8f0c6a13288b51f37492e9ca1100..0d2d75d3d67f26258416a8f8874e5107e9b3b880 100644 --- a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php +++ b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php @@ -2319,14 +2319,22 @@ trait SolrMarcFincTrait } /** + * Get an array of publication detail lines combining information from Marc 260, 264, 533 * + * @return array */ public function getPublicationDetails() { $places = $names = $dates = []; - foreach (array('260','264') as $pos => $field_name) { + + $getSubfieldLinesConcat = function ($field, $code, $separator) { + return implode($separator, array_map(function ($elem) {return $elem->getData();}, $field->getSubfields($code) ?? [])); + }; + + // getting contents from marc 260 and 264 + foreach (['260','264'] as $pos => $field_name) { if ($fields = $this->getMarcRecord()->getFields($field_name)) { foreach ($fields as $field) { // for MARC $264 if indicator2 equals 1 we have publication details @@ -2334,29 +2342,30 @@ trait SolrMarcFincTrait if ($pos === '264' && $field->getIndicator('2') !== '1') { continue; } - foreach (array( + foreach ([ 'places' => 'a', 'names' => 'b', 'dates' => 'c' - ) as $key => $sub_name) { - if ($lines = $field->getSubfields($sub_name)) { - ${$key}[] = implode( - ', ', - array_map( - function ($elem) { - return $elem->getData(); - }, - $lines - ) - ); - } else { - ${$key}[] = ''; - } + ] as $key => $sub_name) { + ${$key}[] = $getSubfieldLinesConcat($field, $sub_name, ', '); } } } } + // getting (additional) contents from marc 533 - Reproduction Note (https://www.loc.gov/marc/bibliographic/bd533.html) + if ($fields = $this->getMarcRecord()->getFields('533')) { + $mapping = ['type' => 'a', 'place' => 'b', 'name' => 'c', 'date' => 'd']; + foreach ($fields as $field) { + foreach ($mapping as $key => $sub_name) { + ${$key} = $getSubfieldLinesConcat($field, $sub_name, ', '); + } + $places[] = (empty($type) ? '' : $type . '. ') . $place ?? ''; + $names[] = $name ?? ''; + $dates[] = $date ?? ''; + } + } + $i = 0; $retval = []; while (isset($places[$i]) || isset($names[$i]) || isset($dates[$i])) {