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:
parent
526af4ea07
commit
3178e7725d
1 changed files with 13 additions and 12 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue