Bug 28290: Don't send subfields to 'as_string' if none to send
authorNick Clemens <nick@bywatersolutions.com>
Tue, 4 May 2021 18:29:05 +0000 (18:29 +0000)
committerTomas Cohen Arazi <tomascohen@theke.io>
Wed, 7 Sep 2022 20:50:21 +0000 (13:50 -0700)
This fixes an error where we send a blank string to
Marc::Field->as_string

The subroutine fails as the regex is marked as incomplete as there is
nothing between the brackets

Also fixes a missing hidden input for 'item_action' when no items are
staged during import

 1 - Define a new matching rule with no subfields
    Match-threshold: 1000
    Record type: bibliographic record
    Search-index: Other-control-number
    Score: 1000
    Tag: 035
    Subfields:
    Offset:
    Length:
 2 - Attempt to stage a record with an 035 using this rule (i will
     attach example to bug)
 3 - Staging fails
 4 - Stage again with no matching rule
 5 - Manage the staged record, try to apply the matching rule
 6 - It fails, 500 error
 7 - Apply patch
 8 - Restart all the things
 9 - Apply rule again, it works!
10 - Stage the record again using the rule for matching
11 - It stages and matches!

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
C4/Matcher.pm
koha-tmpl/intranet-tmpl/prog/en/includes/tools-item-action.inc

index e8a8ec3..77716f7 100644 (file)
@@ -838,10 +838,12 @@ sub _get_match_keys {
             }
             elsif ( $field->is_control_field() ) {
                 $string = $field->data();
             }
             elsif ( $field->is_control_field() ) {
                 $string = $field->data();
-            } els{
+            } elsif ( defined $component->{subfields} && keys %{$component->{subfields}} ){
                 $string = $field->as_string(
                     join('', keys %{ $component->{ subfields } }), ' ' # ' ' as separator
                 );
                 $string = $field->as_string(
                     join('', keys %{ $component->{ subfields } }), ' ' # ' ' as separator
                 );
+            } else {
+                $string = $field->as_string();
             }
 
             if ($component->{'length'}>0) {
             }
 
             if ($component->{'length'}>0) {
index 27fb6da..e58f05f 100644 (file)
@@ -1,5 +1,6 @@
         [% IF item_action_ignore AND num_items == 0 %]
             No items were found during staging
         [% IF item_action_ignore AND num_items == 0 %]
             No items were found during staging
+            <input type ="hidden" name="item_action" value="ignore">
         [% ELSE %]
             <select name="item_action" id="item_action">
             [% IF ( item_action_always_add ) %]
         [% ELSE %]
             <select name="item_action" id="item_action">
             [% IF ( item_action_always_add ) %]