5 var OILS_WORK_PERMS = {};
7 var XML_ELEMENT_NODE = 1;
10 var FETCH_ORG_UNIT = "open-ils.actor:open-ils.actor.org_unit.retrieve";
12 function debug(str) { try { dump(str + '\n'); } catch(e){} }
14 function fetchUser(session) {
15 if(session == null ) {
17 session = cgi.param('ses');
19 if(!session) throw "User session is not defined";
21 var request = new Request(FETCH_SESSION, session, 1);
23 var user = request.result();
24 if(checkILSEvent(user)) throw user;
29 /* if defined, callback will get the user object asynchronously */
30 function fetchFleshedUser(id, callback) {
31 if(id == null) return null;
32 var req = new Request(
33 'open-ils.actor:open-ils.actor.user.fleshed.retrieve', SESSION, id );
36 req.callback( function(r){callback(r.getResultObject());} );
46 * Fetches the highest org at for each perm and stores the value in
47 * PERMS[ permName ]. It also returns the org list to the caller
49 function fetchHighestPermOrgs( session, userId, perms ) {
50 var req = new RemoteRequest(
52 'open-ils.actor.user.perm.highest_org.batch',
53 session, userId, perms );
55 var orgs = req.getResultObject();
56 for( var i = 0; i != orgs.length; i++ )
57 PERMS[perms[i]] = orgs[i];
58 //PERMS[ perms[i] ] = ( orgs[i] != null ) ? orgs[i] : -1 ;
62 function fetchHighestWorkPermOrgs(session, userId, perms, onload) {
63 var req = new RemoteRequest(
65 'open-ils.actor.user.work_perm.highest_org_set.batch',
68 req.setCompleteCallback(function(r){
69 onload(OILS_WORK_PERMS = r.getResultObject());
74 return OILS_WORK_PERMS = req.getResultObject();
80 Finds the lowest relevent org unit between a context org unit and a set of
81 permission orgs. This defines the sphere of influence for a given action
82 on a specific set of data. if the context org shares no common nodes with
83 the set of permission orgs, null is returned.
84 returns the orgUnit object
86 function findReleventRootOrg(permOrgList, contextOrgId) {
87 var contextOrgNode = findOrgUnit(contextOrgId);
88 for(var i = 0; i < permOrgList.length; i++) {
89 var permOrg = findOrgUnit(permOrgList[i]);
90 if(orgIsMine(permOrg, contextOrgNode)) {
91 // perm org is equal to or a parent of the context org, so the context org is the highest
92 return contextOrgNode;
93 } else if(orgIsMine(contextOrgNode, permOrg)) {
94 // perm org is a child if the context org, so permOrg is the highest org
102 /* offset is the depth of the highest org
103 in the tree we're building
106 /* XXX Moved to opac_utils.js */
109 function buildOrgSel(selector, org, offset) {
110 insertSelectorVal( selector, -1,
111 org.name(), org.id(), null, findOrgDepth(org) - offset );
112 for( var c in org.children() )
113 buildOrgSel( selector, org.children()[c], offset);
117 /** removes all child nodes in 'tbody' that have the attribute 'key' defined */
118 function cleanTbody(tbody, key) {
119 for( var c = 0; c < tbody.childNodes.length; c++ ) {
120 var child = tbody.childNodes[c];
121 if(child && child.getAttribute(key)) tbody.removeChild(child);
126 /** Inserts a row into a specified place in a table
127 * tbody is the table body
128 * row is the context row after which the new row is to be inserted
129 * newRow is the new row to insert
131 function insRow( tbody, row, newRow ) {
132 if(row.nextSibling) tbody.insertBefore( newRow, row.nextSibling );
133 else{ tbody.appendChild(newRow); }
137 /** Checks to see if a given node should be enabled
138 * A node should be enabled if the itemOrg is lower in the
139 * org tree than my permissions allow editing
140 * I.e. I can edit the context item because it's "below" me
142 function checkDisabled( node, itemOrg, perm ) {
143 var itemDepth = findOrgDepth(itemOrg);
144 var mydepth = findOrgDepth(PERMS[perm]);
145 if( mydepth != -1 && mydepth <= itemDepth ) node.disabled = false;
149 * If the item-related org unit (owner, etc.) is one of or
150 * or a child of any of the perm-orgs related to the
151 * provided permission, enable the requested node
153 function checkPermOrgDisabled(node, itemOrg, perm) {
154 var org_list = OILS_WORK_PERMS[perm];
155 if(org_list.length > 0) {
156 for(var i = 0; i < org_list.length; i++) {
157 var highPermOrg = findOrgUnit(org_list[i]);
158 if(orgIsMine(highPermOrg, findOrgUnit(itemOrg)))
159 node.disabled = false;
165 function fetchOrgUnit(id, callback) {
167 if(ORG_CACHE[id]) return ORG_CACHE[id];
168 var req = new Request(FETCH_ORG_UNIT, SESSION, id);
173 var org = r.getResultObject();
182 var org = req.result();