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();
7 // Place a test here for network connectivity
8 // this.offline = true;
13 util.network.prototype = {
15 // Flag for whether the staff client should act as if it were offline or not
20 'simple_request' : function(id,params,f) {
21 return this.request(api[id].app,api[id].method,params,f);
24 'request' : function (app,name,params,f,o_params) {
25 var request = this._request(app,name,params,f,o_params);
27 return request.getResultObject();
33 '_request' : function (app,name,params,f,o_params) {
36 var sparams = js2JSON(params);
37 obj.error.sdump('D_SES','request '+app+' '+name+' '+obj.error.pretty_print(sparams.slice(1,sparams.length-1))+
38 '\nResult #' + (++obj.link_id) + ( f ? ' asynced' : ' synced' ) );
39 var request = new RemoteRequest( app, name );
40 for(var index in params) {
41 request.addParam(params[index]);
45 request.setCompleteCallback(
48 obj.error.sdump('D_SES_RESULT','asynced result #'
49 + obj.link_id + '\n\n'
50 + obj.error.pretty_print(js2JSON(req.getResultObject())));
51 req = obj.rerequest_on_session_timeout(app,name,params,req,o_params);
52 req = obj.rerequest_on_perm_failure(app,name,params,req,o_params);
54 req = obj.rerequest_on_override(app,name,params,req,o_params);
56 req = obj.check_for_offline(app,name,params,req,o_params);
67 var result = request.getResultObject();
68 this.error.sdump('D_SES_RESULT','synced result #' + obj.link_id + '\n\n' + obj.error.pretty_print(js2JSON(result)));
69 request = obj.rerequest_on_session_timeout(app,name,params,request,o_params);
70 request = obj.rerequest_on_perm_failure(app,name,params,request,o_params);
72 request = obj.rerequest_on_override(app,name,params,request,o_params);
74 request = obj.check_for_offline(app,name,params,request,o_params);
79 if (instanceOf(E,perm_ex)) {
80 alert('permission exception: ' + js2JSON(E));
86 'check_for_offline' : function (app,name,params,req,o_params) {
88 var result = req.getResultObject();
89 if (result != null) return req;
91 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
98 var r = obj.error.yns_alert('Network failure. Please check your Internet connection to ' + data.server_unadorned + ' and choose Reconnect. If you need to enter Offline Mode, choose Abort Connection 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 "' + name + '".','Network Failure','Reconnect','Abort Connection',null,'Check here to confirm this message');
102 req = obj._request(app,name,params,null,o_params);
103 if (req.getResultObject() == null) proceed = true;
107 return { 'getResultObject' : function() { return { 'ilsevent' : -1, 'textcode' : 'Network/Server Problem' }; } };
113 'rerequest_on_session_timeout' : function(app,name,params,req,o_params) {
116 var robj = req.getResultObject();
117 if (robj != null && robj.ilsevent && robj.ilsevent == 1001) {
118 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
121 + '?login_type=staff'
122 + '&desc_brief=' + window.escape('Your session has expired')
123 + '&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),
125 'chrome,resizable,modal,width=700,height=500'
127 JSAN.use('OpenILS.data');
128 var data = new OpenILS.data(); data.init({'via':'stash'});
129 if (data.temporary_session != '') {
130 data.session = data.temporary_session; data.stash('session');
131 params[0] = data.session;
132 req = obj._request(app,name,params,null,o_params);
136 this.error.sdump('D_ERROR',E);
141 'rerequest_on_perm_failure' : function(app,name,params,req,o_params) {
144 var robj = req.getResultObject();
145 if (robj != null && robj.ilsevent && robj.ilsevent == 5000) {
146 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
150 + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
151 + '&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),
153 'chrome,resizable,modal,width=700,height=500'
155 JSAN.use('OpenILS.data');
156 var data = new OpenILS.data(); data.init({'via':'stash'});
157 if (data.temporary_session != '') {
158 params[0] = data.temporary_session;
159 req = obj._request(app,name,params,null,o_params);
163 this.error.sdump('D_ERROR',E);
168 'rerequest_on_override' : function (app,name,params,req,o_params) {
171 function override(r) {
173 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
174 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"><groupbox><caption label="Exceptions"/><grid><columns><column/><column/><column/></columns><rows>';
175 for (var i = 0; i < r.length; i++) {
176 xml += '<row style="color: red"><description>' + r[i].ilsevent + '</description><description>' + r[i].textcode + '</description><description>' + (obj.error.get_ilsevent(r[i].ilsevent) ? obj.error.get_ilsevent(r[i].ilsevent) : "") + '</description></row>';
178 xml += '</rows></grid></groupbox><groupbox><caption label="Override"/><hbox><description>Force this action?</description><button accesskey="C" label="Cancel" name="fancy_cancel"/><button id="override" accesskey="O" label="Override" name="fancy_submit" value="override"/></hbox></groupbox></vbox>';
180 '/xul/server/util/fancy_prompt.xul'
181 + '?xml=' + window.escape(xml)
182 + '&title=' + window.escape(o_params.title),
183 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
185 JSAN.use('OpenILS.data');
186 var data = new OpenILS.data(); data.init({'via':'stash'});
187 if (data.fancy_prompt_data != '') {
188 req = obj._request(app,name + '.override',params);
196 var result = req.getResultObject();
197 if (!result) return req;
199 if ( o_params.overridable_events.indexOf(result.ilsevent) != -1 ) {
200 req = override([result]);
202 var found_good = false; var found_bad = false;
203 for (var i = 0; i < result.length; i++) {
204 if (o_params.overridable_events.indexOf(result[i].ilsevent) != -1 ) {
210 if (found_good && (!found_bad)) req = override(result);
223 function sample_callback(request) {
224 var result = request.getResultObject();
228 dump('exiting util/network.js\n');