View | Details | Raw Unified | Return to bug 17170
Collapse All | Expand All

(-)a/admin/search_filters.pl (+60 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
# Copyright 2013 BibLibre
3
#
4
# This file is part of Koha
5
#
6
# Koha is free software; you can redistribute it and/or modify it
7
# under the terms of the GNU General Public License as published by
8
# the Free Software Foundation; either version 3 of the License, or
9
# (at your option) any later version.
10
#
11
# Koha is distributed in the hope that it will be useful, but
12
# WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with Koha; if not, see <http://www.gnu.org/licenses>.
18
19
use Modern::Perl;
20
use CGI;
21
22
use C4::Auth qw( get_template_and_user );
23
use C4::Output qw( output_html_with_http_headers );
24
25
use Koha::SearchFilters;
26
27
use Try::Tiny qw( catch try);
28
29
my $cgi = CGI->new;
30
31
my ($template, $borrowernumber, $cookie) = get_template_and_user({
32
    template_name => 'admin/search_filters.tt',
33
    query => $cgi,
34
    type => 'intranet',
35
    flagsrequired   => { parameters => 'manage_search_filters' },
36
});
37
38
my $op = $cgi->param('op') || '';
39
40
if ($op eq 'del') {
41
    my $id = $cgi->param('id');
42
    my $sf = Koha::SearchFilters->find($id);
43
    $template->param(filter_not_found => 1) unless $sf;
44
    if ($sf) {
45
        try{
46
            $sf->delete();
47
            $template->param( filter_deleted => $sf->name );
48
        } catch {
49
            $template->param( error => $_ );
50
        };
51
    }
52
}
53
54
my $filters = Koha::SearchFilters->search();
55
56
$template->param(
57
    filters_count => $filters->count,
58
);
59
60
output_html_with_http_headers $cgi, $cookie, $template->output;
(-)a/catalogue/search.pl (-27 / +47 lines)
Lines 177-183 my @nolimits = map uri_unescape($_), $cgi->multi_param('nolimit'); Link Here
177
my %is_nolimit = map { $_ => 1 } @nolimits;
177
my %is_nolimit = map { $_ => 1 } @nolimits;
178
@limits = grep { not $is_nolimit{$_} } @limits;
178
@limits = grep { not $is_nolimit{$_} } @limits;
179
if  (
179
if  (
180
        !$cgi->param('edit_search') &&
180
        !$cgi->param('edit_search') && !$cgi->param('edit_filter') &&
181
        ( (@limits>=1) || (defined $cgi->param("q") && $cgi->param("q") ne "" ) || ($cgi->param('limit-yr')) )
181
        ( (@limits>=1) || (defined $cgi->param("q") && $cgi->param("q") ne "" ) || ($cgi->param('limit-yr')) )
182
    ) {
182
    ) {
183
    $template_name = 'catalogue/results.tt';
183
    $template_name = 'catalogue/results.tt';
Lines 262-293 $template->param( searchid => scalar $cgi->param('searchid'), ); Link Here
262
# The following should only be loaded if we're bringing up the advanced search template
262
# The following should only be loaded if we're bringing up the advanced search template
263
if ( $template_type eq 'advsearch' ) {
263
if ( $template_type eq 'advsearch' ) {
264
264
265
    my @operands;
266
    my @operators;
267
    my @indexes;
265
    my $expanded = $cgi->param('expanded_options');
268
    my $expanded = $cgi->param('expanded_options');
266
    if( $cgi->param('edit_search') ){
269
    if( $cgi->param('edit_search') ){
267
        my @operators = $cgi->multi_param('op');
270
        @operands = $cgi->multi_param('q');
268
        my @indexes   = $cgi->multi_param('idx');
271
        @operators = $cgi->multi_param('op');
269
        my %limit_hash;
272
        @indexes   = $cgi->multi_param('idx');
270
        foreach my $limit (@limits){
271
            if ( $limit eq 'available' ){
272
                $template->param( limit_available => 1 );
273
            } else {
274
                my ($index,$value) = split(':',$limit);
275
                $value =~ s/"//g;
276
                if ( $index =~ /mc-/ ){
277
                    $limit_hash{$index . "_" . $value} = 1;
278
                } else {
279
                    push @{$limit_hash{$index}}, $value;
280
                }
281
            }
282
        };
283
        $expanded = 1 if scalar @operators || scalar @limits;
284
        $template->param( operators => \@operators );
285
        $template->param( limits => \%limit_hash );
286
        $template->param(
273
        $template->param(
287
           indexes   => \@indexes,
288
           sort      => $cgi->param('sort_by'),
274
           sort      => $cgi->param('sort_by'),
289
        );
275
        );
276
        # determine what to display next to the search boxes
277
    } elsif ( $cgi->param('edit_filter') ){
278
        my $search_filter = Koha::SearchFilters->find( $cgi->param('edit_filter') );
279
        if( $search_filter ){
280
            my $query = decode_json( $search_filter->query );
281
            my $limits = decode_json( $search_filter->limits );
282
            @operands  = @{ $query->{operands} };
283
            @indexes   = @{ $query->{indexes} };
284
            @operators = @{ $query->{operators} };
285
            @limits    = @{ $limits->{limits} };
286
            $template->param( edit_filter => $search_filter );
287
        } else {
288
            $template->param( unknown_filter => 1 );
289
        }
290
    }
291
292
    while( scalar @operands < 3 ){
293
        push @operands, "";
290
    }
294
    }
295
    $template->param( operands  => \@operands );
296
    $template->param( operators => \@operators );
297
    $template->param( indexes   => \@indexes );
298
299
    my %limit_hash;
300
    foreach my $limit (@limits){
301
        if ( $limit eq 'available' ){
302
            $template->param( limit_available => 1 );
303
        } else {
304
            my ($index,$value) = split(':',$limit);
305
            $value =~ s/"//g;
306
            if ( $index =~ /mc-/ ){
307
                $limit_hash{$index . "_" . $value} = 1;
308
            } else {
309
                push @{$limit_hash{$index}}, $value;
310
            }
311
        }
312
    };
313
    $template->param( limits => \%limit_hash );
314
315
    $expanded = 1 if scalar @operators || scalar @limits;
316
291
    # load the servers (used for searching -- to do federated searching, etc.)
317
    # load the servers (used for searching -- to do federated searching, etc.)
292
    my $primary_servers_loop;# = displayPrimaryServers();
318
    my $primary_servers_loop;# = displayPrimaryServers();
293
    $template->param(outer_servers_loop =>  $primary_servers_loop,);
319
    $template->param(outer_servers_loop =>  $primary_servers_loop,);
Lines 304-320 if ( $template_type eq 'advsearch' ) { Link Here
304
        $template->param( sort_by => $default_sort_by  );
330
        $template->param( sort_by => $default_sort_by  );
305
    }
331
    }
306
332
307
    # determine what to display next to the search boxes
308
    my @queries = $cgi->multi_param('q');
309
    while( scalar @queries < 3 ){
310
        push @queries, "";
311
    }
312
    $template->param(uc(C4::Context->preference("marcflavour")) =>1 );
333
    $template->param(uc(C4::Context->preference("marcflavour")) =>1 );
313
334
314
    # load the language limits (for search)
335
    # load the language limits (for search)
315
    my $languages_limit_loop = getLanguages($lang, 1);
336
    my $languages_limit_loop = getLanguages($lang, 1);
316
    $template->param(search_languages_loop => $languages_limit_loop,);
337
    $template->param(search_languages_loop => $languages_limit_loop,);
317
    $template->param(       queries   => \@queries );
318
338
319
    # Expanded search options in advanced search:
339
    # Expanded search options in advanced search:
320
    # use the global setting by default, but let the user override it
340
    # use the global setting by default, but let the user override it
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc (+3 lines)
Lines 113-118 Link Here
113
            [% IF ( CAN_user_parameters_manage_item_search_fields ) %]
113
            [% IF ( CAN_user_parameters_manage_item_search_fields ) %]
114
                <li><a href="/cgi-bin/koha/admin/items_search_fields.pl">Item search fields</a></li>
114
                <li><a href="/cgi-bin/koha/admin/items_search_fields.pl">Item search fields</a></li>
115
            [% END %]
115
            [% END %]
116
            [% IF ( Koha.Preference('SavedSearchFilters') && CAN_user_parameters_manage_search_filters ) %]
117
                <li><a href="/cgi-bin/koha/admin/search_filters.pl">Search filters</a></li>
118
            [% END %]
116
            [% IF ( CAN_user_parameters_manage_search_engine_config ) %]
119
            [% IF ( CAN_user_parameters_manage_search_engine_config ) %]
117
                <li><a href="/cgi-bin/koha/admin/searchengine/elasticsearch/mappings.pl">Search engine configuration (Elasticsearch)</a></li>
120
                <li><a href="/cgi-bin/koha/admin/searchengine/elasticsearch/mappings.pl">Search engine configuration (Elasticsearch)</a></li>
118
            [% END %]
121
            [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt (+4 lines)
Lines 203-208 Link Here
203
                        <dt><a href="/cgi-bin/koha/admin/items_search_fields.pl">Item search fields</a></dt>
203
                        <dt><a href="/cgi-bin/koha/admin/items_search_fields.pl">Item search fields</a></dt>
204
                        <dd>Manage custom fields for item search</dd>
204
                        <dd>Manage custom fields for item search</dd>
205
                    [% END %]
205
                    [% END %]
206
                    [% IF Koha.Preference('SavedSearchFilters') && ( CAN_user_parameters_manage_search_filters ) %]
207
                        <dt><a href="/cgi-bin/koha/admin/search_filters.pl">Search filters</a></dt>
208
                        <dd>Manage custom search filters</dd>
209
                    [% END %]
206
                    [% IF ( CAN_user_parameters_manage_search_engine_config ) %]
210
                    [% IF ( CAN_user_parameters_manage_search_engine_config ) %]
207
                        <dt><a href="/cgi-bin/koha/admin/searchengine/elasticsearch/mappings.pl">Search engine configuration (Elasticsearch)</a></dt>
211
                        <dt><a href="/cgi-bin/koha/admin/searchengine/elasticsearch/mappings.pl">Search engine configuration (Elasticsearch)</a></dt>
208
                        <dd>Manage indexes, facets, and their mappings to MARC fields and subfields</dd>
212
                        <dd>Manage indexes, facets, and their mappings to MARC fields and subfields</dd>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/search_filters.tt (+226 lines)
Line 0 Link Here
1
[% USE raw %]
2
[% USE Asset %]
3
[% SET footerjs = 1 %]
4
[% USE AuthorisedValues %]
5
[% INCLUDE 'doc-head-open.inc' %]
6
  <title>Search filters &rsaquo; Administration &rsaquo; Koha</title>
7
  [% INCLUDE 'doc-head-close.inc' %]
8
</head>
9
10
<body id="admin_searchfilters" class="admin">
11
  [% INCLUDE 'header.inc' %]
12
  [% INCLUDE 'prefs-admin-search.inc' %]
13
14
<nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
15
    <ol>
16
        <li>
17
            <a href="/cgi-bin/koha/mainpage.pl">Home</a>
18
        </li>
19
        <li>
20
            <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a>
21
        </li>
22
        <li>
23
            <a href="#" aria-current="page">
24
                Search filters
25
            </a>
26
        </li>
27
    </ol>
28
</nav>
29
30
<div class="main container-fluid">
31
    <div class="row">
32
        <div class="col-sm-10 col-sm-push-2">
33
            <main>
34
35
        [% IF filters_count %]
36
            <div id="search_filters_list">
37
                <h2>Search filters</h2>
38
39
                <table id="search_filters_table">
40
                    <thead>
41
                        <tr>
42
                            <th>Id</th>
43
                            <th>Name</th>
44
                            <th>Query</th>
45
                            <th>Limits</th>
46
                            <th>OPAC</th>
47
                            <th>Staff client</th>
48
                            <th>&nbsp;</th>
49
                        </tr>
50
                    </thead>
51
                </table>
52
            </div>
53
        [% ELSE %]
54
            <div class="dialog message">
55
                There are no search filters defined.
56
            </div>
57
        [% END %]
58
59
            </main>
60
        </div> <!-- /.col-sm-10.col-sm-push-2 -->
61
62
        <div class="col-sm-2 col-sm-pull-10">
63
            <aside>
64
                [% INCLUDE 'admin-menu.inc' %]
65
            </aside>
66
        </div> <!-- /.col-sm-2.col-sm-pull-10 -->
67
     </div> <!-- /.row -->
68
69
    <div id="edit_search_filter_modal" class="modal" role="dialog" aria-hidden="true">
70
        <div class="modal-dialog">
71
        <div class="modal-content">
72
            <div class="modal-header">
73
                <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
74
                <h3 id="search_filters_label">Edit filter: <span id="filter_edit_modal_name"></span</h3>
75
            </div>
76
            <div class="modal-body">
77
                <input type="hidden" id="filter_edit_id" name="filter_edit_id">
78
                <label for="filter_edit_name">Name:</label>
79
                <input id="filter_edit_name" name="filter_edit_name" type="text">
80
                <hr>
81
                <h6>Visibility:<h6>
82
                <label for="filter_edit_opac">Show in OPAC?</label>
83
                <input type="checkbox" id="filter_edit_opac" name="filter_edit_opac">
84
                <label for="filter_edit_staff_client">Show in Staff client?</label>
85
                <input type="checkbox" id="filter_edit_staff_client" name="filter_edit_staff_client">
86
                <hr>
87
                <a id="replace_existing_filter" class="btn btn-default btn-xs" href="#">Update</a>
88
            </div>
89
            <div class="modal-footer">
90
                <a href="#" data-dismiss="modal" aria-hidden="true" class="cancel">Cancel</a>
91
            </div>
92
        </div>
93
        </div>
94
    </div>
95
96
[% MACRO jsinclude BLOCK %]
97
    [% Asset.js("js/admin-menu.js") | $raw %]
98
    [% Asset.css("css/humanmsg.css") | $raw %]
99
    [% Asset.js("lib/jquery/plugins/humanmsg.js") | $raw %]
100
    [% INCLUDE 'datatables.inc' %]
101
102
    <script>
103
        let filters_table;
104
        $(document).ready(function(){
105
            filters_table = $("#search_filters_table").kohaTable({
106
                "ajax": {
107
                    "url": "/api/v1/search_filters"
108
                },
109
                "columns": [
110
                    {
111
                        "data": "search_filter_id",
112
                        "searchable": true,
113
                        "orderable": true
114
                    },
115
                    {
116
                        "data": "name",
117
                        "searchable": true,
118
                        "orderable": true
119
                    },
120
                    {
121
                        "data": "filter_query",
122
                        "searchable": true,
123
                        "orderable": true
124
                    },
125
                    {
126
                        "data": "filter_limits",
127
                        "searchable": true,
128
                        "orderable": true
129
                    },
130
                    {
131
                        "data": "opac",
132
                        "searchable": true,
133
                        "orderable": true
134
                    },
135
                    {
136
                        "data": "staff_client",
137
                        "searchable": true,
138
                        "orderable": true
139
                    },
140
                    {
141
                        "data": function( row, meta, val, type ) {
142
                            let filter = row;
143
                            let filter_buttons = '<a class="btn btn-default btn-xs edit_filter" onclick="edit_filter(this)"';
144
                            filter_buttons += ' data-filter_id="'+ filter.search_filter_id;
145
                            filter_buttons += '" data-filter_name="'+ filter.name;
146
                            filter_buttons += '" data-filter_opac="'+ filter.opac;
147
                            filter_buttons += '" data-filter_staff_client="'+ filter.staff_client;
148
                            filter_buttons += '" ><i class="fa fa-pencil"></i> Edit filter</a>';
149
                            filter_buttons += '<a class="btn btn-default btn-xs" href="/cgi-bin/koha/catalogue/search.pl?edit_filter='+filter.search_filter_id+'"><i class="fa fa-search"></i> Edit search</a>';
150
                            filter_buttons += '<a class="btn btn-default btn-xs delete_filter" onclick="delete_filter(this)"';
151
                            filter_buttons += ' data-filter_id="'+ filter.search_filter_id;
152
                            filter_buttons += '"><i class="fa fa-trash"></i> Delete</a>';
153
                            return filter_buttons;
154
                        },
155
                        "searchable": false,
156
                        "orderable": false
157
                    }
158
                ]
159
            });
160
        });
161
162
        $("#replace_existing_filter").click(function(){
163
            let name = $("#filter_edit_name").val();
164
            let id = $("#filter_edit_id").val();
165
            let opac = $("#filter_edit_opac").prop('checked');
166
            let staff_client = $("#filter_edit_staff_client").prop('checked');
167
            save_search_filter(name,id,opac,staff_client);
168
        });
169
170
        function edit_filter(element){
171
            let filter_id = $(element).data('filter_id');
172
            let filter_name = $(element).data('filter_name');
173
            let filter_opac = $(element).data('filter_opac');
174
            let filter_staff_client = $(element).data('filter_staff_client');
175
            $("#filter_edit_name").val(filter_name);
176
            $("#filter_edit_id").val(filter_id);
177
            $("#filter_edit_opac").prop('checked',filter_opac);
178
            $("#filter_edit_staff_client").prop('checked',filter_staff_client);
179
            $("#edit_search_filter_modal").modal('show');
180
        };
181
182
        function delete_filter(element){
183
            let filter_id = $(element).data('filter_id');
184
            let options = {
185
                url: '/api/v1/search_filters/' + filter_id,
186
                method: "DELETE",
187
                contentType: "application/json",
188
            };
189
            $.ajax(options)
190
                .then(function(result) {
191
                    humanMsg.displayAlert( _("Filter successfully deleted."), { className: 'human Success' } );
192
                    filters_table.DataTable().ajax.reload();
193
                })
194
                .fail(function(err) {
195
                    humanMsg.displayAlert( _("There was an error during saving:") + err.responseText, { className: 'humanError' } );
196
                });
197
        }
198
199
200
        function save_search_filter(name,id,opac,staff){
201
            let options = {
202
                url: '/api/v1/search_filters/' + id,
203
                method: "PUT",
204
                contentType: "application/json",
205
                data: JSON.stringify({
206
                    name: name,
207
                    opac: opac,
208
                    staff_client: staff,
209
                })
210
            };
211
            $.ajax(options)
212
                .then(function(result) {
213
                    $("#edit_search_filter_modal").modal('hide');
214
                    humanMsg.displayAlert( _("Saved filter: ") + name  , { className: 'human Success' } );
215
                    filters_table.DataTable().ajax.reload();
216
                })
217
                .fail(function(err) {
218
                    humanMsg.displayAlert( _("There was an error during saving:") + err.responseText, { className: 'humanError' } );
219
                });
220
        }
221
222
223
    </script>
224
[% END %]
225
226
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/advsearch.tt (-77 / +154 lines)
Lines 51-83 Link Here
51
51
52
            <form action="search.pl" method="get">
52
            <form action="search.pl" method="get">
53
                <div id="advanced-search">
53
                <div id="advanced-search">
54
                    <input type="hidden" name="advsearch" value="1"/>
54
                    [% IF edit_filter %]
55
                    <h1>Advanced search</h1>
56
                    [% IF searchid %]
57
                        <div id="previous_search_link"></div>
58
                    [% END %]
59
60
                    <!-- SEARCH BUTTONS -->
61
                    <div id="toolbar" class="btn-toolbar">
55
                    <div id="toolbar" class="btn-toolbar">
56
                        <legend>Editing filter: [% edit_filter.name | html %]</legend>
62
                        <div class="btn-group">
57
                        <div class="btn-group">
63
                            <button class="btn btn-primary" type="submit" accesskey="s"><i class="fa fa-search"></i> Search</button>
58
                            <label for="filter_edit_opac">Show in OPAC?</label>
64
                        </div>
59
                            [% IF edit_filter.opac %]
65
                        <div class="btn-group">
60
                                <input type="checkbox" id="show_filter_opac" name="show_filter_opac" checked="checked">
66
                        [% IF ( expanded_options ) %]
61
                            [% ELSE %]
67
                            <a href="/cgi-bin/koha/catalogue/search.pl?expanded_options=0" class="btn btn-link"><i class="fa fa-search-minus"></i> Fewer options</a>
62
                                <input type="checkbox" id="show_filter_opac" name="show_filter_opac">
68
                        </div>
63
                            [% END %]
69
                        [% ELSE %]
64
                            <label for="filter_edit_staff_client">Show in Staff client?</label>
70
                            <a href="/cgi-bin/koha/catalogue/search.pl?expanded_options=1" class="btn btn-link"><i class="fa fa-search-plus"></i> More options</a>
65
                            [% IF edit_filter.staff_client %]
66
                                <input type="checkbox" id="filter_edit_staff_client" name="filter_edit_staff_client" checked="checked">
67
                            [% ELSE %]
68
                                <input type="checkbox" id="filter_edit_staff_client" name="filter_edit_staff_client">
69
                            [% END %]
71
                        </div>
70
                        </div>
72
                        [% END %]
71
                        <hr>
73
                        <div class="btn-group">
72
                        <div class="btn-group">
74
                            <a href="/cgi-bin/koha/catalogue/search.pl?do=Clear&expanded_options=[% expanded_options | uri %]" class="btn btn-link"><i class="fa fa-trash"></i> Clear fields</a>
73
                            <button id="save_filter" class="btn btn-default"><i class="fa fa-save"></i> Save filter</button>
74
                            <button class="btn btn-default" type="submit" accesskey="s"><i class="fa fa-search"></i> Search using filter</button>
75
                        </div>
75
                        </div>
76
                        <div class="btn-group">
76
                        <div class="btn-group">
77
                            <a href="/cgi-bin/koha/catalogue/itemsearch.pl" class="btn btn-link"><i class="fa fa-search"></i> Go to item search</a>
77
                            <a href="/cgi-bin/koha/catalogue/search.pl?do=Clear&expanded_options=[% expanded_options | uri %]" class="btn btn-link"><i class="fa fa-trash"></i> Cancel</a>
78
                        </div>
78
                        </div>
79
                    </div> <!-- /#toolbar -->
79
                    </div>
80
                    <!-- /SEARCH BUTTONS -->
80
                    [% ELSE %]
81
                        <input type="hidden" name="advsearch" value="1"/>
82
                        <h1>Advanced search</h1>
83
84
                        <!-- SEARCH BUTTONS -->
85
                        <div id="toolbar" class="btn-toolbar">
86
                            <div class="btn-group">
87
                                <button class="btn btn-default" type="submit" accesskey="s"><i class="fa fa-search"></i> Search</button>
88
                            </div>
89
                            <div class="btn-group">
90
                            [% IF ( expanded_options ) %]
91
                                <a href="/cgi-bin/koha/catalogue/search.pl?expanded_options=0" class="btn btn-link"><i class="fa fa-search-minus"></i> Fewer options</a>
92
                            </div>
93
                            [% ELSE %]
94
                                <a href="/cgi-bin/koha/catalogue/search.pl?expanded_options=1" class="btn btn-link"><i class="fa fa-search-plus"></i> More options</a>
95
                            </div>
96
                            [% END %]
97
                            <div class="btn-group">
98
                                <a href="/cgi-bin/koha/catalogue/search.pl?do=Clear&expanded_options=[% expanded_options | uri %]" class="btn btn-link"><i class="fa fa-trash"></i> Clear fields</a>
99
                            </div>
100
                            <div class="btn-group">
101
                                <a href="/cgi-bin/koha/catalogue/itemsearch.pl" class="btn btn-link"><i class="fa fa-search"></i> Go to item search</a>
102
                            </div>
103
                        </div> <!-- /#toolbar -->
104
                        <!-- /SEARCH BUTTONS -->
105
                    [% END %]
81
106
82
                    [% IF ( outer_servers_loop ) %]
107
                    [% IF ( outer_servers_loop ) %]
83
                        <!-- DATABASES -->
108
                        <!-- DATABASES -->
Lines 115-180 Link Here
115
                        <!-- /REMOTE DATABASES -->
140
                        <!-- /REMOTE DATABASES -->
116
                    [% END %]
141
                    [% END %]
117
142
118
                    <!-- BOOLEAN SEARCH OPTIONS -->
143
                <!-- BOOLEAN SEARCH OPTIONS -->
119
                    <fieldset id="searchterms">
144
                    <fieldset id="searchterms">
120
                        <legend>Search for </legend>
145
                    <legend>Search for </legend>
121
                        [% FOREACH query IN queries %]
146
                    [% FOREACH query IN operands %]
122
                            [% IF ( expanded_options ) %]
147
                        [% IF ( expanded_options ) %]
123
                                [% IF loop.first %]
148
                        [% IF loop.first %]
124
                                    <div class="search-term-row" style="text-indent: 4.25em;">
149
                        <div class="search-term-row" style="text-indent: 4.25em;">
125
                                [% ELSE %]
150
                        [% ELSE %]
126
                                    <div class="search-term-row">
151
                        <div class="search-term-row">
127
                                        [% SET opindex = loop.index - 1 %]
152
                            [% SET opindex = loop.index - 1 %]
128
                                        <select name="op">
153
                            <select name="op">
129
                                            [% IF operators.$opindex == 'OR' %]
154
                            [% IF operators.$opindex == 'OR' %]
130
                                                <option value="AND">and</option>
155
                                <option value="AND">and</option>
131
                                                <option value="OR" selected="selected">or</option>
156
                                <option value="OR" selected="selected">or</option>
132
                                                <option value="NOT">not</option>
157
                                <option value="NOT">not</option>
133
                                            [% ELSIF operators.$opindex == 'NOT' %]
158
                            [% ELSIF operators.$opindex == 'NOT' %]
134
                                                <option value="AND">and</option>
159
                                <option value="AND">and</option>
135
                                                <option value="OR">or</option>
160
                                <option value="OR">or</option>
136
                                                <option value="NOT" selected="selected">not</option>
161
                                <option value="NOT" selected="selected">not</option>
137
                                            [% ELSE %]
138
                                                <option value="AND" selected="selected">and</option>
139
                                                <option value="OR">or</option>
140
                                                <option value="NOT">not</option>
141
                                            [% END %]
142
                                        </select>
143
                                [% END # /IF loop.first %]
144
                            [% ELSE %]
162
                            [% ELSE %]
145
                                <div>
163
                                <option value="AND" selected="selected">and</option>
146
                            [% END # /IF ( expanded_options ) %]
164
                                <option value="OR">or</option>
147
165
                                <option value="NOT">not</option>
148
                            [% SET preselect = 'ms_' _ indexes.${loop.index}.replace(',','comma') %]
166
                            [% END %]
149
                            [% INCLUDE 'search_indexes.inc' %]
167
                            </select>
150
                            <input type="text" size="30" name="q" title="Enter search terms" value="[% query | html %]" />
168
                        [% END %]
151
                            [% IF ( expanded_options ) %]
169
                        [% ELSE %]
152
                                [% IF ( loop.last ) %]
170
                        <div>
153
                                    <a href="JavaScript:add_field();" id="ButtonPlus" title="Add another field">[+]</a>
171
                        [% END %]
154
                                [% END %]
172
                        [% SET preselect = 'ms_' _ indexes.${loop.index}.replace(',','comma') %]
155
                                [% IF ( loop.first ) %]
173
                        [% INCLUDE 'search_indexes.inc' %]
156
                                    <label for="scan">Scan indexes:</label> <input type="checkbox" name="scan" id="scan" value="1" />
174
                        <input type="text" size="30" name="q" title="Enter search terms" value="[% query | html %]" />
175
                        [% IF ( expanded_options ) %]
176
                          [% IF ( loop.last ) %]
177
                            <a href="JavaScript:add_field();" id="ButtonPlus" title="Add another field">[+]</a>
178
                          [% END %]
179
                          [% IF ( loop.first ) %]
180
                            <label for="scan">Scan indexes:</label> <input type="checkbox" name="scan" id="scan" value="1" />
181
                          [% END %]
182
                        [% END %]
183
                        </div>
184
                    [% END %]
185
                    [% IF Koha.Preference('SearchEngine') == 'Elasticsearch' %]
186
                        [% IF ( expanded_options ) %]
187
                            <p>
188
                                [% IF Koha.Preference('ElasticsearchMARCFormat') == 'ARRAY' %]
189
                                    <label><input type="checkbox" name="whole_record" /> Search entire MARC record</label>
157
                                [% END %]
190
                                [% END %]
158
                            [% END # /IF ( expanded_options ) %]
191
                                <span id="weight_search">
159
                            </div> <!-- /.search-term-row -->
192
                                    <label><input type="checkbox" name="weight_search" checked="checked" /> Apply field weights to search</label>
160
                        [% END # /FOREACH query IN queries %]
193
                                </span>
161
194
                            <p>
162
                        [% IF Koha.Preference('SearchEngine') == 'Elasticsearch' %]
195
                        [% ELSE %]
163
                            [% IF ( expanded_options ) %]
196
                            <input type="hidden" name="weight_search" value="1" />
164
                                <p>
197
                        [% END %]
165
                                    [% IF Koha.Preference('ElasticsearchMARCFormat') == 'ARRAY' %]
198
                    [% END %]
166
                                        <label><input type="checkbox" name="whole_record" /> Search entire MARC record</label>
199
                    </fieldset>
167
                                    [% END %]
200
                <!-- /BOOLEAN SEARCH OPTIONS -->
168
                                    <span id="weight_search">
169
                                        <label><input type="checkbox" name="weight_search" checked="checked" /> Apply field weights to search</label>
170
                                    </span>
171
                                <p>
172
                            [% ELSE %]
173
                                <input type="hidden" name="weight_search" value="1" />
174
                            [% END # /IF ( expanded_options ) %]
175
                        [% END #/IF Koha.Preference('SearchEngine') %]
176
                    </fieldset> <!-- /#searchterms -->
177
                    <!-- /BOOLEAN SEARCH OPTIONS -->
178
                </div> <!-- /#advanced-search -->
201
                </div> <!-- /#advanced-search -->
179
202
180
                <!-- MC-TYPE LIMITS -->
203
                <!-- MC-TYPE LIMITS -->
Lines 372-377 Link Here
372
[% MACRO jsinclude BLOCK %]
395
[% MACRO jsinclude BLOCK %]
373
    [% Asset.js("lib/hc-sticky.js") | $raw %]
396
    [% Asset.js("lib/hc-sticky.js") | $raw %]
374
    [% Asset.js("js/browser.js") | $raw %]
397
    [% Asset.js("js/browser.js") | $raw %]
398
    [% Asset.css("css/humanmsg.css") | $raw %]
399
    [% Asset.js("lib/jquery/plugins/humanmsg.js") | $raw %]
375
    <script>
400
    <script>
376
        /**
401
        /**
377
         *  Function add_field();
402
         *  Function add_field();
Lines 427-432 Link Here
427
                browser.show_back_link();
452
                browser.show_back_link();
428
            [% END %]
453
            [% END %]
429
454
455
            [% IF edit_filter %]
456
            $("#save_filter").click(function(e){
457
                e.preventDefault();
458
                let operators = [];
459
                let indexes = [];
460
                let operands = [];
461
                let limits =[];
462
                let opac = $("#show_filter_opac").prop('checked');
463
                let staff_client = $("#show_filter_staff_client").prop('checked');
464
                $("select[name='op']").each(function(){
465
                    operators.push( $(this).val() );
466
                });
467
                $("select[name='idx']").each(function(){
468
                    indexes.push( $(this).val() );
469
                });
470
                $("input[name='q']").each(function(){
471
                    operands.push( $(this).val() );
472
                });
473
                $("select[name='limit'],input[name='limit']:checked").each(function(){
474
                    if( $(this).val() != ""){
475
                        limits.push( $(this).val() );
476
                    }
477
                });
478
                let year_limit = $("#limit-yr").val();
479
                if( year_limit ){
480
                    limits.push( "yr,st-numeric:"+year_limit );
481
                }
482
                let options = {
483
                    url: '/api/v1/search_filters/'+ [% edit_filter.id | html %],
484
                    method: "PUT",
485
                    contentType: "application/json",
486
                    data: JSON.stringify({
487
                        name: "[% edit_filter.name | html %]",
488
                        filter_query: JSON.stringify({ operands: operands, indexes: indexes, operators:operators }),
489
                        filter_limits: JSON.stringify({ limits: limits }),
490
                        opac: opac,
491
                        staff_client: staff_client,
492
                    })
493
                };
494
                $.ajax(options)
495
                    .then(function(result) {
496
                        humanMsg.displayAlert( _("Saved filter: ") + result.name  , { className: 'human Success' } );
497
                    })
498
                    .fail( function(err){
499
                        humanMsg.displayAlert( _("There was an error during saving:") + err.responseText, { className: 'humanError' } );
500
                    });
501
502
503
            });
504
            [% END %]
505
506
430
        });
507
        });
431
    </script>
508
    </script>
432
[% END %]
509
[% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt (-3 lines)
Lines 872-878 Link Here
872
            $("#replace_existing_filter").click(function(){
872
            $("#replace_existing_filter").click(function(){
873
                let id = $("#existing_filters").val();
873
                let id = $("#existing_filters").val();
874
                let name = $("#existing_filters option[value="+id+"]").text();
874
                let name = $("#existing_filters option[value="+id+"]").text();
875
                console.log(id,name);
876
                save_search_filter(name,id);
875
                save_search_filter(name,id);
877
            });
876
            });
878
            function save_search_filter(name,id,opac,staff){
877
            function save_search_filter(name,id,opac,staff){
Lines 900-906 Link Here
900
                        getFilters();
899
                        getFilters();
901
                    })
900
                    })
902
                    .fail(function(err) {
901
                    .fail(function(err) {
903
                        console.log(err);
904
                        humanMsg.displayAlert( _("There was an error during saving:") + err.responseText, { className: 'humanError' } );
902
                        humanMsg.displayAlert( _("There was an error during saving:") + err.responseText, { className: 'humanError' } );
905
                    });
903
                    });
906
            }
904
            }
907
- 

Return to bug 17170