From d43b05f158f85524051be8e6a72fc634483432d8 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Wed, 14 Jun 2023 19:05:14 +0000 Subject: [PATCH] Bug 34014: Allow staff to edit degraded records This patch adds an eval to the call for the record form metadata If there is an error we catch it, display it, and attempt to strip bad characters from the record To test: 1 - In koha testing docker attempt to view record 369 in the staff interface 2 - You see a warning about degraded view 3 - Attempt to edit the record 4 - Internal server error 5 - Apply patch, restart all 6 - Reload the editor 7 - Record successfully loads! 8 - You have a warning about encoding issues! 9 - Save the record 10 - No more warning! 11 - Edit again, no more warning! --- C4/Biblio.pm | 11 ++++++++++- cataloguing/addbiblio.pl | 8 +++++++- .../prog/en/modules/cataloguing/addbiblio.tt | 6 ++++++ 3 files changed, 23 insertions(+), 2 deletions(-) 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 7d7c392ece..f295787aa0 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt @@ -838,6 +838,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 %]
-- 2.30.2