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;
17 for (var i in user_perms) {
18 if (user_perms[i].perm() == pid) {
24 p.grantable(pgrant ? 1 : 0);
43 p.grantable(pgrant ? 1 : 0);
51 function save_user () {
56 for (var i in user_perms) {
57 // Group based perm? skip it.
58 if (user_perms[i].id() < 0) continue;
60 if (user_perms[i].depth() == null) {
62 for (var j in perm_list) {
63 if (perm_list[j].id() == user_perms[i].perm()) {
68 throw "Depth is required on the " + p.code() + " permission.";
71 save_perms.push( user_perms[i] );
74 var req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.permissions.update', ses_id, save_perms );
76 var ok = req.getResultObject();
78 if (ok.ilsevent) throw ok;
81 alert( 'User ' + user.usrname() +
82 ' [' + user.card().barcode() + '] ' +
83 ' successfully updated. ' + ok + ' permissions set!');
99 function apply_adv_mode (root) {
100 adv_items = findNodesByClass(root,'advanced');
101 for (var i in adv_items) {
103 removeCSSClass(adv_items[i], 'hideme') :
104 addCSSClass(adv_items[i], 'hideme');
108 function init_editor (u) {
110 var x = document.getElementById('editor').elements;
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'));
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;
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;
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;
133 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve', ses_id, usr_id );
135 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve_by_barcode', ses_id, usr_barcode );
138 user = req.getResultObject();
143 if (user.usrname()) x['user.usrname'].value = user.usrname();
144 x['user.usrname'].setAttribute('onchange','user.usrname(this.value)');
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)');
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)');
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);');
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)');
158 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.permissions.user_perms.retrieve', ses_id );
160 var staff_perms = req.getResultObject();
165 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.permissions.user_perms.retrieve', ses_id, user.id() );
167 user_perms = req.getResultObject();
169 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.permissions.retrieve' );
171 perm_list = req.getResultObject();
174 f = document.getElementById('permissions');
175 while (f.firstChild) f.removeChild(f.lastChild);
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++);
184 function display_perm (root,perm_def,staff_perms, r) {
186 var prow = findNodeByName(document.getElementById('permission-tmpl'), 'prow').cloneNode(true);
187 root.appendChild(prow);
190 for (var i in staff_perms) {
191 if (staff_perms[i].perm() == -1) {
200 for (var i in staff_perms) {
201 if (perm_def.id() == staff_perms[i].perm() || staff_perms[i].perm() == -1) {
208 for (var i in user_perms) {
209 if (perm_def.id() == user_perms[i].perm())
215 if ((up && up.id() < 0) || !sp || !sp.grantable()) dis = true;
216 if (all) dis = false;
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';
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';
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';
234 'perm-depth-' + perm_def.id(),
236 (up ? up.depth() : findOrgDepth(user.home_ou())),
237 { label_field : 'name',
238 value_field : 'depth',
239 empty_label : '-- Select One --',
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';
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'];
257 if (!depth) depth = 0;
259 args['depth'] = parseInt(depth) + 1;
261 var child_field_name = args['child_field_name'];
264 if (typeof sel != 'object')
265 sel = document.getElementById(sel);
268 for (var o in sel.options) {
269 sel.options[o] = null;
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;
278 for (var i in objects) {
279 var l = objects[i][label_field];
280 var v = objects[i][value_field];
282 if (typeof l == 'function')
283 l = objects[i][label_field]();
285 if (typeof v == 'function')
286 v = objects[i][value_field]();
288 var opt = new Option( l, v );
292 opt.style.paddingLeft = '' + d + 'px';
295 sel.options[sel.options.length] = opt;
298 if (typeof def == 'object') {
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]();
321 { label_field : args['label_field'],
322 value_field : args['value_field'],
323 depth : args['depth'],
324 child_field_name : args['child_field_name'] }
331 function findNodesByClass(root, nodeClass, list) {
333 if( !root || !nodeClass) {
337 if(root.nodeType != 1) {
341 if(root.className.match(nodeClass)) list.push( root );
343 var children = root.childNodes;
345 for( var i = 0; i != children.length; i++ ) {
346 findNodesByClass(children[i], nodeClass, list);