From 5518bd65560676b3bafdf2c58c0d41afc54d9254 Mon Sep 17 00:00:00 2001 From: Arthur Suzuki Date: Tue, 21 Oct 2025 08:50:38 +0000 Subject: [PATCH] Bug 41060: Add a cataloguing plugin to check ISSN Test plan: - without patch login to Koha - edit a biblio and put a wrong ISSN in 022a (011a 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 ISSN in 022a (011a for unimarc). - when you leave the input field you should have a warning saying "invalid ISSN". - the input field should turn yellow - you can still save the biblio with a wrong issn, 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. --- cataloguing/value_builder/validate_issn.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_issn.pl diff --git a/cataloguing/value_builder/validate_issn.pl b/cataloguing/value_builder/validate_issn.pl new file mode 100755 index 0000000000..7bda38082b --- /dev/null +++ b/cataloguing/value_builder/validate_issn.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::ISSN qw( is_valid_checksum ); + +my $builder = sub { + my $params = shift; + my $id = $params->{id}; + + return qq| +|; +}; + +my $launcher = sub { + my $params = shift; + my $cgi = $params->{cgi}; + my $issn = $cgi->param('issn'); + + my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "cataloguing/value_builder/ajax.tt", + query => $cgi, + type => "intranet", + flagsrequired => { editcatalogue => '*' }, + } + ); + my $is_valid = is_valid_checksum($issn); + $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 eaa9e4c9fb..8dd4f60d41 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 @@ -4790,7 +4790,7 @@ tables: tab: 0 authorised_value: "" authtypecode: "" - value_builder: "" + value_builder: validate_issn.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 fa35a8285e..9dd2750468 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 @@ -3230,7 +3230,7 @@ tables: tab: 0 authorised_value: authtypecode: "" - value_builder: "" + value_builder: validate_issn.pl isurl: 0 hidden: 0 frameworkcode: "" -- 2.39.5