From a88b4483adeea4a0561321c5e352532493ff5a74 Mon Sep 17 00:00:00 2001 From: Magnus Enger 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 --- 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