From a24829939e01d6027f725ba0e3ef71019f961ab3 Mon Sep 17 00:00:00 2001 From: David Cook Date: Thu, 8 Aug 2024 01:19:46 +0000 Subject: [PATCH] Bug 34346: Show error message instead of 500 for duplicate tags This change shows a user-friendly error message instead of a 500 error if adding a duplicate MARC tag to a MARC bibliographic framework. Test plan: 0. Add patch and koha-plack --reload kohadev 1. Go to http://localhost:8081/cgi-bin/koha/admin/marctagstructure.pl?searchfield=264&frameworkcode= 2. Click "New tag" 3. Enter "264" in "Tag:" field 4. Click "Save changes" 5. See error message on screen (instead of 500 error) Signed-off-by: Owen Leonard Signed-off-by: Marcel de Rooy Bug 34346: Tidy Signed-off-by: Owen Leonard Signed-off-by: Marcel de Rooy Slightly adjusted error message and added punctuation. Signed-off-by: Katrin Fischer --- admin/marctagstructure.pl | 60 +++++++++++++------ .../prog/en/includes/blocking_errors.inc | 4 +- 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/admin/marctagstructure.pl b/admin/marctagstructure.pl index 96eeedfef2..1e89615e0d 100755 --- a/admin/marctagstructure.pl +++ b/admin/marctagstructure.pl @@ -28,6 +28,7 @@ use C4::Context; use Koha::Caches; use Koha::AuthorisedValues; use Koha::BiblioFrameworks; +use Koha::Database; # retrieve parameters my $input = CGI->new; @@ -120,6 +121,7 @@ if ($op eq 'add_form') { my $authorised_value = $input->param('authorised_value'); my $ind1_defaultvalue = $input->param('ind1_defaultvalue'); my $ind2_defaultvalue = $input->param('ind2_defaultvalue'); + my $error; if ($input->param('modif')) { $sth = $dbh->prepare( "UPDATE marc_tag_structure SET liblibrarian=? ,libopac=? ,repeatable=? ,mandatory=? ,important=? ,authorised_value=?, ind1_defaultvalue=?, ind2_defaultvalue=? WHERE frameworkcode=? AND tagfield=?" @@ -136,26 +138,40 @@ if ($op eq 'add_form') { $tagfield ); } else { - $sth = $dbh->prepare( - "INSERT INTO marc_tag_structure (tagfield,liblibrarian,libopac,repeatable,mandatory,important,authorised_value,ind1_defaultvalue,ind2_defaultvalue,frameworkcode) values (?,?,?,?,?,?,?,?,?,?)" - ); - $sth->execute($tagfield, - $liblibrarian, - $libopac, - $repeatable, - $mandatory, - $important, - $authorised_value, - $ind1_defaultvalue, - $ind2_defaultvalue, - $frameworkcode - ); + my $schema = Koha::Database->new()->schema(); + my $rs = $schema->resultset('MarcTagStructure'); + my $field = $rs->find( { tagfield => $tagfield, frameworkcode => $frameworkcode } ); + if ( !$field ) { + $sth = $dbh->prepare( + "INSERT INTO marc_tag_structure (tagfield,liblibrarian,libopac,repeatable,mandatory,important,authorised_value,ind1_defaultvalue,ind2_defaultvalue,frameworkcode) values (?,?,?,?,?,?,?,?,?,?)" + ); + $sth->execute( + $tagfield, + $liblibrarian, + $libopac, + $repeatable, + $mandatory, + $important, + $authorised_value, + $ind1_defaultvalue, + $ind2_defaultvalue, + $frameworkcode + ); + } else { + $error = 'duplicate_tagfield'; + } } - $cache->clear_from_cache("MarcStructure-0-$frameworkcode"); - $cache->clear_from_cache("MarcStructure-1-$frameworkcode"); - $cache->clear_from_cache("MarcSubfieldStructure-$frameworkcode"); - $cache->clear_from_cache("MarcCodedFields-$frameworkcode"); - print $input->redirect("/cgi-bin/koha/admin/marctagstructure.pl?searchfield=$tagfield&frameworkcode=$frameworkcode"); + if ( !$error ) { + $cache->clear_from_cache("MarcStructure-0-$frameworkcode"); + $cache->clear_from_cache("MarcStructure-1-$frameworkcode"); + $cache->clear_from_cache("MarcSubfieldStructure-$frameworkcode"); + $cache->clear_from_cache("MarcCodedFields-$frameworkcode"); + } + my $redirect_url = "/cgi-bin/koha/admin/marctagstructure.pl?searchfield=$tagfield&frameworkcode=$frameworkcode"; + if ($error) { + $redirect_url .= "&error=$error"; + } + print $input->redirect($redirect_url); exit; # END $OP eq ADD_VALIDATE ################## DELETE_CONFIRM ################################## @@ -200,6 +216,12 @@ if ($op eq 'add_form') { ################## DEFAULT ################################## } else { # DEFAULT + my $error_code = $input->param('error'); + if ($error_code){ + if ($error_code eq 'duplicate_tagfield'){ + $template->param('blocking_error' => $error_code); + } + } # here, $op can be unset or set to "cud-framework_create_confirm". if ($searchfield ne '') { $template->param(searchfield => $searchfield); diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/blocking_errors.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/blocking_errors.inc index a4fd22249e..20376d1ed8 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/blocking_errors.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/blocking_errors.inc @@ -22,9 +22,11 @@ [% CASE 'budget_is_locked' %]
The budget is locked, fund creation is not possible.
[% CASE 'missing_es_modules' %] -
Necessary Elasticsearch packages are not installed on your server. Please contact your server admin if you wish to configure Elasticsearch
+
Necessary Elasticsearch packages are not installed on your server. Please contact your server admin if you wish to configure Elasticsearch.
[% CASE 'insufficient_permission' %]
You do not have sufficient permission to continue.
+ [% CASE 'duplicate_tagfield' %] +
MARC field not added to MARC bibliographic framework. MARC tag already exists in framework.
[% CASE %]
[% blocking_error | html %]
[% END %] -- 2.39.5