diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 49f6295c36..8c562010f0 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -371,7 +371,16 @@ sub ModBiblio { if ( C4::Context->preference("CataloguingLog") ) { my $biblio = Koha::Biblios->find($biblionumber); - logaction( "CATALOGUING", "MODIFY", $biblionumber, "biblio BEFORE=>" . $biblio->metadata->record->as_formatted ); + my $record; + my $decoding_error = ""; + eval { $record = $biblio->metadata->record }; + if( $@ ){ + my $exception = $@; + $exception->rethrow unless ( $exception->isa('Koha::Exceptions::Metadata::Invalid') ); + $decoding_error = "There was an error with this bibliographic record: " . $exception; + $record = $biblio->metadata->record_strip_nonxml; + } + logaction( "CATALOGUING", "MODIFY", $biblionumber, "biblio $decoding_error BEFORE=>" . $record->as_formatted ); } if ( !$options->{disable_autolink} && C4::Context->preference('AutoLinkBiblios') ) { diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index 23a2fa45a3..7710e3f5c8 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -577,7 +577,13 @@ my ( ); if ( $biblio && !$breedingid ) { - $record = $biblio->metadata->record; + eval { $record = $biblio->metadata->record }; + if( $@ ){ + my $exception = $@; + $exception->rethrow unless ( $exception->isa('Koha::Exceptions::Metadata::Invalid') ); + $record = $biblio->metadata->record_strip_nonxml; + $template->param( INVALID_METADATA => $exception ); + } } if ($breedingid) { ( $record, $encoding ) = MARCfindbreeding( $breedingid ) ; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt index 94349fc603..aa22f89869 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt @@ -825,6 +825,12 @@ $(document).ready(function(){ [% END #/ WRAPPER sub-header.inc %]
+ [% IF ( INVALID_METADATA ) %] +
+

This record had encoding issues, non-xml characters have been stripped in order to allow editing. Please be cautious when saving that some data may have been removed from the record.
Decoding error:

+ [% INVALID_METADATA | html %] +
+ [% END %]