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_STATUS')) {
95 document.getElementById('status').disabled = false;
97 if (obj.check_perm(obj.session,'OFFLINE_SESSION_ERRORS')) {
98 document.getElementById('errors').disabled = false;
103 obj.retrieve_seslist();
104 obj.render_seslist();
106 var x = document.getElementById('create');
107 if (obj.check_perm(obj.session,'OFFLINE_CREATE_SESSION')) {
109 x.addEventListener('command',function() { try{obj.create_ses();}catch(E){alert(E);} },false);
112 x = document.getElementById('upload');
113 x.addEventListener('command',function() { try{obj.upload();}catch(E){alert(E);} },false);
115 x = document.getElementById('status');
116 x.addEventListener('command',function() { try{obj.ses_status();}catch(E){alert(E);} },false);
118 x = document.getElementById('refresh');
119 x.addEventListener('command',function() { try{obj.retrieve_seslist();obj.render_seslist();}catch(E){alert(E);} },false);
121 x = document.getElementById('execute');
122 x.addEventListener('command',function() { try{obj.execute_ses();}catch(E){alert(E);} },false);
125 'check_perm' : function(ses,perms) {
126 return true; /* FIXME */
129 'execute_ses' : function() {
132 'rename_file' : function() {
133 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
135 JSAN.use('util.file');
136 var pending = new util.file('pending_xacts');
137 if ( !pending._file.exists() ) { throw("Can't rename a non-existent file"); }
138 obj.transition_filename = 'pending_xacts_' + new Date().getTime();
140 var file = new util.file(obj.transition_filename);
141 while (file._file.exists()) {
142 obj.transition_filename = 'pending_xacts_' + new Date().getTime();
143 file = new util.file(obj.transition_filename);
144 if (count++>100) throw("Taking too long to find a unique filename.");
146 pending._file.moveTo(null,obj.transition_filename);
149 'revert_file' : function() {
150 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
152 JSAN.use('util.file');
153 var pending = new util.file('pending_xacts');
154 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; }
155 var file = new util.file(obj.transition_filename);
156 file._file.moveTo(null,'pending_xacts');
159 'archive_file' : function() {
160 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
162 JSAN.use('util.file');
163 var file = new util.file(obj.transition_filename);
164 if (file._file.exists()) file._file.moveTo(null,obj.transition_filename + '.complete')
167 'upload' : function() {
168 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
170 if (obj.sel_list.length == 0) { alert('Please select a session to upload to.'); return; }
171 if (obj.sel_list.length > 1) { alert('Please select a single session to upload to.'); return; }
173 JSAN.use('util.file');
175 var file = new util.file('pending_xacts');
176 if (!file._file.exists()) { alert('No pending transactions to upload.'); return; }
180 obj.data.stash_retrieve();
181 var seskey = obj.sel_list[0];
182 JSAN.use('util.widgets');
183 var xx = document.getElementById('iframe_placeholder'); util.widgets.remove_children(xx);
184 var x = document.createElement('iframe'); xx.appendChild(x); x.flex = 1;
187 window.xulG.url_prefix( urls.XUL_REMOTE_BROWSER )
188 + '?url=' + window.escape(
189 urls.XUL_OFFLINE_UPLOAD_XACTS
190 + '?ses=' + window.escape(obj.data.session)
191 + '&seskey=' + window.escape(seskey)
192 + '&ws=' + window.escape(obj.data.ws_name)
193 + '&delta=' + window.escape('0')
194 + '&filename=' + window.escape( obj.transition_filename )
198 'url_prefix' : window.xulG.url_prefix,
199 'passthru_content_params' : {
200 'url_prefix' : window.xulG.url_prefix,
201 'handle_event' : function(robj){
202 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
204 dump('robj = ' + js2JSON(robj) + '\n');
205 if ( robj.ilsevent != 0 ) {
210 obj.retrieve_seslist(); obj.render_seslist();
213 JSAN.use('util.widgets');
214 util.widgets.remove_children('iframe_placeholder');
218 alert('handle_event error: ' + E);
223 x.contentWindow.xulG = newG;
226 'ses_status' : function() {
229 obj.data.stash_retrieve();
231 for (var i = 0; i < obj.sel_list.length; i++) {
233 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
234 + "?ses=" + window.escape(obj.data.session)
236 + "&seskey=" + window.escape(obj.sel_list[i])
237 + "&ws=" + window.escape(obj.data.ws_name)
238 + "&status_type=scripts";
239 var x = new XMLHttpRequest();
240 x.open("GET",url,false);
243 dump(url + ' = ' + x.responseText + '\n' );
244 var robj = JSON2js(x.responseText);
246 alert(js2JSON(robj));
251 'create_ses' : function() {
255 var desc = window.prompt('Please enter a description:','','Create an Offline Transaction Session');
256 if (desc=='' || desc==null) { return; }
258 obj.data.stash_retrieve();
260 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
261 + "?ses=" + window.escape(obj.data.session)
263 + "&desc=" + window.escape(desc)
264 + "&ws=" + window.escape(obj.data.ws_name);
265 var x = new XMLHttpRequest();
266 x.open("GET",url,false);
269 dump(url + ' = ' + x.responseText + '\n' );
270 var robj = JSON2js(x.responseText);
271 if (robj.ilsevent == 0) {
272 obj.retrieve_seslist(); obj.render_seslist();
274 alert('Error: ' + x.responseText);
278 'retrieve_seslist' : function() {
282 obj.data.stash_retrieve();
284 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
285 + "?ses=" + window.escape(obj.data.session)
287 + "&org=" + window.escape(obj.data.list.au[0].ws_ou())
288 + "&status_type=sessions";
289 var x = new XMLHttpRequest();
290 x.open("GET",url,false);
293 dump(url + ' = ' + x.responseText + '\n' );
294 obj.seslist = JSON2js( x.responseText );
297 'render_seslist' : function() {
304 for (var i = 0; i < obj.seslist.length; i++) {
308 obj.list.append( { 'retrieve_id' : row.key, 'row' : row } );
313 JSAN.use('util.exec'); var exec = new util.exec();
316 document.getElementById('execute').disabled = true;
317 document.getElementById('status').disabled = true;
318 document.getElementById('errors').disabled = true;
319 document.getElementById('upload').disabled = true;
324 dump('exiting admin/offline_manage_xacts.js\n');