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','request '+app+' '+name+' '+obj.error.pretty_print(sparams.slice(1,sparams.length-1))+
113 '\no_params = ' + o_params + '\nReturned null\n'); } catch(E) { alert(E); }
114 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');
116 data.proceed_offline = true; data.stash('proceed_offline');
117 dump('Remembering proceed_offline for 200000 ms.\n');
120 data.proceed_offline = false; data.stash('proceed_offline');
121 dump('Setting proceed_offline back to false.\n');
127 dump( r == 0 ? 'Retry Network\n' : 'Proceed Offline\n' );
131 req = obj._request(app,name,params,null,o_params);
132 if (req.getResultObject() == null) proceed = true;
136 return { 'getResultObject' : function() { return { 'ilsevent' : -1, 'textcode' : 'Network/Server Problem' }; } };
142 'reset_titlebars' : function(data) {
144 data.stash_retrieve();
146 JSAN.use('util.window'); var win = new util.window();
147 var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
148 var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
149 var enumerator = windowManagerInterface.getEnumerator(null);
151 var w; // set title on all appshell windows
152 while ( w = enumerator.getNext() ) {
153 if (w.document.title.match(/^\d/)) {
155 win.appshell_name_increment()
156 + ': ' + data.list.au[0].usrname()
157 + '@' + data.ws_name;
158 + '.' + data.server_unadorned
162 obj.error.standard_unexpected_error_alert('Error setting window titles to match new login',E);
166 'get_new_session' : function(name,xulG) {
170 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
171 var url = urls.XUL_AUTH_SIMPLE;
172 if (typeof xulG != 'undefined' && typeof xulG.url_prefix == 'function') url = xulG.url_prefix( url );
175 + '?login_type=staff'
176 + '&desc_brief=' + window.escape('Operator Change')
177 + '&desc_full=' + window.escape('Please enter the credentials for the new login session. Note that the previous session is still active.'),
178 'simple_auth' + (new Date()).toString(),
179 'chrome,resizable,modal,width=700,height=500'
181 JSAN.use('OpenILS.data');
182 var data = new OpenILS.data(); data.init({'via':'stash'});
183 if (typeof data.temporary_session != 'undefined' && data.temporary_session != '') {
184 data.session.key = data.temporary_session.key;
185 data.session.authtime = data.temporary_session.authtime;
186 data.stash('session');
187 data.list.au[0] = JSON2js(data.temporary_session.usr);
189 obj.reset_titlebars(data);
195 obj.error.standard_unexpected_error_alert('util.network.get_new_session',E);
199 'rerequest_on_session_timeout' : function(app,name,params,req,o_params) {
202 var robj = req.getResultObject();
203 if (robj != null && robj.ilsevent && robj.ilsevent == 1001) {
205 if (obj.get_new_session(name)) {
206 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
207 params[0] = data.session.key;
208 req = obj._request(app,name,params,null,o_params);
212 this.error.standard_unexpected_error_alert('rerequest_on_session_timeout',E);
217 'rerequest_on_perm_failure' : function(app,name,params,req,o_params) {
220 var robj = req.getResultObject();
221 if (robj != null && robj.ilsevent && robj.ilsevent == 5000) {
222 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
223 if (location.href.match(/^chrome/)) {
224 //alert('Permission denied.');
229 + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
230 + '&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),
231 'simple_auth' + (new Date()).toString(),
232 'chrome,resizable,modal,width=700,height=500'
234 JSAN.use('OpenILS.data');
235 var data = new OpenILS.data(); data.init({'via':'stash'});
236 if (typeof data.temporary_session != 'undefined' && data.temporary_session != '') {
237 params[0] = data.temporary_session.key;
238 req = obj._request(app,name,params,null,o_params);
243 this.error.sdump('D_ERROR',E);
248 'rerequest_on_override' : function (app,name,params,req,o_params) {
251 if (!o_params.text) o_params.text = {};
252 function override(r) {
254 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
255 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">' +
256 '<groupbox><caption label="Exceptions"/>' +
257 '<grid><columns><column/><column/></columns><rows>';
258 for (var i = 0; i < r.length; i++) {
260 '<description style="color: red" tooltiptext="' + r[i].ilsevent + '">' + r[i].textcode + '</description>' +
261 '<description>' + (o_params.text[r[i].ilsevent] ? o_params.text[r[i].ilsevent](r[i]) : '') + '</description>' +
262 '</row><row>' + '<description>' + r[i].desc + '</description>' + '</row>';
264 xml += '</rows></grid></groupbox><groupbox><caption label="Override"/><hbox>' +
265 '<description>Force this action?</description>' +
266 '<button accesskey="N" label="No" name="fancy_cancel"/>' +
267 '<button id="override" accesskey="Y" label="Yes" name="fancy_submit" value="override"/></hbox></groupbox></vbox>';
269 urls.XUL_FANCY_PROMPT
270 + '?xml=' + window.escape(xml)
271 + '&title=' + window.escape(o_params.title),
272 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
274 JSAN.use('OpenILS.data');
275 var data = new OpenILS.data(); data.init({'via':'stash'});
276 if (data.fancy_prompt_data != '') {
277 req = obj._request(app,name + '.override',params);
281 alert('in util.network, rerequest_on_override, override:' + E);
285 var result = req.getResultObject();
286 if (!result) return req;
288 if ( (typeof result.ilsevent != 'undefined') && (o_params.overridable_events.indexOf(result.ilsevent) != -1) ) {
289 req = override([result]);
291 var found_good = false; var found_bad = false;
292 for (var i = 0; i < result.length; i++) {
293 if ( (result[i].ilsevent != 'undefined') && (o_params.overridable_events.indexOf(result[i].ilsevent) != -1) ) {
299 if (found_good && (!found_bad)) req = override(result);
312 function sample_callback(request) {
313 var result = request.getResultObject();
317 dump('exiting util/network.js\n');