From 273fd9f679da758846bccbf84df4281000867742 Mon Sep 17 00:00:00 2001 From: Arthur Suzuki Date: Mon, 8 Sep 2025 15:14:47 +0000 Subject: [PATCH] Bug 29980: Add a cataloguing plugin to check ISBN Test plan: - without patch login to Koha - edit a biblio and put a wrong ISBN in 020a (010a for unimarc). - leave the input field (looses focus), no warning - apply patch and do "reset_all" to make a full re-install. - edit the biblio again and put an invalid ISBN in 020a (010a for unimarc). - when you leave the input field you should have a warning saying "invalid ISBN". - the input field should turn yellow - you can still save the biblio with a wrong isbn, it is just a warning. - if you apply the patch on an existing install, you must manually link the value builder to your existing frameworks to get it working. Signed-off-by: Johannes Reuter --- cataloguing/value_builder/validate_isbn.pl | 68 +++++++++++++++++++ .../mandatory/marc21_framework_DEFAULT.yml | 2 +- .../mandatory/unimarc_framework_DEFAULT.yml | 2 +- 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100755 cataloguing/value_builder/validate_isbn.pl diff --git a/cataloguing/value_builder/validate_isbn.pl b/cataloguing/value_builder/validate_isbn.pl new file mode 100755 index 0000000000..4955796149 --- /dev/null +++ b/cataloguing/value_builder/validate_isbn.pl @@ -0,0 +1,68 @@ +#!/usr/bin/perl + +# Copyright 2025 BibLibre SARL +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; +use CGI qw ( -utf8 ); + +use C4::Auth qw( get_template_and_user ); +use C4::Output qw( output_html_with_http_headers ); +use Business::ISBN qw( valid_isbn_checksum ); + +my $builder = sub { + my $params = shift; + my $id = $params->{id}; + + return qq| +|; +}; + +my $launcher = sub { + my $params = shift; + my $cgi = $params->{cgi}; + my $isbn = $cgi->param('isbn'); + + my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "cataloguing/value_builder/ajax.tt", + query => $cgi, + type => "intranet", + flagsrequired => { editcatalogue => '*' }, + } + ); + my $is_valid = valid_isbn_checksum($isbn); + $template->param( return => $is_valid ); + output_html_with_http_headers $cgi, $cookie, $template->output; +}; + +return { builder => $builder, launcher => $launcher }; diff --git a/installer/data/mysql/en/marcflavour/marc21/mandatory/marc21_framework_DEFAULT.yml b/installer/data/mysql/en/marcflavour/marc21/mandatory/marc21_framework_DEFAULT.yml index eac68e7b54..eaa9e4c9fb 100644 --- a/installer/data/mysql/en/marcflavour/marc21/mandatory/marc21_framework_DEFAULT.yml +++ b/installer/data/mysql/en/marcflavour/marc21/mandatory/marc21_framework_DEFAULT.yml @@ -4628,7 +4628,7 @@ tables: tab: 0 authorised_value: "" authtypecode: "" - value_builder: "" + value_builder: validate_isbn.pl isurl: 0 hidden: 0 frameworkcode: "" diff --git a/installer/data/mysql/en/marcflavour/unimarc/mandatory/unimarc_framework_DEFAULT.yml b/installer/data/mysql/en/marcflavour/unimarc/mandatory/unimarc_framework_DEFAULT.yml index e417e4453e..fa35a8285e 100644 --- a/installer/data/mysql/en/marcflavour/unimarc/mandatory/unimarc_framework_DEFAULT.yml +++ b/installer/data/mysql/en/marcflavour/unimarc/mandatory/unimarc_framework_DEFAULT.yml @@ -3158,7 +3158,7 @@ tables: tab: 0 authorised_value: authtypecode: "" - value_builder: "" + value_builder: validate_isbn.pl isurl: 0 hidden: 0 frameworkcode: "" -- 2.39.5