From c7a35b210e2cc6e7817d42464f68c67d67531b2a 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 Signed-off-by: Tomas Cohen Arazi (cherry picked from commit 66d519ae41756c38ecc6baef622c30ef596b599c) Signed-off-by: Fridolin Somers --- 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 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 %]
-- 2.39.5