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 req = obj.rerequest_on_session_timeout(app,name,params,req,o_params);
49 req = obj.rerequest_on_perm_failure(app,name,params,req,o_params);
51 req = obj.rerequest_on_override(app,name,params,req,o_params);
53 req = obj.check_for_offline(app,name,params,req,o_params);
58 E.textcode = 'Server/Method Error';
60 f( { 'getResultObject' : function() { return E; } } );
68 var result = request.getResultObject();
69 var json_string = js2JSON(result);
70 this.error.sdump('D_SES_RESULT','synced result #' + obj.link_id + '\n\n' + ( json_string.length > 80 ? obj.error.pretty_print(json_string) : json_string ) );
71 request = obj.rerequest_on_session_timeout(app,name,params,request,o_params);
72 request = obj.rerequest_on_perm_failure(app,name,params,request,o_params);
74 request = obj.rerequest_on_override(app,name,params,request,o_params);
76 request = obj.check_for_offline(app,name,params,request,o_params);
81 if (instanceOf(E,perm_ex)) {
82 alert('in util.network, _request : permission exception: ' + js2JSON(E));
88 'check_for_offline' : function (app,name,params,req,o_params) {
90 var result = req.getResultObject();
91 if (result != null) return req;
93 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
102 if (data.proceed_offline) {
107 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');
109 data.proceed_offline = true; data.stash('proceed_offline');
110 dump('Remembering proceed_offline for 200000 ms.\n');
113 data.proceed_offline = false; data.stash('proceed_offline');
114 dump('Setting proceed_offline back to false.\n');
120 dump( r == 0 ? 'Retry Network\n' : 'Proceed Offline\n' );
124 req = obj._request(app,name,params,null,o_params);
125 if (req.getResultObject() == null) proceed = true;
129 return { 'getResultObject' : function() { return { 'ilsevent' : -1, 'textcode' : 'Network/Server Problem' }; } };
135 'rerequest_on_session_timeout' : function(app,name,params,req,o_params) {
138 var robj = req.getResultObject();
139 if (robj != null && robj.ilsevent && robj.ilsevent == 1001) {
140 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
143 + '?login_type=staff'
144 + '&desc_brief=' + window.escape('Your session has expired')
145 + '&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),
146 'simple_auth' + (new Date()).toString(),
147 'chrome,resizable,modal,width=700,height=500'
149 JSAN.use('OpenILS.data');
150 var data = new OpenILS.data(); data.init({'via':'stash'});
151 if (data.temporary_session != '') {
152 data.session.key = data.temporary_session.key;
153 data.session.authtime = data.temporary_session.authtime;
154 data.stash('session');
155 data.list.au[0] = JSON2js(data.temporary_session.usr);
158 JSAN.use('util.window'); var win = new util.window();
159 var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
160 var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
161 var enumerator = windowManagerInterface.getEnumerator(null);
163 var w; // close all other windows
164 while ( w = enumerator.getNext() ) {
165 if (w.document.title.match(/^\d/)) {
167 win.appshell_name_increment()
168 + ': ' + data.list.au[0].usrname()
169 + '@' + data.ws_name;
170 + '.' + data.server_unadorned
174 obj.error.standard_unexpected_error_alert('Error setting window titles to match new login',E);
177 params[0] = data.session.key;
178 req = obj._request(app,name,params,null,o_params);
182 this.error.sdump('D_ERROR',E);
187 'rerequest_on_perm_failure' : function(app,name,params,req,o_params) {
190 var robj = req.getResultObject();
191 if (robj != null && robj.ilsevent && robj.ilsevent == 5000) {
192 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
196 + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
197 + '&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),
198 'simple_auth' + (new Date()).toString(),
199 'chrome,resizable,modal,width=700,height=500'
201 JSAN.use('OpenILS.data');
202 var data = new OpenILS.data(); data.init({'via':'stash'});
203 if (data.temporary_session != '') {
204 params[0] = data.temporary_session.key;
205 req = obj._request(app,name,params,null,o_params);
209 this.error.sdump('D_ERROR',E);
214 'rerequest_on_override' : function (app,name,params,req,o_params) {
217 if (!o_params.text) o_params.text = {};
218 function override(r) {
220 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
221 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">' +
222 '<groupbox><caption label="Exceptions"/>' +
223 '<grid><columns><column/><column/></columns><rows>';
224 for (var i = 0; i < r.length; i++) {
226 '<description style="color: red" tooltiptext="' + r[i].ilsevent + '">' + r[i].textcode + '</description>' +
227 '<description>' + (o_params.text[r[i].ilsevent] ? o_params.text[r[i].ilsevent](r[i]) : '') + '</description>' +
228 '</row><row>' + '<description>' + r[i].desc + '</description>' + '</row>';
230 xml += '</rows></grid></groupbox><groupbox><caption label="Override"/><hbox>' +
231 '<description>Force this action?</description>' +
232 '<button accesskey="N" label="No" name="fancy_cancel"/>' +
233 '<button id="override" accesskey="Y" label="Yes" name="fancy_submit" value="override"/></hbox></groupbox></vbox>';
235 urls.XUL_FANCY_PROMPT
236 + '?xml=' + window.escape(xml)
237 + '&title=' + window.escape(o_params.title),
238 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
240 JSAN.use('OpenILS.data');
241 var data = new OpenILS.data(); data.init({'via':'stash'});
242 if (data.fancy_prompt_data != '') {
243 req = obj._request(app,name + '.override',params);
247 alert('in util.network, rerequest_on_override, override:' + E);
251 var result = req.getResultObject();
252 if (!result) return req;
254 if ( (typeof result.ilsevent != 'undefined') && (o_params.overridable_events.indexOf(result.ilsevent) != -1) ) {
255 req = override([result]);
257 var found_good = false; var found_bad = false;
258 for (var i = 0; i < result.length; i++) {
259 if ( (result[i].ilsevent != 'undefined') && (o_params.overridable_events.indexOf(result[i].ilsevent) != -1) ) {
265 if (found_good && (!found_bad)) req = override(result);
278 function sample_callback(request) {
279 var result = request.getResultObject();
283 dump('exiting util/network.js\n');