Browse Source

Bug 16660: Moved Opac Supression filtering from opac-search.pl to Zebra::QueryBuilder

To test:
OPAC: Both SearchEngine "Elasticsearch" and "Zebra" should work with
OpacSuppression set to "yes"

NB: OPAC suppression is not implemented for Elasticsearch

Signed-off-by: David Bourgault <david.bourgault@inlibro.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
17.11.x
Srdjan 4 years ago
committed by Jonathan Druart
parent
commit
bf6caa81e5
  1. 26
      Koha/SearchEngine/Zebra/QueryBuilder.pm
  2. 55
      opac/opac-search.pl

26
Koha/SearchEngine/Zebra/QueryBuilder.pm

@ -30,9 +30,29 @@ sub build_query {
}
sub build_query_compat {
# Because this passes directly on to C4::Search, we have no trouble being
# compatible.
build_query(@_);
my $self = shift;
my ($operators, $operands, $indexes, $limits, $sort_by, $scan, $lang, $params) = @_;
my ($error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_desc,$query_type)
= $self->build_query(@_);
# add OPAC 'hidelostitems'
#if (C4::Context->preference('hidelostitems') == 1) {
# # either lost ge 0 or no value in the lost register
# $query ="($query) and ( (lost,st-numeric <= 0) or ( allrecords,AlwaysMatches='' not lost,AlwaysMatches='') )";
#}
#
# add OPAC suppression - requires at least one item indexed with Suppress
if ($params->{suppress}) {
if ( $query_type eq 'pqf' ) {
#$query = "($query) && -(suppress:1)"; #QP syntax
$query = '@not '.$query.' @attr 14=1 @attr 1=9011 1'; #PQF syntax
} else {
$query = "($query) not Suppress=1";
}
}
return ($error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_desc,$query_type);
}
sub build_authorities_query {

55
opac/opac-search.pl

@ -532,8 +532,31 @@ my ($error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_
my @results;
my $suppress = 0;
if (C4::Context->preference('OpacSuppression')) {
# OPAC suppression by IP address
if (C4::Context->preference('OpacSuppressionByIPRange')) {
my $IPAddress = $ENV{'REMOTE_ADDR'};
my $IPRange = C4::Context->preference('OpacSuppressionByIPRange');
$suppress = ($IPAddress !~ /^$IPRange/);
}
else {
$suppress = 1;
}
}
## I. BUILD THE QUERY
( $error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_desc,$query_type) = $builder->build_query_compat(\@operators,\@operands,\@indexes,\@limits,\@sort_by, 0, $lang, { expanded_facet => $expanded_facet });
( $error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_desc,$query_type)
= $builder->build_query_compat(
\@operators,
\@operands,
\@indexes,
\@limits,
\@sort_by,
0,
$lang,
{ expanded_facet => $expanded_facet, suppress => $suppress }
);
sub _input_cgi_parse {
my @elements;
@ -553,36 +576,6 @@ $template->param ( QUERY_INPUTS => \@query_inputs );
## parse the limit_cgi string and put it into a form suitable for <input>s
my @limit_inputs = $limit_cgi ? _input_cgi_parse($limit_cgi) : ();
# add OPAC 'hidelostitems'
#if (C4::Context->preference('hidelostitems') == 1) {
# # either lost ge 0 or no value in the lost register
# $query ="($query) and ( (lost,st-numeric <= 0) or ( allrecords,AlwaysMatches='' not lost,AlwaysMatches='') )";
#}
#
# add OPAC suppression - requires at least one item indexed with Suppress
if (C4::Context->preference('OpacSuppression')) {
# OPAC suppression by IP address
if (C4::Context->preference('OpacSuppressionByIPRange')) {
my $IPAddress = $ENV{'REMOTE_ADDR'};
my $IPRange = C4::Context->preference('OpacSuppressionByIPRange');
if ($IPAddress !~ /^$IPRange/) {
if ( $query_type eq 'pqf' ) {
$query = '@not '.$query.' @attr 14=1 @attr 1=9011 1';
} else {
$query = "($query) not Suppress=1";
}
}
}
else {
if ( $query_type eq 'pqf' ) {
#$query = "($query) && -(suppress:1)"; #QP syntax
$query = '@not '.$query.' @attr 14=1 @attr 1=9011 1'; #PQF syntax
} else {
$query = "($query) not Suppress=1";
}
}
}
$template->param ( LIMIT_INPUTS => \@limit_inputs );
$template->param ( OPACResultsSidebar => C4::Context->preference('OPACResultsSidebar'));

Loading…
Cancel
Save