Bug 10857: add ability to remove active facets when refining search results
authorJonathan Druart <jonathan.druart@biblibre.com>
Tue, 11 Jun 2013 09:31:49 +0000 (11:31 +0200)
committerGalen Charlton <gmc@esilibrary.com>
Mon, 5 May 2014 21:42:59 +0000 (21:42 +0000)
When searching (at the OPAC or pro), facets can be enabled but never
disabled. So a user is obliged to relaunch the search.

This patch adds a new link "[x]" at the right of each selected facet.
This link relaunch the search without this facet.

Test plan:
- Launch a search (OPAC and pro)
- Enable some facets
- Disable some facets

Signed-off-by: sonia bouis <sonia.bouis@univ-lyon3.fr>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Patches pass all tests and QA script. Nice feature!

Tested in Boostrap and Prog, adding end removing multiple
facets in different sequences, adding and removing the
availability limit.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
catalogue/search.pl
koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc
koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc
opac/opac-search.pl

index cda5dad..5ad44d5 100755 (executable)
@@ -414,6 +414,9 @@ my @operands = map uri_unescape($_), $cgi->param('q');
 
 # limits are use to limit to results to a pre-defined category such as branch or language
 my @limits = map uri_unescape($_), $cgi->param('limit');
+my @nolimits = map uri_unescape($_), $cgi->param('nolimit');
+my %is_nolimit = map { $_ => 1 } @nolimits;
+@limits = grep { not $is_nolimit{$_} } @limits;
 
 if($params->{'multibranchlimit'}) {
     my $multibranch = '('.join( " or ", map { "branch: $_ " } @{ GetBranchesInCategory( $params->{'multibranchlimit'} ) } ).')';
@@ -716,6 +719,15 @@ my $gotopage = $cgi->param('gotoPage');
 $template->{'VARS'}->{'gotoPage'} = $gotopage
   if $gotopage =~ m/^(ISBD|labeledMARC|MARC|more)?detail.pl$/;
 
+my @input_values = map { $_->{input_value} } @limit_inputs;
+for my $facet ( @$facets ) {
+    for my $entry ( @{ $facet->{facets} } ) {
+        my $index = $entry->{type_link_value};
+        my $value = $entry->{facet_link_value};
+        $entry->{active} = grep { $_ eq qq{$index:$value} } @input_values;
+    }
+}
+
 $template->param(
             #classlist => $classlist,
             total => $total,
index 1dfe57a..e105e32 100644 (file)
 [% IF ( facets_loo.type_label_HoldingLibrary ) %]<span id="facet-holding-libraries">Holding libraries</span>[% END %]
 [% IF facets_loo.type_label_Location %]<span id="facet-locations">Locations</span>[% END %]
 <ul>
-        [% FOREACH facet IN facets_loo.facets %]
-            <li>
-                <span class="facet-label"><a href="/cgi-bin/koha/catalogue/search.pl?[% query_cgi |html %][% limit_cgi |html %][% IF ( sort_by ) %]&amp;sort_by=[% sort_by %][% END %]&amp;limit=[% facet.type_link_value %]:[% facet.facet_link_value %]" title="[% facet.facet_title_value %]">[% facet.facet_label_value %]</a></span>
-            [% IF ( displayFacetCount ) %]
-                <span class="facet-count">([% facet.facet_count %])</span>
-            [% END %]
-            </li>
-        [% END %]
-        [% IF ( facets_loo.expandable ) %]
-        <li class="showmore"><a href="/cgi-bin/koha/catalogue/search.pl?[% query_cgi |html %][% limit_cgi |html %][% IF ( sort_by ) %]&amp;sort_by=[% sort_by %][% END %][% IF ( offset ) %]&amp;offset=[% offset %][% END %]&amp;expand=[% facets_loo.expand %]#[% facets_loo.type_id %]">Show more</a></li>
+  [% FOREACH facet IN facets_loo.facets %]
+    <li>
+      [% SET query_cgi_f = query_cgi | html %]
+      [% SET limit_cgi_f = limit_cgi | html %]
+      [% SET url = "/cgi-bin/koha/catalogue/search.pl?" _ query_cgi_f _ limit_cgi_f %]
+      [% IF ( sort_by ) %]
+        [% SET url = url _ "&amp;sort_by=" _ sort_by %]
+      [% END %]
+      [% IF facet.active %]
+        [% SET url = url _ "&amp;nolimit=" _ facet.type_link_value _ ":" _ facet.facet_link_value %]
+        <span class="facet-label">[% facet.facet_label_value %]</span>
+        [<a href="[% url |url %]" title="Remove facet [% facet.facet_link_value | html %]">x</a>]
+      [% ELSE %]
+        [% SET url = url _ "&amp;limit=" _ facet.type_link_value _ ":" _ facet.facet_link_value %]
+        <span class="facet-label"><a href="[% url | url %]" title="[% facet.facet_title_value |html %]">[% facet.facet_label_value %]</a></span>
+        [% IF ( displayFacetCount ) %]
+          <span class="facet-count"> ([% facet.facet_count %])</span>
         [% END %]
+      [% END %]
+    </li>
+  [% END %]
+  [% IF ( facets_loo.expandable ) %]
+    <li class="showmore"><a href="/cgi-bin/koha/catalogue/search.pl?[% query_cgi |html %][% limit_cgi |html %][% IF ( sort_by ) %]&amp;sort_by=[% sort_by %][% END %][% IF ( offset ) %]&amp;offset=[% offset %][% END %]&amp;expand=[% facets_loo.expand %]#[% facets_loo.type_id %]">Show more</a></li>
+  [% END %]
 </ul></li>
 [% END %]
 [% END %]
index 96446ee..1457e14 100644 (file)
 [% END %]
 [% IF facets_loo.type_label_Location %]<span id="facet-locations">Locations</span>[% END %]
 <ul>
-        [% FOREACH facet IN facets_loo.facets %]
-            <li>
-                <span class="facet-label"><a href="/cgi-bin/koha/opac-search.pl?[% query_cgi |html %][% limit_cgi |html %][% IF ( sort_by ) %]&amp;sort_by=[% sort_by |html %][% END %]&amp;limit=[% facet.type_link_value %]:[% facet.facet_link_value %]" title="[% facet.facet_title_value |html %]">[% facet.facet_label_value %]</a></span>
-            [% IF ( displayFacetCount ) %]
-                <span class="facet-count"> ([% facet.facet_count %])</span>
-            [% END %]
-            </li>
+  [% FOREACH facet IN facets_loo.facets %]
+    <li>
+      [% SET query_cgi_f = query_cgi | html %]
+      [% SET limit_cgi_f = limit_cgi | html %]
+      [% SET url = "/cgi-bin/koha/opac-search.pl?" _ query_cgi_f _ limit_cgi_f %]
+      [% IF ( sort_by ) %]
+        [% SET url = url _ "&amp;sort_by=" _ sort_by |html %]
+      [% END %]
+      [% IF facet.active %]
+        [% SET url = url _ "&amp;nolimit=" _ facet.type_link_value _ ":" _ facet.facet_link_value %]
+        <span class="facet-label">[% facet.facet_label_value %]</span>
+        [<a href="[% url |url %]" title="Remove facet [% facet.facet_link_value | html %]">x</a>]
+      [% ELSE %]
+        [% SET url = url _ "&amp;limit=" _ facet.type_link_value _ ":" _ facet.facet_link_value %]
+        <span class="facet-label"><a href="[% url | url %]" title="[% facet.facet_title_value |html %]">[% facet.facet_label_value %]</a></span>
+        [% IF ( displayFacetCount ) %]
+          <span class="facet-count"> ([% facet.facet_count %])</span>
         [% END %]
-        [% IF ( facets_loo.expandable ) %]
-        <li class="showmore"><a href="/cgi-bin/koha/opac-search.pl?[% query_cgi |html %][% limit_cgi |html %][% IF ( sort_by ) %]&amp;sort_by=[% sort_by |html %][% END %][% IF ( offset ) %]&amp;offset=[% offset |html %][% END %]&amp;expand=[% facets_loo.expand %]#[% facets_loo.type_id %]">Show more</a></li>
-[% END %]
-</ul></li>
+      [% END %]
+    </li>
+  [% END %]
+  [% IF ( facets_loo.expandable ) %]
+    <li class="showmore"><a href="/cgi-bin/koha/opac-search.pl?[% query_cgi |html %][% limit_cgi |html %][% IF ( sort_by ) %]&amp;sort_by=[% sort_by |html %][% END %][% IF ( offset ) %]&amp;offset=[% offset %][% END %]&amp;expand=[% facets_loo.expand %]#[% facets_loo.type_id %]">Show more</a>
+    </li>
+  [% END %]
+</ul>
+</li>
 [% END %]
 [% END %]
 </ul>
index 8e46005..2fe5303 100755 (executable)
@@ -403,6 +403,9 @@ if ($operands[0] && !$operands[1]) {
 
 # limits are use to limit to results to a pre-defined category such as branch or language
 my @limits = $cgi->param('limit');
+my @nolimits = $cgi->param('nolimit');
+my %is_nolimit = map { $_ => 1 } @nolimits;
+@limits = grep { not $is_nolimit{$_} } @limits;
 @limits = map { uri_unescape($_) } @limits;
 
 if($params->{'multibranchlimit'}) {
@@ -842,6 +845,16 @@ for (my $i=0;$i<@servers;$i++) {
 } #/end of the for loop
 #$template->param(FEDERATED_RESULTS => \@results_array);
 
+my @input_values = map { $_->{input_value} } @limit_inputs;
+for my $facet ( @$facets ) {
+    for my $entry ( @{ $facet->{facets} } ) {
+        my $index = $entry->{type_link_value};
+        my $value = $entry->{facet_link_value};
+        $entry->{active} = grep { $_ eq qq{$index:$value} } @input_values;
+    }
+}
+
+
 $template->param(
             #classlist => $classlist,
             total => $total,