Bugzilla – Attachment 88102 Details for
Bug 14715
Results per page setting for catalog search in staff client and OPAC
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 14715: results per page setting for catalog search
Bug-14715-results-per-page-setting-for-catalog-sea.patch (text/plain), 13.30 KB, created by
Liz Rea
on 2019-04-16 19:30:09 UTC
(
hide
)
Description:
Bug 14715: results per page setting for catalog search
Filename:
MIME Type:
Creator:
Liz Rea
Created:
2019-04-16 19:30:09 UTC
Size:
13.30 KB
patch
obsolete
>From f98f6a1b6734142c0efec292132f4b3676f25381 Mon Sep 17 00:00:00 2001 >From: Martin Stenberg <martin@xinxidi.net> >Date: Tue, 25 Aug 2015 20:21:25 +0200 >Subject: [PATCH] Bug 14715: results per page setting for catalog search > >Add new select field to catalog search results pages which allows user to set number >of results to be shown per page. Setting saved in cookie "results_per_page". > >To test: >1) Do a catalog search in the intranet and OPAC >2) Confirm that results automatically update upon selection of results >per page to show >3) Test for all options (20, 40, 60, 80, 100, all) > >Bug 14715: syspref for results per page options > >Remove the "all" option. > >Add syspref [OPAC]numSearchResultsPerPage for specifying options for numbers of >results per page including [OPAC]numSearchResults. > >Bug 14715: database updates > >Bug 14715: Fixing pagination problems > >Signed-off-by: Owen Leonard <oleonard@myacpl.org> > >Signed-off-by: Cab Vinton <bibliwho@gmail.com> > >Signed-off-by: Liz Rea <wizzyrea@gmail.com> >--- > C4/Search.pm | 4 +-- > catalogue/search.pl | 20 +++++++---- > .../bug_14715-searchresults_syspref.sql | 2 ++ > .../prog/en/modules/catalogue/results.tt | 41 +++++++++++++++++++++- > .../opac-tmpl/bootstrap/en/modules/opac-results.tt | 14 ++++++++ > opac/opac-search.pl | 9 +++-- > 6 files changed, 76 insertions(+), 14 deletions(-) > create mode 100644 installer/data/mysql/atomicupdate/bug_14715-searchresults_syspref.sql > >diff --git a/C4/Search.pm b/C4/Search.pm >index 1a9f51b4e1..5d3dbb26e5 100644 >--- a/C4/Search.pm >+++ b/C4/Search.pm >@@ -446,7 +446,7 @@ sub getRecords { > # loop through the results > $results_hash->{'hits'} = $size; > my $times; >- if ( $offset + $results_per_page <= $size ) { >+ if ( $results_per_page != 'all' && ($offset + $results_per_page <= $size) ) { > $times = $offset + $results_per_page; > } > else { >@@ -1898,7 +1898,7 @@ sub searchResults { > > # handle which records to actually retrieve > my $times; >- if ( $hits && $offset + $results_per_page <= $hits ) { >+ if ( $hits && $results_per_page != 'all' && ($offset + $results_per_page <= $hits) ) { > $times = $offset + $results_per_page; > } > else { >diff --git a/catalogue/search.pl b/catalogue/search.pl >index 514c4a9b2c..e70dac9c51 100755 >--- a/catalogue/search.pl >+++ b/catalogue/search.pl >@@ -148,7 +148,7 @@ use C4::Koha; > use URI::Escape; > use POSIX qw(ceil floor); > use C4::Search::History; >- >+use String::Random; > use Koha::ItemTypes; > use Koha::Library::Groups; > use Koha::Patrons; >@@ -454,11 +454,18 @@ for (my $ii = 0; $ii < @operands; ++$ii) > # Params that can only have one value > my $scan = $params->{'scan'}; > my $count = C4::Context->preference('numSearchResults') || 20; >-my $results_per_page = $params->{'count'} || $count; >+my @results_per_page_options = grep /^\d+$/, >+ map {s/\s+//g;$_;} >+ split /,/, C4::Context->preference('numSearchResultsPerPage'); >+push(@results_per_page_options, $count); >+@results_per_page_options = do { my %seen; grep { !$seen{$_}++ } @results_per_page_options }; >+@results_per_page_options = sort {$a <=> $b} @results_per_page_options; >+ >+my $results_per_page = $params->{'results_per_page'} || $cgi->cookie("results_per_page") || $count; >+my $page = $cgi->param('page') || 1; > my $offset = $params->{'offset'} || 0; > $offset = 0 if $offset < 0; >-my $page = $cgi->param('page') || 1; >-#my $offset = ($page-1)*$results_per_page; >+my $hits; > my $expanded_facet = $params->{'expand'}; > > # Define some global variables >@@ -553,7 +560,8 @@ my @sup_results_array; > for (my $i=0;$i<@servers;$i++) { > my $server = $servers[$i]; > if ($server =~/biblioserver/) { # this is the local bibliographic server >- my $hits = $results_hashref->{$server}->{"hits"} // 0; >+ $hits = $results_hashref->{$server}->{"hits"} // 0; >+ $results_per_page = $hits if $results_per_page == 'all'; > my $page = $cgi->param('page') || 0; > my @newresults = searchResults({ 'interface' => 'intranet' }, $query_desc, $hits, $results_per_page, $offset, $scan, > $results_hashref->{$server}->{"RECORDS"}); >@@ -619,7 +627,7 @@ for (my $i=0;$i<@servers;$i++) { > if ($query_desc || $limit_desc) { > $template->param(searchdesc => 1); > } >- $template->param(results_per_page => $results_per_page); >+ $template->param(results_per_page => $results_per_page == $hits ? 'all' : $results_per_page); > # must define a value for size if not present in DB > # in order to avoid problems generated by the default size value in TT > foreach my $line (@newresults) { >diff --git a/installer/data/mysql/atomicupdate/bug_14715-searchresults_syspref.sql b/installer/data/mysql/atomicupdate/bug_14715-searchresults_syspref.sql >new file mode 100644 >index 0000000000..4cc263a42b >--- /dev/null >+++ b/installer/data/mysql/atomicupdate/bug_14715-searchresults_syspref.sql >@@ -0,0 +1,2 @@ >+INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`,`type`) VALUES ('OPACnumSearchResultsPerPage', '10,20,40,60,80,100', NULL, 'Option list of number of results per page to show in OPAC search results','YesNo'); >+INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`,`type`) VALUES ('numSearchResultsPerPage', '10,20,40,60,80,100', NULL, 'Option list of number of results per page to show in staff client search results','YesNo'); >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt >index ca3733f806..7e014db1b1 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt >@@ -20,6 +20,7 @@ > [% INCLUDE 'doc-head-open.inc' %] > <title>Koha › Catalog › [% IF ( searchdesc ) %]Results of search [% IF ( query_desc ) %]for '[% query_desc | html %]'[% END %][% IF ( limit_desc ) %] with limit(s): '[% limit_desc | html %]'[% END %][% ELSE %]You did not specify any search criteria[% END %]</title> > [% INCLUDE 'doc-head-close.inc' %] >+}); > </head> > > <body id="catalog_results" class="catalog"> >@@ -61,8 +62,38 @@ > </h3> > > <div id="searchheader"> >- > <div id="selection_ops"> >+ <form action="/cgi-bin/koha/catalogue/search.pl" method="get" id="resultoptionsform"> >+ [% IF ( searchdesc ) %] >+ [% FOREACH QUERY_INPUT IN QUERY_INPUTS %] >+ <input type="hidden" name="[% QUERY_INPUT.input_name |html %]" value="[% QUERY_INPUT.input_value |html %]"/> >+ [% END %] >+ [% FOREACH LIMIT_INPUT IN LIMIT_INPUTS %] >+ <input type="hidden" name="[% LIMIT_INPUT.input_name |html %]" value="[% LIMIT_INPUT.input_value |html %]"/> >+ [% END %] >+ [% END %] >+ <!-- RE-SORT START --> >+ <label for="sort_by">Sort By: </label> >+ <select id="sort_by" name="sort_by"> >+ [% INCLUDE 'resort_form.inc' %] >+ </select> >+ <!-- RESORT END --> >+ <!-- RESULTS_PER_PAGE START --> >+ <label for="results_per_page">Results per page: </label> >+ <select id="results_per_page" name="results_per_page"> >+ <option value="20" [% 'SELECTED' IF results_per_page == '20' %]>20</option> >+ <option value="40" [% 'SELECTED' IF results_per_page == '40' %]>40</option> >+ <option value="60" [% 'SELECTED' IF results_per_page == '60' %]>60</option> >+ <option value="80" [% 'SELECTED' IF results_per_page == '80' %]>80</option> >+ <option value="100" [% 'SELECTED' IF results_per_page == '100' %]>100</option> >+ <option value="all" [% 'SELECTED' IF results_per_page == 'all' %]>all</option> >+ </select> >+ <!-- RESULTS_PER_PAGE END --> >+ <input type="submit" value="Go" /> >+ </form> >+ <h3> >+ [% total %] result(s) found [% IF ( query_desc ) %]for <span style="font-weight: bold;">'[% query_desc |html %]'</span>[% END %][% IF limit_desc %] with limit(s): <span style="font-weight: bold;">'[% limit_desc | html %]'</span>[% END %][% IF ( LibraryName ) %] in [% LibraryName %] Catalog[% END %].<br /> >+ </h3> > <a href="#" id="select_all"><i class="fa fa-check"></i> Select all</a> > | > <a href="#" id="clear_all"><i class="fa fa-remove"></i> Clear all</a> >@@ -629,6 +660,14 @@ > stickTo: "main", > stickyClass: "floating" > }); >+ $('#resultoptionsform').find("input:submit").hide(); >+ $('#sort_by').change(function() { >+ $('#resultoptionsform').submit(); >+ }); >+ $('#results_per_page').change(function() { >+ $.cookie('results_per_page', $(this).val()); >+ $('#resultoptionsform').submit(); >+ }); > > $("#cartsubmit").click(function(e){ > e.preventDefault(); >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt >index 2e233f1d1a..1db0a053bf 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt >@@ -164,6 +164,16 @@ > [% UNLESS tag %] > <div class="sort_by pull-right"> > <select id="sort_by" class="resort" name="sort_by"> [% INCLUDE 'resort_form.inc' %] </select> >+ >+ <label for="results_per_page">Results per page: </label> >+ <select id="results_per_page" name="results_per_page"> >+ <option value="20" [% 'SELECTED' IF results_per_page == '20' %]>20</option> >+ <option value="40" [% 'SELECTED' IF results_per_page == '40' %]>40</option> >+ <option value="60" [% 'SELECTED' IF results_per_page == '60' %]>60</option> >+ <option value="80" [% 'SELECTED' IF results_per_page == '80' %]>80</option> >+ <option value="100" [% 'SELECTED' IF results_per_page == '100' %]>100</option> >+ </select> >+ > <input type="submit" class="btn btn-small clearfix" id="sortsubmit" value="Go" /> > </div> > [% END %] >@@ -828,6 +838,10 @@ $(document).ready(function(){ > $('.resort').change(function() { > $('#bookbag_form').submit(); > }); >+ $('#results_per_page').change(function() { >+ $.cookie('results_per_page', $(this).val()); >+ $('#bookbag_form').submit(); >+ }); > $("span.clearall").html("<a id=\"CheckNone\" href=\"#\">"+_("Clear all")+"<\/a>"); > $("span.checkall").html("<a id=\"CheckAll\" href=\"#\">"+_("Select all")+"<\/a>"); > >diff --git a/opac/opac-search.pl b/opac/opac-search.pl >index e0d3dd6229..0e7f8c3a7c 100755 >--- a/opac/opac-search.pl >+++ b/opac/opac-search.pl >@@ -523,11 +523,10 @@ if ($params->{'limit-yr'}) { > my $scan = $params->{'scan'}; > my $count = C4::Context->preference('OPACnumSearchResults') || 20; > my $countRSS = C4::Context->preference('numSearchRSSResults') || 50; >-my $results_per_page = $params->{'count'} || $count; >+my $results_per_page = $params->{'results_per_page'} || $cgi->cookie("results_per_page") || $count; >+my $page = $cgi->param('page') || 1; > my $offset = $params->{'offset'} || 0; > $offset = 0 if $offset < 0; >-my $page = $cgi->param('page') || 1; >-$offset = ($page-1)*$results_per_page if $page>1; > my $hits; > my $expanded_facet = $params->{'expand'}; > >@@ -604,7 +603,7 @@ if ($tag) { > # FIXME: No facets for tags search. > } elsif ($build_grouped_results) { > eval { >- ($error, $results_hashref, $facets) = C4::Search::pazGetRecords($query,$simple_query,\@sort_by,\@servers,$results_per_page,$offset,$expanded_facet,undef,$query_type,$scan); >+ ($error, $results_hashref, $facets) = C4::Search::pazGetRecords($query,$simple_query,\@sort_by,\@servers,$results_per_page,$offset,$expanded_facet,$query_type,$scan); > }; > } else { > $pasarParams .= '&query=' . uri_escape_utf8($query); >@@ -801,7 +800,7 @@ for (my $i=0;$i<@servers;$i++) { > if ($query_desc || $limit_desc) { > $template->param(searchdesc => 1); > } >- $template->param(results_per_page => $results_per_page); >+ $template->param(results_per_page => $results_per_page); > my $hide = C4::Context->preference('OpacHiddenItems'); > $hide = ($hide =~ m/\S/) if $hide; # Just in case it has some spaces/new lines > my $branch = ''; >-- >2.11.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 14715
:
41949
|
42003
|
42742
|
42743
|
56002
|
56003
|
56004
|
56005
|
56575
|
56576
|
56577
|
56610
|
56611
|
56612
|
57870
|
61721
|
64250
|
67912
|
67913
|
68000
|
68001
|
68305
|
68327
|
75938
|
75939
|
75940
|
75941
|
78230
|
78298
|
78299
|
78300
|
78301
|
78302
|
79796
|
79797
|
79988
|
81203
|
88097
|
88102
|
88103
|
88104
|
88105
|
88106
|
88107
|
88108
|
88109
|
88126
|
88195
|
88831
|
88832
|
88833
|
88834
|
88835
|
88836
|
88837
|
88838
|
88839
|
95038
|
97004
|
98365
|
99607
|
99677
|
99684
|
99685
|
101775
|
101776
|
101777
|
101778