From 1fd62b36b2d7164d3f25ffd2eda2c48429209901 Mon Sep 17 00:00:00 2001
From: Demian Katz <demian.katz@villanova.edu>
Date: Tue, 2 Oct 2012 13:42:41 -0400
Subject: [PATCH] Added injectHeaderElements setting to OAI-PMH harvester.

---
 harvest/oai.ini                            |  5 +++++
 module/VuFind/src/VuFind/Harvester/OAI.php | 20 ++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/harvest/oai.ini b/harvest/oai.ini
index 67de45b3729..e71fcb56f90 100644
--- a/harvest/oai.ini
+++ b/harvest/oai.ini
@@ -12,6 +12,7 @@
 ; injectId = false
 ; injectSetName = false
 ; injectSetSpec = false
+; injectHeaderElements[] = hierarchy
 ; dateGranularity = auto
 ; harvestedIdLog = harvest.log
 ; verbose = false
@@ -57,6 +58,10 @@
 ; omitted or set to false, no setSpec-related changes will be made to the harvested
 ; metadata.
 ;
+; injectHeaderElements may be set to an array of elements within the header of the
+; OAI-PMH response which should be copied into the saved XML document.  This is
+; rarely necessary.
+;
 ; dateGranularity is the granularity used by the server for representing dates.
 ; This may be "YYYY-MM-DDThh:mm:ssZ," "YYYY-MM-DD" or "auto" (to query the server
 ; for details).  The default is "auto."
diff --git a/module/VuFind/src/VuFind/Harvester/OAI.php b/module/VuFind/src/VuFind/Harvester/OAI.php
index 63642654106..86363f87ace 100644
--- a/module/VuFind/src/VuFind/Harvester/OAI.php
+++ b/module/VuFind/src/VuFind/Harvester/OAI.php
@@ -138,6 +138,13 @@ class OAI
      */
     protected $injectDate = false;
 
+    /**
+     * List of header elements to copy into body
+     *
+     * @var array
+     */
+    protected $injectHeaderElements = array();
+
     /**
      * Associative array of setSpec => setName
      *
@@ -221,6 +228,12 @@ class OAI
         if (isset($settings['injectDate'])) {
             $this->injectDate = $settings['injectDate'];
         }
+        if (isset($settings['injectHeaderElements'])) {
+            $this->injectHeaderElements
+                = is_array($settings['injectHeaderElements'])
+                    ? $settings['injectHeaderElements']
+                    : array($settings['injectHeaderElements']);
+        }
         if (isset($settings['dateGranularity'])) {
             $this->granularity = $settings['dateGranularity'];
         }
@@ -503,6 +516,13 @@ class OAI
                 }
             }
         }
+        if (!empty($this->injectHeaderElements)) {
+            foreach ($this->injectHeaderElements as $element) {
+                if (isset($record->header->$element)) {
+                    $insert .= $record->header->$element->asXML();
+                }
+            }
+        }
         if (!empty($insert)) {
             $xml = preg_replace('/>/', '>' . $insert, $xml, 1);
         }
-- 
GitLab