Bug 10855: search with exact match if linked to an AV
authorJonathan Druart <jonathan.druart@biblibre.com>
Mon, 23 Dec 2013 09:43:52 +0000 (10:43 +0100)
committerTomas Cohen Arazi <tomascohen@theke.io>
Fri, 2 Oct 2015 18:10:31 +0000 (15:10 -0300)
If a field is linked to an AV, the search should be an exact match.

Signed-off-by: Brendan Gallagher <brendan@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Koha/AdditionalField.pm
koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt
serials/serials-search.pl

index 2f3f44b..aa00bb6 100644 (file)
@@ -230,7 +230,7 @@ sub get_matching_record_ids {
         ) AS values$i |;
         $subquery .= ' USING (record_id)' if $i > 1;
         push @subqueries, $subquery;
-        push @args, $field->{name}, $tablename, ( $exact_match ? $field->{value} : "%$field->{value}%" );
+        push @args, $field->{name}, $tablename, ( ( $exact_match or $field->{authorised_value_category} ) ? $field->{value} : "%$field->{value}%" );
     }
     $query .= join( ' LEFT JOIN ', @subqueries ) . ' WHERE 1';
     for my $j ( 1 .. $i ) {
index 31eea9a..8413a75 100644 (file)
                       <select id="additional_field_[% field.id %]" name="additional_field_[% field.id %]_filter">
                         <option value="">All</option>
                         [% FOREACH av IN field.authorised_value_choices %]
-                          [% IF av.authorised_value == additional_field_filters.${field.name} %]
+                          [% IF av.authorised_value == additional_field_filters.${field.name}.value %]
                             <option value="[% av.authorised_value %]" selected="selected">[% av.lib %]</option>
                           [% ELSE %]
                             <option value="[% av.authorised_value %]">[% av.lib %]</option>
                         [% END %]
                       </select>
                     [% ELSE %]
-                      <input id="additional_field_[% field.id %]" type="text" value="[% additional_field_filters.${field.name} %]" name="additional_field_[% field.id %]_filter" />
+                      <input id="additional_field_[% field.id %]" type="text" value="[% additional_field_filters.${field.name}.value %]" name="additional_field_[% field.id %]_filter" />
                     [% END %]
                   </li>
                 [% END %]
index 1a054d2..3e73c56 100755 (executable)
@@ -82,8 +82,11 @@ my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription
 my $additional_field_filters;
 for my $field ( @$additional_fields ) {
     my $filter_value = $query->param('additional_field_' . $field->{id} . '_filter');
-    if ( defined ( $filter_value ) ) {
-        $additional_field_filters->{ $field->{name} } = $filter_value;
+    if ( defined $filter_value and $filter_value ne q|| ) {
+        $additional_field_filters->{ $field->{name} } = {
+            value => $filter_value,
+            authorised_value_category => $field->{authorised_value_category},
+        };
     }
     if ( $field->{authorised_value_category} ) {
         $field->{authorised_value_choices} = GetAuthorisedValues( $field->{authorised_value_category} );
@@ -103,7 +106,7 @@ if ($searched){
             publisher    => $publisher,
             bookseller   => $bookseller,
             branch       => $branch,
-            additional_fields => [ map{ { name => $_, value => $additional_field_filters->{$_}} } keys %$additional_field_filters ],
+            additional_fields => [ map{ { name => $_, value => $additional_field_filters->{$_}{value}, authorised_value_category => $additional_field_filters->{$_}{authorised_value_category} } } keys %$additional_field_filters ],
             location     => $location,
             expiration_date => $expiration_date_dt,
         }