Bugzilla – Attachment 166431 Details for
Bug 35104
We should warn when attempting to save MARC records that contain characters invalid in XML
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 35104: Catch the failure on new and edited records
Bug-35104-Catch-the-failure-on-new-and-edited-reco.patch (text/plain), 7.98 KB, created by
Baptiste Bayche
on 2024-05-08 16:42:52 UTC
(
hide
)
Description:
Bug 35104: Catch the failure on new and edited records
Filename:
MIME Type:
Creator:
Baptiste Bayche
Created:
2024-05-08 16:42:52 UTC
Size:
7.98 KB
patch
obsolete
>From f3d1010de059cec8056255b26feceb612d848a85 Mon Sep 17 00:00:00 2001 >From: Martin Renvoize <martin.renvoize@ptfs-europe.com> >Date: Wed, 6 Dec 2023 15:01:01 +0000 >Subject: [PATCH] Bug 35104: Catch the failure on new and edited records > >We now catch the error and display it to the end user so they can fix >the issues before attempting to save again. > >Signed-off-by: baptiste <baptiste.bayche@inlibro.com> >--- > C4/Biblio.pm | 10 +++- > cataloguing/addbiblio.pl | 123 +++++++++++++++++++++++---------------- > 2 files changed, 81 insertions(+), 52 deletions(-) > >diff --git a/C4/Biblio.pm b/C4/Biblio.pm >index 0d6feb8aed..eb79c397a5 100644 >--- a/C4/Biblio.pm >+++ b/C4/Biblio.pm >@@ -306,8 +306,14 @@ sub AddBiblio { > $indexer->index_records( $biblionumber, "specialUpdate", "biblioserver" ); > } > } catch { >- warn $_; >- ( $biblionumber, $biblioitemnumber ) = ( undef, undef ); >+ my $error = $_; >+ if ( ref($error) eq 'Koha::Exceptions::Metadata::Invalid' ) { >+ ( $biblionumber, $biblioitemnumber ) = ( undef, undef ); >+ $error->rethrow; >+ } else { >+ warn $error; >+ ( $biblionumber, $biblioitemnumber ) = ( undef, undef ); >+ } > }; > return ( $biblionumber, $biblioitemnumber ); > } >diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl >index a11711afd3..c8dc30ea90 100755 >--- a/cataloguing/addbiblio.pl >+++ b/cataloguing/addbiblio.pl >@@ -22,6 +22,8 @@ > use Modern::Perl; > > use CGI; >+use Try::Tiny; >+ > use C4::Output qw( output_html_with_http_headers ); > use C4::Auth qw( get_template_and_user haspermission ); > use C4::Biblio qw( >@@ -665,46 +667,56 @@ if ( $op eq "addbiblio" ) { > # it is not a duplicate (determined either by Koha itself or by user checking it's not a duplicate) > if ( !$duplicatebiblionumber or $confirm_not_duplicate ) { > my $oldbibitemnum; >- if ( $is_a_modif ) { >- my $member = Koha::Patrons->find($loggedinuser); >- ModBiblio( >- $record, >- $biblionumber, >- $frameworkcode, >- { >- overlay_context => { >- source => $z3950 ? 'z3950' : 'intranet', >- categorycode => $member->categorycode, >- userid => $member->userid >+ my $encode_error = try { >+ if ($is_a_modif) { >+ my $member = Koha::Patrons->find($loggedinuser); >+ ModBiblio( >+ $record, >+ $biblionumber, >+ $frameworkcode, >+ { >+ overlay_context => { >+ source => $z3950 ? 'z3950' : 'intranet', >+ categorycode => $member->categorycode, >+ userid => $member->userid >+ } > } >- } >- ); >- } >- else { >- ( $biblionumber, $oldbibitemnum ) = AddBiblio( $record, $frameworkcode ); >- } >- if ($redirect eq "items" || ($mode ne "popup" && !$is_a_modif && $redirect ne "view" && $redirect ne "just_save")){ >+ ); >+ } else { >+ ( $biblionumber, $oldbibitemnum ) = AddBiblio( $record, $frameworkcode ); >+ } >+ return 0; >+ } catch { >+ my $exception = $_; >+ if ( ref($exception) eq 'Koha::Exceptions::Metadata::Invalid' ) { >+ $template->param( INVALID_METADATA => $exception ); >+ } else { >+ $exception->rethrow; >+ } >+ return 1; >+ }; >+ if (!$encode_error && ($redirect eq "items" || ($mode ne "popup" && !$is_a_modif && $redirect ne "view" && $redirect ne "just_save"))){ > if ($frameworkcode eq 'FA'){ > print $input->redirect( >- '/cgi-bin/koha/cataloguing/additem.pl?' >- .'biblionumber='.$biblionumber >- .'&frameworkcode='.$frameworkcode >- .'&circborrowernumber='.$fa_circborrowernumber >- .'&branch='.$fa_branch >- .'&barcode='.uri_escape_utf8($fa_barcode) >- .'&stickyduedate='.$fa_stickyduedate >- .'&duedatespec='.$fa_duedatespec >+ '/cgi-bin/koha/cataloguing/additem.pl?' >+ .'biblionumber='.$biblionumber >+ .'&frameworkcode='.$frameworkcode >+ .'&circborrowernumber='.$fa_circborrowernumber >+ .'&branch='.$fa_branch >+ .'&barcode='.uri_escape_utf8($fa_barcode) >+ .'&stickyduedate='.$fa_stickyduedate >+ .'&duedatespec='.$fa_duedatespec > ); > exit; > } > else { > print $input->redirect( >- "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode&searchid=$searchid" >+ "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode&searchid=$searchid" > ); > exit; > } > } >- elsif(($is_a_modif || $redirect eq "view") && $redirect ne "just_save"){ >+ elsif(!$encode_error && (($is_a_modif || $redirect eq "view") && $redirect ne "just_save")){ > my $defaultview = C4::Context->preference('IntranetBiblioDefaultView'); > my $views = { C4::Search::enabled_staff_search_views }; > if ($defaultview eq 'isbd' && $views->{can_view_ISBD}) { >@@ -717,28 +729,39 @@ if ( $op eq "addbiblio" ) { > print $input->redirect("/cgi-bin/koha/catalogue/detail.pl?biblionumber=$biblionumber&searchid=$searchid"); > } > exit; >- >- } >- elsif ($redirect eq "just_save"){ >- my $tab = $input->param('current_tab'); >- print $input->redirect("/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=$biblionumber&framework=$frameworkcode&tab=$tab&searchid=$searchid"); >- } >- else { >- $template->param( >- biblionumber => $biblionumber, >- done =>1, >- popup =>1 >- ); >- if ( $record ne '-1' ) { >- my $title = C4::Context->preference('marcflavour') eq "UNIMARC" ? $record->subfield('200', 'a') : $record->title; >- $template->param( title => $title ); >- } >- $template->param( >- popup => $mode, >- itemtype => $frameworkcode, >- ); >- output_html_with_http_headers $input, $cookie, $template->output; >- exit; >+ } >+ elsif (!$encode_error && ($redirect eq "just_save")){ >+ my $tab = $input->param('current_tab'); >+ print $input->redirect("/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=$biblionumber&framework=$frameworkcode&tab=$tab&searchid=$searchid"); >+ } >+ elsif ($encode_error) { >+ build_tabs ($template, $record, $dbh,$encoding,$input); >+ $template->param( >+ biblionumber => $biblionumber, >+ popup => $mode, >+ frameworkcode => $frameworkcode, >+ itemtype => $frameworkcode, >+ borrowernumber => $loggedinuser, >+ tab => scalar $input->param('tab') >+ ); >+ output_html_with_http_headers $input, $cookie, $template->output; >+ exit; >+ } else { >+ $template->param( >+ biblionumber => $biblionumber, >+ done =>1, >+ popup =>1 >+ ); >+ if ( $record ne '-1' ) { >+ my $title = C4::Context->preference('marcflavour') eq "UNIMARC" ? $record->subfield('200', 'a') : $record->title; >+ $template->param( title => $title ); >+ } >+ $template->param( >+ popup => $mode, >+ itemtype => $frameworkcode, >+ ); >+ output_html_with_http_headers $input, $cookie, $template->output; >+ exit; > } > } else { > # it may be a duplicate, warn the user and do nothing >-- >2.34.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 35104
:
157625
|
157627
|
157628
|
157642
|
159615
|
159620
|
159621
|
159630
|
159810
|
159811
|
159812
|
159813
|
166431
|
173145
|
173146