From cc706189483428af24d314b0227c94485fdf62e3 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! Signed-off-by: Lucas Gass Signed-off-by: Kelly McElligott Signed-off-by: Martin Renvoize --- 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 49f6295c367..8c562010f0f 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 23a2fa45a3e..7710e3f5c8c 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 7d7c392ece1..f295787aa0c 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.41.0