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 );
34 var show = cgi.param('show');
35 if(!show) show = ASSET;
38 $('sc_user').appendChild(text(user.usrname()));
41 function scFetchPerms() {
43 var orgs = fetchHighestPermOrgs( session, user.id(),
44 [ 'CREATE_PATRON_STAT_CAT',
45 'UPDATE_PATRON_STAT_CAT',
46 'DELETE_PATRON_STAT_CAT',
47 'CREATE_PATRON_STAT_CAT_ENTRY',
48 'UPDATE_PATRON_STAT_CAT_ENTRY',
49 'DELETE_PATRON_STAT_CAT_ENTRY',
51 'CREATE_COPY_STAT_CAT',
52 'UPDATE_COPY_STAT_CAT',
53 'DELETE_COPY_STAT_CAT',
54 'CREATE_COPY_STAT_CAT_ENTRY',
55 'UPDATE_COPY_STAT_CAT_ENTRY',
56 'DELETE_COPY_STAT_CAT_ENTRY' ] );
58 PERMS[ACTOR].create_stat_cat = orgs[0];
59 PERMS[ACTOR].update_stat_cat = orgs[1];
60 PERMS[ACTOR].delete_stat_cat = orgs[2];
61 PERMS[ACTOR].create_stat_cat_entry = orgs[3];
62 PERMS[ACTOR].update_stat_cat_entry = orgs[4];
63 PERMS[ACTOR].delete_stat_cat_entry = orgs[5];
65 PERMS[ASSET].create_stat_cat = orgs[6];
66 PERMS[ASSET].update_stat_cat = orgs[7];
67 PERMS[ASSET].delete_stat_cat = orgs[8];
68 PERMS[ASSET].create_stat_cat_entry = orgs[9];
69 PERMS[ASSET].update_stat_cat_entry = orgs[10];
70 PERMS[ASSET].delete_stat_cat_entry = orgs[11];
74 function scFetchPerm(perm) {
75 var req = new RemoteRequest(
77 'open-ils.actor.user.perm.highest_org', session, user.id(), perm );
79 return req.getResultObject();
80 PERMS.create_stat = req.getResultObjecdt();
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) {
93 setTimeout(function(){_scShow(type)}, 500);
96 function _scShow(type) {
98 currentlyVisible = type;
100 if( type == ASSET ) {
101 addCSSClass($('sc_show_copy'), 'has_color');
102 removeCSSClass($('sc_show_actor'), 'has_color');
104 } else if( type == ACTOR ) {
105 addCSSClass($('sc_show_actor'), 'has_color');
106 removeCSSClass($('sc_show_copy'), 'has_color');
109 scCache[type] = scFetchAll( session, type, user.home_ou() );
110 scDraw( type, scCache[type] );
113 var scRow; var scCounter;
114 function scDraw( type, cats ) {
116 hideMe($('loading'));
118 var tbody = $('sc_tbody');
119 if(!scRow) scRow = tbody.removeChild($('sc_tr'));
120 removeChildren(tbody);
122 if(!cats || cats.length == 0) {
123 hideMe($('sc_table'));
124 unHideMe($('sc_none'));
128 hideMe($('sc_none'));
129 unHideMe($('sc_table'));
132 for( var c in cats ) scInsertCat( tbody, cats[c], type );
137 function scInsertCat( tbody, cat, type ) {
139 var row = scRow.cloneNode(true);
140 row.id = 'sc_tr_' + cat.id();
141 var name_td = $n(row, 'sc_name');
142 name_td.appendChild( text(cat.name()) );
143 if(scCounter++ % 2) addCSSClass(row, 'has_color');
145 $n(row, 'sc_new_entry').onclick = function() { scNewEntry(type, cat, tbody); }
146 $n(row, 'sc_edit').onclick = function(){ scEdit(tbody, type, cat); };
147 $n(row, 'sc_owning_lib').appendChild( text( findOrgUnit(cat.owner()).name() ));
149 if( cat.opac_visible() ) unHideMe($n(row, 'sc_opac_visible'));
150 else unHideMe($n(row, 'sc_opac_invisible'));
152 tbody.appendChild(row);
155 cat.entries().sort( /* sort the entries by value */
157 a = new String(a.value()).toLowerCase();
158 b = new String(b.value()).toLowerCase();
159 if( a > b ) return 1;
160 if( a < b ) return -1;
165 for( var e in cat.entries() )
166 scInsertEntry( cat, cat.entries()[e], $n(row, 'sc_entries_selector'), tbody, type );
170 function scInsertEntry( cat, entry, selector, tbody, type ) {
171 setSelectorVal( selector, scEntryCounter++, entry.value(), entry.id(),
172 function(){ scUpdateEntry( cat, entry, tbody, type );} );
177 function scDelete(type, id) {
178 if(!confirm($('sc_delete_confirm').innerHTML)) return;
179 var req = new Request( SC_DELETE.replace(/TYPE/,type), session, id );
181 var res = req.result();
182 if(checkILSEvent(res)) throw res;
183 alertId('sc_update_success');
187 function scCreateEntry( type, id, row ) {
188 var value = $n(row, 'sc_new_entry_name').value;
191 if( type == ACTOR ) entry = new actsce();
192 if( type == ASSET ) entry = new asce();
196 entry.owner(getSelectorVal($n(row, 'sc_new_entry_lib')));
199 var req = new Request( SC_ENTRY_CREATE.replace(/TYPE/, type), session, entry );
201 var res = req.result();
202 if(checkILSEvent(res)) throw res;
203 alertId('sc_update_success');
207 function scNewEntry( type, cat, tbody ) {
208 cleanTbody(tbody, 'edit');
209 var row = $('sc_new_entry_row').cloneNode(true);
210 row.setAttribute('edit', '1');
212 var r = $('sc_tr_' + cat.id());
213 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
214 else{ tbody.appendChild(row); }
216 $n(row, 'sc_new_entry_create').onclick =
218 if( scCreateEntry( type, cat.id(), row ) )
219 tbody.removeChild(row); };
220 $n(row, 'sc_new_entry_cancel').onclick = function(){tbody.removeChild(row);}
222 var c_org = PERMS[type].create_stat_cat_entry;
223 var max_c_depth = (c_org != null) ? findOrgDepth(c_org) : -1;
225 if( max_c_depth == -1 ) {
226 $n(row, 'sc_new_entry_create').disabled = true;
227 $n(row, 'sc_new_entry_lib').disabled = true;
231 var org = findOrgUnit(cat.owner());
232 var depth = findOrgDepth(org);
234 if( depth < max_c_depth ) {
236 org = findOrgUnit(c_org);
239 buildOrgSel( $n(row, 'sc_new_entry_lib'), org, depth );
240 $n(row, 'sc_new_entry_name').focus();
244 function scBuildNew() {
246 var c_org = PERMS[ASSET].create_stat_cat;
247 var max_c_depth = (c_org != null) ? findOrgDepth(c_org) : -1;
249 var ac_org = PERMS[ACTOR].create_stat_cat;
250 var max_ac_depth = (ac_org != null) ? findOrgDepth(ac_org) : -1;
252 var depth = max_c_depth;
255 var selector = $('sc_owning_lib_selector');
258 depth = max_ac_depth;
261 $('sc_new').disabled = true;
262 $('sc_type_selector').disabled = true;
263 selector.disabled = true;
268 org = findOrgUnit( org );
269 buildOrgSel( selector, org, depth );
275 var name = $('sc_new_name').value;
276 var type = getSelectorVal($('sc_type_selector'));
279 if( $('sc_make_opac_visible').checked) visible = 1;
282 if( type == ACTOR ) cat = new actsc();
283 if( type == ASSET ) cat = new asc();
285 cat.opac_visible(visible);
287 cat.owner(getSelectorVal($('sc_owning_lib_selector')));
290 var req = new Request( SC_CREATE.replace(/TYPE/, type), session, cat );
293 var res = req.result();
294 if(checkILSEvent(res)) throw res;
295 alertId('sc_update_success');
300 function scEdit( tbody, type, cat ) {
302 cleanTbody(tbody, 'edit');
303 var row = $('sc_edit_row').cloneNode(true);
304 row.setAttribute('edit', '1');
306 var r = $('sc_tr_' + cat.id());
307 if(r.nextSibling) { tbody.insertBefore( row, r.nextSibling ); }
308 else{ tbody.appendChild(row); }
310 $n(row, 'sc_edit_name').value = cat.name();
312 var name = $n(row, 'sc_edit_cancel');
313 name.onclick = function() { tbody.removeChild(row); };
315 var show = $n(row, 'sc_edit_show_owning_lib');
317 var myorg = findOrgUnit(user.home_ou());
318 var ownerorg = findOrgUnit(cat.owner());
319 show.appendChild(text(ownerorg.name()));
322 if( myorg.children() && myorg.children().length > 0 ) {
323 selector = $n(row, 'sc_edit_owning_lib');
324 buildOrgSel( selector, myorg, findOrgDepth(myorg) );
325 setSelector( selector, cat.owner() );
328 } else { unHideMe(show); }
333 if( cat.opac_visible() ) {
334 $n( $n(row, 'sc_edit_opac_vis'),
335 'sc_edit_opac_visibility').checked = true;
338 $n( $n(row, 'sc_edit_opac_invis'),
339 'sc_edit_opac_visibility').checked = true;
341 $n(row, 'sc_edit_submit').onclick =
342 function() { scEditGo( type, cat, row, selector ); };
344 $n(row, 'sc_edit_delete').onclick =
345 function(){ scDelete(type, cat.id()); };
347 var o_depth = findOrgDepth(findOrgUnit(cat.owner()));
348 /*var m_depth = findOrgDepth(findOrgUnit(user.home_ou()));*/
349 var e_org = PERMS[type].update_stat_cat;
350 var d_org = PERMS[type].delete_stat_cat;
351 var max_e_depth = (e_org != null) ? findOrgDepth(e_org) : -1;
352 var max_d_depth = (d_org != null) ? findOrgDepth(d_org) : -1;
354 if( max_e_depth == -1 || o_depth < max_e_depth )
355 $n(row,'sc_edit_submit').disabled = true;
357 if( max_d_depth == -1 || o_depth < max_d_depth )
358 $n(row,'sc_edit_delete').disabled = true;
361 function scEditGo( type, cat, row, selector ) {
362 var name = $n(row, 'sc_edit_name').value;
364 $n( $n(row, 'sc_edit_opac_vis'), 'sc_edit_opac_visibility').checked;
366 var newlib = cat.owner();
367 if(selector) newlib = getSelectorVal( selector );
369 if(!name) return false;
371 var isvisible = false;
372 if( cat.opac_visible() ) isvisible = true;
374 if( (name == cat.name()) && (visible == isvisible)
375 && (newlib == cat.owner()) ) { return true; }
381 if( visible ) cat.opac_visible(1);
383 var req = new Request( SC_UPDATE.replace(/TYPE/,type), session, cat );
385 var res = req.result();
386 if(checkILSEvent(res)) throw res;
387 alertId('sc_update_success');
393 function scUpdateEntry( cat, entry, tbody, type ) {
394 cleanTbody(tbody, 'edit');
395 var row = $('sc_edit_entry_row').cloneNode(true);
396 row.setAttribute('edit', '1');
398 var r = $('sc_tr_' + cat.id());
399 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
400 else{ tbody.appendChild(row); }
402 $n(row, 'sc_edit_entry_owner').appendChild(text(findOrgUnit(entry.owner()).name()));
404 var name = $n(row, 'sc_edit_entry_name');
405 name.value = entry.value();
409 $n(row,'sc_edit_entry_name_submit').onclick =
411 if( scEditEntry(cat, entry, name.value, type ) )
412 tbody.removeChild(row);
415 $n(row,'sc_edit_entry_cancel').onclick = function(){tbody.removeChild(row);};
416 $n(row,'sc_edit_entry_delete').onclick =
417 function(){ scEntryDelete( cat, entry, type ); }
419 var o_depth = findOrgDepth( findOrgUnit(entry.owner()) );
420 /*var m_depth = findOrgDepth(findOrgUnit(user.home_ou()));*/
422 var e_org = PERMS[type].update_stat_cat_entry;
423 var d_org = PERMS[type].delete_stat_cat_entry;
424 var max_e_depth = (e_org != null) ? findOrgDepth(e_org) : -1;
425 var max_d_depth = (d_org != null) ? findOrgDepth(d_org) : -1;
427 if( max_e_depth == -1 || o_depth < max_e_depth )
428 $n(row,'sc_edit_entry_name_submit').disabled = true;
430 if( max_d_depth == -1 || o_depth < max_d_depth )
431 $n(row,'sc_edit_entry_delete').disabled = true;
434 function scEntryDelete( cat, entry, type ) {
435 if(!confirm($('sc_entry_delete_confirm').innerHTML)) return;
436 var req = new Request( SC_ENTRY_DELETE.replace(/TYPE/,type), session, entry.id() );
438 var res = req.result();
439 if(checkILSEvent(res)) throw res;
440 alertId('sc_update_success');
444 function scEditEntry( cat, entry, newvalue, type ) {
445 if(entry.value() == newvalue) return;
446 entry.value( newvalue );
447 var req = new Request(
448 SC_ENTRY_UPDATE.replace(/TYPE/, type), session, entry );
450 var res = req.result();
451 if(checkILSEvent(res)) throw res;