Bug 12595: Search a patron by his/her firstname and surname

Before bug 9811, if you searched for "John Doe" and only 1 patron with
this firstname/surname existed, the patron detail page was displayed.

Now the result lists all patrons with ( firstname=john or doe ) or (
surname=john or doe). Which is quite annoying when you expect only 1
result.

Test plan:
0/ Create some patrons like: "John Doe", "Jane Doe", "John Smith".
1/ Search for "John Doe" in the patron search box
2/ Verify you got 2 results
3/ Apply the patch
4/ Search for "John Doe" in the patron search box
5/ Verify you are redirected to the right patron detail page.

Signed-off-by: Dobrica Pavlinusic <dpavlin@rot13.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
This commit is contained in:
Jonathan Druart 2014-07-17 13:26:46 +02:00 committed by Tomas Cohen Arazi
parent 526af4ea07
commit 3178e7725d

View file

@ -54,7 +54,6 @@ sub search {
# split on coma
$searchmember =~ s/,/ /g if $searchmember;
my @where_strs_or;
my $searchfields = {
standard => 'surname,firstname,othernames,cardnumber',
email => 'email,emailpro,B_email',
@ -65,21 +64,23 @@ sub search {
sort1 => 'sort1',
sort2 => 'sort2',
};
for my $searchfield ( split /,/, $searchfields->{$searchfieldstype} ) {
foreach my $term ( split / /, $searchmember) {
next unless $term;
$searchmember =~ s/\*/%/g; # * is replaced with % for sql
$term .= '%' # end with anything
if $term !~ /%$/;
$term = "%$term" # begin with anythin unless start_with
if $term !~ /^%/
and $searchtype eq "contain";
foreach my $term ( split / /, $searchmember) {
next unless $term;
$searchmember =~ s/\*/%/g; # * is replaced with % for sql
$term .= '%' # end with anything
if $term !~ /%$/;
$term = "%$term" # begin with anythin unless start_with
if $term !~ /^%/
and $searchtype eq "contain";
my @where_strs_or;
for my $searchfield ( split /,/, $searchfields->{$searchfieldstype} ) {
push @where_strs_or, "borrowers." . $dbh->quote_identifier($searchfield) . " LIKE ?";
push @where_args, $term;
}
push @where_strs, '('. join (' OR ', @where_strs_or) . ')'
if @where_strs_or;
}
push @where_strs, '('. join (' OR ', @where_strs_or) . ')'
if @where_strs_or;
my $where;
$where = " WHERE " . join (" AND ", @where_strs) if @where_strs;