From 9309dedb53dd73b7e129db2acde37d2cf55aff51 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 9 Jun 2022 11:03:27 +0200 Subject: [PATCH] Bug 30578: Remove circ/ysearch.pl in favor of the /patrons REST API route This patch removes the circ/ysearch.pl script used by the jQuery autocomplete widget. We can now use the /api/v1/patrons endpoint to retrieve the patrons and generate the patron result list. Prior to this patch the different occurrences were defining the style and the list of patron's attributes to display for each option (name, date of birth, age, address, etc.). Now they are all displaying the same information. To acchieve this we had to: * Make js-date-format.inc and js-patron-get-age.inc available from js_includes.inc and so available from everywhere, which is certainly a good move. We could discuss why this code is in include file instead of JS files however. * Remove the .ajaxSetup call in tags-review.js to reduce its scope: an underscore parameter was added to the REST API query (?) A better solution would have been to extend the existing widget (https://learn.jquery.com/jquery-ui/widget-factory/extending-widgets/) but I didn't manage to do it, and I feel like there is a bug in jQuery autocomplete. The "source" was not taken into account. We could think about replacing the jQuery autocomplete with something else, but that's outside the scope of this bug. Test plan: Search for patrons and confirm the autocomplete works and that the "select" action works as before (either a redirect or select the patrons) on the different views: * Place a hold * Search for tags (form on the left) * In the header, "Check out" and "Search patrons" * Add instructors to course reserves * View logs (the "librarian" input) Signed-off-by: Owen Leonard Signed-off-by: Martin Renvoize Signed-off-by: Tomas Cohen Arazi --- api/v1/swagger/definitions/patron.yaml | 5 + api/v1/swagger/paths/patrons.yaml | 1 + circ/ysearch.pl | 103 ----------------- .../intranet-tmpl/js/autocomplete/patrons.js | 2 +- .../prog/en/includes/js_includes.inc | 109 ++---------------- .../prog/en/includes/patron-search.inc | 1 - .../prog/en/modules/circ/circulation.tt | 1 - .../prog/en/modules/course_reserves/course.tt | 31 +---- .../prog/en/modules/members/moremember.tt | 1 - .../prog/en/modules/pos/register.tt | 1 - .../prog/en/modules/reserve/request.tt | 31 +---- .../prog/en/modules/tools/quotes.tt | 1 - .../prog/js/pages/tags-review.js | 32 ++--- .../prog/js/patron-autocomplete.js | 109 ++++++++++++++++++ koha-tmpl/intranet-tmpl/prog/js/viewlog.js | 29 +---- 15 files changed, 144 insertions(+), 313 deletions(-) delete mode 100755 circ/ysearch.pl create mode 100644 koha-tmpl/intranet-tmpl/prog/js/patron-autocomplete.js diff --git a/api/v1/swagger/definitions/patron.yaml b/api/v1/swagger/definitions/patron.yaml index 27c1e5dd5b..b0af742717 100644 --- a/api/v1/swagger/definitions/patron.yaml +++ b/api/v1/swagger/definitions/patron.yaml @@ -364,6 +364,11 @@ properties: - number - "null" description: Balance of the patron's account + library: + type: + - object + - "null" + description: Library of the patron additionalProperties: false required: - surname diff --git a/api/v1/swagger/paths/patrons.yaml b/api/v1/swagger/paths/patrons.yaml index 878f4b6105..1100a9fba9 100644 --- a/api/v1/swagger/paths/patrons.yaml +++ b/api/v1/swagger/paths/patrons.yaml @@ -359,6 +359,7 @@ - checkouts+count - overdues+count - account_balance + - library collectionFormat: csv responses: "200": diff --git a/circ/ysearch.pl b/circ/ysearch.pl deleted file mode 100755 index 2e2729778e..0000000000 --- a/circ/ysearch.pl +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/perl - -# This software is placed under the gnu General Public License, v2 (http://www.gnu.org/licenses/gpl.html) - -# Copyright 2007 Tamil s.a.r.l. -# Parts copyright 2010-2012 Athens County Public Libraries -# -# 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 . - -=head1 ysearch.pl - -=cut - -use Modern::Perl; -use CGI qw ( -utf8 ); -use C4::Context; -use C4::Auth qw( check_cookie_auth ); -use Koha::Patrons; -use Koha::DateUtils qw( format_sqldatetime ); -use Koha::Libraries; - -use JSON qw( to_json ); - -my $input = CGI->new; -my $query = $input->param('term'); - -binmode STDOUT, ":encoding(UTF-8)"; -print $input->header( -type => 'text/plain', -charset => 'UTF-8' ); - -my ( $auth_status ) = check_cookie_auth( $input->cookie('CGISESSID'), { catalogue => '1' } ); -if ( $auth_status ne "ok" ) { - exit 0; -} - -my $limit_on_branch; -if ( C4::Context->preference("IndependentBranches") - && C4::Context->userenv - && !C4::Context->IsSuperLibrarian() - && C4::Context->userenv->{'branch'} ) { - $limit_on_branch = 1; -} - -my @parts = split( /,\s|\s/, $query ); -my @params; -foreach my $p (@parts) { - push( - @params, - -or => [ - surname => { -like => "%$p%" }, - firstname => { -like => "%$p%" }, - middle_name => { -like => "%$p%" }, - cardnumber => { -like => "$p%" }, - ] - ); -} - -push( @params, { 'me.branchcode' => C4::Context->userenv->{branch} } ) if $limit_on_branch; - -my $borrowers_rs = Koha::Patrons->search_limited( - { -and => \@params }, - { - # Get the first 10 results - page => 1, - rows => 10, - order_by => [ 'surname', 'firstname', 'middle_name' ], - prefetch => 'branchcode', - }, -); - -my @borrowers; -while ( my $b = $borrowers_rs->next ) { - push @borrowers, - { - borrowernumber => $b->borrowernumber, - surname => $b->surname // '', - firstname => $b->firstname // '', - middle_name => $b->middle_name // '', - cardnumber => $b->cardnumber // '', - dateofbirth => format_sqldatetime( $b->dateofbirth, undef, undef, 1 ) // '', - age => $b->get_age // '', - address => $b->address // '', - city => $b->city // '', - zipcode => $b->zipcode // '', - country => $b->country // '', - branchcode => $b->branchcode // '', - branchname => $b->library->branchname // '', - }; -} - -print to_json( \@borrowers ); diff --git a/koha-tmpl/intranet-tmpl/js/autocomplete/patrons.js b/koha-tmpl/intranet-tmpl/js/autocomplete/patrons.js index ba59783e82..87c65eadc1 100644 --- a/koha-tmpl/intranet-tmpl/js/autocomplete/patrons.js +++ b/koha-tmpl/intranet-tmpl/js/autocomplete/patrons.js @@ -5,7 +5,7 @@ function patron_autocomplete(params) { var field_to_retrieve = params.field_to_retrieve || 'cardnumber'; $( input_autocomplete ).autocomplete({ - source: "/cgi-bin/koha/circ/ysearch.pl", + source: "/api/v1/patrons", minLength: 3, select: function( event, ui ) { var field = ui.item.cardnumber; diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/js_includes.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/js_includes.inc index cc3cbb713a..22c0de8616 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/js_includes.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/js_includes.inc @@ -26,6 +26,9 @@ [% Asset.js("lib/jquery/plugins/jquery.validate.min.js") | $raw %] [% Asset.js("js/staff-global.js") | $raw %] +[% INCLUDE 'js-date-format.inc' %] +[% INCLUDE 'js-patron-get-age.inc' %] +[% Asset.js("js/patron-autocomplete.js") | $raw %] [% INCLUDE 'validator-strings.inc' %] [% IF ( IntranetUserJS ) %] @@ -65,112 +68,20 @@ [% END %] -[% IF ( CAN_user_circulate_circulate_remaining_permissions ) %] - [% IF ( PatronAutoComplete ) %] - - [% END %] -[% END %] [% IF ( PatronAutoComplete ) %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc index 73ad418930..52f9da0105 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc @@ -236,7 +236,6 @@ [% INCLUDE 'datatables.inc' %] - [% INCLUDE 'js-date-format.inc' %] [% INCLUDE 'js-patron-get-age.inc' %] [% INCLUDE 'js-patron-format.inc' %] [% INCLUDE 'js-patron-format-address.inc' %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt index 1a3be7a6d2..f01738f4f7 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -1029,7 +1029,6 @@ [% INCLUDE 'columns_settings.inc' %] [% INCLUDE 'select2.inc' %] [% Asset.js("lib/jquery/plugins/rowGroup/dataTables.rowGroup.min.js") | $raw %] - [% INCLUDE 'js-date-format.inc' %]