bug 3520: fix crash when adding or editing items

Fix the following crash when adding or editing an
item record in the staff interface:

Can't call method "append_fields" on an undefined value at
/usr/local/share/perl/5.10.0/MARC/File/SAX.pm line 92.
 at /usr/local/share/perl/5.10.0/MARC/File/SAX.pm line 92

This crash appears only if a version of MARC::File::XML
greater than 0.88 is installed, and was triggered by
C4::Biblio::TransformHtmlToXml() failing to create a valid
MARCXML blob, which must include a <record> element.

This patch also fixes the indicator values generated by
TransformHtmlToXml(), setting them to " " instead of
"" when no indicator value is supplied.

Signed-off-by: Galen Charlton <gmcharlt@gmail.com>
Signed-off-by: Henri-Damien LAURENT <henridamien.laurent@biblibre.com>
This commit is contained in:
Galen Charlton 2009-08-11 10:46:20 -04:00 committed by Henri-Damien LAURENT
parent 87ebf23ea9
commit e0f1beb40e
1 changed files with 13 additions and 14 deletions

View File

@ -1622,6 +1622,7 @@ $auth_type contains :
sub TransformHtmlToXml {
my ( $tags, $subfields, $values, $indicator, $ind_tag, $auth_type ) = @_;
my $xml = MARC::File::XML::header('UTF-8');
$xml .= "<record>\n";
$auth_type = C4::Context->preference('marcflavour') unless $auth_type;
MARC::File::XML->default_record_format($auth_type);
# in UNIMARC, field 100 contains the encoding
@ -1668,10 +1669,8 @@ sub TransformHtmlToXml {
warn "Indicator in @$tags[$i] is empty";
$ind2 = " ";
}
$xml .=
"<datafield tag=\"@$tags[$i]\" ind1=\"$ind1\" ind2=\"$ind2\">\n";
$xml .=
"<subfield code=\"@$subfields[$i]\">@$values[$i]</subfield>\n";
$xml .= "<datafield tag=\"@$tags[$i]\" ind1=\"$ind1\" ind2=\"$ind2\">\n";
$xml .= "<subfield code=\"@$subfields[$i]\">@$values[$i]</subfield>\n";
$first = 0;
}
else {
@ -1689,17 +1688,16 @@ sub TransformHtmlToXml {
# rest of the fixed fields
}
elsif ( @$tags[$i] < 10 ) {
$xml .=
"<controlfield tag=\"@$tags[$i]\">@$values[$i]</controlfield>\n";
$xml .= "<controlfield tag=\"@$tags[$i]\">@$values[$i]</controlfield>\n";
$first = 1;
}
else {
my $ind1 = substr( @$indicator[$j], 0, 1 );
my $ind2 = substr( @$indicator[$j], 1, 1 );
$xml .=
"<datafield tag=\"@$tags[$i]\" ind1=\"$ind1\" ind2=\"$ind2\">\n";
$xml .=
"<subfield code=\"@$subfields[$i]\">@$values[$i]</subfield>\n";
$ind1 = " " if !defined($ind2) or $ind2 eq "";
$ind2 = " " if !defined($ind2) or $ind2 eq "";
$xml .= "<datafield tag=\"@$tags[$i]\" ind1=\"$ind1\" ind2=\"$ind2\">\n";
$xml .= "<subfield code=\"@$subfields[$i]\">@$values[$i]</subfield>\n";
$first = 0;
}
}
@ -1712,12 +1710,12 @@ sub TransformHtmlToXml {
if ($first) {
my $ind1 = substr( @$indicator[$j], 0, 1 );
my $ind2 = substr( @$indicator[$j], 1, 1 );
$xml .=
"<datafield tag=\"@$tags[$i]\" ind1=\"$ind1\" ind2=\"$ind2\">\n";
$ind1 = " " if !defined($ind2) or $ind2 eq "";
$ind2 = " " if !defined($ind2) or $ind2 eq "";
$xml .= "<datafield tag=\"@$tags[$i]\" ind1=\"$ind1\" ind2=\"$ind2\">\n";
$first = 0;
}
$xml .=
"<subfield code=\"@$subfields[$i]\">@$values[$i]</subfield>\n";
$xml .= "<subfield code=\"@$subfields[$i]\">@$values[$i]</subfield>\n";
}
}
$prevtag = @$tags[$i];
@ -1735,6 +1733,7 @@ sub TransformHtmlToXml {
$xml .= "<subfield code=\"a\">$string</subfield>\n";
$xml .= "</datafield>\n";
}
$xml .= "</record>\n";
$xml .= MARC::File::XML::footer();
return $xml;
}