Koha/patroncards/members-search.pl
Kyle M Hall b2ccd0f3a2 Bug 13189 - Patron card creator patron search browse by last name broken by extended attributes
The browse by last name letters on the patron search for the patron card
creator doesn't work quite right. If extended patron attributes are
disabled, it works fine, but if they are enabled, they are searched even
when using the browse last name. Thus, if a searchable attribute has a
"D" in it, and one clicks the "D" link for the last name browser, that
patron will show even if he or she has no "D" in his or her hame!

Test Plan:
1) Enable extended patron attributes
2) Add a new searchable patron attribute
3) Create a new patron with the last name "Ace"
4) Add the value "D" to the attribute for this patron
5) Browse to the patron card maker, start a new patron batch
6) Click "Add item(s)" to bring up the patron search
7) Click the letter "D" in the patron search box
8) Note that "Ace" shows in the results list
9) Apply this patch
10) Repeat step 7
11) Note that "Ace" no longer shows in the results list
12) Perform a regular search by putting the letter "D" in the "Name:"
    field, and hit the "Search" button
13) Note this time the results *do* have Ace in them

Signed-off-by: Frederic Demians <f.demians@tamil.fr>
  Well described for a tricky bug. Reproducible. Fixed with this patch.

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
This works as described, no problems or regressions found.
2015-02-12 15:35:07 -03:00

147 lines
5.8 KiB
Perl
Executable file

#!/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('&amp;', 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