Bugzilla – Attachment 159811 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), 8.12 KB, created by
Martin Renvoize (ashimema)
on 2023-12-13 16:19:53 UTC
(
hide
)
Description:
Bug 35104: Catch the failure on new and edited records
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2023-12-13 16:19:53 UTC
Size:
8.12 KB
patch
obsolete
>From 7403cb11716865ac7353318d30fdf7fe9c37e8bd 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. >--- > C4/Biblio.pm | 10 ++- > cataloguing/addbiblio.pl | 143 +++++++++++++++++++++++---------------- > 2 files changed, 91 insertions(+), 62 deletions(-) > >diff --git a/C4/Biblio.pm b/C4/Biblio.pm >index 4b3c5582fdf..11a78678dfb 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 e84c542092b..6a7c70df2e8 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( >@@ -674,46 +676,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")){ >- 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 >- ); >- exit; >- } >- else { >- print $input->redirect( >- "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode&searchid=$searchid" >- ); >- exit; >- } >+ ); >+ } 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 >+ ); >+ exit; >+ } >+ else { >+ print $input->redirect( >+ "/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}) { >@@ -726,28 +738,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.43.0
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