From 691be78c355bff53d322468fd3ecd5501818f800 Mon Sep 17 00:00:00 2001
From: Demian Katz <demian.katz@villanova.edu>
Date: Thu, 26 Jul 2018 14:26:33 -0400
Subject: [PATCH] When a set_query is selected, show it in headers. - Improves
 OAI-PMH validation.

---
 module/VuFind/src/VuFind/OAI/Server.php | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/module/VuFind/src/VuFind/OAI/Server.php b/module/VuFind/src/VuFind/OAI/Server.php
index 26ee04b50fd..db808589a5f 100644
--- a/module/VuFind/src/VuFind/OAI/Server.php
+++ b/module/VuFind/src/VuFind/OAI/Server.php
@@ -297,11 +297,12 @@ class Server
      * @param object           $record     A record driver object
      * @param string           $format     Metadata format to obtain (false for none)
      * @param bool             $headerOnly Only attach the header?
+     * @param string           $set        Currently active set
      *
      * @return bool
      */
     protected function attachNonDeleted($container, $record, $format,
-        $headerOnly = false
+        $headerOnly = false, $set = ''
     ) {
         // Get the XML (and display an error if it is unsupported):
         if ($format === false) {
@@ -324,10 +325,13 @@ class Server
         // Check for sets:
         $fields = $record->getRawData();
         if (null !== $this->setField && !empty($fields[$this->setField])) {
-            $sets = $fields[$this->setField];
+            $sets = (array)$fields[$this->setField];
         } else {
             $sets = [];
         }
+        if (!empty($set)) {
+            $sets = array_unique(array_merge($sets, [$set]));
+        }
 
         // Get modification date:
         $date = $record->getLastIndexed();
@@ -598,14 +602,14 @@ class Server
         $solrLimit = ($params['cursor'] + $this->pageSize) - $currentCursor;
 
         // Get non-deleted records from the Solr index:
+        $set = $params['set'] ?? '';
         $result = $this->listRecordsGetNonDeleted(
-            $from, $until, $solrOffset, $solrLimit,
-            $params['set'] ?? ''
+            $from, $until, $solrOffset, $solrLimit, $set
         );
         $nonDeletedCount = $result->getResultTotal();
         $format = $params['metadataPrefix'];
         foreach ($result->getResults() as $doc) {
-            if (!$this->attachNonDeleted($xml, $doc, $format, $headersOnly)) {
+            if (!$this->attachNonDeleted($xml, $doc, $format, $headersOnly, $set)) {
                 $this->unexpectedError('Cannot load document');
             }
             $currentCursor++;
-- 
GitLab