Bug 15572: Follow-up to fix error on authority creation
authorFrédéric Demians <f.demians@tamil.fr>
Tue, 12 Jan 2016 10:53:11 +0000 (11:53 +0100)
committerJesse Weaver <jweaver@bywatersolutions.com>
Tue, 19 Jan 2016 21:59:28 +0000 (14:59 -0700)
Bug 6657 modified the way C4::Biblio::TransformHtmlToMarc operates in order to
solve an issue occuring during biblio record cataloguing. But this function is
also used by authorities cataloguing, and the code in this case is irrelevante.
This followup allows to distinguish for which kind of record
TransformHtmlToMarc is called: biblio/authority.

A bug appears in authority creation without this patch in some circunstances:
when authid is linked to 001 field.

Signed-off-by: Hector Castro <hector.hecaxmmx@gmail.com>
Tested with a new authority record

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Jesse Weaver <jweaver@bywatersolutions.com>

C4/Biblio.pm
authorities/authorities.pl
authorities/merge.pl
cataloguing/addbiblio.pl
cataloguing/merge.pl

index 5ecae00..ef263e4 100644 (file)
@@ -2496,7 +2496,7 @@ sub _default_ind_to_space {
 =cut
 
 sub TransformHtmlToMarc {
-    my $cgi    = shift;
+    my ($cgi, $isbiblio) = @_;
 
     my @params = $cgi->param();
 
@@ -2516,7 +2516,9 @@ sub TransformHtmlToMarc {
     # creating a new record
     my $record = MARC::Record->new();
     my @fields;
-    my ( $biblionumbertagfield, $biblionumbertagsubfield ) = &GetMarcFromKohaField( "biblio.biblionumber", '' );
+    my ($biblionumbertagfield, $biblionumbertagsubfield) = (-1, -1);
+    ($biblionumbertagfield, $biblionumbertagsubfield) =
+        &GetMarcFromKohaField( "biblio.biblionumber", '' ) if $isbiblio;
 #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!
     for (my $i = 0; $params[$i]; $i++ ) {    # browse all CGI params
         my $param    = $params[$i];
@@ -2540,8 +2542,10 @@ 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' ) {
+                if ( $tag == $biblionumbertagfield ) {
+                    # We do nothing and let $i be incremented
+                }
+                elsif ( $tag eq '000' ) {
                     # Force a fake leader even if not provided to avoid crashing
                     # during decoding MARC record containing UTF-8 characters
                     $record->leader(
@@ -2560,7 +2564,9 @@ 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;
+                    $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; }
index 2eba66e..ca3b0d3 100755 (executable)
@@ -612,7 +612,7 @@ if ($op eq "add") {
     # build indicator hash.
     my @ind_tag = $input->param('ind_tag');
     my @indicator = $input->param('indicator');
-    my $record = TransformHtmlToMarc($input);
+    my $record = TransformHtmlToMarc($input, 0);
 
     my ($duplicateauthid,$duplicateauthvalue);
      ($duplicateauthid,$duplicateauthvalue) = FindDuplicateAuthority($record,$authtypecode) if ($op eq "add") && (!$is_a_modif);
index f34e55c..cfc1ca5 100755 (executable)
@@ -49,7 +49,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
 if ($merge) {
 
     # Creating a new record from the html code
-    my $record   = TransformHtmlToMarc($input);
+    my $record   = TransformHtmlToMarc($input, 0);
     my $recordid1   = $input->param('recordid1');
     my $recordid2   = $input->param('recordid2');
     my $typecode = $input->param('frameworkcode');
index b6805c9..e34557c 100755 (executable)
@@ -834,7 +834,7 @@ if ( $op eq "addbiblio" ) {
     );
     # getting html input
     my @params = $input->param();
-    $record = TransformHtmlToMarc( $input );
+    $record = TransformHtmlToMarc( $input, 1 );
     # check for a duplicate
     my ( $duplicatebiblionumber, $duplicatetitle );
     if ( !$is_a_modif ) {
@@ -948,7 +948,7 @@ elsif ( $op eq "delete" ) {
     }
 
     if($changed_framework eq "changed"){
-        $record = TransformHtmlToMarc( $input );
+        $record = TransformHtmlToMarc( $input, 1 );
     }
     elsif( $record ne -1 ) {
 #FIXME: it's kind of silly to go from MARC::Record to MARC::File::XML and then back again just to fix the encoding
index 490eaa1..a882daa 100755 (executable)
@@ -55,7 +55,7 @@ if ($merge) {
     my $dbh = C4::Context->dbh;
 
     # Creating a new record from the html code
-    my $record       = TransformHtmlToMarc( $input );
+    my $record       = TransformHtmlToMarc( $input, 1 );
     my $ref_biblionumber = $input->param('ref_biblionumber');
     @biblionumbers = grep { $_ != $ref_biblionumber } @biblionumbers;