Bug 22571: Handle control fields in MMT for conditionals
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Sun, 5 May 2019 17:41:46 +0000 (12:41 -0500)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Fri, 21 Jun 2019 12:12:46 +0000 (13:12 +0100)
Control fields are not handled correctly by Koha::SimpleMARC when
comparaison (with or without regex) is done.

Which means we did not support something like:
Do something if control field 008 equals or matches "a string"

Test plan:
Create a new MARC modification template and a new action, like:
Add new field 100$a with value "foo bar" if 008 (or any other control
fields) matches (or equals) a regex
Then use the record mofication tool and confirm that the new field is
create if the regex matches 008 of the bib record

Signed-off-by: Mark Tompsett <mtompset@hotmail.com>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Koha/SimpleMARC.pm

index de76cd3..5a916bd 100644 (file)
@@ -415,9 +415,15 @@ sub field_equals {
   my @field_numbers = ();
   my $current_field_number = 1;
   FIELDS: for my $field ( $record->field( $fieldName ) ) {
-    my @subfield_values = $subfieldName
-        ? $field->subfield( $subfieldName )
-        : map { $_->[1] } $field->subfields;
+    my @subfield_values;
+    if ( $field->is_control_field ) {
+        push @subfield_values, $field->data;
+    } else {
+        @subfield_values =
+            $subfieldName
+          ? $field->subfield($subfieldName)
+          : map { $_->[1] } $field->subfields;
+    }
 
     SUBFIELDS: for my $subfield_value ( @subfield_values ) {
       if (