From d9d7607622b21197a1134f07f88d67c993f55ade Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Mon, 3 Dec 2018 13:05:49 +0000 Subject: [PATCH] Bug 21405 - Fix auhtorities pagination for Zebra and ES Bug 20261 introduced an error because search_auth_compat responded differently for ES and Zebra, now bug 19365 fixed the underlying difference. This patch restores previous code to fix pagination. Additionally we add a fix for 10000+ results in ES and remove a double import of C4::Auth To test: 1 - Perform an authorities search with 1+ pages using Zebra 2 - Page through results, note you are only offseeting by 1 each time 3 - Perform an authorities search with 10,000+ results in ES 4 - Click on the last page and get an error 5 - Apply patch 6 - Retry Zebra search 7 - Results should paginate correctly 8 - Clicking on last page should return last results 9 - Retry ES results 10 - Results should paginate correct 11 - Clicking on last page should return last results --- authorities/authorities-home.pl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/authorities/authorities-home.pl b/authorities/authorities-home.pl index 3f400722c3..e0d5f754de 100755 --- a/authorities/authorities-home.pl +++ b/authorities/authorities-home.pl @@ -22,7 +22,7 @@ use warnings; use CGI qw ( -utf8 ); use URI::Escape; -use C4::Auth; +use POSIX qw(ceil); use C4::Context; use C4::Auth; @@ -86,6 +86,7 @@ if ( $op eq "do_search" ) { my $startfrom = $query->param('startfrom') || 1; my $resultsperpage = $query->param('resultsperpage') || 20; + my $offset = ( $startfrom - 1 ) * $resultsperpage + 1; my $builder = Koha::SearchEngine::QueryBuilder->new( { index => $Koha::SearchEngine::AUTHORITIES_INDEX } ); @@ -96,7 +97,7 @@ if ( $op eq "do_search" ) { [$value], $authtypecode, $orderby ); my ( $results, $total ) = $searcher->search_auth_compat( - $search_query, $startfrom, $resultsperpage + $search_query, $offset, $resultsperpage ); ( $template, $loggedinuser, $cookie ) = get_template_and_user( @@ -180,6 +181,9 @@ if ( $op eq "do_search" ) { $template->param( result => $results ) if $results; + my $max_result_window = $searcher->max_result_window; + my $hits_to_paginate = ($max_result_window && $max_result_window < $total) ? $max_result_window : $total; + $template->param( pagination_bar => pagination_bar( $base_url, int( $total / $resultsperpage ) + 1, -- 2.11.0