From 479b1fa7f38eac465dd04cccf1be639f4e310685 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 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 --- C4/Biblio.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 0911e0f..76920a1 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -2496,6 +2496,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]; @@ -2503,7 +2504,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 { @@ -2520,6 +2520,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 @@ -2539,6 +2540,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.1.0