Bug 9407: patrons search should match substrings
authorMJ Ray <mjr@phonecoop.coop>
Wed, 16 Jan 2013 20:13:57 +0000 (20:13 +0000)
committerJared Camins-Esakov <jcamins@cpbibliography.com>
Tue, 22 Jan 2013 23:56:23 +0000 (18:56 -0500)
    If a patron lives at 4345 Library Rd, a search on Street Address for
    Library should find it. However, it does not, but a search for 4345
    Library does.  This patch adds a "Search Type" drop-down, defaulting
    to the current behaviour.

    To test:
    1) Search for a patron based on a non-leading part of a field.
    2) Should return no results.
    3) Search again with "Search Type" of "Contains".
    4) Should return the patron.

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc
members/member.pl

index 880c34c..5023ba5 100644 (file)
           <option value='streettype,address,address2,city,state,zipcode,country'>Street Address</option>
       </select>
 
+      <label for="searchtype">Search type:</label>
+      <select name="searchtype" id="searchtype">
+          <option selected="selected" value=''>Starts with</option>
+          <option value='contain'>Contains</option>
+      </select>
+
     <label for="orderby">Order by:</label>
     <select name="orderby" id="searchorderby">
     <option value="">Surname, Firstname</option>
index d25dba9..d705810 100755 (executable)
@@ -101,13 +101,19 @@ my @searchfields = $searchfields ? split( ',', $searchfields ) : ( "firstname",
 $member =~ s/,//g;   #remove any commas from search string
 $member =~ s/\*/%/g;
 
+my $searchtype = $input->param('searchtype');
+my %searchtype_ok = ( 'contain' => 1 );
+if ( !defined($searchtype_ok{$searchtype}) ) {
+    undef $searchtype;
+}
+
 my $from = ( $startfrom - 1 ) * $resultsperpage;
 my $to   = $from + $resultsperpage;
 
 my ($count,$results);
 if ($member || keys %$patron) {
     #($results)=Search($member || $patron,{surname=>1,firstname=>1},[$from,$to],undef,["firstname","surname","email","othernames"]  );
-    my $search_scope = ( $quicksearch ? "field_start_with" : "start_with" );
+    my $search_scope = $searchtype || ( $quicksearch ? "field_start_with" : "start_with" );
     ($results) = Search( $member || $patron, \@orderby, undef, undef, \@searchfields, $search_scope );
 }