|
Lines 476-484
Link Here
|
| 476 |
[% SET embed = ['extended_attributes','library'] %] |
476 |
[% SET embed = ['extended_attributes','library'] %] |
| 477 |
let table_node = $("#[% table_id | html %]"); |
477 |
let table_node = $("#[% table_id | html %]"); |
| 478 |
patrons_table = table_node.kohaTable({ |
478 |
patrons_table = table_node.kohaTable({ |
| 479 |
"ajax": { |
479 |
ajax: { |
| 480 |
"url": patron_search_url, |
480 |
url: patron_search_url, |
| 481 |
"dataSrc": function ( json ) { |
481 |
dataSrc: function ( json ) { |
| 482 |
[% IF redirect_if_one_result %] |
482 |
[% IF redirect_if_one_result %] |
| 483 |
// redirect if there is only 1 result. |
483 |
// redirect if there is only 1 result. |
| 484 |
// Do not redirect if state has been loaded |
484 |
// Do not redirect if state has been loaded |
|
Lines 496-502
Link Here
|
| 496 |
} |
496 |
} |
| 497 |
}, |
497 |
}, |
| 498 |
[% IF open_on_row_click OR preview_on_name_click OR remember_selections %] |
498 |
[% IF open_on_row_click OR preview_on_name_click OR remember_selections %] |
| 499 |
"drawCallback": function( settings ) { |
499 |
drawCallback: function( settings ) { |
| 500 |
var api = this.api(); |
500 |
var api = this.api(); |
| 501 |
var data = api.data(); |
501 |
var data = api.data(); |
| 502 |
if ( data.length == 0 ) return; |
502 |
if ( data.length == 0 ) return; |
|
Lines 520-527
Link Here
|
| 520 |
[% END %] |
520 |
[% END %] |
| 521 |
}, |
521 |
}, |
| 522 |
[% END %] |
522 |
[% END %] |
| 523 |
"deferLoading": defer_loading, |
523 |
deferLoading: defer_loading, |
| 524 |
"columns": [ |
524 |
columns: [ |
| 525 |
[% FOR column IN columns %] |
525 |
[% FOR column IN columns %] |
| 526 |
[% IF default_sort_column == column %] |
526 |
[% IF default_sort_column == column %] |
| 527 |
[% order_column_index = loop.count - 1%] |
527 |
[% order_column_index = loop.count - 1%] |
|
Lines 529-547
Link Here
|
| 529 |
[% SWITCH column %] |
529 |
[% SWITCH column %] |
| 530 |
[% CASE 'checkbox' %] |
530 |
[% CASE 'checkbox' %] |
| 531 |
{ |
531 |
{ |
| 532 |
"data": "patron_id", |
532 |
data: "patron_id", |
| 533 |
"searchable": false, |
533 |
searchable: false, |
| 534 |
"orderable": false, |
534 |
orderable: false, |
| 535 |
"render": function( data, type, row, meta ) { |
535 |
render: function( data, type, row, meta ) { |
| 536 |
return "<label for='check" + data + "' class='content_hidden'>" + _("Select patron") + "</label><input type='checkbox' class='check" + data + " selection' name='borrowernumber' value='" + data + "' />"; |
536 |
return "<label for='check" + data + "' class='content_hidden'>" + _("Select patron") + "</label><input type='checkbox' class='check" + data + " selection' name='borrowernumber' value='" + data + "' />"; |
| 537 |
} |
537 |
} |
| 538 |
} |
538 |
} |
| 539 |
[% CASE 'cardnumber' %] |
539 |
[% CASE 'cardnumber' %] |
| 540 |
{ |
540 |
{ |
| 541 |
"data": "cardnumber", |
541 |
data: "cardnumber", |
| 542 |
"searchable": true, |
542 |
searchable: true, |
| 543 |
"orderable": true, |
543 |
orderable: true, |
| 544 |
"render": function( data, type, row, meta ) { |
544 |
render: function( data, type, row, meta ) { |
| 545 |
let patron_id = encodeURIComponent(row.patron_id); |
545 |
let patron_id = encodeURIComponent(row.patron_id); |
| 546 |
[% IF !open_on_row_click AND CAN_user_circulate_circulate_remaining_permissions %] |
546 |
[% IF !open_on_row_click AND CAN_user_circulate_circulate_remaining_permissions %] |
| 547 |
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>"; |
547 |
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>"; |
|
Lines 553-572
Link Here
|
| 553 |
} |
553 |
} |
| 554 |
[% CASE 'dateofbirth' %] |
554 |
[% CASE 'dateofbirth' %] |
| 555 |
{ |
555 |
{ |
| 556 |
"data": "date_of_birth", |
556 |
data: "date_of_birth", |
| 557 |
"type": "date", |
557 |
type: "date", |
| 558 |
"searchable": true, |
558 |
searchable: true, |
| 559 |
"orderable": true, |
559 |
orderable: true, |
| 560 |
"render": function( data, type, row, meta ) { |
560 |
render: function( data, type, row, meta ) { |
| 561 |
return data ? "<span class=\"dateofbirth\">" + escape_str($date(data)) + "<span class=\"agehint\"> (" + _("%s years").format($get_age(data)) + ")</span></span>" : ""; |
561 |
return data ? "<span class=\"dateofbirth\">" + escape_str($date(data)) + "<span class=\"agehint\"> (" + _("%s years").format($get_age(data)) + ")</span></span>" : ""; |
| 562 |
} |
562 |
} |
| 563 |
} |
563 |
} |
| 564 |
[% CASE 'address' %] |
564 |
[% CASE 'address' %] |
| 565 |
{ |
565 |
{ |
| 566 |
"data": "me.street_number:me.address:me.address2:me.city:me.state:me.postal_code:me.country", |
566 |
data: "me.street_number:me.address:me.address2:me.city:me.state:me.postal_code:me.country", |
| 567 |
"searchable": true, |
567 |
searchable: true, |
| 568 |
"orderable": true, |
568 |
orderable: true, |
| 569 |
"render": function( data, type, row, meta ) { |
569 |
render: function( data, type, row, meta ) { |
| 570 |
let r = '<div class="address"><ul>'; |
570 |
let r = '<div class="address"><ul>'; |
| 571 |
r += $format_address(row, { no_line_break: true, include_li: true }); |
571 |
r += $format_address(row, { no_line_break: true, include_li: true }); |
| 572 |
r += '</div></ul>'; |
572 |
r += '</div></ul>'; |
|
Lines 575-584
Link Here
|
| 575 |
} |
575 |
} |
| 576 |
[% CASE 'address-library' %] |
576 |
[% CASE 'address-library' %] |
| 577 |
{ |
577 |
{ |
| 578 |
"data": "me.street_number:me.address:me.address2:me.city:me.state:me.postal_code:me.country", |
578 |
data: "me.street_number:me.address:me.address2:me.city:me.state:me.postal_code:me.country", |
| 579 |
"searchable": true, |
579 |
searchable: true, |
| 580 |
"orderable": true, |
580 |
orderable: true, |
| 581 |
"render": function( data, type, row, meta ) { |
581 |
render: function( data, type, row, meta ) { |
| 582 |
let r = '<div class="address"><ul>'; |
582 |
let r = '<div class="address"><ul>'; |
| 583 |
r += $format_address(row, { no_line_break: true, include_li: true }); |
583 |
r += $format_address(row, { no_line_break: true, include_li: true }); |
| 584 |
r += '</div></ul>'; |
584 |
r += '</div></ul>'; |
|
Lines 588-597
Link Here
|
| 588 |
} |
588 |
} |
| 589 |
[% CASE 'name-address' %] |
589 |
[% CASE 'name-address' %] |
| 590 |
{ |
590 |
{ |
| 591 |
"data": "me.surname:me.preferred_name:me.firstname:me.middle_name:me.othernames:me.street_number:me.address:me.address2:me.city:me.state:me.postal_code:me.country", |
591 |
data: "me.surname:me.preferred_name:me.firstname:me.middle_name:me.othernames:me.street_number:me.address:me.address2:me.city:me.state:me.postal_code:me.country", |
| 592 |
"searchable": true, |
592 |
searchable: true, |
| 593 |
"orderable": true, |
593 |
orderable: true, |
| 594 |
"render": function( data, type, row, meta ) { |
594 |
render: function( data, type, row, meta ) { |
| 595 |
let patron_id = encodeURIComponent(row.patron_id); |
595 |
let patron_id = encodeURIComponent(row.patron_id); |
| 596 |
let r = ''; |
596 |
let r = ''; |
| 597 |
[% IF ! open_on_row_click %] |
597 |
[% IF ! open_on_row_click %] |
|
Lines 613-622
Link Here
|
| 613 |
} |
613 |
} |
| 614 |
[% CASE 'name' %] |
614 |
[% CASE 'name' %] |
| 615 |
{ |
615 |
{ |
| 616 |
"data": "me.surname:me.preferred_name:me.firstname:me.middle_name:me.othernames", |
616 |
data: "me.surname:me.preferred_name:me.firstname:me.middle_name:me.othernames", |
| 617 |
"searchable": true, |
617 |
searchable: true, |
| 618 |
"orderable": true, |
618 |
orderable: true, |
| 619 |
"render": function( data, type, row, meta ) { |
619 |
render: function( data, type, row, meta ) { |
| 620 |
let patron_id = encodeURIComponent(row.patron_id); |
620 |
let patron_id = encodeURIComponent(row.patron_id); |
| 621 |
[% IF ! open_on_row_click %] |
621 |
[% IF ! open_on_row_click %] |
| 622 |
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>"; |
622 |
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>"; |
|
Lines 627-636
Link Here
|
| 627 |
} |
627 |
} |
| 628 |
[% CASE 'branch' %] |
628 |
[% CASE 'branch' %] |
| 629 |
{ |
629 |
{ |
| 630 |
"data": "library.name:me.library_id", |
630 |
data: "library.name:me.library_id", |
| 631 |
"searchable": true, |
631 |
searchable: true, |
| 632 |
"orderable": true, |
632 |
orderable: true, |
| 633 |
"render": function( data, type, row, meta ) { |
633 |
render: function( data, type, row, meta ) { |
| 634 |
if( !singleBranchMode && row.library.library_id == logged_in_library_id ) { |
634 |
if( !singleBranchMode && row.library.library_id == logged_in_library_id ) { |
| 635 |
return "<span class=\"currentlibrary\">" + escape_str(row.library.name) + "</span>"; |
635 |
return "<span class=\"currentlibrary\">" + escape_str(row.library.name) + "</span>"; |
| 636 |
} else { |
636 |
} else { |
|
Lines 640-684
Link Here
|
| 640 |
} |
640 |
} |
| 641 |
[% CASE 'category' %] |
641 |
[% CASE 'category' %] |
| 642 |
{ |
642 |
{ |
| 643 |
"data": "category_id", |
643 |
data: "category_id", |
| 644 |
"searchable": true, |
644 |
searchable: true, |
| 645 |
"orderable": true, |
645 |
orderable: true, |
| 646 |
"render": function( data, type, row, meta ) { |
646 |
render: function( data, type, row, meta ) { |
| 647 |
return escape_str(categories_map[data.toLowerCase()].description); |
647 |
return escape_str(categories_map[data.toLowerCase()].description); |
| 648 |
} |
648 |
} |
| 649 |
} |
649 |
} |
| 650 |
[% CASE 'dateexpiry' %] |
650 |
[% CASE 'dateexpiry' %] |
| 651 |
{ |
651 |
{ |
| 652 |
"data": "expiry_date", |
652 |
data: "expiry_date", |
| 653 |
"type": "date", |
653 |
type: "date", |
| 654 |
"searchable": true, |
654 |
searchable: true, |
| 655 |
"orderable": true, |
655 |
orderable: true, |
| 656 |
"render": function( data, type, row, meta ) { |
656 |
render: function( data, type, row, meta ) { |
| 657 |
return "<span class=\"dateexpiry" + (new Date(data) < new Date() ? ' expired' : '') + "\">" + (data ? escape_str($date(data)) : '') + "</span>"; |
657 |
return "<span class=\"dateexpiry" + (new Date(data) < new Date() ? ' expired' : '') + "\">" + (data ? escape_str($date(data)) : '') + "</span>"; |
| 658 |
} |
658 |
} |
| 659 |
} |
659 |
} |
| 660 |
[% CASE 'borrowernotes' %] |
660 |
[% CASE 'borrowernotes' %] |
| 661 |
{ |
661 |
{ |
| 662 |
"data": "staff_notes", |
662 |
data: "staff_notes", |
| 663 |
"searchable": true, |
663 |
searchable: true, |
| 664 |
"orderable": true, |
664 |
orderable: true, |
| 665 |
[%# We don't escape here, we allow html tag in staff notes %] |
665 |
[%# We don't escape here, we allow html tag in staff notes %] |
| 666 |
} |
666 |
} |
| 667 |
[% CASE 'phone' %] |
667 |
[% CASE 'phone' %] |
| 668 |
{ |
668 |
{ |
| 669 |
"data": "phone", |
669 |
data: "phone", |
| 670 |
"searchable": true, |
670 |
searchable: true, |
| 671 |
"orderable": true, |
671 |
orderable: true, |
| 672 |
"render": function( data, type, row, meta ) { |
672 |
render: function( data, type, row, meta ) { |
| 673 |
return escape_str(data); |
673 |
return escape_str(data); |
| 674 |
} |
674 |
} |
| 675 |
} |
675 |
} |
| 676 |
[% CASE 'checkouts' %][% embed.push('checkouts+count', 'overdues+count') %] |
676 |
[% CASE 'checkouts' %][% embed.push('checkouts+count', 'overdues+count') %] |
| 677 |
{ |
677 |
{ |
| 678 |
"data": "", |
678 |
data: "", |
| 679 |
"searchable": false, |
679 |
searchable: false, |
| 680 |
"orderable": false, |
680 |
orderable: false, |
| 681 |
"render": function( data, type, row, meta ) { |
681 |
render: function( data, type, row, meta ) { |
| 682 |
if ( row.overdues_count ) { |
682 |
if ( row.overdues_count ) { |
| 683 |
return "<span class='overdue'><strong>"+row.overdues_count + "</strong></span>" + " / " + row.checkouts_count; |
683 |
return "<span class='overdue'><strong>"+row.overdues_count + "</strong></span>" + " / " + row.checkouts_count; |
| 684 |
} else { |
684 |
} else { |
|
Lines 688-697
Link Here
|
| 688 |
} |
688 |
} |
| 689 |
[% CASE 'account_balance' %][% embed.push('account_balance') %] |
689 |
[% CASE 'account_balance' %][% embed.push('account_balance') %] |
| 690 |
{ |
690 |
{ |
| 691 |
"data": "", |
691 |
data: "", |
| 692 |
"searchable": false, |
692 |
searchable: false, |
| 693 |
"orderable": false, |
693 |
orderable: false, |
| 694 |
"render": function( data, type, row, meta ) { |
694 |
render: function( data, type, row, meta ) { |
| 695 |
let r = "<span style='text-align: right; display: block;'><a href=\"/cgi-bin/koha/members/boraccount.pl?borrowernumber="+row.patron_id+"\">"; |
695 |
let r = "<span style='text-align: right; display: block;'><a href=\"/cgi-bin/koha/members/boraccount.pl?borrowernumber="+row.patron_id+"\">"; |
| 696 |
let balance_str = row.account_balance || 0; |
696 |
let balance_str = row.account_balance || 0; |
| 697 |
balance_str = balance_str.escapeHtml().format_price(); |
697 |
balance_str = balance_str.escapeHtml().format_price(); |
|
Lines 711-720
Link Here
|
| 711 |
|
711 |
|
| 712 |
[% CASE 'sort1' %] |
712 |
[% CASE 'sort1' %] |
| 713 |
{ |
713 |
{ |
| 714 |
"data": "statistics_1", |
714 |
data: "statistics_1", |
| 715 |
"searchable": true, |
715 |
searchable: true, |
| 716 |
"orderable": true, |
716 |
orderable: true, |
| 717 |
"render": function( data, type, row, meta ) { |
717 |
render: function( data, type, row, meta ) { |
| 718 |
if (data === null) return ''; |
718 |
if (data === null) return ''; |
| 719 |
let bsort1 = av_bsort1_map[data.toString()]; |
719 |
let bsort1 = av_bsort1_map[data.toString()]; |
| 720 |
return escape_str(bsort1 ? bsort1.lib : data); |
720 |
return escape_str(bsort1 ? bsort1.lib : data); |
|
Lines 723-732
Link Here
|
| 723 |
|
723 |
|
| 724 |
[% CASE 'sort2' %] |
724 |
[% CASE 'sort2' %] |
| 725 |
{ |
725 |
{ |
| 726 |
"data": "statistics_2", |
726 |
data: "statistics_2", |
| 727 |
"searchable": true, |
727 |
searchable: true, |
| 728 |
"orderable": true, |
728 |
orderable: true, |
| 729 |
"render": function( data, type, row, meta ) { |
729 |
render: function( data, type, row, meta ) { |
| 730 |
if (data === null) return ''; |
730 |
if (data === null) return ''; |
| 731 |
let bsort2 = av_bsort2_map[data.toString()]; |
731 |
let bsort2 = av_bsort2_map[data.toString()]; |
| 732 |
return escape_str(bsort2 ? bsort2.lib : data); |
732 |
return escape_str(bsort2 ? bsort2.lib : data); |
|
Lines 736-742
Link Here
|
| 736 |
|
736 |
|
| 737 |
[% CASE 'action' %] |
737 |
[% CASE 'action' %] |
| 738 |
{ |
738 |
{ |
| 739 |
"data": function( row, type, val, meta ) { |
739 |
data: function( row, type, val, meta ) { |
| 740 |
|
740 |
|
| 741 |
let patron_id = encodeURIComponent(row.patron_id); |
741 |
let patron_id = encodeURIComponent(row.patron_id); |
| 742 |
let action_node = ""; |
742 |
let action_node = ""; |
|
Lines 764-784
Link Here
|
| 764 |
|
764 |
|
| 765 |
return action_node; |
765 |
return action_node; |
| 766 |
}, |
766 |
}, |
| 767 |
"searchable": false, |
767 |
searchable: false, |
| 768 |
"orderable": false |
768 |
orderable: false |
| 769 |
} |
769 |
} |
| 770 |
[% END %] |
770 |
[% END %] |
| 771 |
[% UNLESS loop.last %],[% END %] |
771 |
[% UNLESS loop.last %],[% END %] |
| 772 |
[% END %] |
772 |
[% END %] |
| 773 |
], |
773 |
], |
| 774 |
'embed': [% To.json(embed) | $raw %], |
774 |
embed: [% To.json(embed) | $raw %], |
| 775 |
"order": [[ [% order_column_index | html %], "asc" ]], |
775 |
order: [[ [% order_column_index | html %], "asc" ]], |
| 776 |
"autoWidth": false, |
776 |
autoWidth: false, |
| 777 |
'lengthMenu': [aLengthMenu, aLengthMenuLabel], |
777 |
lengthMenu: [aLengthMenu, aLengthMenuLabel], |
| 778 |
"pagingType": 'full_numbers', |
778 |
pagingType: 'full_numbers', |
| 779 |
"pageLength": [% Koha.Preference('PatronsPerPage') | html %], |
779 |
pageLength: [% Koha.Preference('PatronsPerPage') | html %], |
| 780 |
[% IF sticky_header %] |
780 |
[% IF sticky_header %] |
| 781 |
"initComplete": function(settings, json) { |
781 |
initComplete: function(settings, json) { |
| 782 |
$("#[% sticky_header | html %]").show(); |
782 |
$("#[% sticky_header | html %]").show(); |
| 783 |
}, |
783 |
}, |
| 784 |
[% END %] |
784 |
[% END %] |