Bug 5683 follow-up: calls to ModBiblio can still fail
Because C4::Charset directly manipulates the MARC::Record object, bad data has
to be cleaned in ModBiblio before the call into C4::Charset. The corrupted
records can also break the Zebra index. After this fix has been applied, it
would probably be a good idea to run the misc/maintenance/touch_all_biblios.pl
script to ensure that this problem has been cleared up.
Signed-off-by: Jared Camins-Esakov <jcamins@bywatersolutions.com>
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
(cherry picked from commit 5bbfb94f43)
Signed-off-by: Chris Nighswonger <chris.nighswonger@gmail.com>
This commit is contained in:
parent
905d24a9e0
commit
fae6bd6892
18
C4/Biblio.pm
18
C4/Biblio.pm
|
|
@ -299,6 +299,16 @@ sub ModBiblio {
|
|||
logaction( "CATALOGUING", "MODIFY", $biblionumber, "BEFORE=>" . $newrecord->as_formatted );
|
||||
}
|
||||
|
||||
# Cleaning up invalid fields must be done early or SetUTF8Flag is liable to
|
||||
# throw an exception which probably won't be handled.
|
||||
foreach my $field ($record->fields()) {
|
||||
if (! $field->is_control_field()) {
|
||||
if (scalar($field->subfields()) == 0 || (scalar($field->subfields()) == 1 && $field->subfield('9'))) {
|
||||
$record->delete_field($field);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SetUTF8Flag($record);
|
||||
my $dbh = C4::Context->dbh;
|
||||
|
||||
|
|
@ -306,14 +316,6 @@ sub ModBiblio {
|
|||
|
||||
_strip_item_fields($record, $frameworkcode);
|
||||
|
||||
foreach my $field ($record->fields()) {
|
||||
if (! $field->is_control_field()) {
|
||||
if (scalar($field->subfields()) == 0) {
|
||||
$record->delete_fields($field);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# update biblionumber and biblioitemnumber in MARC
|
||||
# FIXME - this is assuming a 1 to 1 relationship between
|
||||
# biblios and biblioitems
|
||||
|
|
|
|||
Loading…
Reference in New Issue