LP#1549505: Add ability to set default sorter via global flag
authorMike Rylander <mrylander@gmail.com>
Thu, 4 Feb 2016 22:19:03 +0000 (17:19 -0500)
committerKathy Lussier <klussier@masslnc.org>
Fri, 29 Jul 2016 20:56:10 +0000 (16:56 -0400)
In addition, support for sorting by ascending popularity remains
in the back end, however, since if one's configured badges such
that almost every record has a badge score, that sort order could
be useful for examining the long tail of the collection.

Signed-off-by: Mike Rylander <mrylander@gmail.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.schema.statisitcal-ratings.sql
Open-ILS/src/templates/opac/parts/advanced/search.tt2
Open-ILS/src/templates/opac/parts/filtersort.tt2
Open-ILS/src/templates/opac/parts/searchbar.tt2

index b1527fb..bd9c3df 100644 (file)
@@ -256,6 +256,11 @@ sub load_common {
         return $self->redirect_ssl unless $self->cgi->https;
     }
 
+    # XXX Cache this? Makes testing difficult as apache needs a restart.
+    my $default_sort = $e->retrieve_config_global_flag('opac.default_sort');
+    $ctx->{default_sort} =
+        ($default_sort && $U->is_true($default_sort->enabled)) ? $default_sort->value : '';
+
     $ctx->{referer} = $self->cgi->referer;
     $ctx->{path_info} = $self->cgi->path_info;
     $ctx->{full_path} = $ctx->{base_path} . $self->cgi->path_info;
index 9c59fa3..31974ca 100644 (file)
@@ -11712,6 +11712,20 @@ INSERT INTO config.global_flag (name, label, value, enabled) VALUES (
     TRUE
 );
 
+/* To be added when upgrade scripts are pulled into the baseline
+INSERT INTO config.global_flag (name, label, value, enabled) VALUES (
+    'opac.default_sort',
+    oils_i18n_gettext(
+        'opac.default_sort',
+        'OPAC Default Sort (titlesort, authorsort, pubdate, popularity, poprel, or empty)',
+        'cgf',
+        'label'
+    ),
+    '',
+    TRUE
+);
+*/
+
 INSERT INTO config.usr_setting_type (name,opac_visible,label,description,datatype)
     VALUES (
         'history.circ.retention_age',
index 1c9324d..1bcbe63 100644 (file)
@@ -128,6 +128,13 @@ CREATE TRIGGER reporter_hold_request_record_trigger AFTER INSERT OR UPDATE ON ac
 
 CREATE SCHEMA rating;
 
+INSERT INTO config.global_flag (name, label, value, enabled) VALUES (
+    'opac.default_sort',
+    'OPAC Default Sort (titlesort, authorsort, pubdate, popularity, poprel, or empty for relevance)',
+    '',
+    TRUE
+);
+
 CREATE TABLE rating.popularity_parameter (
     id          INT     PRIMARY KEY,
     name        TEXT    NOT NULL UNIQUE, -- i18n
index 8cfad7f..dc650a1 100644 (file)
                             [% END %]
 [%
                 CASE "sort_selector";
+                    default_sort=ctx.default_sort;
+                    IF CGI.param('sort');
+                        default_sort=CGI.param('sort');
+                    END;
                     INCLUDE "opac/parts/filtersort.tt2"
                         id=adv_chunk.id
-                        value=CGI.param('sort') class='results_header_sel';
+                        value=default_sort class='results_header_sel';
                     %]
 
                     [% IF NOT metarecords.disabled %]
index 1907058..2990352 100644 (file)
         <option value='pubdate.descending'[% value == 'pubdate.descending' ? ' selected="selected"' : '' %]>[% l("Date: Newest to Oldest") %]</option>
         <option value='pubdate'[% value == 'pubdate' ? ' selected="selected"' : '' %]>[% l("Date: Oldest to Newest") %]</option>
     </optgroup>
+    <optgroup label='[% l("Sort by Popularity") %]'>
+        <option value='popularity'[% value == 'popularity' ? ' selected="selected"' : '' %]>[% l("Most Popular") %]</option>
+<!-- Sorting by least popular items first is probably not an expected
+     choice in production, but could be useful in cases where every
+     record has at least one badge value assigned and you want
+     to investigate the long tail.
+-->
+<!--
+        <option value='popularity.descending'[% value == 'popularity.descending' ? ' selected="selected"' : '' %]>[% l("Least Popular") %]</option>
+-->
+        <option value='poprel'[% value == 'poprel' ? ' selected="selected"' : '' %]>[% l("Popularity Adjusted Relevance") %]</option>
+    </optgroup>
 </select>
index 20088fa..a48c4a0 100644 (file)
         [% END %]
     </div>
     [%- END %]
-    [% UNLESS took_care_of_form %]</form>[% END %]
+    [% UNLESS took_care_of_form %]
+        [% IF ctx.default_sort %]
+            <input type="hidden" name="sort" value="[% ctx.default_sort %]"/>
+        [% END %]
+        </form>
+    [% END %]
     [% IF (is_advanced AND NOT is_special) AND CGI.param('qtype') %]
     <div class="opac-auto-102">
         [ <a href="[% mkurl(ctx.opac_root _ '/advanced') %]">[%