Bug 13041 - Can't add user as manager of basket if name includes a single quote
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / common / patron_search.tt
1 [% USE Koha %]
2 [% INCLUDE 'doc-head-open.inc' %]
3 <title>Koha &rsaquo; Patron search</title>
4 [% INCLUDE 'doc-head-close.inc' %]
5 <link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables.css" />
6 [% INCLUDE 'datatables.inc' %]
7
8 <script type="text/javascript">
9 //<![CDATA[
10
11 var search = 1;
12 $(document).ready(function(){
13     $("#info").hide();
14     $("#error").hide();
15
16     [% IF view != "show_results" %]
17         $("#searchresults").hide();
18         search = 0;
19     [% END %]
20
21     // Apply DataTables on the results table
22     dtMemberResults = $("#memberresultst").dataTable($.extend(true, {}, dataTablesDefaults, {
23         'bServerSide': true,
24         'sAjaxSource': "/cgi-bin/koha/svc/members/search",
25         'fnServerData': function(sSource, aoData, fnCallback) {
26             if ( ! search ) {
27                 return;
28             }
29             aoData.push({
30                 'name': 'searchmember',
31                 'value': $("#searchmember_filter").val()
32             },{
33                 'name': 'firstletter',
34                 'value': $("#firstletter_filter").val()
35             },{
36                 'name': 'categorycode',
37                 'value': $("#categorycode_filter").val()
38             },{
39                 'name': 'branchcode',
40                 'value': $("#branchcode_filter").val()
41             },{
42                 'name': 'name_sorton',
43                 'value': 'borrowers.surname borrowers.firstname'
44             },{
45                 'name': 'category_sorton',
46                 'value': 'categories.description',
47             },{
48                 'name': 'branch_sorton',
49                 'value': 'branches.branchname'
50             },{
51                 'name': 'template_path',
52                 'value': '[% json_template %]',
53             },{
54                 'name': 'selection_type',
55                 'value': '[% selection_type %]',
56             }
57             [% IF patrons_with_acq_perm_only %]
58             ,{
59                 'name': 'has_permission',
60                 'value': 'acquisition.order_manage',
61             }
62             [% END %]
63             );
64             $.ajax({
65                 'dataType': 'json',
66                 'type': 'POST',
67                 'url': sSource,
68                 'data': aoData,
69                 'success': function(json){
70                     fnCallback(json);
71                 }
72             });
73         },
74         'aoColumns':[
75             [% FOR column IN columns %]
76                 [% IF column == 'action' %]
77                     { 'mDataProp': 'dt_action', 'bSortable': false, 'sClass': 'actions' }
78                 [% ELSIF column == 'address' %]
79                     { 'mDataProp': 'dt_address', 'bSortable': false }
80                 [% ELSE %]
81                     { 'mDataProp': 'dt_[% column %]' }
82                 [% END %]
83                 [% UNLESS loop.last %],[% END %]
84             [% END %]
85         ],
86         'bAutoWidth': false,
87         [% IF patrons_with_acq_perm_only %]
88             'bPaginate': false,
89         [% ELSE %]
90             'sPaginationType': 'full_numbers',
91             "iDisplayLength": [% Koha.Preference('PatronsPerPage') %],
92         [% END %]
93         'aaSorting': [[[% aaSorting || 0 %], 'asc']],
94         'bFilter': false,
95         'bProcessing': true,
96     }));
97
98     $("#searchform").on('submit', filter);
99     $(".filterByLetter").on("click",function(e){
100         e.preventDefault();
101         filterByFirstLetterSurname($(this).text());
102     });
103     $("body").on("click",".add_user",function(e){
104         e.preventDefault();
105         var borrowernumber = $(this).data("borrowernumber");
106         var firstname = $(this).data("firstname");
107         var surname = $(this).data("surname");
108         add_user( borrowernumber, firstname + " " + surname );
109     });
110 });
111
112 function filter() {
113     search = 1;
114     $("#firstletter_filter").val('');
115     $("#searchresults").show();
116     dtMemberResults.fnDraw();
117     return false;
118 }
119
120 // User has clicked on a letter
121 function filterByFirstLetterSurname(letter) {
122     $("#firstletter_filter").val(letter);
123     search = 1;
124     $("#searchresults").show();
125     dtMemberResults.fnDraw();
126 }
127
128
129     // modify parent window owner element
130     [% IF selection_type == 'add' %]
131         function add_user(borrowernumber, borrowername) {
132             var p = window.opener;
133             // In one place (serials/routing.tt), the page is reload on every add
134             // We have to wait for the page to be there
135             function wait_for_opener () {
136                 if ( ! $(opener.document).find('body').size() ) {
137                     setTimeout(wait_for_opener, 500);
138                 } else {
139                     [%# Note that add_user could sent data instead of borrowername too %]
140                     $("#info").hide();
141                     $("#error").hide();
142                     if ( p.add_user(borrowernumber, borrowername) < 0 ) {
143                         $("#error").html(_("Patron '%s' is already in the list.").format(borrowername));
144                         $("#error").show();
145                     } else {
146                         $("#info").html(_("Patron '%s' added.").format(borrowername));
147                         $("#info").show();
148                     }
149                 }
150             }
151             wait_for_opener();
152         }
153     [% ELSIF selection_type == 'select' %]
154         function select_user(borrowernumber, data) {
155             var p = window.opener;
156             p.select_user(borrowernumber, data);
157             window.close();
158         }
159     [% END %]
160 //]]>
161 </script>
162
163 </head>
164 <body id="common_patron_search" class="common">
165 <div id="patron_search" class="yui-t7">
166   <div id="bd">
167     <div class="yui-g">
168
169         <form id="searchform">
170             <fieldset class="brief">
171                 <h3>Search for patron</h3>
172                 <ol>
173                     <li>
174                         <label for="searchmember_filter">Search:</label>
175                         <input type="text" id="searchmember_filter" value="[% searchmember %]"/>
176                     </li>
177                     <li>
178                         <label for="categorycode_filter">Category:</label>
179                         <select id="categorycode_filter">
180                             <option value="">Any</option>
181                             [% FOREACH category IN categories %]
182                                 <option value="[% category.categorycode %]">[% category.description %]</option>
183                             [% END %]
184                         </select>
185                     </li>
186                     <li>
187                         <label for="branchcode_filter">Library:</label>
188                         <select id="branchcode_filter">
189                             [% IF branches.size != 1 %]
190                                 <option value="">Any</option>
191                             [% END %]
192                             [% FOREACH branch IN branches %]
193                                 <option value="[% branch.branchcode %]">[% branch.branchname %]</option>
194                             [% END %]
195                         </select>
196                     </li>
197                 </ol>
198                 <fieldset class="action">
199                     <input type="submit" value="Search" />
200                 </fieldset>
201             </fieldset>
202         </form>
203
204         [% IF patrons_with_acq_perm_only %]
205             <div class="hint">Only staff with superlibrarian or acquisitions permissions (or order_manage permission if granular permissions are enabled) are returned in the search results</div>
206         [% END %]
207
208         <div class="browse">
209             Browse by last name:
210             [% FOREACH letter IN alphabet.split(' ') %]
211                 <a href="#" class="filterByLetter">[% letter %]</a>
212             [% END %]
213         </div>
214
215         <div id="info" class="dialog message"></div>
216         <div id="error" class="dialog alert"></div>
217
218         <input type="hidden" id="firstletter_filter" value="" />
219         <div id="searchresults">
220             <table id="memberresultst">
221                 <thead>
222                     <tr>
223                         [% FOR column IN columns %]
224                             [% SWITCH column %]
225                                 [% CASE 'cardnumber' %]<th>Card</th>
226                                 [% CASE 'dateofbirth' %]<th>Date of birth</th>
227                                 [% CASE 'address' %]<th>Address</th>
228                                 [% CASE 'name' %]<th>Name</th>
229                                 [% CASE 'branch' %]<th>Library</th>
230                                 [% CASE 'category' %]<th>Category</th>
231                                 [% CASE 'dateexpiry' %]<th>Expires on</td>
232                                 [% CASE 'borrowernotes' %]<th>Notes</th>
233                                 [% CASE 'action' %]<th>&nbsp;</th>
234                             [% END %]
235                         [% END %]
236                     </tr>
237                   </thead>
238                 <tbody></tbody>
239             </table>
240         </div>
241
242 <div id="closewindow"><a href="#" class="btn btn-default close">Close</a></div>
243 </div>
244 </div>
245 [% INCLUDE 'intranet-bottom.inc' %]