From 06e6378899631da162d57d477381782f3764ec89 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Mon, 3 Dec 2018 13:05:49 +0000 Subject: [PATCH] Bug 21405: Fix authorities 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 Signed-off-by: Ere Maijala Signed-off-by: Marcel de Rooy Signed-off-by: Nick Clemens --- authorities/authorities-home.pl | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/authorities/authorities-home.pl b/authorities/authorities-home.pl index 3f400722c3..9eb342228e 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,15 +181,19 @@ 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, + $base_url, ceil( $hits_to_paginate / $resultsperpage ), $startfrom, 'startfrom' ), - total => $total, - from => $from, - to => $to, - isEDITORS => $authtypecode eq 'EDITORS', + total => $total, + hits_to_paginate => $hits_to_paginate, + from => $from, + to => $to, + isEDITORS => $authtypecode eq 'EDITORS', ); } -- 2.39.5