Bug 18961: Use exact match for select filters on item search
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Tue, 10 Oct 2017 15:18:10 +0000 (12:18 -0300)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Fri, 20 Oct 2017 18:58:21 +0000 (15:58 -0300)
The SQL operator LIKE is always used for filters when searching for
items.

If the filter is a select, we should search for an exact match.
That way we avoid problematic search like "%NFIC%" and "%FIC%" (one
includes the other one).

Test plan:
- Make sure you have collection codes 'Fiction' and 'Non-fiction'
- Do an item search
- Filter column 'Collection', select 'Fiction'
- Result: Column contains items from Fiction only

Followed test plan, works as expected.
Signed-off-by: Marc VĂ©ron <veron@veron.ch>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

catalogue/itemsearch.pl

index c48f2f1..369142e 100755 (executable)
@@ -61,9 +61,15 @@ if (defined $format and $format eq 'json') {
             my @words = split /\s+/, $sSearch;
             foreach my $word (@words) {
                 push @f, $columns[$i];
-                push @q, "%$word%";
-                push @op, 'like';
                 push @c, 'and';
+
+                if ( grep /^$columns[$i]$/, qw( ccode homebranch holdingbranch location notforloan ) ) {
+                    push @q, "$word";
+                    push @op, '=';
+                } else {
+                    push @q, "%$word%";
+                    push @op, 'like';
+                }
             }
         }
     }