|
Line 0
Link Here
|
| 0 |
- |
1 |
[% USE CGI %] |
|
|
2 |
[% USE JSON.Escape %] |
| 3 |
|
| 4 |
[% BLOCK form_field_select %] |
| 5 |
<div class="form-field form-field-select"> |
| 6 |
<label class="form-field-label" for="[% name %]">[% label %]</label> |
| 7 |
<select id="[% name %]_op" name="[% name %]_op"> |
| 8 |
<option value="=">is</option> |
| 9 |
[% IF CGI.param(name _ '_op') == '!=' %] |
| 10 |
<option value="!=" selected="selected">is not</option> |
| 11 |
[% ELSE %] |
| 12 |
<option value="!=" >is not</option> |
| 13 |
[% END %] |
| 14 |
</select> |
| 15 |
[% values = CGI.param(name) %] |
| 16 |
<select id="[% name %]" name="[% name %]" multiple="multiple" size="[% options.size < 4 ? options.size + 1 : 4 %]"> |
| 17 |
[% IF (values == '') %] |
| 18 |
<option value="" selected="selected"> |
| 19 |
[% ELSE %] |
| 20 |
<option value=""> |
| 21 |
[% END %] |
| 22 |
[% empty_option || "All" %] |
| 23 |
</option> |
| 24 |
[% FOREACH option IN options %] |
| 25 |
[% IF values.grep(option.value).size %] |
| 26 |
<option value="[% option.value %]" selected="selected">[% option.label %]</option> |
| 27 |
[% ELSE %] |
| 28 |
<option value="[% option.value %]">[% option.label %]</option> |
| 29 |
[% END %] |
| 30 |
[% END %] |
| 31 |
</select> |
| 32 |
</div> |
| 33 |
[% END %] |
| 34 |
|
| 35 |
[% BLOCK form_field_select_option %] |
| 36 |
[% IF params.f == value %] |
| 37 |
<option value="[% value %]" selected="selected">[% label %]</option> |
| 38 |
[% ELSE %] |
| 39 |
<option value="[% value %]">[% label %]</option> |
| 40 |
[% END %] |
| 41 |
[% END %] |
| 42 |
|
| 43 |
[% BLOCK form_field_select_text %] |
| 44 |
<div class="form-field form-field-select-text"> |
| 45 |
[% IF params.exists('c') %] |
| 46 |
<select name="c" class="form-field-conjunction"> |
| 47 |
<option value="and">AND</option> |
| 48 |
[% IF params.c == 'or' %] |
| 49 |
<option value="or" selected="selected">OR</option> |
| 50 |
[% ELSE %] |
| 51 |
<option value="or">OR</option> |
| 52 |
[% END %] |
| 53 |
</select> |
| 54 |
[% ELSE %] |
| 55 |
<select name="c" class="form-field-conjunction" disabled="disabled"> |
| 56 |
<option value="and">AND</option> |
| 57 |
<option value="or">OR</option> |
| 58 |
</select> |
| 59 |
[% END %] |
| 60 |
<select name="f" class="form-field-column"> |
| 61 |
[% INCLUDE form_field_select_option value='barcode' label='Barcode' %] |
| 62 |
[% INCLUDE form_field_select_option value='itemcallnumber' label='Callnumber' %] |
| 63 |
[% INCLUDE form_field_select_option value='stocknumber' label='Stock number' %] |
| 64 |
[% INCLUDE form_field_select_option value='title' label='Title' %] |
| 65 |
[% INCLUDE form_field_select_option value='author' label='Author' %] |
| 66 |
[% INCLUDE form_field_select_option value='publishercode' label='Publisher' %] |
| 67 |
[% INCLUDE form_field_select_option value='publicationdate' label='Publication date' %] |
| 68 |
[% INCLUDE form_field_select_option value='collectiontitle' label='Collection' %] |
| 69 |
[% INCLUDE form_field_select_option value='isbn' label='ISBN' %] |
| 70 |
[% INCLUDE form_field_select_option value='issn' label='ISSN' %] |
| 71 |
[% IF items_search_fields.size %] |
| 72 |
<optgroup label="Custom search fields"> |
| 73 |
[% FOREACH field IN items_search_fields %] |
| 74 |
[% marcfield = field.tagfield %] |
| 75 |
[% IF field.tagsubfield %] |
| 76 |
[% marcfield = marcfield _ '$' _ field.tagsubfield %] |
| 77 |
[% END %] |
| 78 |
[% IF params.f == "marc:$marcfield" %] |
| 79 |
<option value="marc:[% marcfield %]" data-authorised-values-category="[% field.authorised_values_category %]" selected="selected">[% field.label %] ([% marcfield %])</option> |
| 80 |
[% ELSE %] |
| 81 |
<option value="marc:[% marcfield %]" data-authorised-values-category="[% field.authorised_values_category %]">[% field.label %] ([% marcfield %])</option> |
| 82 |
[% END %] |
| 83 |
[% END %] |
| 84 |
</optgroup> |
| 85 |
[% END %] |
| 86 |
</select> |
| 87 |
<input type="text" name="q" class="form-field-value" value="[% params.q %]" /> |
| 88 |
<input type="hidden" name="op" value="like" /> |
| 89 |
</div> |
| 90 |
[% END %] |
| 91 |
|
| 92 |
[% BLOCK form_field_select_text_block %] |
| 93 |
[% c = CGI.param('c').list %] |
| 94 |
[% f = CGI.param('f').list %] |
| 95 |
[% q = CGI.param('q').list %] |
| 96 |
[% op = CGI.param('op').list %] |
| 97 |
[% IF q.size %] |
| 98 |
[% size = q.size - 1 %] |
| 99 |
[% FOREACH i IN [0 .. size] %] |
| 100 |
[% |
| 101 |
params = { |
| 102 |
f => f.$i |
| 103 |
q = q.$i |
| 104 |
op = op.$i |
| 105 |
} |
| 106 |
%] |
| 107 |
[% IF i > 0 %] |
| 108 |
[% j = i - 1 %] |
| 109 |
[% params.c = c.$j %] |
| 110 |
[% END %] |
| 111 |
[% INCLUDE form_field_select_text params=params %] |
| 112 |
[% END %] |
| 113 |
[% ELSE %] |
| 114 |
[% INCLUDE form_field_select_text %] |
| 115 |
[% END %] |
| 116 |
[% END %] |
| 117 |
|
| 118 |
[% BLOCK form_field_radio_yes_no %] |
| 119 |
<div class="form-field"> |
| 120 |
<label class="form-field-label" for="[% name %]">[% label %]:</label> |
| 121 |
<input type="radio" name="[% name %]" id="[% name %]_indifferent" value="" checked="checked"/> |
| 122 |
<label for="[% name %]_indifferent">Indifferent</label> |
| 123 |
<input type="radio" name="[% name %]" id="[% name %]_yes" value="yes" /> |
| 124 |
<label for="[% name %]_yes">Yes</label> |
| 125 |
<input type="radio" name="[% name %]" id="[% name %]_no" value="no" /> |
| 126 |
<label for="[% name %]_no">No</label> |
| 127 |
</div> |
| 128 |
[% END %] |
| 129 |
|
| 130 |
[%# Page starts here %] |
| 131 |
|
| 132 |
[% INCLUDE 'doc-head-open.inc' %] |
| 133 |
<title>Koha › Catalog › Advanced search</title> |
| 134 |
[% INCLUDE 'doc-head-close.inc' %] |
| 135 |
[% INCLUDE 'datatables.inc' %] |
| 136 |
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.dataTables.columnFilter.js"></script> |
| 137 |
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" /> |
| 138 |
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/itemsearchform.css" /> |
| 139 |
<script type="text/javascript"> |
| 140 |
//<![CDATA[ |
| 141 |
var authorised_values = [% authorised_values_json %]; |
| 142 |
|
| 143 |
function loadAuthorisedValuesSelect(select) { |
| 144 |
var selected = select.find('option:selected'); |
| 145 |
var category = selected.data('authorised-values-category'); |
| 146 |
var form_field_value = select.siblings('.form-field-value'); |
| 147 |
if (category && category in authorised_values) { |
| 148 |
var values = authorised_values[category]; |
| 149 |
var html = '<select name="q" class="form-field-value">\n'; |
| 150 |
for (i in values) { |
| 151 |
var value = values[i]; |
| 152 |
html += '<option value="' + value.authorised_value + '">' + value.lib + '</option>\n'; |
| 153 |
} |
| 154 |
html += '</select>\n'; |
| 155 |
var new_form_field_value = $(html); |
| 156 |
new_form_field_value.val(form_field_value.val()); |
| 157 |
form_field_value.replaceWith(new_form_field_value); |
| 158 |
} else { |
| 159 |
if (form_field_value.prop('tagName').toLowerCase() == 'select') { |
| 160 |
html = '<input name="q" type="text" class="form-field-value" />'; |
| 161 |
var new_form_field_value = $(html); |
| 162 |
form_field_value.replaceWith(new_form_field_value); |
| 163 |
} |
| 164 |
} |
| 165 |
} |
| 166 |
|
| 167 |
function addNewField() { |
| 168 |
var form_field = $('div.form-field-select-text').last(); |
| 169 |
var copy = form_field.clone(true); |
| 170 |
copy.find('input,select').not('[type="hidden"]').each(function() { |
| 171 |
$(this).val(''); |
| 172 |
}); |
| 173 |
copy.find('.form-field-conjunction').removeAttr('disabled'); |
| 174 |
form_field.after(copy); |
| 175 |
copy.find('select.form-field-column').change(); |
| 176 |
} |
| 177 |
|
| 178 |
function submitForm($form) { |
| 179 |
var tr = '' |
| 180 |
+ ' <tr>' |
| 181 |
+ ' <th>' + _("Bibliographic reference") + '</th>' |
| 182 |
+ ' <th>' + _("Publication date") + '</th>' |
| 183 |
+ ' <th>' + _("Publisher") + '</th>' |
| 184 |
+ ' <th>' + _("Collection") + '</th>' |
| 185 |
+ ' <th>' + _("Barcode") + '</th>' |
| 186 |
+ ' <th>' + _("Callnumber") + '</th>' |
| 187 |
+ ' <th>' + _("Home branch") + '</th>' |
| 188 |
+ ' <th>' + _("Holding branch") + '</th>' |
| 189 |
+ ' <th>' + _("Location") + '</th>' |
| 190 |
+ ' <th>' + _("Stock number") + '</th>' |
| 191 |
+ ' <th>' + _("Status") + '</th>' |
| 192 |
+ ' <th>' + _("Issues") + '</th>' |
| 193 |
+ ' <th></th>' |
| 194 |
+ ' </tr>' |
| 195 |
var table = '' |
| 196 |
+ '<table id="results">' |
| 197 |
+ ' <thead>' + tr + tr + '</thead>' |
| 198 |
+ ' <tbody></tbody>' |
| 199 |
+ '</table>'; |
| 200 |
$('#results-wrapper').empty().html(table); |
| 201 |
|
| 202 |
var params = []; |
| 203 |
$form.find('select,input[type="text"],input[type="hidden"]').not('[disabled]').each(function () { |
| 204 |
params.push({ 'name': $(this).attr('name'), 'value': $(this).val() }); |
| 205 |
}); |
| 206 |
$form.find('input[type="radio"]:checked').each(function() { |
| 207 |
params.push({ 'name': $(this).attr('name'), 'value': $(this).val() }); |
| 208 |
}); |
| 209 |
|
| 210 |
$('#results').dataTable($.extend(true, {}, dataTablesDefaults, { |
| 211 |
'bDestroy': true, |
| 212 |
'bServerSide': true, |
| 213 |
'sAjaxSource': '/cgi-bin/koha/catalogue/itemsearch.pl', |
| 214 |
'fnServerParams': function(aoData) { |
| 215 |
aoData.push( { 'name': 'format', 'value': 'json' } ); |
| 216 |
for (i in params) { |
| 217 |
aoData.push(params[i]); |
| 218 |
} |
| 219 |
}, |
| 220 |
'sDom': '<"top pager"ilp>t<"bottom pager"ip>', |
| 221 |
'aoColumns': [ |
| 222 |
{ 'sName': 'title' }, |
| 223 |
{ 'sName': 'publicationyear' }, |
| 224 |
{ 'sName': 'publishercode' }, |
| 225 |
{ 'sName': 'collectiontitle' }, |
| 226 |
{ 'sName': 'barcode' }, |
| 227 |
{ 'sName': 'itemcallnumber' }, |
| 228 |
{ 'sName': 'homebranch' }, |
| 229 |
{ 'sName': 'holdingbranch' }, |
| 230 |
{ 'sName': 'location' }, |
| 231 |
{ 'sName': 'stocknumber' }, |
| 232 |
{ 'sName': 'notforloan' }, |
| 233 |
{ 'sName': 'issues' }, |
| 234 |
{ 'sName': 'checkbox', 'bSortable': false } |
| 235 |
] |
| 236 |
})).columnFilter({ |
| 237 |
'sPlaceHolder': 'head:after', |
| 238 |
'aoColumns': [ |
| 239 |
{ 'type': 'text' }, |
| 240 |
{ 'type': 'text' }, |
| 241 |
{ 'type': 'text' }, |
| 242 |
{ 'type': 'text' }, |
| 243 |
{ 'type': 'text' }, |
| 244 |
{ 'type': 'text' }, |
| 245 |
{ 'type': 'select', 'values': [% branches.json %] }, |
| 246 |
{ 'type': 'select', 'values': [% branches.json %] }, |
| 247 |
{ 'type': 'select', 'values': [% locations.json %] }, |
| 248 |
{ 'type': 'text' }, |
| 249 |
{ 'type': 'select', 'values': [% notforloans.json %] }, |
| 250 |
{ 'type': 'text' }, |
| 251 |
null |
| 252 |
] |
| 253 |
}); |
| 254 |
} |
| 255 |
|
| 256 |
function hideForm($form) { |
| 257 |
$form.hide(); |
| 258 |
$('#editsearchlink').show(); |
| 259 |
} |
| 260 |
|
| 261 |
$(document).ready(function () { |
| 262 |
// Add the "New field" link. |
| 263 |
var form_field = $('div.form-field-select-text').last() |
| 264 |
var button_field_new = $('<a href="#" class="button-field-new" title="Add a new field">New field</a>'); |
| 265 |
button_field_new.click(function() { |
| 266 |
addNewField(); |
| 267 |
return false; |
| 268 |
}); |
| 269 |
form_field.after(button_field_new); |
| 270 |
|
| 271 |
// If a field is linked to an authorised values list, display the list. |
| 272 |
$('div.form-field-select-text select').change(function() { |
| 273 |
loadAuthorisedValuesSelect($(this)); |
| 274 |
}).change(); |
| 275 |
|
| 276 |
// Prevent user to select the 'All ...' option with other options. |
| 277 |
$('div.form-field-select').each(function() { |
| 278 |
$(this).find('select').filter(':last').change(function() { |
| 279 |
values = $(this).val(); |
| 280 |
if (values.length > 1) { |
| 281 |
var idx = $.inArray('', values); |
| 282 |
if (idx != -1) { |
| 283 |
values.splice(idx, 1); |
| 284 |
$(this).val(values); |
| 285 |
} |
| 286 |
} |
| 287 |
}); |
| 288 |
}); |
| 289 |
|
| 290 |
$('#itemsearchform').submit(function() { |
| 291 |
var format = $(this).find('input[name="format"]:checked').val(); |
| 292 |
if (format == 'html') { |
| 293 |
submitForm($(this)); |
| 294 |
hideForm($(this)); |
| 295 |
return false; |
| 296 |
} |
| 297 |
}); |
| 298 |
|
| 299 |
$('#editsearchlink').click(function() { |
| 300 |
$('#itemsearchform').show(); |
| 301 |
$(this).hide(); |
| 302 |
return false; |
| 303 |
}); |
| 304 |
}); |
| 305 |
//]]> |
| 306 |
</script> |
| 307 |
</head> |
| 308 |
<body id="catalog_itemsearch" class="catalog"> |
| 309 |
[% INCLUDE 'header.inc' %] |
| 310 |
<div id="breadcrumbs"> |
| 311 |
<a href="/cgi-bin/koha/mainpage.pl">Home</a> › Item search |
| 312 |
</div> |
| 313 |
|
| 314 |
<div id="doc" class="yui-t7"> |
| 315 |
<div id="bd"> |
| 316 |
<h1>Item search</h1> |
| 317 |
<a href="/cgi-bin/koha/catalogue/search.pl">Go to advanced search</a> |
| 318 |
<form action="" method="get" id="itemsearchform"> |
| 319 |
<fieldset> |
| 320 |
<legend>Item search</legend> |
| 321 |
<fieldset> |
| 322 |
[% INCLUDE form_field_select |
| 323 |
name="homebranch" |
| 324 |
label="Home branch" |
| 325 |
options = branches |
| 326 |
empty_option = "All branches" |
| 327 |
%] |
| 328 |
[% INCLUDE form_field_select |
| 329 |
name="location" |
| 330 |
label="Location" |
| 331 |
options = locations |
| 332 |
empty_option = "All locations" |
| 333 |
%] |
| 334 |
</fieldset> |
| 335 |
<fieldset> |
| 336 |
[% INCLUDE form_field_select |
| 337 |
name="itype" |
| 338 |
label="Item type" |
| 339 |
options = itemtypes |
| 340 |
empty_option = "All item types" |
| 341 |
%] |
| 342 |
[% INCLUDE form_field_select |
| 343 |
name="ccode" |
| 344 |
label="Collection code" |
| 345 |
options = ccodes |
| 346 |
empty_option = "All collection codes" |
| 347 |
%] |
| 348 |
</fieldset> |
| 349 |
<fieldset> |
| 350 |
[% INCLUDE form_field_select_text_block %] |
| 351 |
<p class="hint">You can use the following joker characters: % _</p> |
| 352 |
</fieldset> |
| 353 |
<fieldset> |
| 354 |
<div class="form-field"> |
| 355 |
<label class="form-field-label" for="itemcallnumber_from">From call number:</label> |
| 356 |
[% value = CGI.param('itemcallnumber_from') %] |
| 357 |
<input type="text" id="itemcallnumber_from" name="itemcallnumber_from" value="[% value %]" /> |
| 358 |
<span class="hint">(inclusive)</span> |
| 359 |
</div> |
| 360 |
<div class="form-field"> |
| 361 |
[% value = CGI.param('itemcallnumber_to') %] |
| 362 |
<label class="form-field-label" for="itemcallnumber_to">To call number:</label> |
| 363 |
<input type="text" id="itemcallnumber_to" name="itemcallnumber_to" value="[% value %]" /> |
| 364 |
<span class="hint">(inclusive)</span> |
| 365 |
</div> |
| 366 |
[% INCLUDE form_field_radio_yes_no name="damaged" label="Damaged" %] |
| 367 |
[% INCLUDE form_field_radio_yes_no name="itemlost" label="Lost" %] |
| 368 |
<div class="form-field"> |
| 369 |
<label class="form-field-label" for="issues">Issues count:</label> |
| 370 |
<select id="issues_op" name="issues_op"> |
| 371 |
<option value=">">></option> |
| 372 |
<option value="<"><</option> |
| 373 |
<option value="=">=</option> |
| 374 |
<option value="!=">!=</option> |
| 375 |
</select> |
| 376 |
<input type="text" name="issues" /> |
| 377 |
</div> |
| 378 |
<div class="form-field"> |
| 379 |
<label class="form-field-label" for="datelastborrowed">Last issue date:</label> |
| 380 |
<select id="datelastborrowed_op" name="datelastborrowed_op"> |
| 381 |
<option value=">">After</option> |
| 382 |
<option value="<">Before</option> |
| 383 |
<option value="=">On</option> |
| 384 |
</select> |
| 385 |
<input type="text" name="datelastborrowed" /> |
| 386 |
<span class="hint">ISO Format (AAAA-MM-DD)</span> |
| 387 |
</div> |
| 388 |
</fieldset> |
| 389 |
<fieldset> |
| 390 |
<div class="form-field-radio"> |
| 391 |
<label>Output:</label> |
| 392 |
<input type="radio" id="format-html" name="format" value="html" checked="checked" /> <label for="format-html">Screen</label> |
| 393 |
<input type="radio" id="format-csv" name="format" value="csv" /> <label for="format-csv">CSV</label> |
| 394 |
</div> |
| 395 |
<div class="form-actions"> |
| 396 |
<input type="submit" value="Search" /> |
| 397 |
</div> |
| 398 |
</fieldset> |
| 399 |
</fieldset> |
| 400 |
</form> |
| 401 |
|
| 402 |
<p><a id="editsearchlink" href="#" style="display:none">Edit search</a></p> |
| 403 |
|
| 404 |
<div id="results-wrapper"> |
| 405 |
[% IF search_done %] |
| 406 |
|
| 407 |
[% IF total_rows > 0 %] |
| 408 |
<p>Found [% total_rows %] results.</p> |
| 409 |
[% ELSE %] |
| 410 |
<p>No results found.</p> |
| 411 |
[% END %] |
| 412 |
|
| 413 |
[% IF results %] |
| 414 |
[% INCLUDE 'catalogue/itemsearch_items.inc' items = results %] |
| 415 |
[% END %] |
| 416 |
|
| 417 |
<div id="pagination-bar"> |
| 418 |
[% pagination_bar %] |
| 419 |
</div> |
| 420 |
|
| 421 |
[% END %] |
| 422 |
</div> |
| 423 |
</div> |
| 424 |
|
| 425 |
[% INCLUDE 'intranet-bottom.inc' %] |