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 var show = cgi.param('show');
27 user = fetchUser(session);
28 if(show == ACTOR) scShow(ACTOR);
31 $('sc_user').appendChild(text(user.usrname()));
34 function _cleanTbody(tbody) {
35 for( var c = 0; c < tbody.childNodes.length; c++ ) {
36 var child = tbody.childNodes[c];
37 if(child && child.getAttribute('edit')) tbody.removeChild(child);
41 function fetchUser(session) {
42 var request = new Request(FETCH_SESSION, session, 1 );
44 var user = request.result();
45 if(checkILSEvent(user)) throw user;
50 function scFetchAll( session, type, orgid, callback, args ) {
51 var req = new Request(
52 SC_FETCH_ALL.replace(/TYPE/, type) , session, orgid );
57 function scShow(type) {
59 currentlyVisible = type;
62 addCSSClass($('sc_show_copy'), 'has_color');
63 removeCSSClass($('sc_show_actor'), 'has_color');
65 } else if( type == ACTOR ) {
66 addCSSClass($('sc_show_actor'), 'has_color');
67 removeCSSClass($('sc_show_copy'), 'has_color');
70 scCache[type] = scFetchAll( session, type, user.home_ou() );
71 scDraw( type, scCache[type] );
74 var scRow; var scCounter;
75 function scDraw( type, cats ) {
77 if(!cats || cats.length == 0) return unHideMe($('sc_none'));
78 var tbody = $('sc_tbody');
80 if(!scRow) scRow = tbody.removeChild($('sc_tr'));
81 removeChildren(tbody);
82 unHideMe($('sc_table'));
85 for( var c in cats ) scInsertCat( tbody, cats[c], type );
90 function scInsertCat( tbody, cat, type ) {
92 var row = scRow.cloneNode(true);
93 row.id = 'sc_tr_' + cat.id();
94 var name_td = $n(row, 'sc_name');
95 name_td.appendChild( text(cat.name()) );
96 if(scCounter++ % 2) addCSSClass(row, 'has_color');
98 $n(row, 'sc_new_entry').onclick = function() { scNewEntry(type, cat, tbody); }
99 $n(row, 'sc_edit').onclick = function(){ scEdit(tbody, type, cat); };
100 /*$n(row, 'sc_delete').onclick = function(){ scDelete(type, cat.id()); };*/
101 $n(row, 'sc_owning_lib').appendChild( text( findOrgUnit(cat.owner()).name() ));
103 if( cat.opac_visible() ) unHideMe($n(row, 'sc_opac_visible'));
104 else unHideMe($n(row, 'sc_opac_invisible'));
106 tbody.appendChild(row);
109 cat.entries().sort( /* sort the entries by value */
111 if( a.value() > b.value()) return 1;
112 if( a.value() < b.value()) return -1;
117 for( var e in cat.entries() )
118 scInsertEntry( cat, cat.entries()[e], $n(row, 'sc_entries_selector'), tbody, type );
122 function scInsertEntry( cat, entry, selector, tbody, type ) {
123 setSelectorVal( selector, scEntryCounter++, entry.value(), entry.id(),
124 function(){ scUpdateEntry( cat, entry, tbody, type );} );
129 function scDelete(type, id) {
130 if(!confirm($('sc_delete_confirm').innerHTML)) return;
131 var req = new Request( SC_DELETE.replace(/TYPE/,type), session, id );
133 var res = req.result();
134 if(checkILSEvent(res)) throw res;
138 function scCreateEntry( type, id, row ) {
139 var value = $n(row, 'sc_new_entry_name').value;
142 if( type == ACTOR ) entry = new actsce();
143 if( type == ASSET ) entry = new asce();
147 entry.owner(user.home_ou());
150 var req = new Request( SC_ENTRY_CREATE.replace(/TYPE/, type), session, entry );
152 var res = req.result();
153 if(checkILSEvent(res)) throw res;
157 function scNewEntry( type, cat, tbody ) {
159 var row = $('sc_new_entry_row').cloneNode(true);
160 row.setAttribute('edit', '1');
162 var r = $('sc_tr_' + cat.id());
163 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
164 else{ tbody.appendChild(row); }
166 $n(row, 'sc_new_entry_create').onclick =
168 if( scCreateEntry( type, cat.id(), row ) )
169 tbody.removeChild(row); };
170 $n(row, 'sc_new_entry_cancel').onclick = function(){tbody.removeChild(row);}
172 var org = findOrgUnit(cat.owner());
173 var myorg = findOrgUnit(user.home_ou());
174 var depth = findOrgDepth(org);
175 var mydepth = findOrgDepth(myorg);
177 if( depth < mydepth ) {
183 _scBuildOrgSelector( $n(row, 'sc_new_entry_lib'), org, findOrgDepth(org));
184 $n(row, 'sc_new_entry_name').focus();
188 function scBuildNew() {
189 var selector = $('sc_owning_lib_selector');
190 var org = findOrgUnit( user.home_ou() );
191 var offset = findOrgDepth(org);
192 _scBuildOrgSelector( selector, org, offset);
195 function _scBuildOrgSelector(selector, org, offset) {
196 insertSelectorVal( selector, -1,
197 org.name(), org.id(), null, findOrgDepth(org) - offset );
198 for( var c in org.children() )
199 _scBuildOrgSelector( selector, org.children()[c], offset);
204 var name = $('sc_new_name').value;
205 var type = getSelectorVal($('sc_type_selector'));
208 if( $('sc_make_opac_visible').checked) visible = 1;
211 if( type == ACTOR ) cat = new actsc();
212 if( type == ASSET ) cat = new asc();
214 cat.opac_visible(visible);
216 cat.owner(getSelectorVal($('sc_owning_lib_selector')));
219 var req = new Request( SC_CREATE.replace(/TYPE/, type), session, cat );
222 var res = req.result();
223 if(checkILSEvent(res)) throw res;
228 function scEdit( tbody, type, cat ) {
231 var row = $('sc_edit_row').cloneNode(true);
232 row.setAttribute('edit', '1');
234 var r = $('sc_tr_' + cat.id());
235 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
236 else{ tbody.appendChild(row); }
238 $n(row, 'sc_edit_name').value = cat.name();
240 var name = $n(row, 'sc_edit_cancel');
241 name.onclick = function() { tbody.removeChild(row); };
243 var show = $n(row, 'sc_edit_show_owning_lib');
245 var myorg = findOrgUnit(user.home_ou());
246 var ownerorg = findOrgUnit(cat.owner());
247 show.appendChild(text(ownerorg.name()));
250 if( myorg.children() && myorg.children().length > 0 ) {
251 selector = $n(row, 'sc_edit_owning_lib');
252 _scBuildOrgSelector( selector, myorg, findOrgDepth(myorg) );
253 setSelector( selector, cat.owner() );
256 } else { unHideMe(show); }
261 if( cat.opac_visible() ) {
262 $n( $n(row, 'sc_edit_opac_vis'),
263 'sc_edit_opac_visibility').checked = true;
266 $n( $n(row, 'sc_edit_opac_invis'),
267 'sc_edit_opac_visibility').checked = true;
269 $n(row, 'sc_edit_submit').onclick =
271 if( scEditGo( type, cat, row, selector ) )
272 tbody.removeChild(row); };
274 $n(row, 'sc_edit_delete').onclick = function(){ scDelete(type, cat.id()); };
276 var o_depth = findOrgDepth(findOrgUnit(cat.owner()));
277 var m_depth = findOrgDepth(findOrgUnit(user.home_ou()));
279 if( o_depth < m_depth ) {
280 $n(row,'sc_edit_submit').disabled = true;
281 $n(row,'sc_edit_delete').disabled = true;
286 function scEditGo( type, cat, row, selector ) {
287 var name = $n(row, 'sc_edit_name').value;
289 $n( $n(row, 'sc_edit_opac_vis'), 'sc_edit_opac_visibility').checked;
291 var newlib = cat.owner();
292 if(selector) newlib = getSelectorVal( selector );
294 if(!name) return false;
296 var isvisible = false;
297 if( cat.opac_visible() ) isvisible = true;
299 if( (name == cat.name()) && (visible == isvisible)
300 && (newlib == cat.owner()) ) { return true; }
306 if( visible ) cat.opac_visible(1);
308 var req = new Request( SC_UPDATE.replace(/TYPE/,type), session, cat );
310 var res = req.result();
311 if(checkILSEvent(res)) throw res;
317 function scUpdateEntry( cat, entry, tbody, type ) {
319 var row = $('sc_edit_entry_row').cloneNode(true);
320 row.setAttribute('edit', '1');
322 var r = $('sc_tr_' + cat.id());
323 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
324 else{ tbody.appendChild(row); }
326 $n(row, 'sc_edit_entry_owner').appendChild(text(findOrgUnit(entry.owner()).name()));
328 var name = $n(row, 'sc_edit_entry_name');
329 name.value = entry.value();
333 $n(row,'sc_edit_entry_name_submit').onclick =
335 if( scEditEntry(cat, entry, name.value, type ) )
336 tbody.removeChild(row);
339 $n(row,'sc_edit_entry_cancel').onclick = function(){tbody.removeChild(row);};
340 $n(row,'sc_edit_entry_delete').onclick =
341 function(){ scEntryDelete( cat, entry, type ); }
343 var o_depth = findOrgDepth( findOrgUnit(entry.owner()) );
344 var m_depth = findOrgDepth(findOrgUnit(user.home_ou()));
346 if( o_depth < m_depth ) {
347 $n(row,'sc_edit_entry_name_submit').disabled = true;
348 $n(row,'sc_edit_entry_delete').disabled = true;
353 function scEntryDelete( cat, entry, type ) {
354 if(!confirm($('sc_entry_delete_confirm').innerHTML)) return;
355 var req = new Request( SC_ENTRY_DELETE.replace(/TYPE/,type), session, entry.id() );
357 var res = req.result();
358 if(checkILSEvent(res)) throw res;
362 function scEditEntry( cat, entry, newvalue, type ) {
363 if(entry.value() == newvalue) return;
364 entry.value( newvalue );
365 var req = new Request(
366 SC_ENTRY_UPDATE.replace(/TYPE/, type), session, entry );
368 var res = req.result();
369 if(checkILSEvent(res)) throw res;