]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/search_form.js
Use Unicode-friendly regular expressions for registering and retrieving patrons by...
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / patron / search_form.js
1 dump('entering patron/search_form.js\n');
2
3 if (typeof patron == 'undefined') patron = {};
4 patron.search_form = function (params) {
5
6         JSAN.use('util.error'); this.error = new util.error();
7         JSAN.use('util.network'); this.network = new util.network();
8         this.w = window;
9 }
10
11 patron.search_form.prototype = {
12
13         'init' : function( params ) {
14
15                 var obj = this;
16
17                 JSAN.use('OpenILS.data'); this.OpenILS = {}; 
18                 obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
19
20                 JSAN.use('util.controller'); obj.controller = new util.controller();
21                 obj.controller.init(
22                         {
23                                 control_map : {
24                                         'cmd_broken' : [
25                                                 ['command'],
26                                                 function() { alert($("commonStrings").getString('common.unimplemented')); }
27                                         ],
28                                         'cmd_patron_search_submit' : [
29                                                 ['command'],
30                                                 function() {
31                                                         obj.submit();
32                                                 }
33                                         ],
34                                         'cmd_patron_search_clear' : [
35                                                 ['command'],
36                                                 function() { 
37                                                         obj.controller.render(); 
38                                                         window.xulG.clear_left_deck();
39                                                 }
40                                         ],
41                                         'family_name' : [
42                                                 ['render'],
43                                                 function(e) {
44                                                         return function() {
45                                                                 if (params.query&&params.query.family_name) {
46                                                                         e.setAttribute('value',params.query.family_name);
47                                                                         e.value = params.query.family_name;
48                                                                 } else {
49                                                                         e.value = '';
50                                                                 }
51                                                         };
52                                                 }
53                                         ],
54                                         'first_given_name' : [
55                                                 ['render'],
56                                                 function(e) {
57                                                         return function() {
58                                                                 if (params.query&&params.query.first_given_name) {
59                                                                         e.setAttribute('value',params.query.first_given_name);
60                                                                         e.value = params.query.first_given_name;
61                                                                 } else {
62                                                                         e.value = '';
63                                                                 }
64                                                         };
65                                                 }
66                                         ],
67                                         'second_given_name' : [
68                                                 ['render'],
69                                                 function(e) {
70                                                         return function() {
71                                                                 if (params.query&&params.query.second_given_name) {
72                                                                         e.setAttribute('value',params.query.second_given_name);
73                                                                         e.value = params.query.second_given_name;
74                                                                 } else {
75                                                                         e.value = '';
76                                                                 }
77                                                         };
78                                                 }
79                                         ],
80                                         'alias' : [
81                                                 ['render'],
82                                                 function(e) {
83                                                         return function() {
84                                                                 if (params.query&&params.query.alias) {
85                                                                         e.setAttribute('value',params.query.alias);
86                                                                         e.value = params.query.alias;
87                                                                 } else {
88                                                                         e.value = '';
89                                                                 }
90                                                         };
91                                                 }
92                                         ],
93                                         'usrname' : [
94                                                 ['render'],
95                                                 function(e) {
96                                                         return function() {
97                                                                 if (params.query&&params.query.usrname) {
98                                                                         e.setAttribute('value',params.query.usrname);
99                                                                         e.value = params.query.usrname;
100                                                                 } else {
101                                                                         e.value = '';
102                                                                 }
103                                                         };
104                                                 }
105                                         ],
106                                         'card' : [
107                                                 ['render'],
108                                                 function(e) {
109                                                         return function() {
110                                                                 if (params.query&&params.query.card) {
111                                                                         e.setAttribute('value',params.query.card);
112                                                                         e.value = params.query.card;
113                                                                 } else {
114                                                                         e.value = '';
115                                                                 }
116                                                         };
117                                                 }
118                                         ],
119                                         'email' : [
120                                                 ['render'],
121                                                 function(e) {
122                                                         return function() {
123                                                                 if (params.query&&params.query.email) {
124                                                                         e.setAttribute('value',params.query.email);
125                                                                         e.value = params.query.email;
126                                                                 } else {
127                                                                         e.value = '';
128                                                                 }
129                                                         };
130                                                 }
131                                         ],
132                                         'phone' : [
133                                                 ['render'],
134                                                 function(e) {
135                                                         return function() {
136                                                                 if (params.query&&params.query.phone) {
137                                                                         e.setAttribute('value',params.query.phone);
138                                                                         e.value = params.query.phone;
139                                                                 } else {
140                                                                         e.value = '';
141                                                                 }
142                                                         };
143                                                 }
144                                         ],
145                                         'ident' : [
146                                                 ['render'],
147                                                 function(e) {
148                                                         return function() {
149                                                                 if (params.query&&params.query.ident) {
150                                                                         e.setAttribute('value',params.query.ident);
151                                                                         e.value = params.query.ident;
152                                                                 } else if (params.query&&params.query.ident_value) {
153                                                                         e.setAttribute('value',params.query.ident_value);
154                                                                         e.value = params.query.ident_value;
155                                                                 } else if (params.query&&params.query.ident_value2) {
156                                                                         e.setAttribute('value',params.query.ident_value2);
157                                                                         e.value = params.query.ident_value2;
158                                                                 } else {
159                                                                         e.value = '';
160                                                                 }
161                                                         };
162                                                 }
163                                         ],
164                                         'street1' : [
165                                                 ['render'],
166                                                 function(e) {
167                                                         return function() {
168                                                                 if (params.query&&params.query.street1) {
169                                                                         e.setAttribute('value',params.query.street1);
170                                                                         e.value = params.query.street1;
171                                                                 } else {
172                                                                         e.value = '';
173                                                                 }
174                                                         };
175                                                 }
176                                         ],
177                                         'street2' : [
178                                                 ['render'],
179                                                 function(e) {
180                                                         return function() {
181                                                                 if (params.query&&params.query.street2) {
182                                                                         e.setAttribute('value',params.query.street2);
183                                                                         e.value = params.query.street2;
184                                                                 } else {
185                                                                         e.value = '';
186                                                                 }
187                                                         };
188                                                 }
189                                         ],
190                                         'city' : [
191                                                 ['render'],
192                                                 function(e) {
193                                                         return function() {
194                                                                 if (params.query&&params.query.city) {
195                                                                         e.setAttribute('value',params.query.city);
196                                                                         e.value = params.query.city;
197                                                                 } else {
198                                                                         e.value = '';
199                                                                 }
200                                                         };
201                                                 }
202                                         ],
203                                         'state' : [
204                                                 ['render'],
205                                                 function(e) {
206                                                         return function() {
207                                                                 if (params.query&&params.query.state) {
208                                                                         e.setAttribute('value',params.query.state);
209                                                                         e.value = params.query.state;
210                                                                 } else {
211                                                                         e.value = '';
212                                                                 }
213                                                         };
214                                                 }
215                                         ],
216                                         'post_code' : [
217                                                 ['render'],
218                                                 function(e) {
219                                                         return function() {
220                                                                 if (params.query&&params.query.post_code) {
221                                                                         e.setAttribute('value',params.query.post_code);
222                                                                         e.value = params.query.post_code;
223                                                                 } else {
224                                                                         e.value = '';
225                                                                 }
226                                                         };
227                                                 }
228                                         ],
229                                         'inactive' : [ ['render'], function(e) { 
230                             return function() {}; 
231                         } 
232                     ],
233                     'search_depth' : [ ['render'],function(e) {
234                             return function() {};
235                         }
236                     ],
237                                 }
238                         }
239                 );
240
241                 obj.controller.render();
242                 var nl = document.getElementsByTagName('textbox');
243                 for (var i = 0; i < nl.length; i++) {
244                         nl[i].addEventListener('keypress',function(ev){
245                                 if (ev.target.tagName != 'textbox') return;
246                                 if (ev.keyCode == 13 /* enter */ || ev.keyCode == 77 /* enter on a mac */) setTimeout( function() { obj.submit(); }, 0);
247                         },false);
248                 }
249                 document.getElementById('family_name').focus();
250
251         JSAN.use('util.file'); JSAN.use('util.widgets'); JSAN.use('util.functional');
252         util.widgets.remove_children(obj.controller.view.search_depth);
253         var ml = util.widgets.make_menulist(
254             util.functional.map_list( obj.OpenILS.data.list.aout, 
255                 function(el,idx) {
256                     return [ el.opac_label(), el.depth() ]
257                 }
258             ).sort(
259                 function(a,b) {
260                     if (a[1] < b[1]) return -1;
261                     if (a[1] > b[1]) return 1;
262                     return 0;
263                 }
264             )
265         );
266         ml.addEventListener('command', function() {
267                 ml.parentNode.setAttribute('value',ml.value);
268                 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
269                 util.widgets.save_attributes(file, { 'search_depth_ml' : [ 'value' ], 'inactive' : [ 'value' ] });
270             }, false
271         );
272         ml.setAttribute('id','search_depth_ml');
273         obj.controller.view.search_depth.appendChild(ml);
274
275                 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
276                 util.widgets.load_attributes(file);
277                 ml.value = ml.getAttribute('value');
278                 if (! ml.value) {
279                         ml.value = 0
280                         ml.setAttribute('value',ml.value);
281                 }
282
283         var cb = obj.controller.view.inactive;
284         cb.addEventListener('command',function() { 
285                 cb.setAttribute('value',cb.checked ? "true" : "false");
286                 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
287                 util.widgets.save_attributes(file, { 'search_depth_ml' : [ 'value' ], 'inactive' : [ 'value' ] });
288             }, false
289         );
290         cb.checked = cb.getAttribute('value') == "true" ? true : false;
291
292         },
293
294         'on_submit' : function(q) {
295                 var msg = 'Query = ' + q;
296                 this.error.sdump('D_PATRON', msg);
297         },
298
299         'submit' : function() {
300                 window.xulG.clear_left_deck();
301                 var obj = this;
302                 var query = {};
303                 for (var i = 0; i < obj.controller.render_list.length; i++) {
304                 var id = obj.controller.render_list[i][0];
305                 var node = document.getElementById(id);
306                         if (node && node.value != '') {
307                                 if (id == 'inactive') {
308                                         query[id] = node.getAttribute('value');
309                                         obj.error.sdump('D_DEBUG','id = ' + id + '  value = ' + node.getAttribute('value') + '\n');
310                 } else {
311                     if (id == 'search_depth') {
312                         query[id] = node.firstChild.getAttribute('value'); 
313                                 } else {
314                                         var value = node.value.replace(/^\s+/,'').replace(/[\\\s]+$/,'');
315                                         //value = value.replace(/\d/g,'');
316                                         switch(id) {
317                                                 case 'family_name' :
318                                                 case 'first_given_name' :
319                                                 case 'second_given_name' :
320                                                         value = value.replace(/^[\d\s]+/g,'').replace(/[\d\s]+$/g,'')
321                                                 break;
322                                         }
323                                         if (value != '') {
324                                                 query[id] = value;
325                                                 obj.error.sdump('D_DEBUG','id = ' + id + '  value = ' + value + '\n');
326                                         }
327                                 }
328                 }
329                         }
330                 }
331                 if (typeof obj.on_submit == 'function') {
332                         obj.on_submit(query);
333                 }
334                 if (typeof window.xulG == 'object' 
335                         && typeof window.xulG.on_submit == 'function') {
336                         obj.error.sdump('D_PATRON','patron.search_form: Calling external .on_submit()\n');
337                         window.xulG.on_submit(query);
338                 } else {
339                         obj.error.sdump('D_PATRON','patron.search_form: No external .on_query()\n');
340                 }
341         },
342
343 }
344
345 dump('exiting patron/search_form.js\n');