1 dump('entering admin/offline_manage_xacts.js\n');
3 if (typeof admin == 'undefined') admin = {};
4 admin.offline_manage_xacts = function (params) {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('util.network'); this.network = new util.network();
10 admin.offline_manage_xacts.prototype = {
14 'init' : function( params ) {
18 JSAN.use('OpenILS.data'); obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
20 JSAN.use('util.list'); obj.list = new util.list('session_tree');
24 'id' : 'org', 'hidden' : 'true', 'flex' : '1',
25 'label' : 'Organization',
26 'render' : 'data.hash.aou[ my.org ].shortname()',
29 'id' : 'description', 'flex' : '2',
30 'label' : 'Description',
31 'render' : "my.description",
34 'id' : 'create_time', 'flex' : '1',
35 'label' : 'Date Created',
36 'render' : 'if (my.create_time) { var x = new Date(); x.setTime(my.create_time+"000"); util.date.formatted_date(x,"%F %H:%M"); } else { ""; }',
39 'id' : 'creator', 'flex' : '1', 'hidden' : 'true',
40 'label' : 'Created By',
41 'render' : 'my.creator',
44 'id' : 'count', 'flex' : '1',
45 'label' : 'Upload Count',
46 'render' : "my.scripts.length",
49 'id' : 'num_complete', 'flex' : '1',
50 'label' : 'Uploads Processed',
51 'render' : "my.num_complete",
54 'id' : 'in_process', 'flex' : '1',
55 'label' : 'Processing?',
56 'render' : "if (my.end_time) { 'Completed' } else {my.in_process == 0 ? 'No' : 'Yes'}",
59 'id' : 'start_time', 'flex' : '1', 'hidden' : 'true',
60 'label' : 'Date Started',
61 'render' : 'if (my.start_time) {var x = new Date(); x.setTime(my.start_time+"000"); util.date.formatted_date(x,"%F %H:%M");} else { ""; }',
64 'id' : 'end_time', 'flex' : '1',
65 'label' : 'Date Completed',
66 'render' : 'if (my.end_time) {var x = new Date(); x.setTime(my.end_time+"000"); util.date.formatted_date(x,"%F %H:%M");} else { ""; }',
69 'id' : 'key', 'hidden' : 'true', 'flex' : '1',
74 'map_row_to_column' : function(row,col) {
75 JSAN.use('util.date');
76 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
77 var my = row; var value;
78 try { value = eval( col.render ); } catch(E) { obj.error.sdump('D_ERROR',E); value = '???'; }
81 'on_select' : function(ev) {
82 JSAN.use('util.functional');
83 var sel = obj.list.retrieve_selection();
84 obj.sel_list = util.functional.map_list(
86 function(o) { return o.getAttribute('retrieve_id'); }
88 if (obj.check_perm(obj.session,'OFFLINE_EXECUTE_SESSION')) {
89 document.getElementById('execute').disabled = false;
91 if (obj.check_perm(obj.session,'OFFLINE_UPLOAD_XACTS')) {
92 document.getElementById('upload').disabled = false;
94 if (obj.check_perm(obj.session,'OFFLINE_SESSION_ERRORS')) {
95 document.getElementById('errors').disabled = false;
97 obj.render_scriptlist();
101 obj.script_list = new util.list('script_tree');
102 obj.script_list.init( {
105 'id' : 'create_time', 'flex' : '1',
106 'label' : 'Date Uploaded',
107 'render' : 'if (my.create_time) { var x = new Date(); x.setTime(my.create_time+"000"); util.date.formatted_date(x,"%F %H:%M"); } else { ""; }',
110 'id' : 'requestor', 'flex' : '1', 'hidden' : 'true',
111 'label' : 'Uploaded By',
112 'render' : 'my.requestor',
115 'id' : 'time_delta', 'hidden' : 'true', 'flex' : '1',
116 'label' : 'Server/Local Time Delta',
117 'render' : "my.time_delta",
120 'id' : 'workstation', 'flex' : '1',
121 'label' : 'Workstation',
122 'render' : "my.workstation",
125 'map_row_to_column' : function(row,col) {
126 JSAN.use('util.date');
127 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
128 var my = row; var value;
129 try { value = eval( col.render ); } catch(E) { obj.error.sdump('D_ERROR',E); value = '???'; }
135 obj.retrieve_seslist();
136 obj.render_seslist();
138 var x = document.getElementById('create');
139 if (obj.check_perm(obj.session,'OFFLINE_CREATE_SESSION')) {
141 x.addEventListener('command',function() { try{obj.create_ses();}catch(E){alert(E);} },false);
144 x = document.getElementById('upload');
145 x.addEventListener('command',function() { try{obj.upload();}catch(E){alert(E);} },false);
147 x = document.getElementById('refresh');
148 x.addEventListener('command',function() { try{obj.retrieve_seslist();obj.render_seslist();}catch(E){alert(E);} },false);
150 x = document.getElementById('execute');
151 x.addEventListener('command',function() { try{obj.execute_ses();}catch(E){alert(E);} },false);
153 x = document.getElementById('errors');
154 x.addEventListener('command',function() { try{obj.ses_errors();}catch(E){alert(E);} },false);
157 'check_perm' : function(ses,perms) {
158 return true; /* FIXME */
161 'execute_ses' : function() {
164 obj.data.stash_retrieve();
166 for (var i = 0; i < obj.sel_list.length; i++) {
168 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
169 + "?ses=" + window.escape(obj.data.session)
171 + "&seskey=" + window.escape(obj.sel_list[i])
172 + "&ws=" + window.escape(obj.data.ws_name);
173 var x = new XMLHttpRequest();
174 x.open("GET",url,false);
177 dump(url + ' = ' + x.responseText + '\n' );
178 var robj = JSON2js(x.responseText);
180 if (robj.ilsevent != 0) { alert('Execute error: ' + x.responseText); }
182 obj.retrieve_seslist(); obj.render_seslist();
186 'ses_errors' : function() {
189 obj.data.stash_retrieve();
191 for (var i = 0; i < obj.sel_list.length; i++) {
193 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
194 + "?ses=" + window.escape(obj.data.session)
196 + "&seskey=" + window.escape(obj.sel_list[i])
197 + "&ws=" + window.escape(obj.data.ws_name)
198 + '&status_type=exceptions';
199 var x = new XMLHttpRequest();
200 x.open("GET",url,false);
203 dump(url + ' = ' + x.responseText + '\n' );
204 var robj = JSON2js(x.responseText);
206 alert(js2JSON(robj));
211 'rename_file' : function() {
212 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
214 JSAN.use('util.file');
215 var pending = new util.file('pending_xacts');
216 if ( !pending._file.exists() ) { throw("Can't rename a non-existent file"); }
217 obj.transition_filename = 'pending_xacts_' + new Date().getTime();
219 var file = new util.file(obj.transition_filename);
220 while (file._file.exists()) {
221 obj.transition_filename = 'pending_xacts_' + new Date().getTime();
222 file = new util.file(obj.transition_filename);
223 if (count++>100) throw("Taking too long to find a unique filename.");
225 pending._file.moveTo(null,obj.transition_filename);
228 'revert_file' : function() {
229 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
231 JSAN.use('util.file');
232 var pending = new util.file('pending_xacts');
233 if (pending._file.exists()) { alert('Something bad happened. New offline transactions were accumulated during our attempted upload. Tell your system admin that the file involved is ' + obj.transition_filename); return; }
234 var file = new util.file(obj.transition_filename);
235 file._file.moveTo(null,'pending_xacts');
238 'archive_file' : function() {
239 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
241 JSAN.use('util.file');
242 var file = new util.file(obj.transition_filename);
243 if (file._file.exists()) file._file.moveTo(null,obj.transition_filename + '.complete')
246 'upload' : function() {
247 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
249 if (obj.sel_list.length == 0) { alert('Please select a session to upload to.'); return; }
250 if (obj.sel_list.length > 1) { alert('Please select a single session to upload to.'); return; }
252 JSAN.use('util.file');
254 var file = new util.file('pending_xacts');
255 if (!file._file.exists()) { alert('No pending transactions to upload.'); return; }
259 obj.data.stash_retrieve();
260 var seskey = obj.sel_list[0];
261 JSAN.use('util.widgets');
262 var xx = document.getElementById('iframe_placeholder'); util.widgets.remove_children(xx);
263 var x = document.createElement('iframe'); xx.appendChild(x); x.flex = 1;
266 window.xulG.url_prefix( urls.XUL_REMOTE_BROWSER )
267 + '?url=' + window.escape(
268 urls.XUL_OFFLINE_UPLOAD_XACTS
269 + '?ses=' + window.escape(obj.data.session)
270 + '&seskey=' + window.escape(seskey)
271 + '&ws=' + window.escape(obj.data.ws_name)
272 + '&delta=' + window.escape('0')
273 + '&filename=' + window.escape( obj.transition_filename )
277 'url_prefix' : window.xulG.url_prefix,
278 'passthru_content_params' : {
279 'url_prefix' : window.xulG.url_prefix,
280 'handle_event' : function(robj){
281 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
283 dump('robj = ' + js2JSON(robj) + '\n');
284 if ( robj.ilsevent != 0 ) {
289 obj.retrieve_seslist(); obj.render_seslist();
292 JSAN.use('util.widgets');
293 util.widgets.remove_children('iframe_placeholder');
297 alert('handle_event error: ' + E);
302 x.contentWindow.xulG = newG;
305 'ses_status' : function() {
308 obj.data.stash_retrieve();
310 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
311 + "?ses=" + window.escape(obj.data.session)
313 + "&seskey=" + window.escape(obj.sel_list[0])
314 + "&ws=" + window.escape(obj.data.ws_name)
315 + "&status_type=scripts";
316 var x = new XMLHttpRequest();
317 x.open("GET",url,false);
320 dump(url + ' = ' + x.responseText + '\n' );
321 var robj = JSON2js(x.responseText);
326 'create_ses' : function() {
330 var desc = window.prompt('Please enter a description:','','Create an Offline Transaction Session');
331 if (desc=='' || desc==null) { return; }
333 obj.data.stash_retrieve();
335 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
336 + "?ses=" + window.escape(obj.data.session)
338 + "&desc=" + window.escape(desc)
339 + "&ws=" + window.escape(obj.data.ws_name);
340 var x = new XMLHttpRequest();
341 x.open("GET",url,false);
344 dump(url + ' = ' + x.responseText + '\n' );
345 var robj = JSON2js(x.responseText);
346 if (robj.ilsevent == 0) {
347 obj.retrieve_seslist(); obj.render_seslist();
349 alert('Error: ' + x.responseText);
353 'retrieve_seslist' : function() {
357 obj.data.stash_retrieve();
359 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
360 + "?ses=" + window.escape(obj.data.session)
362 + "&org=" + window.escape(obj.data.list.au[0].ws_ou())
363 + "&status_type=sessions";
364 var x = new XMLHttpRequest();
365 x.open("GET",url,false);
368 dump(url + ' = ' + x.responseText + '\n' );
369 obj.seslist = JSON2js( x.responseText );
372 'render_seslist' : function() {
379 for (var i = 0; i < obj.seslist.length; i++) {
383 obj.list.append( { 'retrieve_id' : row.key, 'row' : row } );
388 JSAN.use('util.exec'); var exec = new util.exec();
391 document.getElementById('execute').disabled = true;
392 document.getElementById('errors').disabled = true;
393 document.getElementById('upload').disabled = true;
397 'render_scriptlist' : function() {
401 obj.script_list.clear();
403 var scripts = obj.ses_status().scripts;
406 for (var i = 0; i < scripts.length; i++) {
410 obj.script_list.append( { 'row' : row } );
415 JSAN.use('util.exec'); var exec = new util.exec();
420 dump('exiting admin/offline_manage_xacts.js\n');