Bug 25669: (follow-up) Minor fixes
[koha.git] / Koha / SearchEngine / Zebra / QueryBuilder.pm
1 package Koha::SearchEngine::Zebra::QueryBuilder;
2
3 # This file is part of Koha.
4 #
5 # Copyright 2012 BibLibre
6 #
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
11 #
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
19
20 =head1 NAME
21
22 Koha::SearchEngine::Zebra::QueryBuilder - Zebra query objects from user-supplied queries
23 Several methods are pass-throughs to C4 methods or other methods here
24
25 =head1 DESCRIPTION
26
27 This provides the functions that take a user-supplied search query, and
28 provides something that can be given to Zebra to get answers.
29
30 =head1 SYNOPSIS
31
32     use Koha::SearchEngine::Zebra::QueryBuilder;
33     $builder = Koha::SearchEngine::Zebra::QueryBuilder->new({ index => $index });
34     my $simple_query = $builder->build_query("hello");
35
36 =head1 METHODS
37
38 =cut
39 use Modern::Perl;
40
41 use base qw(Class::Accessor);
42
43 use C4::Search;
44 use C4::AuthoritiesMarc;
45
46 =head2 build_query
47
48     Pass-through to C4::Search::buildQuery
49
50 =cut
51
52 sub build_query {
53     shift;
54     C4::Search::buildQuery @_;
55 }
56
57 =head2 build_query_compat
58
59     my ($error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_desc,$query_type) =
60         build_query_compat($operators, $operands, $indexes, $limits, $sort_by, $scan, $lang, $params)
61
62 =cut
63
64 sub build_query_compat {
65     my $self = shift;
66     my ($operators, $operands, $indexes, $limits, $sort_by, $scan, $lang, $params) = @_;
67
68     my ($error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_desc,$query_type)
69       = $self->build_query(@_);
70
71     # add OPAC 'hidelostitems'
72     #if (C4::Context->preference('hidelostitems') == 1) {
73     #    # either lost ge 0 or no value in the lost register
74     #    $query ="($query) and ( (lost,st-numeric <= 0) or ( allrecords,AlwaysMatches='' not lost,AlwaysMatches='') )";
75     #}
76     #
77     # add OPAC suppression - requires at least one item indexed with Suppress
78     if ($params->{suppress}) {
79         if ( defined $query_type and $query_type eq 'pqf' ) {
80             #$query = "($query) && -(suppress:1)"; #QP syntax
81             $query = '@not '.$query.' @attr 14=1 @attr 1=9011 1'; #PQF syntax
82         } else {
83             $query = "($query) not Suppress=1";
84         }
85     }
86
87     return ($error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_desc,$query_type);
88 }
89
90 =head2 build_authorities_query
91
92     my $query = build_authorities_query( \@query );
93
94 =cut
95
96 sub build_authorities_query {
97     shift;
98     return {
99         marclist     => $_[0],
100         and_or       => $_[1],
101         excluding    => $_[2],
102         operator     => $_[3],
103         value        => $_[4],
104         authtypecode => $_[5],
105         orderby      => $_[6],
106     };
107 }
108
109 =head2 build_authorities_query_compat
110
111    Pass-through to build_authorities_query
112
113 =cut
114
115 sub build_authorities_query_compat {
116     # Pass straight through as well
117     build_authorities_query(@_);
118 }
119
120
121 =head2 clean_search_term
122
123     my $term = $self->clean_search_term($term);
124
125 =cut
126
127 sub clean_search_term {
128     my ( $self, $term ) = @_;
129
130     $term =~ s/"/\\"/g;
131
132     return $term;
133 }
134
135 1;