[Koha-patches] [Signed Off] [PATCH] Bug 5683 follow-up: calls to ModBiblio can still fail
Chris Cormack
chrisc at catalyst.net.nz
Fri May 13 04:10:49 CEST 2011
From: Jared Camins-Esakov <jcamins at bywatersolutions.com>
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 at bywatersolutions.com>
Signed-off-by: Chris Cormack <chrisc at catalyst.net.nz>
---
C4/Biblio.pm | 18 ++++++++++--------
1 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index c9590c2..016b53d 100755
--- a/C4/Biblio.pm
+++ b/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
--
1.7.4.1
More information about the Koha-patches
mailing list