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 176-182 my @nolimits = map uri_unescape($_), $cgi->multi_param('nolimit'); Link Here
176
my %is_nolimit = map { $_ => 1 } @nolimits;
176
my %is_nolimit = map { $_ => 1 } @nolimits;
177
@limits = grep { not $is_nolimit{$_} } @limits;
177
@limits = grep { not $is_nolimit{$_} } @limits;
178
if  (
178
if  (
179
        !$cgi->param('edit_search') &&
179
        !$cgi->param('edit_search') && !$cgi->param('edit_filter') &&
180
        ( (@limits>=1) || (defined $cgi->param("q") && $cgi->param("q") ne "" ) || ($cgi->param('limit-yr')) )
180
        ( (@limits>=1) || (defined $cgi->param("q") && $cgi->param("q") ne "" ) || ($cgi->param('limit-yr')) )
181
    ) {
181
    ) {
182
    $template_name = 'catalogue/results.tt';
182
    $template_name = 'catalogue/results.tt';
Lines 261-292 $template->param( searchid => scalar $cgi->param('searchid'), ); Link Here
261
# The following should only be loaded if we're bringing up the advanced search template
261
# The following should only be loaded if we're bringing up the advanced search template
262
if ( $template_type eq 'advsearch' ) {
262
if ( $template_type eq 'advsearch' ) {
263
263
264
    my @operands;
265
    my @operators;
266
    my @indexes;
264
    my $expanded = $cgi->param('expanded_options');
267
    my $expanded = $cgi->param('expanded_options');
265
    if( $cgi->param('edit_search') ){
268
    if( $cgi->param('edit_search') ){
266
        my @operators = $cgi->multi_param('op');
269
        @operands = $cgi->multi_param('q');
267
        my @indexes   = $cgi->multi_param('idx');
270
        @operators = $cgi->multi_param('op');
268
        my %limit_hash;
271
        @indexes   = $cgi->multi_param('idx');
269
        foreach my $limit (@limits){
270
            if ( $limit eq 'available' ){
271
                $template->param( limit_available => 1 );
272
            } else {
273
                my ($index,$value) = split(':',$limit);
274
                $value =~ s/"//g;
275
                if ( $index =~ /mc-/ ){
276
                    $limit_hash{$index . "_" . $value} = 1;
277
                } else {
278
                    push @{$limit_hash{$index}}, $value;
279
                }
280
            }
281
        };
282
        $expanded = 1 if scalar @operators || scalar @limits;
283
        $template->param( operators => \@operators );
284
        $template->param( limits => \%limit_hash );
285
        $template->param(
272
        $template->param(
286
           indexes   => \@indexes,
287
           sort      => $cgi->param('sort_by'),
273
           sort      => $cgi->param('sort_by'),
288
        );
274
        );
275
        # determine what to display next to the search boxes
276
    } elsif ( $cgi->param('edit_filter') ){
277
        my $search_filter = Koha::SearchFilters->find( $cgi->param('edit_filter') );
278
        if( $search_filter ){
279
            my $query = decode_json( $search_filter->query );
280
            my $limits = decode_json( $search_filter->limits );
281
            @operands  = @{ $query->{operands} };
282
            @indexes   = @{ $query->{indexes} };
283
            @operators = @{ $query->{operators} };
284
            @limits    = @{ $limits->{limits} };
285
            $template->param( edit_filter => $search_filter );
286
        } else {
287
            $template->param( unknown_filter => 1 );
288
        }
289
    }
290
291
    while( scalar @operands < 3 ){
292
        push @operands, "";
289
    }
293
    }
294
    $template->param( operands  => \@operands );
295
    $template->param( operators => \@operators );
296
    $template->param( indexes   => \@indexes );
297
298
    my %limit_hash;
299
    foreach my $limit (@limits){
300
        if ( $limit eq 'available' ){
301
            $template->param( limit_available => 1 );
302
        } else {
303
            my ($index,$value) = split(':',$limit);
304
            $value =~ s/"//g;
305
            if ( $index =~ /mc-/ ){
306
                $limit_hash{$index . "_" . $value} = 1;
307
            } else {
308
                push @{$limit_hash{$index}}, $value;
309
            }
310
        }
311
    };
312
    $template->param( limits => \%limit_hash );
313
314
    $expanded = 1 if scalar @operators || scalar @limits;
315
290
    # load the servers (used for searching -- to do federated searching, etc.)
316
    # load the servers (used for searching -- to do federated searching, etc.)
291
    my $primary_servers_loop;# = displayPrimaryServers();
317
    my $primary_servers_loop;# = displayPrimaryServers();
292
    $template->param(outer_servers_loop =>  $primary_servers_loop,);
318
    $template->param(outer_servers_loop =>  $primary_servers_loop,);
Lines 303-319 if ( $template_type eq 'advsearch' ) { Link Here
303
        $template->param( sort_by => $default_sort_by  );
329
        $template->param( sort_by => $default_sort_by  );
304
    }
330
    }
305
331
306
    # determine what to display next to the search boxes
307
    my @queries = $cgi->multi_param('q');
308
    while( scalar @queries < 3 ){
309
        push @queries, "";
310
    }
311
    $template->param(uc(C4::Context->preference("marcflavour")) =>1 );
332
    $template->param(uc(C4::Context->preference("marcflavour")) =>1 );
312
333
313
    # load the language limits (for search)
334
    # load the language limits (for search)
314
    my $languages_limit_loop = getLanguages($lang, 1);
335
    my $languages_limit_loop = getLanguages($lang, 1);
315
    $template->param(search_languages_loop => $languages_limit_loop,);
336
    $template->param(search_languages_loop => $languages_limit_loop,);
316
    $template->param(       queries   => \@queries );
317
337
318
    # Expanded search options in advanced search:
338
    # Expanded search options in advanced search:
319
    # use the global setting by default, but let the user override it
339
    # 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 200-205 Link Here
200
                        <dt><a href="/cgi-bin/koha/admin/items_search_fields.pl">Item search fields</a></dt>
200
                        <dt><a href="/cgi-bin/koha/admin/items_search_fields.pl">Item search fields</a></dt>
201
                        <dd>Manage custom fields for item search</dd>
201
                        <dd>Manage custom fields for item search</dd>
202
                    [% END %]
202
                    [% END %]
203
                    [% IF Koha.Preference('SavedSearchFilters') && ( CAN_user_parameters_manage_search_filters ) %]
204
                        <dt><a href="/cgi-bin/koha/admin/search_filters.pl">Search filters</a></dt>
205
                        <dd>Manage custom search filters</dd>
206
                    [% END %]
203
                    [% IF ( CAN_user_parameters_manage_search_engine_config ) %]
207
                    [% IF ( CAN_user_parameters_manage_search_engine_config ) %]
204
                        <dt><a href="/cgi-bin/koha/admin/searchengine/elasticsearch/mappings.pl">Search engine configuration (Elasticsearch)</a></dt>
208
                        <dt><a href="/cgi-bin/koha/admin/searchengine/elasticsearch/mappings.pl">Search engine configuration (Elasticsearch)</a></dt>
205
                        <dd>Manage indexes, facets, and their mappings to MARC fields and subfields</dd>
209
                        <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 (-78 / +160 lines)
Lines 48-82 Link Here
48
48
49
            <form action="search.pl" method="get">
49
            <form action="search.pl" method="get">
50
                <div id="advanced-search">
50
                <div id="advanced-search">
51
                    <input type="hidden" name="advsearch" value="1"/>
51
                    [% IF edit_filter %]
52
                    <h1>Advanced search</h1>
53
                    <p>
54
                        <a href="/cgi-bin/koha/catalogue/itemsearch.pl">Go to item search</a>
55
                        [% IF searchid %]
56
                            <div id="previous_search_link"></div>
57
                        [% END %]
58
                    </p>
59
60
                    <!-- SEARCH BUTTONS -->
61
                    <div id="toolbar" class="btn-toolbar">
52
                    <div id="toolbar" class="btn-toolbar">
62
                        <fieldset class="action" id="submit1">
53
                        <fieldset class="action" id="submit1">
54
                            <legend>Editing filter: [% edit_filter.name | html %]</legend>
63
                            <div class="btn-group">
55
                            <div class="btn-group">
64
                                <button class="btn btn-default" type="submit" accesskey="s"><i class="fa fa-search"></i> Search</button>
56
                                <label for="filter_edit_opac">Show in OPAC?</label>
57
                                [% IF edit_filter.opac %]
58
                                    <input type="checkbox" id="show_filter_opac" name="show_filter_opac" checked="checked">
59
                                [% ELSE %]
60
                                    <input type="checkbox" id="show_filter_opac" name="show_filter_opac">
61
                                [% END %]
62
                                <label for="filter_edit_staff_client">Show in Staff client?</label>
63
                                [% IF edit_filter.staff_client %]
64
                                    <input type="checkbox" id="filter_edit_staff_client" name="filter_edit_staff_client" checked="checked">
65
                                [% ELSE %]
66
                                    <input type="checkbox" id="filter_edit_staff_client" name="filter_edit_staff_client">
67
                                [% END %]
65
                            </div>
68
                            </div>
69
                            <hr>
66
                            <div class="btn-group">
70
                            <div class="btn-group">
67
                            [% IF ( expanded_options ) %]
71
                                <button id="save_filter" class="btn btn-default"><i class="fa fa-save"></i> Save filter</button>
68
                                <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>
72
                                <button class="btn btn-default" type="submit" accesskey="s"><i class="fa fa-search"></i> Search using filter</button>
69
                            </div>
70
                            [% ELSE %]
71
                                <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>
72
                            </div>
73
                            </div>
73
                            [% END %]
74
                            <div class="btn-group">
74
                            <div class="btn-group">
75
                                <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>
75
                                <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>
76
                            </div>
76
                            </div>
77
                        </fieldset> <!-- /.action -->
77
                        </fieldset>
78
                    </div> <!-- /#toolbar -->
78
                    </div>
79
                    <!-- /SEARCH BUTTONS -->
79
                    [% ELSE %]
80
                        <input type="hidden" name="advsearch" value="1"/>
81
                        <h1>Advanced search</h1>
82
                        <p>
83
                            <a href="/cgi-bin/koha/catalogue/itemsearch.pl">Go to item search</a>
84
                            [% IF searchid %]
85
                                <div id="previous_search_link"></div>
86
                            [% END %]
87
                        </p>
88
89
                        <!-- SEARCH BUTTONS -->
90
                        <div id="toolbar" class="btn-toolbar">
91
                            <fieldset class="action" id="submit1">
92
                                <div class="btn-group">
93
                                    <button class="btn btn-default" type="submit" accesskey="s"><i class="fa fa-search"></i> Search</button>
94
                                </div>
95
                                <div class="btn-group">
96
                                [% IF ( expanded_options ) %]
97
                                    <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>
98
                                </div>
99
                                [% ELSE %]
100
                                    <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>
101
                                </div>
102
                                [% END %]
103
                                <div class="btn-group">
104
                                    <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>
105
                                </div>
106
                            </fieldset> <!-- /.action -->
107
                        </div> <!-- /#toolbar -->
108
                        <!-- /SEARCH BUTTONS -->
109
                    [% END %]
80
110
81
                    [% IF ( outer_servers_loop ) %]
111
                    [% IF ( outer_servers_loop ) %]
82
                        <!-- DATABASES -->
112
                        <!-- DATABASES -->
Lines 114-179 Link Here
114
                        <!-- /REMOTE DATABASES -->
144
                        <!-- /REMOTE DATABASES -->
115
                    [% END %]
145
                    [% END %]
116
146
117
                    <!-- BOOLEAN SEARCH OPTIONS -->
147
                <!-- BOOLEAN SEARCH OPTIONS -->
118
                    <fieldset id="searchterms">
148
                    <fieldset id="searchterms">
119
                        <legend>Search for </legend>
149
                    <legend>Search for </legend>
120
                        [% FOREACH query IN queries %]
150
                    [% FOREACH query IN operands %]
121
                            [% IF ( expanded_options ) %]
151
                        [% IF ( expanded_options ) %]
122
                                [% IF loop.first %]
152
                        [% IF loop.first %]
123
                                    <div class="search-term-row" style="text-indent: 4.25em;">
153
                        <div class="search-term-row" style="text-indent: 4.25em;">
124
                                [% ELSE %]
154
                        [% ELSE %]
125
                                    <div class="search-term-row">
155
                        <div class="search-term-row">
126
                                        [% SET opindex = loop.index - 1 %]
156
                            [% SET opindex = loop.index - 1 %]
127
                                        <select name="op">
157
                            <select name="op">
128
                                            [% IF operators.$opindex == 'OR' %]
158
                            [% IF operators.$opindex == 'OR' %]
129
                                                <option value="AND">and</option>
159
                                <option value="AND">and</option>
130
                                                <option value="OR" selected="selected">or</option>
160
                                <option value="OR" selected="selected">or</option>
131
                                                <option value="NOT">not</option>
161
                                <option value="NOT">not</option>
132
                                            [% ELSIF operators.$opindex == 'NOT' %]
162
                            [% ELSIF operators.$opindex == 'NOT' %]
133
                                                <option value="AND">and</option>
163
                                <option value="AND">and</option>
134
                                                <option value="OR">or</option>
164
                                <option value="OR">or</option>
135
                                                <option value="NOT" selected="selected">not</option>
165
                                <option value="NOT" selected="selected">not</option>
136
                                            [% ELSE %]
137
                                                <option value="AND" selected="selected">and</option>
138
                                                <option value="OR">or</option>
139
                                                <option value="NOT">not</option>
140
                                            [% END %]
141
                                        </select>
142
                                [% END # /IF loop.first %]
143
                            [% ELSE %]
166
                            [% ELSE %]
144
                                <div>
167
                                <option value="AND" selected="selected">and</option>
145
                            [% END # /IF ( expanded_options ) %]
168
                                <option value="OR">or</option>
146
169
                                <option value="NOT">not</option>
147
                            [% SET preselect = 'ms_' _ indexes.${loop.index}.replace(',','comma') %]
170
                            [% END %]
148
                            [% INCLUDE 'search_indexes.inc' %]
171
                            </select>
149
                            <input type="text" size="30" name="q" title="Enter search terms" value="[% query | html %]" />
172
                        [% END %]
150
                            [% IF ( expanded_options ) %]
173
                        [% ELSE %]
151
                                [% IF ( loop.last ) %]
174
                        <div>
152
                                    <a href="JavaScript:add_field();" id="ButtonPlus" title="Add another field">[+]</a>
175
                        [% END %]
153
                                [% END %]
176
                        [% SET preselect = 'ms_' _ indexes.${loop.index}.replace(',','comma') %]
154
                                [% IF ( loop.first ) %]
177
                        [% INCLUDE 'search_indexes.inc' %]
155
                                    <label for="scan">Scan indexes:</label> <input type="checkbox" name="scan" id="scan" value="1" />
178
                        <input type="text" size="30" name="q" title="Enter search terms" value="[% query | html %]" />
179
                        [% IF ( expanded_options ) %]
180
                          [% IF ( loop.last ) %]
181
                            <a href="JavaScript:add_field();" id="ButtonPlus" title="Add another field">[+]</a>
182
                          [% END %]
183
                          [% IF ( loop.first ) %]
184
                            <label for="scan">Scan indexes:</label> <input type="checkbox" name="scan" id="scan" value="1" />
185
                          [% END %]
186
                        [% END %]
187
                        </div>
188
                    [% END %]
189
                    [% IF Koha.Preference('SearchEngine') == 'Elasticsearch' %]
190
                        [% IF ( expanded_options ) %]
191
                            <p>
192
                                [% IF Koha.Preference('ElasticsearchMARCFormat') == 'ARRAY' %]
193
                                    <label><input type="checkbox" name="whole_record" /> Search entire MARC record</label>
156
                                [% END %]
194
                                [% END %]
157
                            [% END # /IF ( expanded_options ) %]
195
                                <span id="weight_search">
158
                            </div> <!-- /.search-term-row -->
196
                                    <label><input type="checkbox" name="weight_search" checked="checked" /> Apply field weights to search</label>
159
                        [% END # /FOREACH query IN queries %]
197
                                </span>
160
198
                            <p>
161
                        [% IF Koha.Preference('SearchEngine') == 'Elasticsearch' %]
199
                        [% ELSE %]
162
                            [% IF ( expanded_options ) %]
200
                            <input type="hidden" name="weight_search" value="1" />
163
                                <p>
201
                        [% END %]
164
                                    [% IF Koha.Preference('ElasticsearchMARCFormat') == 'ARRAY' %]
202
                    [% END %]
165
                                        <label><input type="checkbox" name="whole_record" /> Search entire MARC record</label>
203
                    </fieldset>
166
                                    [% END %]
204
                <!-- /BOOLEAN SEARCH OPTIONS -->
167
                                    <span id="weight_search">
168
                                        <label><input type="checkbox" name="weight_search" checked="checked" /> Apply field weights to search</label>
169
                                    </span>
170
                                <p>
171
                            [% ELSE %]
172
                                <input type="hidden" name="weight_search" value="1" />
173
                            [% END # /IF ( expanded_options ) %]
174
                        [% END #/IF Koha.Preference('SearchEngine') %]
175
                    </fieldset> <!-- /#searchterms -->
176
                    <!-- /BOOLEAN SEARCH OPTIONS -->
177
                </div> <!-- /#advanced-search -->
205
                </div> <!-- /#advanced-search -->
178
206
179
                <!-- MC-TYPE LIMITS -->
207
                <!-- MC-TYPE LIMITS -->
Lines 371-376 Link Here
371
[% MACRO jsinclude BLOCK %]
399
[% MACRO jsinclude BLOCK %]
372
    [% Asset.js("lib/hc-sticky.js") | $raw %]
400
    [% Asset.js("lib/hc-sticky.js") | $raw %]
373
    [% Asset.js("js/browser.js") | $raw %]
401
    [% Asset.js("js/browser.js") | $raw %]
402
    [% Asset.css("css/humanmsg.css") | $raw %]
403
    [% Asset.js("lib/jquery/plugins/humanmsg.js") | $raw %]
374
    <script>
404
    <script>
375
        /**
405
        /**
376
         *  Function add_field();
406
         *  Function add_field();
Lines 426-431 Link Here
426
                browser.show_back_link();
456
                browser.show_back_link();
427
            [% END %]
457
            [% END %]
428
458
459
            [% IF edit_filter %]
460
            $("#save_filter").click(function(e){
461
                e.preventDefault();
462
                let operators = [];
463
                let indexes = [];
464
                let operands = [];
465
                let limits =[];
466
                let opac = $("#show_filter_opac").prop('checked');
467
                let staff_client = $("#show_filter_staff_client").prop('checked');
468
                $("select[name='op']").each(function(){
469
                    operators.push( $(this).val() );
470
                });
471
                $("select[name='idx']").each(function(){
472
                    indexes.push( $(this).val() );
473
                });
474
                $("input[name='q']").each(function(){
475
                    operands.push( $(this).val() );
476
                });
477
                $("select[name='limit'],input[name='limit']:checked").each(function(){
478
                    if( $(this).val() != ""){
479
                        limits.push( $(this).val() );
480
                    }
481
                });
482
                let year_limit = $("#limit-yr").val();
483
                if( year_limit ){
484
                    limits.push( "yr,st-numeric:"+year_limit );
485
                }
486
                let options = {
487
                    url: '/api/v1/search_filters/'+ [% edit_filter.id | html %],
488
                    method: "PUT",
489
                    contentType: "application/json",
490
                    data: JSON.stringify({
491
                        name: "[% edit_filter.name | html %]",
492
                        filter_query: JSON.stringify({ operands: operands, indexes: indexes, operators:operators }),
493
                        filter_limits: JSON.stringify({ limits: limits }),
494
                        opac: opac,
495
                        staff_client: staff_client,
496
                    })
497
                };
498
                $.ajax(options)
499
                    .then(function(result) {
500
                        humanMsg.displayAlert( _("Saved filter: ") + result.name  , { className: 'human Success' } );
501
                    })
502
                    .fail( function(err){
503
                        humanMsg.displayAlert( _("There was an error during saving:") + err.responseText, { className: 'humanError' } );
504
                    });
505
506
507
            });
508
            [% END %]
509
510
429
        });
511
        });
430
    </script>
512
    </script>
431
[% END %]
513
[% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt (-3 lines)
Lines 864-870 Link Here
864
            $("#replace_existing_filter").click(function(){
864
            $("#replace_existing_filter").click(function(){
865
                let id = $("#existing_filters").val();
865
                let id = $("#existing_filters").val();
866
                let name = $("#existing_filters option[value="+id+"]").text();
866
                let name = $("#existing_filters option[value="+id+"]").text();
867
                console.log(id,name);
868
                save_search_filter(name,id);
867
                save_search_filter(name,id);
869
            });
868
            });
870
            function save_search_filter(name,id,opac,staff){
869
            function save_search_filter(name,id,opac,staff){
Lines 892-898 Link Here
892
                        getFilters();
891
                        getFilters();
893
                    })
892
                    })
894
                    .fail(function(err) {
893
                    .fail(function(err) {
895
                        console.log(err);
896
                        humanMsg.displayAlert( _("There was an error during saving:") + err.responseText, { className: 'humanError' } );
894
                        humanMsg.displayAlert( _("There was an error during saving:") + err.responseText, { className: 'humanError' } );
897
                    });
895
                    });
898
            }
896
            }
899
- 

Return to bug 17170