Bug 13465: Correct the field prefix ambiguity
authorJonathan Druart <jonathan.druart@biblibre.com>
Wed, 17 Dec 2014 09:43:34 +0000 (10:43 +0100)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Fri, 19 Dec 2014 17:40:21 +0000 (14:40 -0300)
This is introduced by Bug 12874.

Without this patch, it's not possible to clear (set to an empty string)
an item field.
This appended for field linked to an AV list but even if it's not.

The regex tried to prefix 'my_field' with 'items.' to have
'items.my_field'. It wanted to take care of the case where the prefix
already exists (Actually only 1: 'items.cn_source').
The regex is changed to: "add the prefix only if the string does not
contain a dot".

Moreover an ambiguity existed on the prefix: in marc_subfield_structure,
the kohafield is prefixed, but not in the key of the hash sent to
ModItemFromMarc.

Test plan:
- edit an item, set a status that is controlled by an authorized value
examples tested: damaged, not for loan
- check the status saved correctly
- edit the item again, reset the status to empty
- check the status saved correctly
- edit the item again, reset fields, edit fields
- check the fields saved correctly

Signed-off-by: Mirko Tietgen <mirko@abunchofthings.net>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
C4/Items.pm

index e63ef1b..33143a5 100644 (file)
@@ -482,11 +482,12 @@ sub _build_default_values_for_mod_marc {
         withdrawn                => 0,
     };
     while ( my ( $field, $default_value ) = each %$default_values ) {
-        $field =~ s|[^\.]*\.?(.*)|items.$1|;
+        my $kohafield = $field;
+        $kohafield =~ s|^([^\.]+)$|items.$1|;
         $default_values_for_mod_from_marc{$frameworkcode}{$field} =
           $default_value
           if C4::Koha::IsKohaFieldLinked(
-            { kohafield => $field, frameworkcode => $frameworkcode } );
+            { kohafield => $kohafield, frameworkcode => $frameworkcode } );
     }
     return $default_values_for_mod_from_marc{$frameworkcode};
 }