Bug 6657: Prevent biblionumber to be duplicated
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 17 Sep 2015 13:31:55 +0000 (14:31 +0100)
committerLiz Rea <wizzyrea@gmail.com>
Thu, 10 Dec 2015 23:26:26 +0000 (12:26 +1300)
If the biblionumber field is displayed in the framework, on editing a
biblio the field/subfield will be duplicated.
To prevent that this patch adds a check when building the field list.

Test plan:
1/ map biblio.biblionumber with 999$c
2/ Display 999$c in a framework
3/ Edit a biblio using this framework
4/ Save => The field should not have been duplicated

5/ map biblio.biblionumber with 001
6/ Display 001 in a framework
7/ Edit a biblio using this framework
8/ Save => The field should not have been duplicated

Signed-off-by: Bernardo Gonzalez Kriegel <bgkriegel@gmail.com>
Works as described, aldo removes duplicate values.
No errors

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 9ae556a21243ecae669bda2c5f42a67769ae9d78)
Signed-off-by: Frédéric Demians <f.demians@tamil.fr>
(cherry picked from commit c32edbd6e1d25583b8bf040e472727b0058a87d6)
Signed-off-by: Liz Rea <wizzyrea@gmail.com>

C4/Biblio.pm

index 6cb2a3a..11812c7 100644 (file)
@@ -2489,6 +2489,7 @@ sub TransformHtmlToMarc {
     my $record = MARC::Record->new();
     my $i      = 0;
     my @fields;
+    my ( $biblionumbertagfield, $biblionumbertagsubfield ) = &GetMarcFromKohaField( "biblio.biblionumber", '' );
 #FIXME This code assumes that the CGI params will be in the same order as the fields in the template; this is no absolute guarantee!
     while ( $params[$i] ) {    # browse all CGI params
         my $param    = $params[$i];
@@ -2496,7 +2497,6 @@ sub TransformHtmlToMarc {
 
         # if we are on biblionumber, store it in the MARC::Record (it may not be in the edited fields)
         if ( $param eq 'biblionumber' ) {
-            my ( $biblionumbertagfield, $biblionumbertagsubfield ) = &GetMarcFromKohaField( "biblio.biblionumber", '' );
             if ( $biblionumbertagfield < 10 ) {
                 $newfield = MARC::Field->new( $biblionumbertagfield, $cgi->param($param), );
             } else {
@@ -2513,6 +2513,7 @@ sub TransformHtmlToMarc {
 
             if ( $tag < 10 ) {                              # no code for theses fields
                                                             # in MARC editor, 000 contains the leader.
+                next if $tag == $biblionumbertagfield;
                 if ( $tag eq '000' ) {
                     # Force a fake leader even if not provided to avoid crashing
                     # during decoding MARC record containing UTF-8 characters
@@ -2532,6 +2533,7 @@ sub TransformHtmlToMarc {
                 # browse subfields for this tag (reason for _code_ match)
                 while(defined $params[$j] && $params[$j] =~ /_code_/) {
                     last unless defined $params[$j+1];
+                    $j += 2 and next if $tag == $biblionumbertagfield and $cgi->param($params[$j]) eq $biblionumbertagsubfield;
                     #if next param ne subfield, then it was probably empty
                     #try next param by incrementing j
                     if($params[$j+1]!~/_subfield_/) {$j++; next; }