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 <ere.maijala@helsinki.fi>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
use CGI qw ( -utf8 );
use URI::Escape;
use CGI qw ( -utf8 );
use URI::Escape;
use C4::Context;
use C4::Auth;
use C4::Context;
use C4::Auth;
my $startfrom = $query->param('startfrom') || 1;
my $resultsperpage = $query->param('resultsperpage') || 20;
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 } );
my $builder = Koha::SearchEngine::QueryBuilder->new(
{ index => $Koha::SearchEngine::AUTHORITIES_INDEX } );
[$value], $authtypecode, $orderby
);
my ( $results, $total ) = $searcher->search_auth_compat(
[$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(
);
( $template, $loggedinuser, $cookie ) = get_template_and_user(
$template->param( result => $results ) if $results;
$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(
$template->param(
pagination_bar => pagination_bar(
- $base_url, int( $total / $resultsperpage ) + 1,
+ $base_url, ceil( $hits_to_paginate / $resultsperpage ),
$startfrom, 'startfrom'
),
$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',