From 075a02ab549ab07b8f8e89370754a0408f07e551 Mon Sep 17 00:00:00 2001
From: Magnus Enger <magnus@libriotech.no>
Date: Wed, 29 Jan 2020 23:59:44 +0100
Subject: [PATCH] Bug 24531 - Fix OAI-PMH sets for records with repeated fields

Currently, an OAI-PMH set mapping will only match if the value it
is looking for occurs in the first instance of a repeated field.

To test:
- Apply the first patch with two new tests
- Run something like this:
  sudo koha-shell -c "prove -v t/db_dependent/OAI/Sets.t" kohadev
- Verify that the last test fails
- Apply this secind patch
- Rerun the test file above
- Verify that all tests now pass

Signed-off-by: David Nind <david@davidnind.com>
---
 C4/OAI/Sets.pm | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/C4/OAI/Sets.pm b/C4/OAI/Sets.pm
index 44100e8794..ad33aa3cdf 100644
--- a/C4/OAI/Sets.pm
+++ b/C4/OAI/Sets.pm
@@ -541,14 +541,25 @@ sub _evalRule {
     my $subfield = $mapping->{'marcsubfield'};
     my $operator = $mapping->{'operator'};
     my $value = $mapping->{'marcvalue'};
-    my @subfield_values = $record->subfield($field, $subfield);
+
+    my @all_subfield_values;
+    # Get all the fields with the given tag
+    my @fields = $record->field($field);
+    # Iterate over all the fields
+    foreach my $field ( @fields ) {
+        # Get the values from all the subfields with the given subfield code
+        if ( my @subfield_values = $field->subfield($subfield) ) {
+            push @all_subfield_values, @subfield_values;
+        }
+    }
+
     if ($operator eq 'notequal') {
-        if(0 == grep /^$value$/, @subfield_values) {
+        if(0 == grep /^$value$/, @all_subfield_values) {
             return 1;
         }
     }
     else {
-        if(0 < grep /^$value$/, @subfield_values) {
+        if(0 < grep /^$value$/, @all_subfield_values) {
             return 1;
         }
     }
-- 
2.11.0