From 056286a60a1f1d71be35be8920be0a0a7a458780 Mon Sep 17 00:00:00 2001
From: Dorian Merz <merz@ub.uni-leipzig.de>
Date: Fri, 25 Sep 2020 16:57:27 +0200
Subject: [PATCH] refs #18365 [finc] add getOtherIdentifiers function

* reads MARC 024
* specifies type of identifier
* also defines MultiLine RecordDataFormatterSpecs for other identifiers
---
 .../finc/RecordDriver/SolrMarcFincTrait.php   | 26 +++++++++++++++++++
 .../View/Helper/Root/MultiDataFieldsTrait.php | 21 +++++++++++++++
 2 files changed, 47 insertions(+)

diff --git a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php
index a88a11c7595..803e6d9aad7 100644
--- a/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php
+++ b/module/finc/src/finc/RecordDriver/SolrMarcFincTrait.php
@@ -356,6 +356,32 @@ trait SolrMarcFincTrait
         return  $retval;
     }
 
+
+    /**
+     * Method reading MARC field 24
+     *
+     * @return array
+     * @access public
+     */
+    public function getOtherIdentifiers()
+    {
+        $fields = $this->getMarcRecord()->getFields('024');
+        if (!$fields) {
+            return null;
+        }
+        foreach ($fields as $field) {
+            if ($subfield = $field->getSubfield('a')) {
+                $data = $subfield->getData();
+                $type = 'unspecified';
+                if ($field->getIndicator('1') == '7' && $sub2 = $field->getSubfield('2')) {
+                    $type = $sub2->getData();
+                }
+                $retval[$type][] = $data;
+            }
+        }
+        return  $retval;
+    }
+
     /**
      * Get an array of instrumentation notes taken from the local data
      * of the Petrucci music library subfield 590b
diff --git a/module/finc/src/finc/View/Helper/Root/MultiDataFieldsTrait.php b/module/finc/src/finc/View/Helper/Root/MultiDataFieldsTrait.php
index be5bd3f42ad..b9536ccab15 100644
--- a/module/finc/src/finc/View/Helper/Root/MultiDataFieldsTrait.php
+++ b/module/finc/src/finc/View/Helper/Root/MultiDataFieldsTrait.php
@@ -134,4 +134,25 @@ trait MultiDataFieldsTrait
         return $final;
     }
 
+    /**
+     * return render details for otherIdentifiers (MARC 024)  data set
+     * @return callback
+     */
+    public function otherIdentifiers($data, $options, $driver)
+    {
+        // Sort the data:
+        $final = [];
+        foreach ($data as $type => $values) {
+            $final[] = [
+                'label' => $type,
+                'values' => $values,
+                'options' => [
+                    'pos' => $options['pos'],
+                    'renderType' => 'Simple',
+                ],
+            ];
+        }
+        return $final;
+    }
+
 }
-- 
GitLab