Bug 17278: Use available limit when requesting zebra when ccl query is used
When a ccl query is used, the buildQuery subroutine does not handle the available limit (not an index). This available limit is handle later in the subroutine. This affect the author links on the detail page for instance (an=xx). A much better solution would be to keep an 'available' zebra index up-to-date. Test plan: (OPAC or staff interface, it does not matter) - Launch a search, click on a result and then on an author link to launch another query (an:xx) - Limit to available items without the 'facet' => Without this patch you won't get any results => With this patch applied you should get relevant result (regarding the known bugs 16970, 13715, 13658, 5463, etc.) Signed-off-by: Josef Moravec <josef.moravec@gmail.com> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
parent
d4383c6bdc
commit
5cc7c17c64
|
|
@ -1476,10 +1476,15 @@ sub buildQuery {
|
|||
# This is needed otherwise ccl= and &limit won't work together, and
|
||||
# this happens when selecting a subject on the opac-detail page
|
||||
@limits = grep {!/^$/} @limits;
|
||||
my $original_q = $q; # without available part
|
||||
if ( @limits ) {
|
||||
$q .= ' and '.join(' and ', @limits);
|
||||
if ( grep { /^available$/ } @limits ) {
|
||||
$q .= q| and ( ( allrecords,AlwaysMatches:'' not onloan,AlwaysMatches:'') and (lost,st-numeric=0) )|;
|
||||
delete $limits['available'];
|
||||
}
|
||||
$q .= ' and '.join(' and ', @limits) if @limits;
|
||||
}
|
||||
return ( undef, $q, $q, "q=ccl=".uri_escape_utf8($q), $q, '', '', '', 'ccl' );
|
||||
return ( undef, $q, $q, "q=ccl=".uri_escape_utf8($q), $original_q, '', '', '', 'ccl' );
|
||||
}
|
||||
if ( $query =~ /^cql=/ ) {
|
||||
return ( undef, $', $', "q=cql=".uri_escape_utf8($'), $', '', '', '', 'cql' );
|
||||
|
|
|
|||
|
|
@ -609,6 +609,12 @@ if ( $indexing_mode eq 'dom' ) {
|
|||
($error, $results_hashref, $facets_loop) = getRecords($query,$simple_query,[ ], [ 'biblioserver' ],20,0,undef,\%branches,\%itemtypes,$query_type,0);
|
||||
is($results_hashref->{biblioserver}->{hits}, undef, "Search for 'pressed' returns no matches when stemming is off");
|
||||
|
||||
( $error, $query, $simple_query, $query_cgi,
|
||||
$query_desc, $limit, $limit_cgi, $limit_desc,
|
||||
$query_type ) = buildQuery([], [ 'ccl=an:42' ], [], ['available'], [], 0, 'en');
|
||||
is( $query, 'an:42 and ( ( allrecords,AlwaysMatches:'' not onloan,AlwaysMatches:'') and (lost,st-numeric=0) )', 'buildQuery should add the available part to the query if requested with ccl' );
|
||||
is( $query_desc, 'an:42', 'buildQuery should remove the available part from the query' );
|
||||
|
||||
# Let's see what happens when we pass bad data into these routines.
|
||||
# We have to catch warnings since we're not very good about returning errors.
|
||||
|
||||
|
|
@ -956,12 +962,12 @@ sub run_unimarc_search_tests {
|
|||
}
|
||||
|
||||
subtest 'MARC21 + GRS-1' => sub {
|
||||
plan tests => 107;
|
||||
plan tests => 109;
|
||||
run_marc21_search_tests('grs1');
|
||||
};
|
||||
|
||||
subtest 'MARC21 + DOM' => sub {
|
||||
plan tests => 107;
|
||||
plan tests => 109;
|
||||
run_marc21_search_tests('dom');
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue