LP#1562153: fix case where changing sort order to relevance can fail
authorGalen Charlton <gmc@esilibrary.com>
Fri, 25 Mar 2016 20:46:24 +0000 (16:46 -0400)
committerMike Rylander <mrylander@gmail.com>
Thu, 28 Apr 2016 16:04:25 +0000 (12:04 -0400)
This patch fixes a cause where sending a 'sort' CGI parameter
with the empty string as value (which specifies relevance sorting)
fails to override a previously-set sort order.

To test:

[1] Do a public catalog search starting from the advanced search form,
    e.g., keyword = "cats"
[2] Change the sort order to (say) Title A-Z from the results page.
[3] Note that the query string changes to "sort(titlesort) cats" and
    that the results are re-sorted
[4] Attempt to change the sort order to relevance.
[5] This time, the sort order does not change ... and it should have.
[6] Apply the patch and repeat steps 1-5. This time, the sort order
    should be successfully changed.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm

index ecd1bad..51bdf23 100644 (file)
@@ -120,15 +120,18 @@ sub _prepare_biblio_search {
     return () unless $query;
 
     # sort is treated specially, even though it's actually a filter
     return () unless $query;
 
     # sort is treated specially, even though it's actually a filter
-    if ($cgi->param('sort')) {
+    if (defined($cgi->param('sort'))) {
         $query =~ s/sort\([^\)]*\)//g;  # override existing sort(). no stacking.
         my ($axis, $desc) = split /\./, $cgi->param('sort');
         $query =~ s/sort\([^\)]*\)//g;  # override existing sort(). no stacking.
         my ($axis, $desc) = split /\./, $cgi->param('sort');
-        $query = "sort($axis) $query";
+        $query = "sort($axis) $query" if $axis;
         if ($desc and not $query =~ /\#descending/) {
             $query = "#descending $query";
         } elsif (not $desc) {
             $query =~ s/\#descending//;
         }
         if ($desc and not $query =~ /\#descending/) {
             $query = "#descending $query";
         } elsif (not $desc) {
             $query =~ s/\#descending//;
         }
+        # tidy up
+        $query =~ s/^\s+//;
+        $query =~ s/\s+$//;
     }
 
     my (@naive_query_re, $site);
     }
 
     my (@naive_query_re, $site);