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);
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);
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 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');
114 data.proceed_offline = true; data.stash('proceed_offline');
115 dump('Remembering proceed_offline for 200000 ms.\n');
118 data.proceed_offline = false; data.stash('proceed_offline');
119 dump('Setting proceed_offline back to false.\n');
125 dump( r == 0 ? 'Retry Network\n' : 'Proceed Offline\n' );
129 req = obj._request(app,name,params,null,o_params);
130 if (req.getResultObject() == null) proceed = true;
134 return { 'getResultObject' : function() { return { 'ilsevent' : -1, 'textcode' : 'Network/Server Problem' }; } };
140 'reset_titlebars' : function(data) {
142 data.stash_retrieve();
144 JSAN.use('util.window'); var win = new util.window();
145 var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
146 var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
147 var enumerator = windowManagerInterface.getEnumerator(null);
149 var w; // set title on all appshell windows
150 while ( w = enumerator.getNext() ) {
151 if (w.document.title.match(/^\d/)) {
153 win.appshell_name_increment()
154 + ': ' + data.list.au[0].usrname()
155 + '@' + data.ws_name;
156 + '.' + data.server_unadorned
160 obj.error.standard_unexpected_error_alert('Error setting window titles to match new login',E);
164 'get_new_session' : function(name,xulG) {
168 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
169 var url = urls.XUL_AUTH_SIMPLE;
170 if (typeof xulG != 'undefined' && typeof xulG.url_prefix == 'function') url = xulG.url_prefix( url );
173 + '?login_type=staff'
174 + '&desc_brief=' + window.escape('Your session has expired')
175 + '&desc_full=' + window.escape('Please re-login. If after you have re-authenticated, you still see session expired dialogs like this one, please note where they are occuring and inform your friendly Evergreen developers of this debug information: ' + name),
176 'simple_auth' + (new Date()).toString(),
177 'chrome,resizable,modal,width=700,height=500'
179 JSAN.use('OpenILS.data');
180 var data = new OpenILS.data(); data.init({'via':'stash'});
181 if (typeof data.temporary_session != 'undefined' && data.temporary_session != '') {
182 data.session.key = data.temporary_session.key;
183 data.session.authtime = data.temporary_session.authtime;
184 data.stash('session');
185 data.list.au[0] = JSON2js(data.temporary_session.usr);
187 obj.reset_titlebars(data);
193 obj.error.standard_unexpected_error_alert('util.network.get_new_session',E);
197 'rerequest_on_session_timeout' : function(app,name,params,req,o_params) {
200 var robj = req.getResultObject();
201 if (robj != null && robj.ilsevent && robj.ilsevent == 1001) {
203 if (obj.get_new_session(name)) {
204 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
205 params[0] = data.session.key;
206 req = obj._request(app,name,params,null,o_params);
210 this.error.standard_unexpected_error_alert('rerequest_on_session_timeout',E);
215 'rerequest_on_perm_failure' : function(app,name,params,req,o_params) {
218 var robj = req.getResultObject();
219 if (robj != null && robj.ilsevent && robj.ilsevent == 5000) {
220 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
221 if (location.href.match(/^chrome/)) {
222 //alert('Permission denied.');
227 + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
228 + '&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),
229 'simple_auth' + (new Date()).toString(),
230 'chrome,resizable,modal,width=700,height=500'
232 JSAN.use('OpenILS.data');
233 var data = new OpenILS.data(); data.init({'via':'stash'});
234 if (typeof data.temporary_session != 'undefined' && data.temporary_session != '') {
235 params[0] = data.temporary_session.key;
236 req = obj._request(app,name,params,null,o_params);
241 this.error.sdump('D_ERROR',E);
246 'rerequest_on_override' : function (app,name,params,req,o_params) {
249 if (!o_params.text) o_params.text = {};
250 function override(r) {
252 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
253 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">' +
254 '<groupbox><caption label="Exceptions"/>' +
255 '<grid><columns><column/><column/></columns><rows>';
256 for (var i = 0; i < r.length; i++) {
258 '<description style="color: red" tooltiptext="' + r[i].ilsevent + '">' + r[i].textcode + '</description>' +
259 '<description>' + (o_params.text[r[i].ilsevent] ? o_params.text[r[i].ilsevent](r[i]) : '') + '</description>' +
260 '</row><row>' + '<description>' + r[i].desc + '</description>' + '</row>';
262 xml += '</rows></grid></groupbox><groupbox><caption label="Override"/><hbox>' +
263 '<description>Force this action?</description>' +
264 '<button accesskey="N" label="No" name="fancy_cancel"/>' +
265 '<button id="override" accesskey="Y" label="Yes" name="fancy_submit" value="override"/></hbox></groupbox></vbox>';
267 urls.XUL_FANCY_PROMPT
268 + '?xml=' + window.escape(xml)
269 + '&title=' + window.escape(o_params.title),
270 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
272 JSAN.use('OpenILS.data');
273 var data = new OpenILS.data(); data.init({'via':'stash'});
274 if (data.fancy_prompt_data != '') {
275 req = obj._request(app,name + '.override',params);
279 alert('in util.network, rerequest_on_override, override:' + E);
283 var result = req.getResultObject();
284 if (!result) return req;
286 if ( (typeof result.ilsevent != 'undefined') && (o_params.overridable_events.indexOf(result.ilsevent) != -1) ) {
287 req = override([result]);
289 var found_good = false; var found_bad = false;
290 for (var i = 0; i < result.length; i++) {
291 if ( (result[i].ilsevent != 'undefined') && (o_params.overridable_events.indexOf(result[i].ilsevent) != -1) ) {
297 if (found_good && (!found_bad)) req = override(result);
310 function sample_callback(request) {
311 var result = request.getResultObject();
315 dump('exiting util/network.js\n');