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 PERMS[ACTOR].create_stat_cat = scFetchPerm('CREATE_PATRON_STAT_CAT');
45 PERMS[ACTOR].update_stat_cat = scFetchPerm('UPDATE_PATRON_STAT_CAT');
46 PERMS[ACTOR].delete_stat_cat = scFetchPerm('DELETE_PATRON_STAT_CAT');
47 PERMS[ACTOR].create_stat_cat_entry = scFetchPerm('CREATE_PATRON_STAT_CAT_ENTRY');
48 PERMS[ACTOR].update_stat_cat_entry = scFetchPerm('UPDATE_PATRON_STAT_CAT_ENTRY');
49 PERMS[ACTOR].delete_stat_cat_entry = scFetchPerm('DELETE_PATRON_STAT_CAT_ENTRY');
51 PERMS[ASSET].create_stat_cat = scFetchPerm('CREATE_COPY_STAT_CAT');
52 PERMS[ASSET].update_stat_cat = scFetchPerm('UPDATE_COPY_STAT_CAT');
53 PERMS[ASSET].delete_stat_cat = scFetchPerm('DELETE_COPY_STAT_CAT');
54 PERMS[ASSET].create_stat_cat_entry = scFetchPerm('CREATE_COPY_STAT_CAT_ENTRY');
55 PERMS[ASSET].update_stat_cat_entry = scFetchPerm('UPDATE_COPY_STAT_CAT_ENTRY');
56 PERMS[ASSET].delete_stat_cat_entry = scFetchPerm('DELETE_COPY_STAT_CAT_ENTRY');
59 function scFetchPerm(perm) {
60 var req = new RemoteRequest(
62 'open-ils.actor.user.perm.highest_org', session, user.id(), perm );
64 return req.getResultObject();
65 PERMS.create_stat = req.getResultObjecdt();
69 function _cleanTbody(tbody) {
70 for( var c = 0; c < tbody.childNodes.length; c++ ) {
71 var child = tbody.childNodes[c];
72 if(child && child.getAttribute('edit')) tbody.removeChild(child);
76 function fetchUser(session) {
77 var request = new Request(FETCH_SESSION, session, 1 );
79 var user = request.result();
80 if(checkILSEvent(user)) throw user;
85 function scFetchAll( session, type, orgid, callback, args ) {
86 var req = new Request(
87 SC_FETCH_ALL.replace(/TYPE/, type) , session, orgid );
92 function scShow(type) {
94 currentlyVisible = type;
97 addCSSClass($('sc_show_copy'), 'has_color');
98 removeCSSClass($('sc_show_actor'), 'has_color');
100 } else if( type == ACTOR ) {
101 addCSSClass($('sc_show_actor'), 'has_color');
102 removeCSSClass($('sc_show_copy'), 'has_color');
105 scCache[type] = scFetchAll( session, type, user.home_ou() );
106 scDraw( type, scCache[type] );
109 var scRow; var scCounter;
110 function scDraw( type, cats ) {
112 hideMe($('loading'));
113 if(!cats || cats.length == 0) return unHideMe($('sc_none'));
114 var tbody = $('sc_tbody');
116 if(!scRow) scRow = tbody.removeChild($('sc_tr'));
117 removeChildren(tbody);
118 unHideMe($('sc_table'));
121 for( var c in cats ) scInsertCat( tbody, cats[c], type );
126 function scInsertCat( tbody, cat, type ) {
128 var row = scRow.cloneNode(true);
129 row.id = 'sc_tr_' + cat.id();
130 var name_td = $n(row, 'sc_name');
131 name_td.appendChild( text(cat.name()) );
132 if(scCounter++ % 2) addCSSClass(row, 'has_color');
134 $n(row, 'sc_new_entry').onclick = function() { scNewEntry(type, cat, tbody); }
135 $n(row, 'sc_edit').onclick = function(){ scEdit(tbody, type, cat); };
136 $n(row, 'sc_owning_lib').appendChild( text( findOrgUnit(cat.owner()).name() ));
138 if( cat.opac_visible() ) unHideMe($n(row, 'sc_opac_visible'));
139 else unHideMe($n(row, 'sc_opac_invisible'));
141 tbody.appendChild(row);
144 cat.entries().sort( /* sort the entries by value */
146 if( a.value() > b.value()) return 1;
147 if( a.value() < b.value()) return -1;
152 for( var e in cat.entries() )
153 scInsertEntry( cat, cat.entries()[e], $n(row, 'sc_entries_selector'), tbody, type );
157 function scInsertEntry( cat, entry, selector, tbody, type ) {
158 setSelectorVal( selector, scEntryCounter++, entry.value(), entry.id(),
159 function(){ scUpdateEntry( cat, entry, tbody, type );} );
164 function scDelete(type, id) {
165 if(!confirm($('sc_delete_confirm').innerHTML)) return;
166 var req = new Request( SC_DELETE.replace(/TYPE/,type), session, id );
168 var res = req.result();
169 if(checkILSEvent(res)) throw res;
173 function scCreateEntry( type, id, row ) {
174 var value = $n(row, 'sc_new_entry_name').value;
177 if( type == ACTOR ) entry = new actsce();
178 if( type == ASSET ) entry = new asce();
182 entry.owner(user.home_ou());
185 var req = new Request( SC_ENTRY_CREATE.replace(/TYPE/, type), session, entry );
187 var res = req.result();
188 if(checkILSEvent(res)) throw res;
192 function scNewEntry( type, cat, tbody ) {
194 var row = $('sc_new_entry_row').cloneNode(true);
195 row.setAttribute('edit', '1');
197 var r = $('sc_tr_' + cat.id());
198 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
199 else{ tbody.appendChild(row); }
201 $n(row, 'sc_new_entry_create').onclick =
203 if( scCreateEntry( type, cat.id(), row ) )
204 tbody.removeChild(row); };
205 $n(row, 'sc_new_entry_cancel').onclick = function(){tbody.removeChild(row);}
207 var c_org = PERMS[type].create_stat_cat_entry;
208 var max_c_depth = (c_org != null) ? findOrgDepth(c_org) : -1;
210 if( max_c_depth == -1 ) {
211 $n(row, 'sc_new_entry_create').disabled = true;
212 $n(row, 'sc_new_entry_lib').disabled = true;
216 var org = findOrgUnit(cat.owner());
217 var depth = findOrgDepth(org);
219 if( depth < max_c_depth ) {
221 org = findOrgUnit(c_org);
224 _scBuildOrgSelector( $n(row, 'sc_new_entry_lib'), org, depth );
225 $n(row, 'sc_new_entry_name').focus();
229 function scBuildNew() {
231 var c_org = PERMS[ASSET].create_stat_cat;
232 var max_c_depth = (c_org != null) ? findOrgDepth(c_org) : -1;
234 var ac_org = PERMS[ACTOR].create_stat_cat;
235 var max_ac_depth = (ac_org != null) ? findOrgDepth(ac_org) : -1;
237 var depth = max_c_depth;
240 var selector = $('sc_owning_lib_selector');
243 depth = max_ac_depth;
246 $('sc_new').disabled = true;
247 $('sc_type_selector').disabled = true;
248 selector.disabled = true;
253 org = findOrgUnit( org );
254 _scBuildOrgSelector( selector, org, depth );
257 function _scBuildOrgSelector(selector, org, offset) {
258 insertSelectorVal( selector, -1,
259 org.name(), org.id(), null, findOrgDepth(org) - offset );
260 for( var c in org.children() )
261 _scBuildOrgSelector( selector, org.children()[c], offset);
266 var name = $('sc_new_name').value;
267 var type = getSelectorVal($('sc_type_selector'));
270 if( $('sc_make_opac_visible').checked) visible = 1;
273 if( type == ACTOR ) cat = new actsc();
274 if( type == ASSET ) cat = new asc();
276 cat.opac_visible(visible);
278 cat.owner(getSelectorVal($('sc_owning_lib_selector')));
281 var req = new Request( SC_CREATE.replace(/TYPE/, type), session, cat );
284 var res = req.result();
285 if(checkILSEvent(res)) throw res;
290 function scEdit( tbody, type, cat ) {
293 var row = $('sc_edit_row').cloneNode(true);
294 row.setAttribute('edit', '1');
296 var r = $('sc_tr_' + cat.id());
297 if(r.nextSibling) { tbody.insertBefore( row, r.nextSibling ); }
298 else{ tbody.appendChild(row); }
300 $n(row, 'sc_edit_name').value = cat.name();
302 var name = $n(row, 'sc_edit_cancel');
303 name.onclick = function() { tbody.removeChild(row); };
305 var show = $n(row, 'sc_edit_show_owning_lib');
307 var myorg = findOrgUnit(user.home_ou());
308 var ownerorg = findOrgUnit(cat.owner());
309 show.appendChild(text(ownerorg.name()));
312 if( myorg.children() && myorg.children().length > 0 ) {
313 selector = $n(row, 'sc_edit_owning_lib');
314 _scBuildOrgSelector( selector, myorg, findOrgDepth(myorg) );
315 setSelector( selector, cat.owner() );
318 } else { unHideMe(show); }
323 if( cat.opac_visible() ) {
324 $n( $n(row, 'sc_edit_opac_vis'),
325 'sc_edit_opac_visibility').checked = true;
328 $n( $n(row, 'sc_edit_opac_invis'),
329 'sc_edit_opac_visibility').checked = true;
331 $n(row, 'sc_edit_submit').onclick =
332 function() { scEditGo( type, cat, row, selector ); };
334 $n(row, 'sc_edit_delete').onclick =
335 function(){ scDelete(type, cat.id()); };
337 var o_depth = findOrgDepth(findOrgUnit(cat.owner()));
338 /*var m_depth = findOrgDepth(findOrgUnit(user.home_ou()));*/
339 var e_org = PERMS[type].update_stat_cat;
340 var d_org = PERMS[type].delete_stat_cat;
341 var max_e_depth = (e_org != null) ? findOrgDepth(e_org) : -1;
342 var max_d_depth = (d_org != null) ? findOrgDepth(d_org) : -1;
344 if( max_e_depth == -1 || o_depth < max_e_depth )
345 $n(row,'sc_edit_submit').disabled = true;
347 if( max_d_depth == -1 || o_depth < max_d_depth )
348 $n(row,'sc_edit_delete').disabled = true;
351 function scEditGo( type, cat, row, selector ) {
352 var name = $n(row, 'sc_edit_name').value;
354 $n( $n(row, 'sc_edit_opac_vis'), 'sc_edit_opac_visibility').checked;
356 var newlib = cat.owner();
357 if(selector) newlib = getSelectorVal( selector );
359 if(!name) return false;
361 var isvisible = false;
362 if( cat.opac_visible() ) isvisible = true;
364 if( (name == cat.name()) && (visible == isvisible)
365 && (newlib == cat.owner()) ) { return true; }
371 if( visible ) cat.opac_visible(1);
373 var req = new Request( SC_UPDATE.replace(/TYPE/,type), session, cat );
375 var res = req.result();
376 if(checkILSEvent(res)) throw res;
382 function scUpdateEntry( cat, entry, tbody, type ) {
384 var row = $('sc_edit_entry_row').cloneNode(true);
385 row.setAttribute('edit', '1');
387 var r = $('sc_tr_' + cat.id());
388 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
389 else{ tbody.appendChild(row); }
391 $n(row, 'sc_edit_entry_owner').appendChild(text(findOrgUnit(entry.owner()).name()));
393 var name = $n(row, 'sc_edit_entry_name');
394 name.value = entry.value();
398 $n(row,'sc_edit_entry_name_submit').onclick =
400 if( scEditEntry(cat, entry, name.value, type ) )
401 tbody.removeChild(row);
404 $n(row,'sc_edit_entry_cancel').onclick = function(){tbody.removeChild(row);};
405 $n(row,'sc_edit_entry_delete').onclick =
406 function(){ scEntryDelete( cat, entry, type ); }
408 var o_depth = findOrgDepth( findOrgUnit(entry.owner()) );
409 /*var m_depth = findOrgDepth(findOrgUnit(user.home_ou()));*/
411 var e_org = PERMS[type].update_stat_cat_entry;
412 var d_org = PERMS[type].delete_stat_cat_entry;
413 var max_e_depth = (e_org != null) ? findOrgDepth(e_org) : -1;
414 var max_d_depth = (d_org != null) ? findOrgDepth(d_org) : -1;
416 if( max_e_depth == -1 || o_depth < max_e_depth )
417 $n(row,'sc_edit_entry_name_submit').disabled = true;
419 if( max_d_depth == -1 || o_depth < max_d_depth )
420 $n(row,'sc_edit_entry_delete').disabled = true;
423 function scEntryDelete( cat, entry, type ) {
424 if(!confirm($('sc_entry_delete_confirm').innerHTML)) return;
425 var req = new Request( SC_ENTRY_DELETE.replace(/TYPE/,type), session, entry.id() );
427 var res = req.result();
428 if(checkILSEvent(res)) throw res;
432 function scEditEntry( cat, entry, newvalue, type ) {
433 if(entry.value() == newvalue) return;
434 entry.value( newvalue );
435 var req = new Request(
436 SC_ENTRY_UPDATE.replace(/TYPE/, type), session, entry );
438 var res = req.result();
439 if(checkILSEvent(res)) throw res;