|
Lines 1-6
Link Here
|
| 1 |
[% USE Koha %] |
1 |
[% USE Koha %] |
|
|
2 |
[% USE I18N %] |
| 2 |
[% USE Branches %] |
3 |
[% USE Branches %] |
| 3 |
[% USE raw %] |
4 |
[% USE raw %] |
|
|
5 |
[% USE Asset %] |
| 4 |
[% USE To %] |
6 |
[% USE To %] |
| 5 |
|
7 |
|
| 6 |
[% BLOCK patron_search_filters_simple %] |
8 |
[% BLOCK patron_search_filters_simple %] |
|
Lines 18-29
Link Here
|
| 18 |
<ol> |
20 |
<ol> |
| 19 |
<li> |
21 |
<li> |
| 20 |
<label for="search_patron_filter">Search:</label> |
22 |
<label for="search_patron_filter">Search:</label> |
| 21 |
<div class="hint">Enter patron card number or partial name:</div> |
|
|
| 22 |
<input type="text" id="search_patron_filter" value="[% search_filter | html %]" class="focus" /> |
23 |
<input type="text" id="search_patron_filter" value="[% search_filter | html %]" class="focus" /> |
| 23 |
</li> |
24 |
</li> |
| 24 |
|
25 |
|
| 25 |
[% FOR column IN columns %] |
26 |
[% FOR filter IN filters %] |
| 26 |
[% SWITCH column %] |
27 |
[% SWITCH filter %] |
| 27 |
[% CASE 'branch' %] |
28 |
[% CASE 'branch' %] |
| 28 |
<li> |
29 |
<li> |
| 29 |
<label for="branchcode_filter">Library:</label> |
30 |
<label for="branchcode_filter">Library:</label> |
|
Lines 47-57
Link Here
|
| 47 |
[% END %] |
48 |
[% END %] |
| 48 |
</select> |
49 |
</select> |
| 49 |
</li> |
50 |
</li> |
|
|
51 |
[% CASE 'search_field' %] |
| 52 |
<li> |
| 53 |
<label for="searchfieldstype_filter">Search field:</label> |
| 54 |
<select name="searchfieldstype" id="searchfieldstype_filter"> |
| 55 |
[% pref_fields = Koha.Preference('DefaultPatronSearchFields').split(',') %] |
| 56 |
[% default_fields = [ 'surname,firstname,othernames,cardnumber,userid', 'surname', 'cardnumber', 'email', 'borrowernumber', 'userid', 'phone', 'address', 'dateofbirth', 'sort1', 'sort2' ] %] |
| 57 |
[% search_options = default_fields.merge(pref_fields).unique %] |
| 58 |
[% FOREACH s_o IN search_options %] |
| 59 |
[% display_name = PROCESS patron_fields name=s_o %] |
| 60 |
[% NEXT IF !display_name %] |
| 61 |
[% IF searchfieldstype == s_o %] |
| 62 |
<option selected="selected" value=[% s_o | html %]>[% display_name | $raw %]</option> |
| 63 |
[% ELSE %] |
| 64 |
<option value=[% s_o | html %]>[% display_name | $raw %]</option> |
| 65 |
[% END %] |
| 66 |
[% END %] |
| 67 |
</select> |
| 68 |
</li> |
| 69 |
[% CASE 'search_type' %] |
| 70 |
<li> |
| 71 |
<label for="searchtype_filter">Search type:</label> |
| 72 |
<select name="searchtype" id="searchtype_filter"> |
| 73 |
[% IF searchtype == "start_with" %] |
| 74 |
<option value='start_with' selected="selected">Starts with</option> |
| 75 |
<option value="contain">Contains</option> |
| 76 |
[% ELSE %] |
| 77 |
<option value='start_with'>Starts with</option> |
| 78 |
<option value="contain" selected="selected">Contains</option> |
| 79 |
[% END %] |
| 80 |
</select> |
| 81 |
</li> |
| 50 |
[% END %] |
82 |
[% END %] |
| 51 |
[% END %] |
83 |
[% END %] |
| 52 |
</ol> |
84 |
</ol> |
| 53 |
<fieldset class="action"> |
85 |
<fieldset class="action"> |
| 54 |
<input type="submit" value="Search" /> |
86 |
<input type="submit" value="Search" /> |
|
|
87 |
<input type="button" value="Clear" id="clear_search" /> |
| 55 |
</fieldset> |
88 |
</fieldset> |
| 56 |
</fieldset> |
89 |
</fieldset> |
| 57 |
</form> |
90 |
</form> |
|
Lines 78-88
Link Here
|
| 78 |
[% END %] |
111 |
[% END %] |
| 79 |
</div> |
112 |
</div> |
| 80 |
|
113 |
|
|
|
114 |
|
| 115 |
<h3 style="display: none;">Patrons found for: <span id="searchpattern"></span></h3> |
| 116 |
|
| 81 |
<div id="[% table_id | html %]_search_results" style="display:none;"> |
117 |
<div id="[% table_id | html %]_search_results" style="display:none;"> |
| 82 |
|
118 |
|
| 83 |
<div id="info" class="dialog message" style="display: none;"></div> |
119 |
<div id="info" class="dialog message" style="display: none;"></div> |
| 84 |
<div id="error" class="dialog alert" style="dispay: none;"></div> |
120 |
<div id="error" class="dialog alert" style="display: none;"></div> |
| 85 |
|
|
|
| 86 |
|
121 |
|
| 87 |
<input type="hidden" id="firstletter_filter" value="" /> |
122 |
<input type="hidden" id="firstletter_filter" value="" /> |
| 88 |
[% IF open_on_row_click %] |
123 |
[% IF open_on_row_click %] |
|
Lines 94-99
Link Here
|
| 94 |
<tr> |
129 |
<tr> |
| 95 |
[% FOR column IN columns %] |
130 |
[% FOR column IN columns %] |
| 96 |
[% SWITCH column %] |
131 |
[% SWITCH column %] |
|
|
132 |
[% CASE 'checkbox' %]<th></th> |
| 97 |
[% CASE 'cardnumber' %]<th>Card</th> |
133 |
[% CASE 'cardnumber' %]<th>Card</th> |
| 98 |
[% CASE 'dateofbirth' %]<th>Date of birth</th> |
134 |
[% CASE 'dateofbirth' %]<th>Date of birth</th> |
| 99 |
[% CASE 'name' %]<th>Name</th> |
135 |
[% CASE 'name' %]<th>Name</th> |
|
Lines 166-182
Link Here
|
| 166 |
[% INCLUDE 'js-patron-get-age.inc' %] |
202 |
[% INCLUDE 'js-patron-get-age.inc' %] |
| 167 |
[% INCLUDE 'js-patron-format.inc' %] |
203 |
[% INCLUDE 'js-patron-format.inc' %] |
| 168 |
[% INCLUDE 'js-patron-format-address.inc' %] |
204 |
[% INCLUDE 'js-patron-format-address.inc' %] |
|
|
205 |
[% IF sticky_header %] |
| 206 |
[% Asset.js("lib/hc-sticky.js") | $raw %] |
| 207 |
[% END %] |
| 169 |
|
208 |
|
| 170 |
<script> |
209 |
<script> |
| 171 |
var first_draw = 0; |
210 |
var first_draw = 0; |
| 172 |
let patrons_table; |
211 |
let patrons_table; |
|
|
212 |
var Sticky; |
| 213 |
var singleBranchMode = '[% singleBranchMode | html %]'; |
| 214 |
let logged_in_library_id = "[% Branches.GetLoggedInBranchcode | html %]"; |
| 173 |
|
215 |
|
| 174 |
$(document).ready(function(){ |
216 |
/* popstate event triggered by forward and back button. Need to refresh search */ |
|
|
217 |
window.addEventListener('popstate', (event) => { |
| 218 |
getSearchByLocation( false ); |
| 219 |
}); |
| 175 |
|
220 |
|
|
|
221 |
$(document).ready(function(){ |
| 176 |
|
222 |
|
| 177 |
$("#info").hide(); |
223 |
$("#info").hide(); |
| 178 |
$("#error").hide(); |
224 |
$("#error").hide(); |
| 179 |
|
225 |
|
|
|
226 |
// Build the aLengthMenu |
| 227 |
var aLengthMenu = [ |
| 228 |
[% Koha.Preference('PatronsPerPage') | html %], 10, 20, 50, 100, -1 |
| 229 |
]; |
| 230 |
jQuery.unique(aLengthMenu); |
| 231 |
aLengthMenu.sort(function( a, b ){ |
| 232 |
// Put "All" at the end |
| 233 |
if ( a == -1 ) { |
| 234 |
return 1; |
| 235 |
} else if ( b == -1 ) { |
| 236 |
return -1; |
| 237 |
} |
| 238 |
return parseInt(a) < parseInt(b) ? -1 : 1;} |
| 239 |
); |
| 240 |
var aLengthMenuLabel = []; |
| 241 |
$(aLengthMenu).each(function(){ |
| 242 |
if ( this == -1 ) { |
| 243 |
// Label for -1 is "All" |
| 244 |
aLengthMenuLabel.push(_("All")); |
| 245 |
} else { |
| 246 |
aLengthMenuLabel.push(this); |
| 247 |
} |
| 248 |
}); |
| 249 |
|
| 180 |
let additional_filters = { |
250 |
let additional_filters = { |
| 181 |
surname: function(){ |
251 |
surname: function(){ |
| 182 |
let start_with = $("#firstletter_filter").val() |
252 |
let start_with = $("#firstletter_filter").val() |
|
Lines 184-203
Link Here
|
| 184 |
return { "like": start_with + "%" } |
254 |
return { "like": start_with + "%" } |
| 185 |
}, |
255 |
}, |
| 186 |
"-and": function(){ |
256 |
"-and": function(){ |
| 187 |
let filter = $("#searchmember_filter").val(); |
257 |
let filter = $("#search_patron_filter").val(); |
| 188 |
if (!filter) return ""; |
258 |
if (!filter) return ""; |
| 189 |
[% SET search_fields = Koha.Preference('DefaultPatronSearchFields') || 'surname,firstname,othernames,cardnumber,userid' %] |
259 |
|
| 190 |
return [ |
260 |
let filters = []; |
| 191 |
[% FOR search_field IN search_fields.split(',') %] |
261 |
let search_type = $("#searchtype_filter").val() || "contain"; |
| 192 |
{"me.[% search_field | html %]":{"like":"%"+filter+"%"}}, |
262 |
let search_fields = $("#searchfieldstype_filter").val(); |
| 193 |
[% END %] |
263 |
if ( !search_fields ) { |
| 194 |
[% IF Koha.Preference('ExtendedPatronAttributes') && extended_attribute_types %] |
264 |
search_fields = "[% Koha.Preference('DefaultPatronSearchFields') || 'surname,firstname,othernames,cardnumber,userid' | html %]"; |
| 195 |
{ |
265 |
} |
| 196 |
"extended_attributes.value": { "like": "%" + filter + "%" }, |
266 |
search_fields.split(',').forEach(function(e,i){ |
|
|
267 |
filters.push({["me."+e]:{"like":"%"+filter+(search_type == "contain" ? "%" : "" )}}); |
| 268 |
}); |
| 269 |
[% IF Koha.Preference('ExtendedPatronAttributes') && extended_attribute_types %] |
| 270 |
filters.push({ |
| 271 |
"extended_attributes.value": { "like": "%" + filter + (search_type == "contain" ? "%" : "" )}, |
| 197 |
"extended_attributes.code": extended_attribute_types |
272 |
"extended_attributes.code": extended_attribute_types |
| 198 |
} |
273 |
}); |
| 199 |
[% END %] |
274 |
[% END %] |
| 200 |
]; |
275 |
return filters; |
| 201 |
} |
276 |
} |
| 202 |
}; |
277 |
}; |
| 203 |
patrons_table = $("#[% table_id | html %]").kohaTable({ |
278 |
patrons_table = $("#[% table_id | html %]").kohaTable({ |
|
Lines 218-224
Link Here
|
| 218 |
[% IF redirect_if_one_result %] |
293 |
[% IF redirect_if_one_result %] |
| 219 |
// redirect if there is only 1 result. |
294 |
// redirect if there is only 1 result. |
| 220 |
if ( first_draw && json.recordsFiltered == 1 ) { |
295 |
if ( first_draw && json.recordsFiltered == 1 ) { |
| 221 |
document.location.href = '[% redirect_url | html %]&borrowernumber=' + json.data[0].patron_id; |
296 |
let url = '[% redirect_url | html %]'.indexOf("?") != -1 |
|
|
297 |
? '[% redirect_url | html %]&borrowernumber=' + json.data[0].patron_id |
| 298 |
: '[% redirect_url | html %]?borrowernumber=' + json.data[0].patron_id; |
| 299 |
document.location.href = url; |
| 222 |
return false; |
300 |
return false; |
| 223 |
} |
301 |
} |
| 224 |
first_draw = 0; |
302 |
first_draw = 0; |
|
Lines 227-232
Link Here
|
| 227 |
} |
305 |
} |
| 228 |
}, |
306 |
}, |
| 229 |
embed: ['extended_attributes', 'checkouts+count', 'overdues+count', 'account_balance'], |
307 |
embed: ['extended_attributes', 'checkouts+count', 'overdues+count', 'account_balance'], |
|
|
308 |
[% IF open_on_row_click OR preview_on_name_click %] |
| 230 |
"drawCallback": function( settings ) { |
309 |
"drawCallback": function( settings ) { |
| 231 |
var api = this.api(); |
310 |
var api = this.api(); |
| 232 |
var data = api.data(); |
311 |
var data = api.data(); |
|
Lines 240-251
Link Here
|
| 240 |
}).addClass('clickable'); |
319 |
}).addClass('clickable'); |
| 241 |
$(tr).find("a.patron_name").attr('href', url); |
320 |
$(tr).find("a.patron_name").attr('href', url); |
| 242 |
}); |
321 |
}); |
| 243 |
[% ELSE %] |
322 |
[% END %] |
|
|
323 |
[% IF preview_on_name_click %] |
| 244 |
$.each($(this).find("tbody tr"), function(index, tr) { |
324 |
$.each($(this).find("tbody tr"), function(index, tr) { |
| 245 |
$(tr).find("a.patron_name").addClass("patron_preview"); |
325 |
$(tr).find("a.patron_name").addClass("patron_preview"); |
| 246 |
}); |
326 |
}); |
| 247 |
[% END %] |
327 |
[% END %] |
| 248 |
}, |
328 |
}, |
|
|
329 |
[% END %] |
| 249 |
"order": [[ 1, "asc" ]], |
330 |
"order": [[ 1, "asc" ]], |
| 250 |
"iDeferLoading": 0, |
331 |
"iDeferLoading": 0, |
| 251 |
"columns": [ |
332 |
"columns": [ |
|
Lines 253-272
Link Here
|
| 253 |
[% SWITCH column %] |
334 |
[% SWITCH column %] |
| 254 |
[% CASE 'checkbox' %] |
335 |
[% CASE 'checkbox' %] |
| 255 |
{ |
336 |
{ |
| 256 |
"data": "borrowernumber", |
337 |
"data": "patron_id", |
| 257 |
"searchable": true, |
338 |
"searchable": false, |
| 258 |
"orderable": true, |
339 |
"orderable": false, |
| 259 |
"render": function( data, type, row, meta ) { |
340 |
"render": function( data, type, row, meta ) { |
| 260 |
return "<input type=\"checkbox\" name="data ? escape_str($date(data) + " (" + _("%s years").format($get_age(data)) + ")") : ""; |
341 |
return "<label for='check" + data + "' class='content_hidden'>" + _("Select patron") + "</label><input type='checkbox' id='check" + data + "' class='selection' name='borrowernumber' value='" + data + "' />"; |
| 261 |
|
|
|
| 262 |
return "<label for='check" + data + "' class='content_hidden'>" + _("Select patron") + "</label><input type='checkbox' id='check" + data + "' class='selection' name='borrowernumber' value='" + data + "' />", |
| 263 |
} |
342 |
} |
| 264 |
} |
343 |
} |
| 265 |
[% CASE 'cardnumber' %] |
344 |
[% CASE 'cardnumber' %] |
| 266 |
{ |
345 |
{ |
| 267 |
"data": "cardnumber", |
346 |
"data": "cardnumber", |
| 268 |
"searchable": true, |
347 |
"searchable": true, |
| 269 |
"orderable": true |
348 |
"orderable": true, |
|
|
349 |
"render": function( data, type, row, meta ) { |
| 350 |
let patron_id = encodeURIComponent(row.patron_id); |
| 351 |
[% IF !open_on_row_click AND CAN_user_circulate_circulate_remaining_permissions %] |
| 352 |
return "<a href=\"/cgi-bin/koha/circ/circulation.pl?borrowernumber=" + patron_id + "\" title=\"[% I18N.t("Check out") | html %]\" class=\"patron_name\" data-borrowernumber=\"" + patron_id + "\" style=\"white-space:nowrap\">" + escape_str(data) + "</a>"; |
| 353 |
[% ELSE %] |
| 354 |
return escape_str(data); |
| 355 |
[% END %] |
| 356 |
} |
| 357 |
|
| 270 |
} |
358 |
} |
| 271 |
[% CASE 'dateofbirth' %] |
359 |
[% CASE 'dateofbirth' %] |
| 272 |
{ |
360 |
{ |
|
Lines 334-340
Link Here
|
| 334 |
"orderable": true, |
422 |
"orderable": true, |
| 335 |
"render": function( data, type, row, meta ) { |
423 |
"render": function( data, type, row, meta ) { |
| 336 |
let patron_id = encodeURIComponent(row.patron_id); |
424 |
let patron_id = encodeURIComponent(row.patron_id); |
|
|
425 |
[% IF ! open_on_row_click %] |
| 337 |
return "<a href=\"/cgi-bin/koha/members/moremember.pl?borrowernumber=" + patron_id + "\" class=\"patron_name\" data-borrowernumber=\"" + patron_id + "\" style=\"white-space:nowrap\">" + $patron_to_html(row, { invert_name: 1 }) + "</a>"; |
426 |
return "<a href=\"/cgi-bin/koha/members/moremember.pl?borrowernumber=" + patron_id + "\" class=\"patron_name\" data-borrowernumber=\"" + patron_id + "\" style=\"white-space:nowrap\">" + $patron_to_html(row, { invert_name: 1 }) + "</a>"; |
|
|
427 |
[% ELSE %] |
| 428 |
return $patron_to_html(row, { invert_name: 1 }); |
| 429 |
[% END %] |
| 338 |
} |
430 |
} |
| 339 |
} |
431 |
} |
| 340 |
[% CASE 'branch' %] |
432 |
[% CASE 'branch' %] |
|
Lines 343-349
Link Here
|
| 343 |
"searchable": true, |
435 |
"searchable": true, |
| 344 |
"orderable": true, |
436 |
"orderable": true, |
| 345 |
"render": function( data, type, row, meta ) { |
437 |
"render": function( data, type, row, meta ) { |
| 346 |
return escape_str(libraries_map[data].branchname); |
438 |
let library_name = libraries_map[data].branchname |
|
|
439 |
if( !singleBranchMode && data == logged_in_library_id ) { |
| 440 |
return "<span class=\"currentlibrary\">" + escape_str(library_name) + "</span>"; |
| 441 |
} else { |
| 442 |
return escape_str(library_name); |
| 443 |
} |
| 347 |
} |
444 |
} |
| 348 |
} |
445 |
} |
| 349 |
[% CASE 'category' %] |
446 |
[% CASE 'category' %] |
|
Lines 420-430
Link Here
|
| 420 |
"data": function( row, type, val, meta ) { |
517 |
"data": function( row, type, val, meta ) { |
| 421 |
|
518 |
|
| 422 |
let patron_id = encodeURIComponent(row.patron_id); |
519 |
let patron_id = encodeURIComponent(row.patron_id); |
| 423 |
[% IF selection_type == 'select' %] |
520 |
let action_node = ""; |
| 424 |
return '<a href="#" class="btn btn-default btn-xs select_user" data-borrowernumber="' + patron_id + '">Select</a><input type="hidden" id="borrower_data' + patron_id + '" name="borrower_data'+ patron_id + '" value=\''+JSON.stringify(row)+'\' />'; |
521 |
[% FOR action IN actions %] |
| 425 |
[% ELSE %] |
522 |
[% SWITCH action %] |
| 426 |
return '<a href="#" class="btn btn-default btn-xs add_user" data-borrowernumber="' + patron_id + '" data-firstname="' + encodeURIComponent(row.firstname) + '" data-surname="' + encodeURIComponent(row.surname) + '">Add</a><input type="hidden" id="borrower_data' + patron_id + '" name="borrower_data'+ patron_id + '" />'; |
523 |
[% CASE 'select' %] |
|
|
524 |
action_node += '<a href="#" class="btn btn-default btn-xs select_user" data-borrowernumber="' + patron_id + '">Select</a><input type="hidden" id="borrower_data' + patron_id + '" name="borrower_data'+ patron_id + '" value=\''+JSON.stringify(row)+'\' />'; |
| 525 |
[% CASE 'add' %] |
| 526 |
action_node += '<a href="#" class="btn btn-default btn-xs add_user" data-borrowernumber="' + patron_id + '" data-firstname="' + encodeURIComponent(row.firstname) + '" data-surname="' + encodeURIComponent(row.surname) + '">Add</a><input type="hidden" id="borrower_data' + patron_id + '" name="borrower_data'+ patron_id + '" />'; |
| 527 |
[% CASE 'edit' %] |
| 528 |
action_node += '<a href="/cgi-bin/koha/members/memberentry.pl?op=modify&destination=circ&borrowernumber=' + patron_id + '" class="btn btn-default btn-xs"><i class="fa fa-pencil"></i> Edit</a>'; |
| 529 |
[% CASE 'checkout' %] |
| 530 |
[% IF CAN_user_circulate_circulate_remaining_permissions %] |
| 531 |
action_node += '<a class="btn btn-default btn-xs" href="/cgi-bin/koha/circ/circulation.pl?borrowernumber=' + patron_id + '"><i class="fa fa-barcode"></i> ' + _("Check out") + '</a>'; |
| 532 |
[% END %] |
| 533 |
[% END %] |
| 427 |
[% END %] |
534 |
[% END %] |
|
|
535 |
return action_node; |
| 428 |
}, |
536 |
}, |
| 429 |
"searchable": false, |
537 |
"searchable": false, |
| 430 |
"orderable": false |
538 |
"orderable": false |
|
Lines 434-447
Link Here
|
| 434 |
[% END %] |
542 |
[% END %] |
| 435 |
], |
543 |
], |
| 436 |
'bAutoWidth': false, |
544 |
'bAutoWidth': false, |
|
|
545 |
'lengthMenu': [aLengthMenu, aLengthMenuLabel], |
| 437 |
'sPaginationType': 'full_numbers', |
546 |
'sPaginationType': 'full_numbers', |
| 438 |
"iDisplayLength": [% Koha.Preference('PatronsPerPage') | html %], |
547 |
"pageLength": [% Koha.Preference('PatronsPerPage') | html %], |
|
|
548 |
[% IF sticky_header %] |
| 549 |
"initComplete": function(settings, json) { |
| 550 |
Sticky = $("#[% sticky_header | html %]x"); |
| 551 |
Sticky.hcSticky({ |
| 552 |
stickTo: "#[% sticky_to | html %]", |
| 553 |
stickyClass: "floating" |
| 554 |
}); |
| 555 |
}, |
| 556 |
[% END %] |
| 439 |
}, typeof table_settings !== 'undefined' ? table_settings : null, 1, additional_filters); |
557 |
}, typeof table_settings !== 'undefined' ? table_settings : null, 1, additional_filters); |
| 440 |
|
558 |
|
| 441 |
$("#patron_search_form").on('submit', filter); |
559 |
$("#patron_search_form").on('submit', filter); |
| 442 |
$(".filterByLetter").on("click",function(e){ |
560 |
$(".filterByLetter").on("click",function(e){ |
| 443 |
e.preventDefault(); |
561 |
e.preventDefault(); |
| 444 |
filterByFirstLetterSurname($(this).text()); |
562 |
filterByFirstLetterSurname($(this).text(), true); |
| 445 |
}); |
563 |
}); |
| 446 |
$("body").on("click",".add_user",function(e){ |
564 |
$("body").on("click",".add_user",function(e){ |
| 447 |
e.preventDefault(); |
565 |
e.preventDefault(); |
|
Lines 470-477
Link Here
|
| 470 |
$("#patronPreview .modal-body").html("<img src=\"[% interface | html %]/[% theme | html %]/img/spinner-small.gif\" alt=\"\" /> Loading"); |
588 |
$("#patronPreview .modal-body").html("<img src=\"[% interface | html %]/[% theme | html %]/img/spinner-small.gif\" alt=\"\" /> Loading"); |
| 471 |
}); |
589 |
}); |
| 472 |
|
590 |
|
|
|
591 |
$("#clear_search").on("click",function(e){ |
| 592 |
e.preventDefault(); |
| 593 |
clearFilters(); |
| 594 |
$("#searchpattern").parent().hide(); |
| 595 |
}); |
| 596 |
|
| 597 |
if ( $("#search_patron_filter").val().length > 0 ) { |
| 598 |
$("#patron_search_form").submit(); |
| 599 |
} |
| 600 |
|
| 601 |
/* Initial page load does not trigger the popstate event, so we explicitly call this */ |
| 602 |
getSearchByLocation( false ); |
| 603 |
|
| 473 |
}); |
604 |
}); |
| 474 |
|
605 |
|
|
|
606 |
function getSearchByLocation( setstate ){ |
| 607 |
/* Check to see if the URL contains a search parameter */ |
| 608 |
if( location.search != ""){ |
| 609 |
var params = new URLSearchParams( location.search ); |
| 610 |
var firstletter = params.get("firstletter"); |
| 611 |
/* Check to see if search is a first letter param */ |
| 612 |
if( firstletter ){ |
| 613 |
/* Trigger function to return search results by letter */ |
| 614 |
filterByFirstLetterSurname( firstletter, setstate ); |
| 615 |
} |
| 616 |
} |
| 617 |
} |
| 618 |
|
| 619 |
function update_search_description(){ |
| 620 |
var searched = $("#searchfieldstype_filter").find("option:selected").text(); |
| 621 |
if ( $("#search_patron_filter").val() ) { |
| 622 |
if ( $("#searchtype_filter").val() == 'start_with' ) { |
| 623 |
searched += _(" starting with "); |
| 624 |
} else { |
| 625 |
searched += _(" containing "); |
| 626 |
} |
| 627 |
searched += "'" + $("#search_patron_filter").val() + "'"; |
| 628 |
} |
| 629 |
if ( $("#firstletter_filter").val() ) { |
| 630 |
searched += _(" begins with ") + "'" + $("#firstletter_filter").val() +"'"; |
| 631 |
} |
| 632 |
if ( $("#categorycode_filter").val() ) { |
| 633 |
searched += _(" with category ") + "'" + $("#categorycode_filter").find("option:selected").text() + "'"; |
| 634 |
} |
| 635 |
if ( $("#branchcode_filter").val() ) { |
| 636 |
searched += _(" in library ") + $("#branchcode_filter").find("option:selected").text(); |
| 637 |
} |
| 638 |
$("#searchpattern").text(searched); |
| 639 |
$("#searchpattern").parent().show(); |
| 640 |
} |
| 641 |
|
| 475 |
function filter() { |
642 |
function filter() { |
| 476 |
$("#firstletter_filter").val(''); |
643 |
$("#firstletter_filter").val(''); |
| 477 |
$("#[% table_id | html %]_search_results").show(); |
644 |
$("#[% table_id | html %]_search_results").show(); |
|
Lines 492-541
Link Here
|
| 492 |
table_dt.search(""); |
659 |
table_dt.search(""); |
| 493 |
first_draw = 1; // Only redirect if we are coming from here |
660 |
first_draw = 1; // Only redirect if we are coming from here |
| 494 |
table_dt.draw(); |
661 |
table_dt.draw(); |
|
|
662 |
update_search_description(); |
| 495 |
return false; |
663 |
return false; |
| 496 |
} |
664 |
} |
| 497 |
|
665 |
|
|
|
666 |
function clearFilters() { |
| 667 |
$("#searchfieldstype_filter option:first").prop("selected", true); |
| 668 |
$("#searchtype_filter option[value='contain']").prop("selected", true); |
| 669 |
$("#categorycode_filter option:first").prop("selected", true); |
| 670 |
$("#branchcode_filter option:first").prop("selected", true); |
| 671 |
$("#firstletter_filter").val(''); |
| 672 |
$("#search_patron_filter").val(''); |
| 673 |
/* remove any search string added by firstletter search */ |
| 674 |
history.pushState( {}, null, window.location.href.split("?" )[0]); |
| 675 |
$("#[% table_id | html %]_search_results").hide(); |
| 676 |
update_search_description(); |
| 677 |
} |
| 678 |
|
| 498 |
// User has clicked on a letter |
679 |
// User has clicked on a letter |
| 499 |
function filterByFirstLetterSurname(letter) { |
680 |
function filterByFirstLetterSurname(letter, setstate ) { |
| 500 |
$("#firstletter_filter").val(letter); |
681 |
$("#firstletter_filter").val(letter); |
|
|
682 |
|
| 501 |
$("#[% table_id | html %]_search_results").show(); |
683 |
$("#[% table_id | html %]_search_results").show(); |
|
|
684 |
|
| 685 |
if ( setstate ) { |
| 686 |
history.pushState( null, null, "?firstletter=" + letter ); |
| 687 |
} |
| 688 |
|
| 502 |
patrons_table.DataTable().draw(); |
689 |
patrons_table.DataTable().draw(); |
|
|
690 |
update_search_description(); |
| 503 |
} |
691 |
} |
| 504 |
|
692 |
|
| 505 |
// modify parent window owner element |
693 |
// modify parent window owner element |
| 506 |
[% IF selection_type == 'add' %] |
694 |
function add_user(borrowernumber, borrowername) { |
| 507 |
function add_user(borrowernumber, borrowername) { |
695 |
var p = window.opener; |
| 508 |
var p = window.opener; |
696 |
// In one place (serials/routing.tt), the page is reload on every add |
| 509 |
// In one place (serials/routing.tt), the page is reload on every add |
697 |
// We have to wait for the page to be there |
| 510 |
// We have to wait for the page to be there |
698 |
function wait_for_opener () { |
| 511 |
function wait_for_opener () { |
699 |
if ( ! $(opener.document).find('body').size() ) { |
| 512 |
if ( ! $(opener.document).find('body').size() ) { |
700 |
setTimeout(wait_for_opener, 500); |
| 513 |
setTimeout(wait_for_opener, 500); |
701 |
} else { |
|
|
702 |
[%# Note that add_user could sent data instead of borrowername too %] |
| 703 |
$("#info").hide(); |
| 704 |
$("#error").hide(); |
| 705 |
if ( p.add_user(borrowernumber, borrowername) < 0 ) { |
| 706 |
$("#error").html(_("Patron '%s' is already in the list.").format(borrowername)); |
| 707 |
$("#error").show(); |
| 514 |
} else { |
708 |
} else { |
| 515 |
[%# Note that add_user could sent data instead of borrowername too %] |
709 |
$("#info").html(_("Patron '%s' added.").format(borrowername)); |
| 516 |
$("#info").hide(); |
710 |
$("#info").show(); |
| 517 |
$("#error").hide(); |
|
|
| 518 |
if ( p.add_user(borrowernumber, borrowername) < 0 ) { |
| 519 |
$("#error").html(_("Patron '%s' is already in the list.").format(borrowername)); |
| 520 |
$("#error").show(); |
| 521 |
} else { |
| 522 |
$("#info").html(_("Patron '%s' added.").format(borrowername)); |
| 523 |
$("#info").show(); |
| 524 |
} |
| 525 |
} |
711 |
} |
| 526 |
} |
712 |
} |
| 527 |
wait_for_opener(); |
|
|
| 528 |
} |
713 |
} |
| 529 |
[% ELSIF selection_type == 'select' %] |
714 |
wait_for_opener(); |
| 530 |
function select_user(borrowernumber, data) { |
715 |
} |
| 531 |
var p = window.opener; |
716 |
function select_user(borrowernumber, data) { |
| 532 |
[% IF callback %] |
717 |
var p = window.opener; |
| 533 |
p.[% callback | html %](borrowernumber, data); |
718 |
[% IF callback %] |
| 534 |
[% ELSE %] |
719 |
p.[% callback | html %](borrowernumber, data); |
| 535 |
p.select_user(borrowernumber, data); |
720 |
[% ELSE %] |
| 536 |
[% END %] |
721 |
p.select_user(borrowernumber, data); |
| 537 |
window.close(); |
722 |
[% END %] |
| 538 |
} |
723 |
window.close(); |
| 539 |
[% END %] |
724 |
} |
| 540 |
</script> |
725 |
</script> |
| 541 |
[% END %] |
726 |
[% END %] |