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 () {
55 for (var i in user_perms) {
56 if (user_perms[i].depth() == null) {
58 for (var j in perm_list) {
59 if (perm_list[j].id() == user_perms[i].perm()) {
64 throw "Depth is required on the " + p.code() + " permission.";
68 var req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.permissions.update', ses_id, user_perms );
70 var ok = req.getResultObject();
72 if (ok.ilsevent) throw ok;
75 alert( 'User ' + user.usrname() +
76 ' [' + user.card().barcode() + '] ' +
77 ' successfully updated. ' + ok + ' permissions set!');
93 function apply_adv_mode (root) {
94 adv_items = findNodesByClass(root,'advanced');
95 for (var i in adv_items) {
97 removeCSSClass(adv_items[i], 'hideme') :
98 addCSSClass(adv_items[i], 'hideme');
102 function init_editor (u) {
104 var x = document.getElementById('editor').elements;
107 if (cgi.param('adv')) adv_mode = true;
108 apply_adv_mode(document.getElementById('editor'));
110 ses_id = cgi.param('ses');
112 var usr_id = cgi.param('usr');
113 var usr_barcode = cgi.param('barcode');
118 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve', ses_id, usr_id );
120 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve_by_barcode', ses_id, usr_barcode );
123 user = req.getResultObject();
128 if (user.usrname()) x['user.usrname'].value = user.usrname();
129 x['user.usrname'].setAttribute('onchange','user.usrname(this.value)');
131 if (user.card() && user.card().barcode()) x['user.card.barcode'].value = user.card().barcode();
132 x['user.card.barcode'].setAttribute('onchange','user.card().barcode(this.value)');
134 if (user.first_given_name()) x['user.first_given_name'].value = user.first_given_name();
135 x['user.first_given_name'].setAttribute('onchange','user.first_given_name(this.value)');
137 if (user.second_given_name()) x['user.second_given_name'].value = user.second_given_name();
138 x['user.second_given_name'].setAttribute('onchange','user.second_given_name(this.value);');
140 if (user.family_name()) x['user.family_name'].value = user.family_name();
141 x['user.family_name'].setAttribute('onchange','user.family_name(this.value)');
143 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.permissions.user_perms.retrieve', ses_id );
145 var staff_perms = req.getResultObject();
150 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.permissions.user_perms.retrieve', ses_id, user.id() );
152 user_perms = req.getResultObject();
154 req = new RemoteRequest( 'open-ils.actor', 'open-ils.actor.permissions.retrieve' );
156 perm_list = req.getResultObject();
159 f = document.getElementById('permissions');
160 while (f.firstChild) f.removeChild(f.lastChild);
163 for (var i in perm_list.sort(function(a,b){ if (a.code() < b.code()) return -1;return 1; }))
164 display_perm(f,perm_list[i],staff_perms, rcount++);
169 function display_perm (root,perm_def,staff_perms, r) {
171 var prow = findNodeByName(document.getElementById('permission-tmpl'), 'prow').cloneNode(true);
172 root.appendChild(prow);
175 for (var i in staff_perms) {
176 if (staff_perms[i].perm() == -1) {
185 for (var i in staff_perms) {
186 if (perm_def.id() == staff_perms[i].perm() || staff_perms[i].perm() == -1) {
193 for (var i in user_perms) {
194 if (perm_def.id() == user_perms[i].perm())
200 if (up.id() < 0 || !sp || !sp.grantable()) dis = true;
201 if (all) dis = false;
203 var label_cell = findNodeByName(prow,'plabel');
204 findNodeByName(label_cell,'p.code').appendChild(text(perm_def.code()));
205 findNodeByName(label_cell,'p.code').setAttribute('title', perm_def.description());
206 findNodeByName(label_cell,'p.code').setAttribute('permid', perm_def.id());
207 if (r % 2) label_cell.className += ' odd';
209 var apply_cell = findNodeByName(prow,'papply');
210 findNodeByName(apply_cell,'p.id').disabled = dis;
211 findNodeByName(apply_cell,'p.id').checked = up ? true : false;
212 if (r % 2) apply_cell.className += ' odd';
214 var depth_cell = findNodeByName(prow,'pdepth');
215 findNodeByName(depth_cell,'p.depth').disabled = dis;
216 findNodeByName(depth_cell,'p.depth').id = 'perm-depth-' + perm_def.id();
217 if (r % 2) depth_cell.className += ' odd';
219 'perm-depth-' + perm_def.id(),
221 (up ? up.depth() : findOrgDepth(user.home_ou())),
222 { label_field : 'name',
223 value_field : 'depth',
224 empty_label : '-- Select One --',
229 var grant_cell = findNodeByName(prow,'pgrant');
230 findNodeByName(grant_cell,'p.grantable').disabled = dis;
231 findNodeByName(grant_cell,'p.grantable').checked = up ? (up.grantable() ? true : false) : false;
232 if (r % 2) grant_cell.className += ' odd';
237 function selectBuilder (id, objects, def, args) {
238 var label_field = args['label_field'];
239 var value_field = args['value_field'];
240 var depth = args['depth'];
242 if (!depth) depth = 0;
244 args['depth'] = parseInt(depth) + 1;
246 var child_field_name = args['child_field_name'];
249 if (typeof sel != 'object')
250 sel = document.getElementById(sel);
253 for (var o in sel.options) {
254 sel.options[o] = null;
256 args['clear'] = false;
257 if (args['empty_label']) {
258 sel.options[0] = new Option( args['empty_label'], args['empty_value'] );
259 sel.selectedIndex = 0;
263 for (var i in objects) {
264 var l = objects[i][label_field];
265 var v = objects[i][value_field];
267 if (typeof l == 'function')
268 l = objects[i][label_field]();
270 if (typeof v == 'function')
271 v = objects[i][value_field]();
273 var opt = new Option( l, v );
277 opt.style.paddingLeft = '' + d + 'px';
280 sel.options[sel.options.length] = opt;
283 if (typeof def == 'object') {
297 if (child_field_name) {
298 var c = objects[i][child_field_name];
299 if (typeof c == 'function')
300 c = objects[i][child_field_name]();
306 { label_field : args['label_field'],
307 value_field : args['value_field'],
308 depth : args['depth'],
309 child_field_name : args['child_field_name'] }
316 function findNodesByClass(root, nodeClass, list) {
318 if( !root || !nodeClass) {
322 if(root.nodeType != 1) {
326 if(root.className.match(nodeClass)) list.push( root );
328 var children = root.childNodes;
330 for( var i = 0; i != children.length; i++ ) {
331 findNodesByClass(children[i], nodeClass, list);