]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/user_edit.js
xul_param and modal xulG conversion
[Evergreen.git] / Open-ILS / xul / staff_client / server / patron / user_edit.js
1 var cgi;
2 var orgTree;
3 var user;
4 var ses_id;
5 var user_groups = [];
6 var adv_items = [];
7 var user_perms = [];
8 var perm_list = [];
9
10 function set_perm(row) {
11         var pid = findNodeByName(row,'p.code').getAttribute('permid');
12         var papply = findNodeByName(row,'p.id').checked;
13         var pdepth = findNodeByName(row,'p.depth').options[findNodeByName(row,'p.depth').selectedIndex].value;
14         var pgrant = findNodeByName(row,'p.grantable').checked;
15
16         var p;
17         for (var i in user_perms) {
18                 if (user_perms[i].perm() == pid) {
19                         p = user_perms[i];
20                         if (papply) {
21                                 p.isdeleted(0);
22                                 p.ischanged(1);
23                                 p.depth(pdepth);
24                                 p.grantable(pgrant ? 1 : 0);
25                         } else {
26                                 if (p.isnew()) {
27                                         user_perms[i] = null;
28                                 } else {
29                                         p.isdeleted(1);
30                                 }
31                         }
32                         break;
33                 }
34         }
35
36         if (!p) {
37                 if (papply) {
38                         p = new pupm();
39                         p.isnew(1);
40                         p.perm(pid);
41                         p.usr(user.id());
42                         p.depth('' + pdepth);
43                         p.grantable(pgrant ? 1 : 0);
44
45                         user_perms.push(p);
46                 }
47         }
48
49 }
50
51 function save_user () {
52
53         try {
54
55                 var save_perms = [];
56                 for (var i in user_perms) {
57                         // Group based perm? skip it.
58                         if (user_perms[i].id() < 0) continue;
59
60                         if (user_perms[i].depth() == null) {
61                                 var p;
62                                 for (var j in perm_list) {
63                                         if (perm_list[j].id() == user_perms[i].perm()) {
64                                                 p = perm_list[j];
65                                                 break;
66                                         }
67                                 }
68                                 throw "Depth is required on the " + p.code() + " permission.";
69                         }
70
71                         save_perms.push( user_perms[i] );
72                 }
73
74                 var req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.permissions.update', ses_id, save_perms );
75                 req.send(true);
76                 var ok = req.getResultObject();
77
78                 if (ok.ilsevent) throw ok;
79
80                 if (ok) {
81                         alert(  'User ' + user.usrname() +
82                                 ' [' + user.card().barcode() + '] ' +
83                                 ' successfully updated.  ' + ok + ' permissions set!');
84                 }
85
86                 init_editor();
87
88         } catch (e) {
89                 dump( js2JSON( e ));
90                 alert( js2JSON( e ));
91         };
92
93
94
95         return false;
96 }
97
98 var adv_mode = true;
99 function apply_adv_mode (root) {
100         adv_items = findNodesByClass(root,'advanced');
101         for (var i in adv_items) {
102                 adv_mode ?
103                         removeCSSClass(adv_items[i], 'hideme') :
104                         addCSSClass(adv_items[i], 'hideme');
105         }
106 }
107
108 function init_editor (u) {
109         
110         var x = document.getElementById('editor').elements;
111         
112         cgi = new CGI();
113         if (cgi.param('adv')) adv_mode = true; 
114         if (xulG) if (xulG.adv) adv_mode = true;
115         if (xulG) if (xulG.params) if (xulG.params.adv) adv_mode = true;
116         apply_adv_mode(document.getElementById('editor'));
117
118         ses_id = cgi.param('ses'); 
119         if (xulG) if (xulG.ses) ses_id = xulG.ses;
120         if (xulG) if (xulG.params) if (xulG.params.ses) ses_id = xulG.params.ses;
121
122         var usr_id = cgi.param('usr'); 
123         if (xulG) if (xulG.usr_id) usr_id = xulG.usr_id;
124         if (xulG) if (xulG.params) if (xulG.params.usr_id) usr_id = xulG.params.usr_id;
125
126         var usr_barcode = cgi.param('barcode'); 
127         if (xulG) if (xulG.usr_barcode) usr_ibarcode = xulG.usr_barcode;
128         if (xulG) if (xulG.params) if (xulG.params.usr_barcode) usr_ibarcode = xulG.params.usr_barcode;
129
130         try {
131                 var req;
132                 if (usr_id) {
133                         req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve', ses_id, usr_id );
134                 } else {
135                         req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve_by_barcode', ses_id, usr_barcode );
136                 }
137                 req.send(true);
138                 user = req.getResultObject();
139         } catch (E) {
140                 alert(E);
141         }
142
143         if (user.usrname()) x['user.usrname'].value = user.usrname();
144         x['user.usrname'].setAttribute('onchange','user.usrname(this.value)');
145
146         if (user.card() && user.card().barcode()) x['user.card.barcode'].value = user.card().barcode();
147         x['user.card.barcode'].setAttribute('onchange','user.card().barcode(this.value)');
148
149         if (user.first_given_name()) x['user.first_given_name'].value = user.first_given_name();
150         x['user.first_given_name'].setAttribute('onchange','user.first_given_name(this.value)');
151
152         if (user.second_given_name()) x['user.second_given_name'].value = user.second_given_name();
153         x['user.second_given_name'].setAttribute('onchange','user.second_given_name(this.value);');
154
155         if (user.family_name()) x['user.family_name'].value = user.family_name();
156         x['user.family_name'].setAttribute('onchange','user.family_name(this.value)');
157
158         req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.permissions.user_perms.retrieve', ses_id );
159         req.send(true);
160         var staff_perms = req.getResultObject();
161
162         user_perms = [];
163         perm_list = [];
164         if (user.id() > 0) {
165                 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.permissions.user_perms.retrieve', ses_id, user.id() );
166                 req.send(true);
167                 user_perms = req.getResultObject();
168
169                 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.permissions.retrieve' );
170                 req.send(true);
171                 perm_list = req.getResultObject();
172         }
173
174         f = document.getElementById('permissions');
175         while (f.firstChild) f.removeChild(f.lastChild);
176
177         var rcount = 0;
178         for (var i in perm_list.sort(function(a,b){ if (a.code() < b.code()) return -1;return 1; }))
179                 display_perm(f,perm_list[i],staff_perms, rcount++);
180
181         return true;
182 }
183
184 function display_perm (root,perm_def,staff_perms, r) {
185
186         var prow = findNodeByName(document.getElementById('permission-tmpl'), 'prow').cloneNode(true);
187         root.appendChild(prow);
188
189         var all = false;
190         for (var i in staff_perms) {
191                 if (staff_perms[i].perm() == -1) {
192                         all = true;
193                         break;
194                 }
195         }
196
197
198         var sp,up;
199         if (!all) {
200                 for (var i in staff_perms) {
201                         if (perm_def.id() == staff_perms[i].perm() || staff_perms[i].perm() == -1) {
202                                 sp = staff_perms[i];
203                                 break;
204                         }
205                 }
206         }
207
208         for (var i in user_perms) {
209                 if (perm_def.id() == user_perms[i].perm())
210                         up = user_perms[i];
211         }
212
213
214         var dis = false;
215         if ((up && up.id() < 0) || !sp || !sp.grantable()) dis = true; 
216         if (all) dis = false; 
217
218         var label_cell = findNodeByName(prow,'plabel');
219         findNodeByName(label_cell,'p.code').appendChild(text(perm_def.code()));
220         findNodeByName(label_cell,'p.code').setAttribute('title', perm_def.description());
221         findNodeByName(label_cell,'p.code').setAttribute('permid', perm_def.id());
222         if (r % 2) label_cell.className += ' odd';
223
224         var apply_cell = findNodeByName(prow,'papply');
225         findNodeByName(apply_cell,'p.id').disabled = dis;
226         findNodeByName(apply_cell,'p.id').checked = up ? true : false;
227         if (r % 2) apply_cell.className += ' odd';
228
229         var depth_cell = findNodeByName(prow,'pdepth');
230         findNodeByName(depth_cell,'p.depth').disabled = dis;
231         findNodeByName(depth_cell,'p.depth').id = 'perm-depth-' + perm_def.id();
232         if (r % 2) depth_cell.className += ' odd';
233         selectBuilder(
234                 'perm-depth-' + perm_def.id(),
235                 globalOrgTypes,
236                 (up ? up.depth() : findOrgDepth(user.home_ou())),
237                 { label_field           : 'name',
238                   value_field           : 'depth',
239                   empty_label           : '-- Select One --',
240                   empty_value           : '',
241                   clear                 : true }
242         );
243         
244         var grant_cell = findNodeByName(prow,'pgrant');
245         findNodeByName(grant_cell,'p.grantable').disabled = dis;
246         findNodeByName(grant_cell,'p.grantable').checked = up ? (up.grantable() ? true : false) : false;
247         if (r % 2) grant_cell.className += ' odd';
248
249 }
250
251
252 function selectBuilder (id, objects, def, args) {
253         var label_field = args['label_field'];
254         var value_field = args['value_field'];
255         var depth = args['depth'];
256
257         if (!depth) depth = 0;
258
259         args['depth'] = parseInt(depth) + 1;
260
261         var child_field_name = args['child_field_name'];
262
263         var sel = id;
264         if (typeof sel != 'object')
265                 sel = document.getElementById(sel);
266
267         if (args['clear']) {
268                 for (var o in sel.options) {
269                         sel.options[o] = null;
270                 }
271                 args['clear'] = false;
272                 if (args['empty_label']) {
273                         sel.options[0] = new Option( args['empty_label'], args['empty_value'] );
274                         sel.selectedIndex = 0;
275                 }
276         }
277
278         for (var i in objects) {
279                 var l = objects[i][label_field];
280                 var v = objects[i][value_field];
281
282                 if (typeof l == 'function')
283                         l = objects[i][label_field]();
284
285                 if (typeof v == 'function')
286                         v = objects[i][value_field]();
287
288                 var opt = new Option( l, v );
289
290                 if (depth) {
291                         var d = 10 * depth;
292                         opt.style.paddingLeft = '' + d + 'px';
293                 }
294
295                 sel.options[sel.options.length] = opt;
296
297
298                 if (typeof def == 'object') {
299                         for (var j in def) {
300                                 if (v == def[j]) {
301                                         opt.selected = true;
302                                         sel.value = v;
303                                 }
304                         }
305                 } else {
306                         if (v == def) {
307                                 opt.selected = true;
308                                 sel.value = v;
309                         }
310                 }
311
312                 if (child_field_name) {
313                         var c = objects[i][child_field_name];
314                         if (typeof c == 'function')
315                                 c = objects[i][child_field_name]();
316
317                         selectBuilder(
318                                 id,
319                                 c,
320                                 def,
321                                 { label_field           : args['label_field'],
322                                   value_field           : args['value_field'],
323                                   depth                 : args['depth'],
324                                   child_field_name      : args['child_field_name'] }
325                         );
326                 }
327
328         }
329 }       
330
331 function findNodesByClass(root, nodeClass, list) {
332         if(!list) list = [];
333         if( !root || !nodeClass) {
334                 return null;
335         }
336         
337         if(root.nodeType != 1) {
338                 return null;
339         }
340         
341         if(root.className.match(nodeClass)) list.push( root );
342
343         var children = root.childNodes;
344         
345         for( var i = 0; i != children.length; i++ ) {
346                 findNodesByClass(children[i], nodeClass, list);
347         }                       
348                         
349         return list;            
350 }                                       
351