diff --git a/module/finc/src/finc/RecordDriver/SolrMarc.php b/module/finc/src/finc/RecordDriver/SolrMarc.php index cc56769933055587c5f099eae4ac05955f508ab2..fb29e876891f8680c6d61ae52edc790219b03fd4 100644 --- a/module/finc/src/finc/RecordDriver/SolrMarc.php +++ b/module/finc/src/finc/RecordDriver/SolrMarc.php @@ -506,13 +506,27 @@ class SolrMarc extends SolrDefault $toc = []; foreach ($fields as $field) { $subfields = $field->getSubfields(); - foreach ($subfields as $subfield) { - // Break the string into appropriate chunks, filtering empty strings, - // and merge them into return array: - $toc = array_merge( - $toc, - array_filter(explode('--', $subfield->getData()), 'trim') - ); + $ind2 = $field->getIndicator(2); + if ($ind2 === '0') { + // advanced entries with + // $t - Title + // $r - Statement of responsibility + $tocSubfields = []; + foreach ($subfields as $subfield) { + $tocSubfields[] = $subfield->getData(); + } + $toc[] = implode(' \ ', $tocSubfields); + } elseif ($ind2 === '#') { + // basic entries + // sub-entries delimited by " -- " + foreach ($subfields as $subfield) { + // Break the string into appropriate chunks, filtering empty strings, + // and merge them into return array: + $toc = array_merge( + $toc, + array_filter(explode('--', $subfield->getData()), 'trim') + ); + } } } return $toc; diff --git a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php index a8e7c73152d7e29db3d4d3dc5a85757aa709e8b7..2eef855a23ea2d97e3485ddf9c223be80773802a 100644 --- a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php +++ b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php @@ -86,7 +86,8 @@ trait SolrMarcFincTrait // Which fields/subfields should we check for URLs? $fieldsToCheck = [ '856' => ['u'], // Standard URL - '555' => ['a'] // Cumulative index/finding aids + '555' => ['a'], // Cumulative index/finding aids + '609' => ['a'] ]; foreach ($fieldsToCheck as $field => $subfields) { @@ -153,12 +154,48 @@ trait SolrMarcFincTrait } } } + if ($field == '609') { + // 609 cpntains Gallica (BNF) info. Cf. #10279. Included here via #15042 + $data = $url->getSubfield('a')->getData(); + if (stripos($data, 'http') === 0) { + $retVal[] = ['url' => $data, 'desc' => '', 'indicators' => '40']; + } + } } } } return $retVal; } + + /** + * Return a description about volumes in stock via consortial field + * with subfield $h. + * Currently only used in DE-L152. + * + * @return array + * @access public + */ + public function getVolumesInStock() + { + $volumesInStock = $this->getFieldArray($this->getLocalMarcFieldOfLibrary(), ['h']); + return array_filter($volumesInStock); + } + + /** + * Return a user relevant comment about volumes in stock via consortial field + * with subfield $i. + * Currently only used in DE-L152. + * + * @return array + * @access public + */ + public function getVolumesCommentInStock() + { + $volumesCommentInStock = $this->getFieldArray($this->getLocalMarcFieldOfLibrary(), ['i']); + return array_filter($volumesCommentInStock); + } + /** * Checks if the record is an EBL record (as defined in config.ini section * [Ebl]->product_sigel). Refs #8055 #9634