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';
9 var SC_MAP_CREATE = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.WHAT_map.create';
10 var SC_MAP_UPDATE = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.WHAT_map.update';
20 var opacVisible = false;
23 function scEditorInit() {
25 session = cgi.param('ses');
26 if(!session) throw "User session is not defined";
27 var show = cgi.param('show');
28 user = fetchUser(session);
29 if(show == ACTOR) scShow(ACTOR);
32 $('sc_user').appendChild(text(user.usrname()));
35 function _cleanTbody(tbody) {
36 for( var c = 0; c < tbody.childNodes.length; c++ ) {
37 var child = tbody.childNodes[c];
38 if(child && child.getAttribute('edit')) tbody.removeChild(child);
42 function fetchUser(session) {
43 var request = new Request(FETCH_SESSION, session, 1 );
45 var user = request.result();
46 if(checkILSEvent(user)) throw user;
51 function scFetchAll( session, type, orgid, callback, args ) {
52 var req = new Request(
53 SC_FETCH_ALL.replace(/TYPE/, type) , session, orgid );
58 function scShow(type) {
60 currentlyVisible = type;
63 addCSSClass($('sc_show_copy'), 'has_color');
64 removeCSSClass($('sc_show_actor'), 'has_color');
66 } else if( type == ACTOR ) {
67 addCSSClass($('sc_show_actor'), 'has_color');
68 removeCSSClass($('sc_show_copy'), 'has_color');
71 scCache[type] = scFetchAll( session, type, user.home_ou() );
72 scDraw( type, scCache[type] );
75 var scRow; var scCounter;
76 function scDraw( type, cats ) {
78 if(!cats || cats.length == 0) return unHideMe($('sc_none'));
79 var tbody = $('sc_tbody');
81 if(!scRow) scRow = tbody.removeChild($('sc_tr'));
82 removeChildren(tbody);
83 unHideMe($('sc_table'));
86 for( var c in cats ) scInsertCat( tbody, cats[c], type );
91 function scInsertCat( tbody, cat, type ) {
93 var row = scRow.cloneNode(true);
94 row.id = 'sc_tr_' + cat.id();
95 var name_td = $n(row, 'sc_name');
96 name_td.appendChild( text(cat.name()) );
97 if(scCounter++ % 2) addCSSClass(row, 'has_color');
99 $n(row, 'sc_new_entry').onclick = function() { scNewEntry(type, cat, tbody); }
100 $n(row, 'sc_edit').onclick = function(){ scEdit(tbody, type, cat); };
101 /*$n(row, 'sc_delete').onclick = function(){ scDelete(type, cat.id()); };*/
102 $n(row, 'sc_owning_lib').appendChild( text( findOrgUnit(cat.owner()).name() ));
104 if( cat.opac_visible() ) unHideMe($n(row, 'sc_opac_visible'));
105 else unHideMe($n(row, 'sc_opac_invisible'));
107 tbody.appendChild(row);
110 cat.entries().sort( /* sort the entries by value */
112 if( a.value() > b.value()) return 1;
113 if( a.value() < b.value()) return -1;
118 for( var e in cat.entries() )
119 scInsertEntry( cat, cat.entries()[e], $n(row, 'sc_entries_selector'), tbody, type );
123 function scInsertEntry( cat, entry, selector, tbody, type ) {
124 setSelectorVal( selector, scEntryCounter++, entry.value(), entry.id(),
125 function(){ scUpdateEntry( cat, entry, tbody, type );} );
130 function scDelete(type, id) {
131 if(!confirm($('sc_delete_confirm').innerHTML)) return;
132 var req = new Request( SC_DELETE.replace(/TYPE/,type), session, id );
134 var res = req.result();
135 if(checkILSEvent(res)) throw res;
139 function scCreateEntry( type, id, row ) {
140 var value = $n(row, 'sc_new_entry_name').value;
143 if( type == ACTOR ) entry = new actsce();
144 if( type == ASSET ) entry = new asce();
148 entry.owner(user.home_ou());
151 var req = new Request( SC_ENTRY_CREATE.replace(/TYPE/, type), session, entry );
153 var res = req.result();
154 if(checkILSEvent(res)) throw res;
158 function scNewEntry( type, cat, tbody ) {
160 var row = $('sc_new_entry_row').cloneNode(true);
161 row.setAttribute('edit', '1');
163 var r = $('sc_tr_' + cat.id());
164 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
165 else{ tbody.appendChild(row); }
167 $n(row, 'sc_new_entry_create').onclick =
169 if( scCreateEntry( type, cat.id(), row ) )
170 tbody.removeChild(row); };
171 $n(row, 'sc_new_entry_cancel').onclick = function(){tbody.removeChild(row);}
173 var org = findOrgUnit(cat.owner());
174 var myorg = findOrgUnit(user.home_ou());
175 var depth = findOrgDepth(org);
176 var mydepth = findOrgDepth(myorg);
178 if( depth < mydepth ) {
184 _scBuildOrgSelector( $n(row, 'sc_new_entry_lib'), org, findOrgDepth(org));
185 $n(row, 'sc_new_entry_name').focus();
189 function scBuildNew() {
190 var selector = $('sc_owning_lib_selector');
191 var org = findOrgUnit( user.home_ou() );
192 var offset = findOrgDepth(org);
193 _scBuildOrgSelector( selector, org, offset);
196 function _scBuildOrgSelector(selector, org, offset) {
197 insertSelectorVal( selector, -1,
198 org.name(), org.id(), null, findOrgDepth(org) - offset );
199 for( var c in org.children() )
200 _scBuildOrgSelector( selector, org.children()[c], offset);
205 var name = $('sc_new_name').value;
206 var type = getSelectorVal($('sc_type_selector'));
209 if( $('sc_make_opac_visible').checked) visible = 1;
212 if( type == ACTOR ) cat = new actsc();
213 if( type == ASSET ) cat = new asc();
215 cat.opac_visible(visible);
217 cat.owner(getSelectorVal($('sc_owning_lib_selector')));
220 var req = new Request( SC_CREATE.replace(/TYPE/, type), session, cat );
223 var res = req.result();
224 if(checkILSEvent(res)) throw res;
229 function scEdit( tbody, type, cat ) {
232 var row = $('sc_edit_row').cloneNode(true);
233 row.setAttribute('edit', '1');
235 var r = $('sc_tr_' + cat.id());
236 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
237 else{ tbody.appendChild(row); }
239 $n(row, 'sc_edit_name').value = cat.name();
241 var name = $n(row, 'sc_edit_cancel');
242 name.onclick = function() { tbody.removeChild(row); };
244 var show = $n(row, 'sc_edit_show_owning_lib');
246 var myorg = findOrgUnit(user.home_ou());
247 var ownerorg = findOrgUnit(cat.owner());
248 show.appendChild(text(ownerorg.name()));
251 if( myorg.children() && myorg.children().length > 0 ) {
252 selector = $n(row, 'sc_edit_owning_lib');
253 _scBuildOrgSelector( selector, myorg, findOrgDepth(myorg) );
254 setSelector( selector, cat.owner() );
257 } else { unHideMe(show); }
262 if( cat.opac_visible() ) {
263 $n( $n(row, 'sc_edit_opac_vis'),
264 'sc_edit_opac_visibility').checked = true;
267 $n( $n(row, 'sc_edit_opac_invis'),
268 'sc_edit_opac_visibility').checked = true;
270 $n(row, 'sc_edit_submit').onclick =
272 if( scEditGo( type, cat, row, selector ) )
273 tbody.removeChild(row); };
275 $n(row, 'sc_edit_delete').onclick = function(){ scDelete(type, cat.id()); };
277 var o_depth = findOrgDepth(findOrgUnit(cat.owner()));
278 var m_depth = findOrgDepth(findOrgUnit(user.home_ou()));
280 if( o_depth < m_depth ) {
281 $n(row,'sc_edit_submit').disabled = true;
282 $n(row,'sc_edit_delete').disabled = true;
287 function scEditGo( type, cat, row, selector ) {
288 var name = $n(row, 'sc_edit_name').value;
290 $n( $n(row, 'sc_edit_opac_vis'), 'sc_edit_opac_visibility').checked;
292 var newlib = cat.owner();
293 if(selector) newlib = getSelectorVal( selector );
295 if(!name) return false;
297 var isvisible = false;
298 if( cat.opac_visible() ) isvisible = true;
300 if( (name == cat.name()) && (visible == isvisible)
301 && (newlib == cat.owner()) ) { return true; }
307 if( visible ) cat.opac_visible(1);
309 var req = new Request( SC_UPDATE.replace(/TYPE/,type), session, cat );
311 var res = req.result();
312 if(checkILSEvent(res)) throw res;
318 function scUpdateEntry( cat, entry, tbody, type ) {
320 var row = $('sc_edit_entry_row').cloneNode(true);
321 row.setAttribute('edit', '1');
323 var r = $('sc_tr_' + cat.id());
324 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
325 else{ tbody.appendChild(row); }
327 $n(row, 'sc_edit_entry_owner').appendChild(text(findOrgUnit(entry.owner()).name()));
329 var name = $n(row, 'sc_edit_entry_name');
330 name.value = entry.value();
334 $n(row,'sc_edit_entry_name_submit').onclick =
336 if( scEditEntry(cat, entry, name.value, type ) )
337 tbody.removeChild(row);
340 $n(row,'sc_edit_entry_cancel').onclick = function(){tbody.removeChild(row);};
341 $n(row,'sc_edit_entry_delete').onclick =
342 function(){ scEntryDelete( cat, entry, type ); }
344 var o_depth = findOrgDepth( findOrgUnit(entry.owner()) );
345 var m_depth = findOrgDepth(findOrgUnit(user.home_ou()));
347 if( o_depth < m_depth ) {
348 $n(row,'sc_edit_entry_name_submit').disabled = true;
349 $n(row,'sc_edit_entry_delete').disabled = true;
354 function scEntryDelete( cat, entry, type ) {
355 if(!confirm($('sc_entry_delete_confirm').innerHTML)) return;
356 var req = new Request( SC_ENTRY_DELETE.replace(/TYPE/,type), session, entry.id() );
358 var res = req.result();
359 if(checkILSEvent(res)) throw res;
363 function scEditEntry( cat, entry, newvalue, type ) {
364 if(entry.value() == newvalue) return;
365 entry.value( newvalue );
366 var req = new Request(
367 SC_ENTRY_UPDATE.replace(/TYPE/, type), session, entry );
369 var res = req.result();
370 if(checkILSEvent(res)) throw res;