1 var SC_FETCH_ALL = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.retrieve.all';
2 var SC_CREATE = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.create';
3 var SC_UPDATE = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.update';
4 var SC_DELETE = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.delete';
5 var SC_ENTRY_CREATE = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.entry.create';
6 var SC_ENTRY_UPDATE = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.entry.update';
7 var SC_ENTRY_DELETE = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.entry.delete';
20 var opacVisible = false;
24 function scEditorInit() {
26 session = cgi.param('ses');
27 if(!session) throw "User session is not defined";
28 user = fetchUser(session);
29 setTimeout( function() { scFetchPerms(); scGo(); }, 20 );
35 var show = cgi.param('show');
36 if(!show) show = ASSET;
39 $('sc_user').appendChild(text(user.usrname()));
42 function scFetchPerms() {
44 var req = new RemoteRequest(
46 'open-ils.actor.user.perm.highest_org.batch', session, user.id(),
47 [ 'CREATE_PATRON_STAT_CAT',
48 'UPDATE_PATRON_STAT_CAT',
49 'DELETE_PATRON_STAT_CAT',
50 'CREATE_PATRON_STAT_CAT_ENTRY',
51 'UPDATE_PATRON_STAT_CAT_ENTRY',
52 'DELETE_PATRON_STAT_CAT_ENTRY',
54 'CREATE_COPY_STAT_CAT',
55 'UPDATE_COPY_STAT_CAT',
56 'DELETE_COPY_STAT_CAT',
57 'CREATE_COPY_STAT_CAT_ENTRY',
58 'UPDATE_COPY_STAT_CAT_ENTRY',
59 'DELETE_COPY_STAT_CAT_ENTRY' ] );
62 var orgs = req.getResultObject();
64 PERMS[ACTOR].create_stat_cat = orgs[0];
65 PERMS[ACTOR].update_stat_cat = orgs[1];
66 PERMS[ACTOR].delete_stat_cat = orgs[2];
67 PERMS[ACTOR].create_stat_cat_entry = orgs[3];
68 PERMS[ACTOR].update_stat_cat_entry = orgs[4];
69 PERMS[ACTOR].delete_stat_cat_entry = orgs[5];
71 PERMS[ASSET].create_stat_cat = orgs[6];
72 PERMS[ASSET].update_stat_cat = orgs[7];
73 PERMS[ASSET].delete_stat_cat = orgs[8];
74 PERMS[ASSET].create_stat_cat_entry = orgs[9];
75 PERMS[ASSET].update_stat_cat_entry = orgs[10];
76 PERMS[ASSET].delete_stat_cat_entry = orgs[11];
79 function scFetchPerm(perm) {
80 var req = new RemoteRequest(
82 'open-ils.actor.user.perm.highest_org', session, user.id(), perm );
84 return req.getResultObject();
85 PERMS.create_stat = req.getResultObjecdt();
89 function _cleanTbody(tbody) {
90 for( var c = 0; c < tbody.childNodes.length; c++ ) {
91 var child = tbody.childNodes[c];
92 if(child && child.getAttribute('edit')) tbody.removeChild(child);
96 function fetchUser(session) {
97 var request = new Request(FETCH_SESSION, session, 1 );
99 var user = request.result();
100 if(checkILSEvent(user)) throw user;
105 function scFetchAll( session, type, orgid, callback, args ) {
106 var req = new Request(
107 SC_FETCH_ALL.replace(/TYPE/, type) , session, orgid );
112 function scShow(type) {
114 currentlyVisible = type;
116 if( type == ASSET ) {
117 addCSSClass($('sc_show_copy'), 'has_color');
118 removeCSSClass($('sc_show_actor'), 'has_color');
120 } else if( type == ACTOR ) {
121 addCSSClass($('sc_show_actor'), 'has_color');
122 removeCSSClass($('sc_show_copy'), 'has_color');
125 scCache[type] = scFetchAll( session, type, user.home_ou() );
126 scDraw( type, scCache[type] );
129 var scRow; var scCounter;
130 function scDraw( type, cats ) {
132 hideMe($('loading'));
133 if(!cats || cats.length == 0) return unHideMe($('sc_none'));
134 var tbody = $('sc_tbody');
136 if(!scRow) scRow = tbody.removeChild($('sc_tr'));
137 removeChildren(tbody);
138 unHideMe($('sc_table'));
141 for( var c in cats ) scInsertCat( tbody, cats[c], type );
146 function scInsertCat( tbody, cat, type ) {
148 var row = scRow.cloneNode(true);
149 row.id = 'sc_tr_' + cat.id();
150 var name_td = $n(row, 'sc_name');
151 name_td.appendChild( text(cat.name()) );
152 if(scCounter++ % 2) addCSSClass(row, 'has_color');
154 $n(row, 'sc_new_entry').onclick = function() { scNewEntry(type, cat, tbody); }
155 $n(row, 'sc_edit').onclick = function(){ scEdit(tbody, type, cat); };
156 $n(row, 'sc_owning_lib').appendChild( text( findOrgUnit(cat.owner()).name() ));
158 if( cat.opac_visible() ) unHideMe($n(row, 'sc_opac_visible'));
159 else unHideMe($n(row, 'sc_opac_invisible'));
161 tbody.appendChild(row);
164 cat.entries().sort( /* sort the entries by value */
166 if( a.value() > b.value()) return 1;
167 if( a.value() < b.value()) return -1;
172 for( var e in cat.entries() )
173 scInsertEntry( cat, cat.entries()[e], $n(row, 'sc_entries_selector'), tbody, type );
177 function scInsertEntry( cat, entry, selector, tbody, type ) {
178 setSelectorVal( selector, scEntryCounter++, entry.value(), entry.id(),
179 function(){ scUpdateEntry( cat, entry, tbody, type );} );
184 function scDelete(type, id) {
185 if(!confirm($('sc_delete_confirm').innerHTML)) return;
186 var req = new Request( SC_DELETE.replace(/TYPE/,type), session, id );
188 var res = req.result();
189 if(checkILSEvent(res)) throw res;
193 function scCreateEntry( type, id, row ) {
194 var value = $n(row, 'sc_new_entry_name').value;
197 if( type == ACTOR ) entry = new actsce();
198 if( type == ASSET ) entry = new asce();
202 entry.owner(user.home_ou());
205 var req = new Request( SC_ENTRY_CREATE.replace(/TYPE/, type), session, entry );
207 var res = req.result();
208 if(checkILSEvent(res)) throw res;
212 function scNewEntry( type, cat, tbody ) {
214 var row = $('sc_new_entry_row').cloneNode(true);
215 row.setAttribute('edit', '1');
217 var r = $('sc_tr_' + cat.id());
218 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
219 else{ tbody.appendChild(row); }
221 $n(row, 'sc_new_entry_create').onclick =
223 if( scCreateEntry( type, cat.id(), row ) )
224 tbody.removeChild(row); };
225 $n(row, 'sc_new_entry_cancel').onclick = function(){tbody.removeChild(row);}
227 var c_org = PERMS[type].create_stat_cat_entry;
228 var max_c_depth = (c_org != null) ? findOrgDepth(c_org) : -1;
230 if( max_c_depth == -1 ) {
231 $n(row, 'sc_new_entry_create').disabled = true;
232 $n(row, 'sc_new_entry_lib').disabled = true;
236 var org = findOrgUnit(cat.owner());
237 var depth = findOrgDepth(org);
239 if( depth < max_c_depth ) {
241 org = findOrgUnit(c_org);
244 _scBuildOrgSelector( $n(row, 'sc_new_entry_lib'), org, depth );
245 $n(row, 'sc_new_entry_name').focus();
249 function scBuildNew() {
251 var c_org = PERMS[ASSET].create_stat_cat;
252 var max_c_depth = (c_org != null) ? findOrgDepth(c_org) : -1;
254 var ac_org = PERMS[ACTOR].create_stat_cat;
255 var max_ac_depth = (ac_org != null) ? findOrgDepth(ac_org) : -1;
257 var depth = max_c_depth;
260 var selector = $('sc_owning_lib_selector');
263 depth = max_ac_depth;
266 $('sc_new').disabled = true;
267 $('sc_type_selector').disabled = true;
268 selector.disabled = true;
273 org = findOrgUnit( org );
274 _scBuildOrgSelector( selector, org, depth );
277 function _scBuildOrgSelector(selector, org, offset) {
278 insertSelectorVal( selector, -1,
279 org.name(), org.id(), null, findOrgDepth(org) - offset );
280 for( var c in org.children() )
281 _scBuildOrgSelector( selector, org.children()[c], offset);
286 var name = $('sc_new_name').value;
287 var type = getSelectorVal($('sc_type_selector'));
290 if( $('sc_make_opac_visible').checked) visible = 1;
293 if( type == ACTOR ) cat = new actsc();
294 if( type == ASSET ) cat = new asc();
296 cat.opac_visible(visible);
298 cat.owner(getSelectorVal($('sc_owning_lib_selector')));
301 var req = new Request( SC_CREATE.replace(/TYPE/, type), session, cat );
304 var res = req.result();
305 if(checkILSEvent(res)) throw res;
310 function scEdit( tbody, type, cat ) {
313 var row = $('sc_edit_row').cloneNode(true);
314 row.setAttribute('edit', '1');
316 var r = $('sc_tr_' + cat.id());
317 if(r.nextSibling) { tbody.insertBefore( row, r.nextSibling ); }
318 else{ tbody.appendChild(row); }
320 $n(row, 'sc_edit_name').value = cat.name();
322 var name = $n(row, 'sc_edit_cancel');
323 name.onclick = function() { tbody.removeChild(row); };
325 var show = $n(row, 'sc_edit_show_owning_lib');
327 var myorg = findOrgUnit(user.home_ou());
328 var ownerorg = findOrgUnit(cat.owner());
329 show.appendChild(text(ownerorg.name()));
332 if( myorg.children() && myorg.children().length > 0 ) {
333 selector = $n(row, 'sc_edit_owning_lib');
334 _scBuildOrgSelector( selector, myorg, findOrgDepth(myorg) );
335 setSelector( selector, cat.owner() );
338 } else { unHideMe(show); }
343 if( cat.opac_visible() ) {
344 $n( $n(row, 'sc_edit_opac_vis'),
345 'sc_edit_opac_visibility').checked = true;
348 $n( $n(row, 'sc_edit_opac_invis'),
349 'sc_edit_opac_visibility').checked = true;
351 $n(row, 'sc_edit_submit').onclick =
352 function() { scEditGo( type, cat, row, selector ); };
354 $n(row, 'sc_edit_delete').onclick =
355 function(){ scDelete(type, cat.id()); };
357 var o_depth = findOrgDepth(findOrgUnit(cat.owner()));
358 /*var m_depth = findOrgDepth(findOrgUnit(user.home_ou()));*/
359 var e_org = PERMS[type].update_stat_cat;
360 var d_org = PERMS[type].delete_stat_cat;
361 var max_e_depth = (e_org != null) ? findOrgDepth(e_org) : -1;
362 var max_d_depth = (d_org != null) ? findOrgDepth(d_org) : -1;
364 if( max_e_depth == -1 || o_depth < max_e_depth )
365 $n(row,'sc_edit_submit').disabled = true;
367 if( max_d_depth == -1 || o_depth < max_d_depth )
368 $n(row,'sc_edit_delete').disabled = true;
371 function scEditGo( type, cat, row, selector ) {
372 var name = $n(row, 'sc_edit_name').value;
374 $n( $n(row, 'sc_edit_opac_vis'), 'sc_edit_opac_visibility').checked;
376 var newlib = cat.owner();
377 if(selector) newlib = getSelectorVal( selector );
379 if(!name) return false;
381 var isvisible = false;
382 if( cat.opac_visible() ) isvisible = true;
384 if( (name == cat.name()) && (visible == isvisible)
385 && (newlib == cat.owner()) ) { return true; }
391 if( visible ) cat.opac_visible(1);
393 var req = new Request( SC_UPDATE.replace(/TYPE/,type), session, cat );
395 var res = req.result();
396 if(checkILSEvent(res)) throw res;
402 function scUpdateEntry( cat, entry, tbody, type ) {
404 var row = $('sc_edit_entry_row').cloneNode(true);
405 row.setAttribute('edit', '1');
407 var r = $('sc_tr_' + cat.id());
408 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
409 else{ tbody.appendChild(row); }
411 $n(row, 'sc_edit_entry_owner').appendChild(text(findOrgUnit(entry.owner()).name()));
413 var name = $n(row, 'sc_edit_entry_name');
414 name.value = entry.value();
418 $n(row,'sc_edit_entry_name_submit').onclick =
420 if( scEditEntry(cat, entry, name.value, type ) )
421 tbody.removeChild(row);
424 $n(row,'sc_edit_entry_cancel').onclick = function(){tbody.removeChild(row);};
425 $n(row,'sc_edit_entry_delete').onclick =
426 function(){ scEntryDelete( cat, entry, type ); }
428 var o_depth = findOrgDepth( findOrgUnit(entry.owner()) );
429 /*var m_depth = findOrgDepth(findOrgUnit(user.home_ou()));*/
431 var e_org = PERMS[type].update_stat_cat_entry;
432 var d_org = PERMS[type].delete_stat_cat_entry;
433 var max_e_depth = (e_org != null) ? findOrgDepth(e_org) : -1;
434 var max_d_depth = (d_org != null) ? findOrgDepth(d_org) : -1;
436 if( max_e_depth == -1 || o_depth < max_e_depth )
437 $n(row,'sc_edit_entry_name_submit').disabled = true;
439 if( max_d_depth == -1 || o_depth < max_d_depth )
440 $n(row,'sc_edit_entry_delete').disabled = true;
443 function scEntryDelete( cat, entry, type ) {
444 if(!confirm($('sc_entry_delete_confirm').innerHTML)) return;
445 var req = new Request( SC_ENTRY_DELETE.replace(/TYPE/,type), session, entry.id() );
447 var res = req.result();
448 if(checkILSEvent(res)) throw res;
452 function scEditEntry( cat, entry, newvalue, type ) {
453 if(entry.value() == newvalue) return;
454 entry.value( newvalue );
455 var req = new Request(
456 SC_ENTRY_UPDATE.replace(/TYPE/, type), session, entry );
458 var res = req.result();
459 if(checkILSEvent(res)) throw res;