Browse Source

Bug 15572: Follow-up to fix error on authority creation

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>
new_12478_elasticsearch
Frédéric Demians 8 years ago
committed by Jesse Weaver
parent
commit
2ca9bd5dc2
  1. 16
      C4/Biblio.pm
  2. 2
      authorities/authorities.pl
  3. 2
      authorities/merge.pl
  4. 4
      cataloguing/addbiblio.pl
  5. 2
      cataloguing/merge.pl

16
C4/Biblio.pm

@ -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; }

2
authorities/authorities.pl

@ -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);

2
authorities/merge.pl

@ -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');

4
cataloguing/addbiblio.pl

@ -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

2
cataloguing/merge.pl

@ -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;

Loading…
Cancel
Save