6 [% INCLUDE 'doc-head-open.inc' %]
7 <title>Advanced search › Catalog › Koha</title>
8 [% INCLUDE 'doc-head-close.inc' %]
11 [%- BLOCK language_limit_select -%]
12 <select name="limit" id="[% ln_id | html %]">
13 <option value="">No limit</option>
14 [% FOREACH ln_loo IN ln_loop %]
15 [% IF ( ln_loo.selected or selected == ln_loo.iso639_2_code ) %]
16 <option value="[% ln_index | html %],rtrn:[% ln_loo.iso639_2_code | html %]" selected="selected">
17 [% ln_loo.language_description | html %]
20 <option value="[% ln_index | html %],rtrn:[% ln_loo.iso639_2_code | html %]">
21 [% ln_loo.language_description | html %]
28 <body id="catalog_advsearch" class="catalog">
29 [% WRAPPER 'header.inc' %]
30 [% INCLUDE 'adv-search.inc' %]
33 [% WRAPPER 'sub-header.inc' %]
34 <nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
37 <a href="/cgi-bin/koha/mainpage.pl">Home</a>
40 <a href="#" aria-current="page">
48 <div class="main container-fluid">
50 <div class="col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2">
52 <form action="search.pl" method="get">
53 <div id="advanced-search">
55 <div id="toolbar" class="btn-toolbar">
56 <legend>Editing filter: [% edit_filter.name | html %]</legend>
57 <div class="btn-group">
58 <label for="filter_edit_opac">Show in OPAC?</label>
59 [% IF edit_filter.opac %]
60 <input type="checkbox" id="show_filter_opac" name="show_filter_opac" checked="checked">
62 <input type="checkbox" id="show_filter_opac" name="show_filter_opac">
64 <label for="filter_edit_staff_client">Show in staff interface?</label>
65 [% IF edit_filter.staff_client %]
66 <input type="checkbox" id="filter_edit_staff_client" name="filter_edit_staff_client" checked="checked">
68 <input type="checkbox" id="filter_edit_staff_client" name="filter_edit_staff_client">
72 <div class="btn-group">
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>
76 <div class="btn-group">
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>
81 <input type="hidden" name="advsearch" value="1"/>
82 <h1>Advanced search</h1>
84 <!-- SEARCH BUTTONS -->
85 <div id="toolbar" class="btn-toolbar">
86 <div class="btn-group">
87 <button class="btn btn-primary" type="submit" accesskey="s"><i class="fa fa-search"></i> Search</button>
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>
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>
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>
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>
103 </div> <!-- /#toolbar -->
104 <!-- /SEARCH BUTTONS -->
107 [% IF ( outer_servers_loop ) %]
110 <legend>Select local databases</legend>
111 [% FOREACH local_servers_loo IN local_servers_loop %]
112 [% IF ( local_servers_loo.checked ) %]
113 <input type="checkbox" id="[% local_servers_loo.id | html %]" name="[% local_servers_loo.name | html %]" checked="checked" value="[% local_servers_loo.value | html %]" />
115 <input type="checkbox" id="[% local_servers_loo.id | html %]" name="[% local_servers_loo.name | html %]" value="[% local_servers_loo.value | html %]" />
117 <label for="[% local_servers_loo.id | html %]">
118 <img width="16" height="16" alt="[% local_servers_loo.id | html %]" src="[% themelang | html %]/img/[% local_servers_loo.icon | html %]" /> [% local_servers_loo.label | html %]
120 [% END # /FOREACH local_servers_loo %]
123 [% END # /IF ( outer_servers_loop ) %]
125 [% IF ( outer_servers_loop ) %]
126 <!-- REMOTE DATABASES -->
127 <fieldset id="databases">
128 <legend>Select remote databases</legend>
129 [% FOREACH outer_servers_loo IN outer_servers_loop %]
130 [% IF ( outer_servers_loo.checked ) %]
131 <input type="checkbox" id="[% outer_servers_loo.id | html %]" name="[% outer_servers_loo.name | html %]" checked="checked" value="[% outer_servers_loo.value | html %]" />
133 <input type="checkbox" id="[% outer_servers_loo.id | html %]" name="[% outer_servers_loo.name | html %]" value="[% outer_servers_loo.value | html %]" />
135 <label for="[% outer_servers_loo.id | html %]">
136 <img alt="[% outer_servers_loo.id | html %]" src="[% themelang | html %]/images/[% outer_servers_loo.icon | html %]" />[% outer_servers_loo.label | html %]
138 [% END # /FOREACH outer_servers_loo %]
139 </fieldset> <!-- /#databases -->
140 <!-- /REMOTE DATABASES -->
143 <!-- BOOLEAN SEARCH OPTIONS -->
144 <fieldset id="searchterms">
145 <legend>Search for </legend>
146 [% FOREACH query IN operands %]
147 [% IF ( expanded_options ) %]
149 <div class="search-term-row" style="text-indent: 4.25em;">
151 <div class="search-term-row">
152 [% SET opindex = loop.index - 1 %]
154 [% IF operators.$opindex == 'OR' %]
155 <option value="AND">and</option>
156 <option value="OR" selected="selected">or</option>
157 <option value="NOT">not</option>
158 [% ELSIF operators.$opindex == 'NOT' %]
159 <option value="AND">and</option>
160 <option value="OR">or</option>
161 <option value="NOT" selected="selected">not</option>
163 <option value="AND" selected="selected">and</option>
164 <option value="OR">or</option>
165 <option value="NOT">not</option>
172 [% SET preselect = 'ms_' _ indexes.${loop.index}.replace(',','comma') %]
173 [% INCLUDE 'search_indexes.inc' ${preselect} = 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>
179 [% IF ( loop.first ) %]
180 <label for="scan">Scan indexes:</label> <input type="checkbox" name="scan" id="scan" value="1" />
185 [% IF Koha.Preference('SearchEngine') == 'Elasticsearch' %]
186 [% IF ( expanded_options ) %]
188 [% IF Koha.Preference('ElasticsearchMARCFormat') == 'ARRAY' %]
189 <label><input type="checkbox" name="whole_record" /> Search entire MARC record</label>
191 <span id="weight_search">
192 <label><input type="checkbox" name="weight_search" checked="checked" /> Apply field weights to search</label>
196 <input type="hidden" name="weight_search" value="1" />
199 [% IF Koha.Preference('IncludeSeeFromInSearches') %]
200 <div class="hint included-see-from-headings-info">
201 <i class="fa fa-info-circle" aria-hidden="true"></i>
202 See from (non-preferred form) headings are included
206 <!-- /BOOLEAN SEARCH OPTIONS -->
207 </div> <!-- /#advanced-search -->
209 <!-- MC-TYPE LIMITS -->
210 <div id="advsearches" class="toptabs">
211 <ul class="nav nav-tabs" role="tablist">
212 [% FOREACH advsearchloo IN advancedsearchesloop %]
213 <li role="presentation" id="advsearch-tab-[% advsearchloo.advanced_search_type | html %]">
214 <a href="#advsearch-[% advsearchloo.advanced_search_type | uri %]" aria-controls="advsearch-[% advsearchloo.advanced_search_type | uri %]" role="tab" data-toggle="tab">
215 [% IF ( advsearchloo.advanced_search_type == 'itemtypes' ) %]<span>Item type</span>
216 [% ELSIF ( advsearchloo.advanced_search_type == 'ccode' ) %]<span>Collection</span>
217 [% ELSIF ( advsearchloo.advanced_search_type == 'loc' ) %]<span>Shelving location</span>
218 [% ELSE %]<span>Something else</span>
222 [% END # /FOREACH advsearchloo %]
225 <div class="tab-content">
226 [% FOREACH advsearchloo IN advancedsearchesloop %]
227 <div id="advsearch-[% advsearchloo.advanced_search_type | html %]" role="tabpanel" class="tab-pane advsearch">
228 <h4>Limit to any of the following:</h4>
231 [% FOREACH itemtypeloo IN advsearchloo.code_loop %]
233 [% SET limit_key = 'mc-' _ itemtypeloo.ccl _ "_" _ itemtypeloo.code %]
234 [% IF limits.$limit_key.defined %]
235 [% limits.delete( limit_key ) %]
236 <input type="checkbox" checked="checked" id="[% itemtypeloo.ccl FILTER remove(',') | html %]-[% itemtypeloo.number | html %]" name="limit" value="mc-[% itemtypeloo.ccl | html %]:[% itemtypeloo.code | html %]"/>
238 <input type="checkbox" id="[% itemtypeloo.ccl FILTER remove(',') | html %]-[% itemtypeloo.number | html %]" name="limit" value="mc-[% itemtypeloo.ccl | html %]:[% itemtypeloo.code | html %]"/>
239 [% END # /IF limits.$limit_key.defined %]
240 <label for="[% itemtypeloo.ccl FILTER remove(',') | html %]-[% itemtypeloo.number | html %]">
241 [% UNLESS ( Koha.Preference('OpacNoItemTypeImages') ) %]
242 [% IF ( itemtypeloo.imageurl ) %]
243 <img src="[% itemtypeloo.imageurl | html %]" alt="[% itemtypeloo.description | html %]" />
247 <span class="itypetext">[% itemtypeloo.description | html %]</span>
250 [% IF ( loop.last ) %]
253 [% UNLESS ( loop.count % 5 ) %]
257 [% END # /IF ( loop.last ) %]
258 [% END # /FOREACH itemtypeloo %]
260 </div> <!-- /#advsearch-[% advsearchloo.advanced_search_type | html %] -->
261 [% END # /FOREACH advsearchloo %]
262 </div> <!-- /.tab-content -->
263 </div> <!-- /#advsearches -->
264 <!-- /MC-TYPE LIMIT -->
266 [% IF ( expanded_options ) %]
267 <!-- BASIC LIMITS -->
268 <fieldset id="basiclimits">
269 <legend>Limits</legend>
270 <fieldset id="pubrange">
271 <!-- PUB / COPY YEAR LIMIT --><!-- FIXME: add publication,copyright,acquisition options -->
273 <label for="limit-yr">Year: </label>
274 [% SET year_limit_key = 'yr,st-numeric' %]
275 <input type="text" size="15" name="limit-yr" id="limit-yr" value="[% limits.$year_limit_key.0 | html %]"/> (format: yyyy-yyyy)
276 [% IF limits.$year_limit_key.defined %]
277 [% limits.delete(year_limit_key) %]
280 <!-- /PUB / COPY YEAR LIMIT -->
281 </fieldset> <!-- /#pubrange -->
283 <fieldset id="language">
284 <!-- LANGUAGE LIMIT -->
286 <label for="language-limit">Language: </label>
287 [% PROCESS language_limit_select ln_loop=search_languages_loop ln_id='language-limit' ln_index='ln' selected = limits.${'ln,rtrn'}.0 %]
288 [% limits.delete( 'ln,rtrn' ) %]
289 <label for="language-original-limit">Language of original: </label>
290 [% PROCESS language_limit_select ln_loop=search_languages_loop ln_id='language-original-limit' ln_index='language-original' selected = limits.${'language-original,rtrn'}.0 %]
291 [% limits.delete( 'language-original,rtrn' ) %]
293 <!-- /LANGUAGE LIMIT -->
294 </fieldset> <!-- /#language -->
295 </fieldset> <!-- /#basiclimits -->
296 <!-- /BASIC LIMITS -->
297 [% END # /IF ( expanded_options ) %]
300 [% INCLUDE 'subtypes_unimarc.inc' %]
302 [% PROCESS 'subtype_limits.inc' %]
303 <!-- SUBTYPE LIMITS -->
304 <fieldset id="subtype">
305 <legend>Subtype limits</legend><p>
306 [% PROCESS subtype_dropdowns %]
307 <fieldset id="current_subtype_limits">
308 <legend>Current subtype limits</legend>
309 [% FOREACH subtype IN ['aud','fic','bio','ctype','l-format'] %]
310 [% FOREACH limit IN limits.$subtype %]
312 <input name="limit" value="[% subtype | html %]:[% limit | html %]" type="hidden">
313 <label for="subtype_limit_[% loop.index() | html %]">[%# PROCESS subtype_limits_description subtype_limit = subtype _':' _ limit #%]</label>
314 <input type="checkbox" class="toggle_limit" name="subtype_limit_[% loop.index() | html %]" checked="checked">
317 [% limits.delete( subtype ) %]
318 [% END # /FOREACH subtype %]
319 </fieldset> <!-- #current_subtype_limits -->
320 </fieldset> <!-- /#subtype -->
321 [% END # /IF ( UNIMARC ) %]
323 <!-- AVAILABILITY LIMITS -->
324 <fieldset id="availability">
325 <legend>Location and availability</legend>
326 <fieldset id="currently-avail">
327 [% IF limit_available %]
328 <p><label for="available-items">Only items currently available:</label> <input type="checkbox" id="available-items" name="limit" value="available" checked="checked" /></p>
330 <p><label for="available-items">Only items currently available:</label> <input type="checkbox" id="available-items" name="limit" value="available" /></p>
332 </fieldset> <!-- /#currently-avail -->
334 <fieldset id="select-libs">
336 <label for="branchloop">Individual libraries:</label>
337 <select name="limit" id="branchloop">
338 <option value="">All libraries</option>
339 [%# FIXME Should not we filter the libraries displayed? %]
340 [% PROCESS options_for_libraries prefix => "branch:" libraries => Branches.all( unfiltered => 1, do_not_select_my_library => 1, selected => limits.branch.0 ) %]
341 [% limits.delete('branch') %]
342 </select> <!-- /#branchloop -->
344 [% IF search_groups %]
347 <label for="categoryloop">Groups of libraries: </label>
348 <select name="limit" id="categoryloop">
349 <option value=""> -- none -- </option>
350 [% FOREACH sg IN search_groups %]
351 [% UNLESS sg.branchcode %]
352 [% IF limits.multibranchlimit.0 == sg.id %]
353 <option selected="selected" value="multibranchlimit:[% sg.id | html %]">[% sg.title | html %]</option>
355 <option value="multibranchlimit:[% sg.id | html %]">[% sg.title | html %]</option>
359 [% limits.delete('multibranchlimit') %]
360 </select> <!-- /#categoryloop -->
362 [% END # /search_groups %]
363 </fieldset> <!-- /#select-libs -->
364 </fieldset> <!-- /#availability -->
365 <!-- /AVAILABILITY LIMITS -->
367 <!-- OTHER LIMITS (facets, etc.) -->
370 <legend>Other limits</legend>
372 [% FOREACH key IN limits.keys %]
373 [% FOREACH limit IN limits.$key %]
375 <input type="hidden" name="limit" value="[% key | html %]:[% limit | html %]">
376 <label for="other_[% key _ loop.index() | html %]">[% key | html %]:[% limit | html %]</label>
377 <input type="checkbox" class="toggle_limit" name="other_[% key _ loop.index() | html %]" checked="checked">
383 [% END # /IF limits.size %]
384 <!-- /OTHER LIMITS (facets, etc.) -->
387 <fieldset id="sortby">
388 <legend>Sorting</legend>
390 <label for="sort_by">Sort by: </label>
391 <select id="sort_by" name="sort_by">
392 [% INCLUDE 'resort_form.inc' sort_by = sort %]
395 </fieldset> <!-- /#sortby -->
396 <!-- /RANK LIMITS -->
401 [% MACRO jsinclude BLOCK %]
402 [% Asset.js("lib/hc-sticky.js") | $raw %]
403 [% Asset.js("js/browser.js") | $raw %]
404 [% Asset.css("css/humanmsg.css") | $raw %]
405 [% Asset.js("lib/jquery/plugins/humanmsg.js") | $raw %]
408 * Function add_field();
409 * This function allows to display a new field to search.
411 function add_field() {
412 var ButtonPlus = document.getElementById("ButtonPlus");
413 var line = ButtonPlus.parentNode;
414 var dad = line.parentNode;
415 dad.appendChild(line.cloneNode(true));
416 line.removeChild(ButtonPlus);
420 $(document).ready(function() {
421 $("input[name=q]:eq(0)").focus();
422 if( $(".tab-pane.active").length < 1 ){
423 $("#advsearches a:first").tab("show");
425 Sticky = $("#toolbar");
428 stickyClass: "floating"
430 [% IF search_groups %]
431 function branch_limit() {
432 if( $("#branchloop").val() != "" ){
433 $("#categoryloop").val("").prop('disabled',true);
435 $("#categoryloop").prop('disabled',false);
437 if ( $("#categoryloop").val() != "" ){
438 $("#branchloop").val("").prop('disabled',true);
440 $("#branchloop").prop('disabled',false);
444 $("#branchloop,#categoryloop").on("change",function(){
449 if( $("#current_subtype_limits input").length == 0 ){
450 $("#current_subtype_limits").hide();
452 $(".toggle_limit").on('click',function(){
453 $(this).siblings("[type='hidden']").prop('disabled', !this.checked);
457 browser = KOHA.browser('[% searchid | html %]');
458 browser.show_back_link();
462 $("#save_filter").click(function(e){
468 let opac = $("#show_filter_opac").prop('checked');
469 let staff_client = $("#show_filter_staff_client").prop('checked');
470 $("select[name='op']").each(function(){
471 operators.push( $(this).val() );
473 $("select[name='idx']").each(function(){
474 indexes.push( $(this).val() );
476 $("input[name='q']").each(function(){
477 operands.push( $(this).val() );
479 $("select[name='limit'],input[name='limit']:checked").each(function(){
480 if( $(this).val() != ""){
481 limits.push( $(this).val() );
484 let year_limit = $("#limit-yr").val();
486 limits.push( "yr,st-numeric:"+year_limit );
489 url: '/api/v1/search_filters/'+ [% edit_filter.id | html %],
491 contentType: "application/json",
492 data: JSON.stringify({
493 name: "[% edit_filter.name | html %]",
494 query: JSON.stringify({ operands: operands, indexes: indexes, operators:operators }),
495 limits: JSON.stringify({ limits: limits }),
497 staff_client: staff_client,
501 .then(function(result) {
502 humanMsg.displayAlert( _("Saved filter: ") + result.name , { className: 'human Success' } );
504 .fail( function(err){
505 humanMsg.displayAlert( _("There was an error during saving:") + err.responseText, { className: 'humanError' } );
517 [% INCLUDE 'intranet-bottom.inc' %]