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 'rerequest_on_session_timeout' : function(app,name,params,req,o_params) {
143 var robj = req.getResultObject();
144 if (robj != null && robj.ilsevent && robj.ilsevent == 1001) {
145 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
148 + '?login_type=staff'
149 + '&desc_brief=' + window.escape('Your session has expired')
150 + '&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),
151 'simple_auth' + (new Date()).toString(),
152 'chrome,resizable,modal,width=700,height=500'
154 JSAN.use('OpenILS.data');
155 var data = new OpenILS.data(); data.init({'via':'stash'});
156 if (typeof data.temporary_session != 'undefined' && data.temporary_session != '') {
157 data.session.key = data.temporary_session.key;
158 data.session.authtime = data.temporary_session.authtime;
159 data.stash('session');
160 data.list.au[0] = JSON2js(data.temporary_session.usr);
163 JSAN.use('util.window'); var win = new util.window();
164 var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
165 var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
166 var enumerator = windowManagerInterface.getEnumerator(null);
168 var w; // set title on all appshell windows
169 while ( w = enumerator.getNext() ) {
170 if (w.document.title.match(/^\d/)) {
172 win.appshell_name_increment()
173 + ': ' + data.list.au[0].usrname()
174 + '@' + data.ws_name;
175 + '.' + data.server_unadorned
179 obj.error.standard_unexpected_error_alert('Error setting window titles to match new login',E);
182 params[0] = data.session.key;
183 req = obj._request(app,name,params,null,o_params);
187 this.error.standard_unexpected_error_alert('rerequest_on_session_timeout',E);
192 'rerequest_on_perm_failure' : function(app,name,params,req,o_params) {
195 var robj = req.getResultObject();
196 if (robj != null && robj.ilsevent && robj.ilsevent == 5000) {
197 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
198 if (location.href.match(/^chrome/)) {
199 //alert('Permission denied.');
204 + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
205 + '&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),
206 'simple_auth' + (new Date()).toString(),
207 'chrome,resizable,modal,width=700,height=500'
209 JSAN.use('OpenILS.data');
210 var data = new OpenILS.data(); data.init({'via':'stash'});
211 if (typeof data.temporary_session != 'undefined' && data.temporary_session != '') {
212 params[0] = data.temporary_session.key;
213 req = obj._request(app,name,params,null,o_params);
218 this.error.sdump('D_ERROR',E);
223 'rerequest_on_override' : function (app,name,params,req,o_params) {
226 if (!o_params.text) o_params.text = {};
227 function override(r) {
229 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
230 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">' +
231 '<groupbox><caption label="Exceptions"/>' +
232 '<grid><columns><column/><column/></columns><rows>';
233 for (var i = 0; i < r.length; i++) {
235 '<description style="color: red" tooltiptext="' + r[i].ilsevent + '">' + r[i].textcode + '</description>' +
236 '<description>' + (o_params.text[r[i].ilsevent] ? o_params.text[r[i].ilsevent](r[i]) : '') + '</description>' +
237 '</row><row>' + '<description>' + r[i].desc + '</description>' + '</row>';
239 xml += '</rows></grid></groupbox><groupbox><caption label="Override"/><hbox>' +
240 '<description>Force this action?</description>' +
241 '<button accesskey="N" label="No" name="fancy_cancel"/>' +
242 '<button id="override" accesskey="Y" label="Yes" name="fancy_submit" value="override"/></hbox></groupbox></vbox>';
244 urls.XUL_FANCY_PROMPT
245 + '?xml=' + window.escape(xml)
246 + '&title=' + window.escape(o_params.title),
247 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
249 JSAN.use('OpenILS.data');
250 var data = new OpenILS.data(); data.init({'via':'stash'});
251 if (data.fancy_prompt_data != '') {
252 req = obj._request(app,name + '.override',params);
256 alert('in util.network, rerequest_on_override, override:' + E);
260 var result = req.getResultObject();
261 if (!result) return req;
263 if ( (typeof result.ilsevent != 'undefined') && (o_params.overridable_events.indexOf(result.ilsevent) != -1) ) {
264 req = override([result]);
266 var found_good = false; var found_bad = false;
267 for (var i = 0; i < result.length; i++) {
268 if ( (result[i].ilsevent != 'undefined') && (o_params.overridable_events.indexOf(result[i].ilsevent) != -1) ) {
274 if (found_good && (!found_bad)) req = override(result);
287 function sample_callback(request) {
288 var result = request.getResultObject();
292 dump('exiting util/network.js\n');