1 dump('entering util/network.js\n');
3 if (typeof util == 'undefined') util = {};
4 util.network = function () {
6 JSAN.use('util.error'); this.error = new util.error();
11 util.network.prototype = {
15 'simple_request' : function(id,params,f,o_params) {
16 return this.request(api[id].app,api[id].method,params,f,o_params);
19 'request' : function (app,name,params,f,o_params) {
20 var request = this._request(app,name,params,f,o_params);
22 return request.getResultObject();
28 '_request' : function (app,name,params,f,o_params) {
31 var sparams = js2JSON(params);
32 obj.error.sdump('D_SES','request '+app+' '+name+' '+obj.error.pretty_print(sparams.slice(1,sparams.length-1))+
33 '\no_params = ' + o_params +
34 '\nResult #' + (++obj.link_id) + ( f ? ' asynced' : ' synced' ) );
35 var request = new RemoteRequest( app, name );
36 for(var index in params) {
37 request.addParam(params[index]);
41 request.setCompleteCallback(
44 var json_string = js2JSON(req.getResultObject());
45 obj.error.sdump('D_SES_RESULT','asynced result #'
46 + obj.link_id + '\n\n'
47 + (json_string.length > 80 ? obj.error.pretty_print(json_string) : json_string)
48 + '\n\nOriginal Request:\n\n'
49 + 'request '+app+' '+name+' '+ sparams.slice(1,sparams.length-1));
50 req = obj.rerequest_on_session_timeout(app,name,params,req,o_params);
51 req = obj.rerequest_on_perm_failure(app,name,params,req,o_params);
53 req = obj.rerequest_on_override(app,name,params,req,o_params);
55 req = obj.check_for_offline(app,name,params,req,o_params);
60 E.textcode = 'Server/Method Error';
62 f( { 'getResultObject' : function() { return E; } } );
70 var result = request.getResultObject();
71 var json_string = js2JSON(result);
72 this.error.sdump('D_SES_RESULT','synced result #'
73 + obj.link_id + '\n\n' + ( json_string.length > 80 ? obj.error.pretty_print(json_string) : json_string )
74 + '\n\nOriginal Request:\n\n'
75 + 'request '+app+' '+name+' '+ sparams.slice(1,sparams.length-1));
76 request = obj.rerequest_on_session_timeout(app,name,params,request,o_params);
77 request = obj.rerequest_on_perm_failure(app,name,params,request,o_params);
79 request = obj.rerequest_on_override(app,name,params,request,o_params);
81 request = obj.check_for_offline(app,name,params,request,o_params);
86 if (instanceOf(E,perm_ex)) {
87 alert('in util.network, _request : permission exception: ' + js2JSON(E));
93 'check_for_offline' : function (app,name,params,req,o_params) {
95 var result = req.getResultObject();
96 if (result != null) return req;
98 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
107 if (data.proceed_offline) {
112 try { obj.error.sdump('D_SES_ERROR','method: ' + name + '\nparams: '+ js2JSON(params) + '\nReturned null\n'); } catch(E) { alert(E); }
113 r = obj.error.yns_alert('Network failure. Please check your Internet connection to ' + data.server_unadorned + ' and choose Retry Network. If you need to enter Offline Mode, choose Proceed Offline in this and subsequent dialogs. If you believe this error is due to a bug in Evergreen and not network problems, please contact your helpdesk or friendly Evergreen admins, and give them this message: method=' + name + ' params=' + js2JSON(params) + '.','Network Failure','Retry Network','Proceed Offline',null,'Check here to confirm this message');
115 data.proceed_offline = true; data.stash('proceed_offline');
116 dump('Remembering proceed_offline for 200000 ms.\n');
119 data.proceed_offline = false; data.stash('proceed_offline');
120 dump('Setting proceed_offline back to false.\n');
126 dump( r == 0 ? 'Retry Network\n' : 'Proceed Offline\n' );
130 req = obj._request(app,name,params,null,o_params);
131 if (req.getResultObject() == null) proceed = true;
135 return { 'getResultObject' : function() { return { 'ilsevent' : -1, 'textcode' : 'Network/Server Problem' }; } };
141 'reset_titlebars' : function(data) {
143 data.stash_retrieve();
145 JSAN.use('util.window'); var win = new util.window();
146 var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
147 var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
148 var enumerator = windowManagerInterface.getEnumerator(null);
150 var w; // set title on all appshell windows
151 while ( w = enumerator.getNext() ) {
152 if (w.document.title.match(/^\d/)) {
154 win.appshell_name_increment()
155 + ': ' + data.list.au[0].usrname()
156 + '@' + data.ws_name;
157 + '.' + data.server_unadorned
161 obj.error.standard_unexpected_error_alert('Error setting window titles to match new login',E);
165 'get_new_session' : function(name,xulG) {
169 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
170 var url = urls.XUL_AUTH_SIMPLE;
171 if (typeof xulG != 'undefined' && typeof xulG.url_prefix == 'function') url = xulG.url_prefix( url );
174 + '?login_type=staff'
175 + '&desc_brief=' + window.escape('Operator Change')
176 + '&desc_full=' + window.escape('Please enter the credentials for the new login session. Note that the previous session is still active.'),
177 'simple_auth' + (new Date()).toString(),
178 'chrome,resizable,modal,width=700,height=500'
180 JSAN.use('OpenILS.data');
181 var data = new OpenILS.data(); data.init({'via':'stash'});
182 if (typeof data.temporary_session != 'undefined' && data.temporary_session != '') {
183 data.session.key = data.temporary_session.key;
184 data.session.authtime = data.temporary_session.authtime;
185 data.stash('session');
186 data.list.au[0] = JSON2js(data.temporary_session.usr);
188 obj.reset_titlebars(data);
194 obj.error.standard_unexpected_error_alert('util.network.get_new_session',E);
198 'rerequest_on_session_timeout' : function(app,name,params,req,o_params) {
201 var robj = req.getResultObject();
202 if (robj != null && robj.ilsevent && robj.ilsevent == 1001) {
204 if (obj.get_new_session(name)) {
205 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
206 params[0] = data.session.key;
207 req = obj._request(app,name,params,null,o_params);
211 this.error.standard_unexpected_error_alert('rerequest_on_session_timeout',E);
216 'rerequest_on_perm_failure' : function(app,name,params,req,o_params) {
219 var robj = req.getResultObject();
220 if (robj != null && robj.ilsevent && robj.ilsevent == 5000) {
221 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
222 if (location.href.match(/^chrome/)) {
223 //alert('Permission denied.');
228 + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
229 + '&desc_full=' + window.escape('Another staff member with the above permission may authorize this specific action. Please notify your library administrator if you need this permission. If you feel you have received this exception in error, inform your friendly Evergreen developers of the above permission and this debug information: ' + name),
230 'simple_auth' + (new Date()).toString(),
231 'chrome,resizable,modal,width=700,height=500'
233 JSAN.use('OpenILS.data');
234 var data = new OpenILS.data(); data.init({'via':'stash'});
235 if (typeof data.temporary_session != 'undefined' && data.temporary_session != '') {
236 params[0] = data.temporary_session.key;
237 req = obj._request(app,name,params,null,o_params);
242 this.error.sdump('D_ERROR',E);
247 'rerequest_on_override' : function (app,name,params,req,o_params) {
250 if (!o_params.text) o_params.text = {};
251 function override(r) {
253 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
254 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">' +
255 '<groupbox><caption label="Exceptions"/>' +
256 '<grid><columns><column/><column/></columns><rows>';
257 for (var i = 0; i < r.length; i++) {
259 '<description style="color: red" tooltiptext="' + r[i].ilsevent + '">' + r[i].textcode + '</description>' +
260 '<description>' + (o_params.text[r[i].ilsevent] ? o_params.text[r[i].ilsevent](r[i]) : '') + '</description>' +
261 '</row><row>' + '<description>' + r[i].desc + '</description>' + '</row>';
263 xml += '</rows></grid></groupbox><groupbox><caption label="Override"/><hbox>' +
264 '<description>Force this action?</description>' +
265 '<button accesskey="N" label="No" name="fancy_cancel"/>' +
266 '<button id="override" accesskey="Y" label="Yes" name="fancy_submit" value="override"/></hbox></groupbox></vbox>';
268 urls.XUL_FANCY_PROMPT
269 + '?xml=' + window.escape(xml)
270 + '&title=' + window.escape(o_params.title),
271 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
273 JSAN.use('OpenILS.data');
274 var data = new OpenILS.data(); data.init({'via':'stash'});
275 if (data.fancy_prompt_data != '') {
276 req = obj._request(app,name + '.override',params);
280 alert('in util.network, rerequest_on_override, override:' + E);
284 var result = req.getResultObject();
285 if (!result) return req;
287 if ( (typeof result.ilsevent != 'undefined') && (o_params.overridable_events.indexOf(result.ilsevent) != -1) ) {
288 req = override([result]);
290 var found_good = false; var found_bad = false;
291 for (var i = 0; i < result.length; i++) {
292 if ( (result[i].ilsevent != 'undefined') && (o_params.overridable_events.indexOf(result[i].ilsevent) != -1) ) {
298 if (found_good && (!found_bad)) req = override(result);
311 function sample_callback(request) {
312 var result = request.getResultObject();
316 dump('exiting util/network.js\n');