Bugzilla – Attachment 37186 Details for
Bug 13891
Make all patron searches use DataTables server-side processing
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
[Signed-off] Bug 13891: DataTables server-side processing - patron cards
Signed-off-Bug-13891-DataTables-server-side-proces.patch (text/plain), 19.27 KB, created by
Marc Véron
on 2015-03-24 15:57:12 UTC
(
hide
)
Description:
[Signed-off] Bug 13891: DataTables server-side processing - patron cards
Filename:
MIME Type:
Creator:
Marc Véron
Created:
2015-03-24 15:57:12 UTC
Size:
19.27 KB
patch
obsolete
>From b7e226b6c8e2cc8c6b782fa0e2bfa0c4488b7187 Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@biblibre.com> >Date: Fri, 20 Mar 2015 17:48:43 +0100 >Subject: [PATCH] [Signed-off] Bug 13891: DataTables server-side processing - > patron cards >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >This third patch removes the previous way to search for patron cards users. > >Test plan: >1/ Add items to a patron card batch (patroncards/edit-batch.pl?op=edit&element_id=X) >2/ Add 1+ patrons to the batch >3/ Confirm there is no regression > >Tested together with other patches. >Signed-off-by: Marc Véron <veron@veron.ch> >--- > .../prog/en/modules/common/patron_search.tt | 2 + > .../prog/en/modules/patroncards/edit-batch.tt | 15 +- > .../prog/en/modules/patroncards/members-search.tt | 126 ----------------- > .../modules/patroncards/tables/members_results.tt | 26 ++++ > patroncards/add_user_search.pl | 51 +++++++ > patroncards/members-search.pl | 147 -------------------- > 6 files changed, 92 insertions(+), 275 deletions(-) > delete mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tt > create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/tables/members_results.tt > create mode 100755 patroncards/add_user_search.pl > delete mode 100755 patroncards/members-search.pl > >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt >index b1e4c47..e182688 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt >@@ -176,6 +176,8 @@ function filter() { > [% CASE 'name' %]<th>Name</th> > [% CASE 'branch' %]<th>Library</th> > [% CASE 'category' %]<th>Category</th> >+ [% CASE 'dateexpiry' %]<th>Expires on</td> >+ [% CASE 'borrowernotes' %]<th>Notes</th> > [% CASE 'action' %]<th> </th> > [% END %] > [% END %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/edit-batch.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/edit-batch.tt >index 0851936..25f79d4 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/edit-batch.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/edit-batch.tt >@@ -46,9 +46,20 @@ > return; // abort delete > } > }; >+ > function Add() { >- window.open("/cgi-bin/koha/patroncards/members-search.pl?batch_id=[% batch_id %]",'FindABibIndex','width=875,height=400,toolbar=no,scrollbars=yes'); >- }; >+ window.open("/cgi-bin/koha/patroncards/add_user_search.pl", >+ 'PatronPopup', >+ 'width=740,height=450,location=yes,toolbar=no,' >+ + 'scrollbars=yes,resize=yes' >+ ); >+ } >+ >+ function add_user(borrowernumber) { >+ var myurl = "edit-batch.pl?op=add&batch_id=[% batch_id %]&borrower_number="+borrowernumber; >+ window.location.href = myurl; >+ } >+ > function DeDuplicate() { > window.location = "/cgi-bin/koha/patroncards/edit-batch.pl?op=de_duplicate&batch_id=[% batch_id %]"; > }; >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tt >deleted file mode 100644 >index b0e7702..0000000 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tt >+++ /dev/null >@@ -1,126 +0,0 @@ >-[% INCLUDE 'doc-head-open.inc' %] >-<title>Koha › Patrons [% IF ( searching ) %]› Search results[% END %]</title> >-[% INCLUDE 'doc-head-close.inc' %] >- <style type="text/css"> >- #custom-doc { width:47.23em;*width:46.04em;min-width:600px; margin:auto; text-align:left; } >- </style> >-<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script> >-<script type="text/javascript"> >-//<![CDATA[ >-$(document).ready(function(){ >- $("#CheckAll").click(function(){ >- $(".checkboxed").checkCheckboxes(); >- return false; >- }); >- $("#CheckNone").click(function(){ >- $(".checkboxed").unCheckCheckboxes(); >- return false; >- }); >-}); >-function add_item(borrowernum,batch_id,type_id){ >- var getstr=''; >- if (borrowernum == 'checked') { >- itms= new Array; >- if(document.resultform.borrowernumber.length > 0) { >- for (var i=0; i < document.resultform.borrowernumber.length; i++) { >- if (document.resultform.borrowernumber[i].checked) { >- itms.push("borrower_number=" + document.resultform.borrowernumber[i].value); >- } >- } >- getstr = itms.join("&"); >- } else { >- getstr = "borrower_number="+document.resultform.borrowernumber.value; >- } >- } else { >- getstr = "borrower_number="+borrowernum; >- } >- var myurl = "edit-batch.pl?op=add&batch_id="+batch_id+"&"+getstr; >- window.opener.location.href = myurl; >-} >-//]]> >-</script> >-</head> >-<body id="pcard_members-search" class="tools pcard"> >- >-<div id="custom-doc" class="yui-t7"> >- <div id="bd"> >- <div class="yui-g"> >-<h3>Patron search</h3> >- >-<div class="browse"> >- Browse by last name: >- [% FOREACH letter IN alphabet.split(' ') %] >- <a href="/cgi-bin/koha/patroncards/members-search.pl?not_attributes=1&member=[% letter %]&batch_id=[% batch_id %]">[% letter %]</a> >- [% END %] >-</div> >- >-<form method="get" action="/cgi-bin/koha/patroncards/members-search.pl"><p> >-<input type="hidden" name="batch_id" value="[% batch_id %]" /> >-<input type="hidden" name="type" value="[% type %]" /> >-<label for="member">Name: </label> >-<input id="member" name="member" value="[% member %]" /> >- >-[% UNLESS ( no_categories ) %] >- <label for="category">Category: </label> >- <select name="category" id="category"> >- <option value="">Any</option> >- [% FOREACH categorie IN categories %] >- [% IF ( categorie.categorycode == category ) %] >- <option value="[% categorie.categorycode %]" selected="selected">[% categorie.description |html_entity %]</option> >- [% ELSE %] >- <option value="[% categorie.categorycode %]">[% categorie.description |html_entity %]</option> >- [% END %] >- [% END %] >- </select> >-[% END %] >- >-<input type="submit" value="Search" /></p> >-</form> >- >-[% IF ( resultsloop ) %] >-<div id="searchheader"> <h3>Results [% from %] to [% to %] of [% numresults %] found [% IF ( member ) %]for name: '<span class="ex">[% member %]</span>'[% END %] [% IF ( category ) %]with category code: '<span class="ex">[% category %]</span>'[% END %]</h3></div> >-[% IF ( paginationbar ) %]<div id="pagination_top" class="pages">[% paginationbar %]</div>[% END %] >-<form name="resultform" action="/cgi-bin/koha/patroncards/members-search.pl" method="get" class="checkboxed"><div style="float: right; margin-top: .5em;"><input type="submit" class="icon addchecked" value="Add checked" onclick="add_item('checked',[% batch_id %]); return false" /> <input type="button" class="close" value="Done" /></div> >-<div style="line-height: 2em; margin-left: .7em;"><a id="CheckAll" href="/cgi-bin/koha/patroncards/members-search.pl">Select All</a><a id="CheckNone" href="/cgi-bin/koha/patroncards/members-search.pl">Clear All</a></div> >-<div class="searchresults"> >- >- <table style="float: left; margin: .5em 0;"> >- <tr> >- <th>Select</th> >- <th><a href="members-search.pl?member=[% member %]&category=[% category %]&batch_id=[% batch_id %]&orderby=cardnumber">Card</a></th> >- <th><a href="members-search.pl?member=[% member %]&category=[% category %]&batch_id=[% batch_id %]&orderby=surname">Name</a></th> >- <th><a href="members-search.pl?member=[% member %]&category=[% category %]&batch_id=[% batch_id %]&orderby=borrowers.categorycode">Category</a></th> >- <th><a href="members-search.pl?member=[% member %]&category=[% category %]&batch_id=[% batch_id %]&orderby=branchcode">Library</a></th> >- <th>Expires on</th> >- <th>Notes</th> >- <th></th> >- </tr> >- [% FOREACH resultsloo IN resultsloop %] >- [% UNLESS ( loop.odd ) %] >- <tr class="highlight"> >- [% ELSE %] >- <tr> >- [% END %] >- <td> <input type="checkbox" name="borrowernumber" id="patron[% resultsloo.borrowernumber %]" value="[% resultsloo.borrowernumber %]" /> </td> >- <td>[% resultsloo.cardnumber %]</td> >- <td style="white-space: nowrap;"><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% resultsloo.borrowernumber %]">[% resultsloo.surname %], [% resultsloo.firstname %]</a> <br /> [% resultsloo.address %][% IF ( resultsloo.address2 ) %]<br />[% resultsloo.address2 %][% END %][% IF ( resultsloo.city ) %]<br />[% resultsloo.city %][% END %]</td> >- <td>[% resultsloo.category_description %] ([% resultsloo.categorycode %])</td> >- <td>[% resultsloo.branchcode %]</td> >- <td>[% resultsloo.dateexpiry %]</td> >- <td>[% resultsloo.borrowernotes %]</td> >- <td><a onclick="add_item('[% resultsloo.borrowernumber %]',[% batch_id %]); return false" href="/cgi-bin/koha/patroncards/edit-batch.pl?borrower_number=[% resultsloo.borrowernumber %]&batch_id=[% batch_id %]&op=add">Add</a></td> >- </tr> >- [% END %] >- </table> >- </div> >-</form> >- >-[% ELSE %] >-[% IF ( searching ) %] >-No results found >-[% END %] >-[% END %] >- >-</div> >-</div> >-[% INCLUDE 'popup-bottom.inc' %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/tables/members_results.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/tables/members_results.tt >new file mode 100644 >index 0000000..39f6ece >--- /dev/null >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/tables/members_results.tt >@@ -0,0 +1,26 @@ >+[% USE To %] >+{ >+ "sEcho": [% sEcho %], >+ "iTotalRecords": [% iTotalRecords %], >+ "iTotalDisplayRecords": [% iTotalDisplayRecords %], >+ "aaData": [ >+ [% FOREACH data IN aaData %] >+ { >+ "dt_cardnumber": >+ "[% data.cardnumber %]", >+ "dt_name": >+ "<span style='white-space:nowrap'><a href='/cgi-bin/koha/members/moremember.pl?borrowernumber=[% data.borrowernumber %]'>[% INCLUDE 'patron-title.inc' borrowernumber = data.borrowernumber category_type = data.category_type firstname = data.firstname surname = data.surname othernames = data.othernames cardnumber = data.cardnumber invert_name = 1%]</a></span>", >+ "dt_category": >+ "[% data.category_description |html %] ([% data.category_type |html %])", >+ "dt_branch": >+ "[% data.branchname |html %]", >+ "dt_dateexpiry": >+ "[% data.dateexpiry %]", >+ "dt_borrowernotes": >+ "[% data.borrowernotes.replace('\\\\' , '\\\\') |html |html_line_break |collapse %]", >+ "dt_action": >+ "<a style='cursor:pointer' onclick='add_user(\"[% data.borrowernumber %]\", \"[% data.firstname %] [% data.surname %]\"); return false;'>Add</a>" >+ }[% UNLESS loop.last %],[% END %] >+ [% END %] >+ ] >+} >diff --git a/patroncards/add_user_search.pl b/patroncards/add_user_search.pl >new file mode 100755 >index 0000000..2953dcf >--- /dev/null >+++ b/patroncards/add_user_search.pl >@@ -0,0 +1,51 @@ >+#!/usr/bin/perl >+ >+# This file is part of Koha. >+# >+# Copyright 2014 BibLibre >+# >+# 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 <http://www.gnu.org/licenses>. >+ >+use Modern::Perl; >+ >+use CGI qw ( -utf8 ); >+use C4::Auth; >+use C4::Output; >+use C4::Members; >+ >+my $input = new CGI; >+ >+my $dbh = C4::Context->dbh; >+ >+my ( $template, $loggedinuser, $cookie, $staff_flags ) = get_template_and_user( >+ { template_name => "common/patron_search.tt", >+ query => $input, >+ type => "intranet", >+ authnotrequired => 0, >+ flagsrequired => { serials => 'routing' }, >+ } >+); >+ >+my $q = $input->param('q') || ''; >+my $op = $input->param('op') || ''; >+ >+my $referer = $input->referer(); >+ >+$template->param( >+ view => ( $input->request_method() eq "GET" ) ? "show_form" : "show_results", >+ columns => ['cardnumber', 'name', 'category', 'branch', 'dateexpiry', 'borrowernotes', 'action'], >+ json_template => 'patroncards/tables/members_results.tt', >+ selection_type => 'add', >+); >+output_html_with_http_headers( $input, $cookie, $template->output ); >diff --git a/patroncards/members-search.pl b/patroncards/members-search.pl >deleted file mode 100755 >index 0c680a0..0000000 >--- a/patroncards/members-search.pl >+++ /dev/null >@@ -1,147 +0,0 @@ >-#!/usr/bin/perl >- >-# Copyright 2000-2002 Katipo Communications >-# >-# 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 2 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, write to the Free Software Foundation, Inc., >-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. >- >-use strict; >-use warnings; >- >-use CGI qw ( -utf8 ); >- >-use C4::Auth; >-use C4::Output; >-use C4::Members; >-use C4::Debug; >- >-my $cgi = CGI->new; >- >-my $batch_id = $cgi->param('batch_id') || 0; >-my $startfrom = $cgi->param('startfrom')||1; >-my $resultsperpage = $cgi->param('resultsperpage')||C4::Context->preference("PatronsPerPage")||20; >-my $category = $cgi->param('category') || undef; >-my $member = $cgi->param('member') || ''; >-my $orderby = $cgi->param('orderby') || undef; >-my $not_attributes = $cgi->param('not_attributes') || undef; >- >-my @categories=C4::Category->all; >-my %categories_display; >-my $no_categories; >- >-foreach my $category (@categories) { >- my $hash={ >- category_description=>$$category{description}, >- category_type=>$$category{category_type} >- }; >- $categories_display{$$category{categorycode}} = $hash; >-} >- >- >-my ($template, $loggedinuser, $cookie) = get_template_and_user({ >- template_name => "patroncards/members-search.tt", >- query => $cgi, >- type => "intranet", >- authnotrequired => 0, >- flagsrequired => {borrowers => 1}, >- debug => 1,}); >- >-if(scalar(@categories) < 1){ $no_categories = 1; } >-if($no_categories && C4::Context->preference("AddPatronLists")=~/code/){ >- $template->param(no_categories => 1); >-} else { >- $template->param( >- categories=>\@categories, >- category => $category >- ); >-} >- >-$orderby = "surname,firstname" unless $orderby; >-$member =~ s/,//g; #remove any commas from search string >-$member =~ s/\*/%/g; >- >-if ($member || $category) { >- my $results = $category ? Search({''=>$member, categorycode=>$category}, $orderby, undef, undef, undef, undef, $not_attributes ) >- : Search($member, $orderby, undef, undef, undef, undef, $not_attributes); >- my $count = $results ? @$results : 0; >- >- my @resultsdata = (); >- my $to = ($count>($startfrom * $resultsperpage)?$startfrom * $resultsperpage:$count); >- for (my $i = ($startfrom-1) * $resultsperpage; $i < $to; $i++){ >- #find out stats >- my ($od,$issue,$fines) = GetMemberIssuesAndFines($results->[$i]{'borrowernumber'}); >- my %row = ( >- count => $i + 1, >- %{$categories_display{$results->[$i]{categorycode}}}, >- borrowernumber => $results->[$i]{'borrowernumber'}, >- cardnumber => $results->[$i]{'cardnumber'}, >- surname => $results->[$i]{'surname'}, >- firstname => $results->[$i]{'firstname'}, >- categorycode => $results->[$i]{'categorycode'}, >- address => $results->[$i]{'address'}, >- address2 => $results->[$i]{'address2'}, >- city => $results->[$i]{'city'}, >- zipcode => $results->[$i]{'zipcode'}, >- country => $results->[$i]{'country'}, >- branchcode => $results->[$i]{'branchcode'}, >- overdues => $od, >- issues => $issue, >- odissue => "$od/$issue", >- fines => ($fines ? sprintf("%.2f",$fines) : ''), >- borrowernotes => $results->[$i]{'borrowernotes'}, >- sort1 => $results->[$i]{'sort1'}, >- sort2 => $results->[$i]{'sort2'}, >- dateexpiry => C4::Dates->new($results->[$i]{'dateexpiry'},'iso')->output('syspref'), >- ); >- push(@resultsdata, \%row); >- } >- my $base_url = '?' . join('&', map { $_->{term} . '=' . $_->{val} } ( >- { term => 'member', val => $member }, >- { term => 'category', val => $category }, >- { term => 'orderby', val => $orderby }, >- { term => 'resultsperpage', val => $resultsperpage }, >- { term => 'batch_id', val => $batch_id },) >- ); >- $template->param( >- paginationbar => pagination_bar( >- $base_url, int( $count / $resultsperpage ) + 1, >- $startfrom, 'startfrom' >- ), >- startfrom => $startfrom, >- from => ($startfrom-1) * $resultsperpage + 1, >- to => $to, >- multipage => ($count != $to || $startfrom != 1), >- searching => "1", >- member => $member, >- category_type => $category, >- numresults => $count, >- resultsloop => \@resultsdata, >- batch_id => $batch_id, >- ); >-} >-else { >- $template->param( batch_id => $batch_id); >-} >- >-$template->param( 'alphabet' => C4::Context->preference('alphabet') || join ' ', 'A' .. 'Z' ); >- >-output_html_with_http_headers $cgi, $cookie, $template->output; >- >-__END__ >- >-#script to do a borrower enquiry/bring up borrower details etc >-#written 20/12/99 by chris@katipo.co.nz >- >- >-- >1.7.10.4
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 13891
:
37104
|
37105
|
37106
|
37107
|
37180
|
37184
|
37185
|
37186
|
37187
|
37334
|
37335
|
37336
|
37337