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) {
16 return this.request(api[id].app,api[id].method,params,f);
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 '\nResult #' + (++obj.link_id) + ( f ? ' asynced' : ' synced' ) );
34 var request = new RemoteRequest( app, name );
35 for(var index in params) {
36 request.addParam(params[index]);
40 request.setCompleteCallback(
43 obj.error.sdump('D_SES_RESULT','asynced result #'
44 + obj.link_id + '\n\n'
45 + obj.error.pretty_print(js2JSON(req.getResultObject())));
46 req = obj.rerequest_on_session_timeout(app,name,params,req,o_params);
47 req = obj.rerequest_on_perm_failure(app,name,params,req,o_params);
49 req = obj.rerequest_on_override(app,name,params,req,o_params);
51 req = obj.check_for_offline(app,name,params,req,o_params);
62 var result = request.getResultObject();
63 this.error.sdump('D_SES_RESULT','synced result #' + obj.link_id + '\n\n' + obj.error.pretty_print(js2JSON(result)));
64 request = obj.rerequest_on_session_timeout(app,name,params,request,o_params);
65 request = obj.rerequest_on_perm_failure(app,name,params,request,o_params);
67 request = obj.rerequest_on_override(app,name,params,request,o_params);
69 request = obj.check_for_offline(app,name,params,request,o_params);
74 if (instanceOf(E,perm_ex)) {
75 alert('permission exception: ' + js2JSON(E));
81 'check_for_offline' : function (app,name,params,req,o_params) {
83 var result = req.getResultObject();
84 if (result != null) return req;
86 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
95 if (data.proceed_offline) {
100 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 "' + name + '".','Network Failure','Retry Network','Proceed Offline',null,'Check here to confirm this message');
102 data.proceed_offline = true; data.stash('proceed_offline');
103 dump('Remembering proceed_offline for 200000 ms.\n');
106 data.proceed_offline = false; data.stash('proceed_offline');
107 dump('Setting proceed_offline back to false.\n');
113 dump( r == 0 ? 'Retry Network\n' : 'Proceed Offline\n' );
117 req = obj._request(app,name,params,null,o_params);
118 if (req.getResultObject() == null) proceed = true;
122 return { 'getResultObject' : function() { return { 'ilsevent' : -1, 'textcode' : 'Network/Server Problem' }; } };
128 'rerequest_on_session_timeout' : function(app,name,params,req,o_params) {
131 var robj = req.getResultObject();
132 if (robj != null && robj.ilsevent && robj.ilsevent == 1001) {
133 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
136 + '?login_type=staff'
137 + '&desc_brief=' + window.escape('Your session has expired')
138 + '&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),
140 'chrome,resizable,modal,width=700,height=500'
142 JSAN.use('OpenILS.data');
143 var data = new OpenILS.data(); data.init({'via':'stash'});
144 if (data.temporary_session != '') {
145 data.session = data.temporary_session; data.stash('session');
146 params[0] = data.session;
147 req = obj._request(app,name,params,null,o_params);
151 this.error.sdump('D_ERROR',E);
156 'rerequest_on_perm_failure' : function(app,name,params,req,o_params) {
159 var robj = req.getResultObject();
160 if (robj != null && robj.ilsevent && robj.ilsevent == 5000) {
161 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
165 + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
166 + '&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),
168 'chrome,resizable,modal,width=700,height=500'
170 JSAN.use('OpenILS.data');
171 var data = new OpenILS.data(); data.init({'via':'stash'});
172 if (data.temporary_session != '') {
173 params[0] = data.temporary_session;
174 req = obj._request(app,name,params,null,o_params);
178 this.error.sdump('D_ERROR',E);
183 'rerequest_on_override' : function (app,name,params,req,o_params) {
186 function override(r) {
188 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
189 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>';
190 for (var i = 0; i < r.length; i++) {
191 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>';
193 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>';
195 '/xul/server/util/fancy_prompt.xul'
196 + '?xml=' + window.escape(xml)
197 + '&title=' + window.escape(o_params.title),
198 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
200 JSAN.use('OpenILS.data');
201 var data = new OpenILS.data(); data.init({'via':'stash'});
202 if (data.fancy_prompt_data != '') {
203 req = obj._request(app,name + '.override',params);
211 var result = req.getResultObject();
212 if (!result) return req;
214 if ( o_params.overridable_events.indexOf(result.ilsevent) != -1 ) {
215 req = override([result]);
217 var found_good = false; var found_bad = false;
218 for (var i = 0; i < result.length; i++) {
219 if (o_params.overridable_events.indexOf(result[i].ilsevent) != -1 ) {
225 if (found_good && (!found_bad)) req = override(result);
238 function sample_callback(request) {
239 var result = request.getResultObject();
243 dump('exiting util/network.js\n');