From c32edbd6e1d25583b8bf040e472727b0058a87d6 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 17 Sep 2015 14:31:55 +0100 Subject: [PATCH] Bug 6657: Prevent biblionumber to be duplicated MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Works as described, aldo removes duplicate values. No errors Signed-off-by: Katrin Fischer Signed-off-by: Tomas Cohen Arazi (cherry picked from commit 9ae556a21243ecae669bda2c5f42a67769ae9d78) Signed-off-by: Frédéric Demians --- C4/Biblio.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 6b02d8d7dd..458c119c18 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -2490,6 +2490,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]; @@ -2497,7 +2498,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 { @@ -2514,6 +2514,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 @@ -2533,6 +2534,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; } -- 2.39.5