From df0bfd24c60e4bb953577a77ceb5cac24248da6d Mon Sep 17 00:00:00 2001 From: Martin Stenberg 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 --- C4/Search.pm | 4 ++-- catalogue/search.pl | 17 +++++++++++----- .../bug_14715-searchresults_syspref.sql | 2 ++ .../prog/en/modules/catalogue/results.tt | 23 ++++++++++++++++++---- .../opac-tmpl/bootstrap/en/modules/opac-results.tt | 14 +++++++++++++ opac/opac-search.pl | 9 ++++----- 6 files changed, 53 insertions(+), 16 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_14715-searchresults_syspref.sql diff --git a/C4/Search.pm b/C4/Search.pm index 4270c82..cf81d38 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -443,7 +443,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 { @@ -1884,7 +1884,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 e4e5e66..e2ecbf5 100755 --- a/catalogue/search.pl +++ b/catalogue/search.pl @@ -150,7 +150,7 @@ use C4::Members qw(GetMember); use URI::Escape; use POSIX qw(ceil floor); use C4::Search::History; - +use String::Random; use Koha::LibraryCategories; use Koha::Virtualshelves; use Koha::SearchEngine::Search; @@ -446,10 +446,16 @@ 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 $offset = $params->{'offset'} || 0; +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 = ($page-1)*$results_per_page; +my $offset = $params->{'offset'} || 0; my $hits; my $expanded_facet = $params->{'expand'}; @@ -536,6 +542,7 @@ for (my $i=0;$i<@servers;$i++) { my $server = $servers[$i]; if ($server =~/biblioserver/) { # this is the local bibliographic server $hits = $results_hashref->{$server}->{"hits"}; + $results_per_page = $hits if $results_per_page == 'all'; my $page = $cgi->param('page') || 0; my @newresults = searchResults('intranet', $query_desc, $hits, $results_per_page, $offset, $scan, $results_hashref->{$server}->{"RECORDS"}); @@ -599,7 +606,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 0000000..4cc263a --- /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 b9861bc..d4823ed 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt @@ -96,9 +96,13 @@ $("#forgetholdfor").click(function(){ $(".btn-group").removeClass("open"); return false; }); -$('#sortbyform').find("input:submit").hide(); +$('#resultoptionsform').find("input:submit").hide(); $('#sort_by').change(function() { - $('#sortbyform').submit(); + $('#resultoptionsform').submit(); + }); +$('#results_per_page').change(function() { + $.cookie('results_per_page', $(this).val()); + $('#resultoptionsform').submit(); }); var param1 = "