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 var json_string = js2JSON(req.getResultObject());
44 obj.error.sdump('D_SES_RESULT','asynced result #'
45 + obj.link_id + '\n\n'
46 + (json_string.length > 80 ? obj.error.pretty_print(json_string) : json_string) );
47 req = obj.rerequest_on_session_timeout(app,name,params,req,o_params);
48 req = obj.rerequest_on_perm_failure(app,name,params,req,o_params);
50 req = obj.rerequest_on_override(app,name,params,req,o_params);
52 req = obj.check_for_offline(app,name,params,req,o_params);
63 var result = request.getResultObject();
64 var json_string = js2JSON(result);
65 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 ) );
66 request = obj.rerequest_on_session_timeout(app,name,params,request,o_params);
67 request = obj.rerequest_on_perm_failure(app,name,params,request,o_params);
69 request = obj.rerequest_on_override(app,name,params,request,o_params);
71 request = obj.check_for_offline(app,name,params,request,o_params);
76 if (instanceOf(E,perm_ex)) {
77 alert('permission exception: ' + js2JSON(E));
83 'check_for_offline' : function (app,name,params,req,o_params) {
85 var result = req.getResultObject();
86 if (result != null) return req;
88 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
97 if (data.proceed_offline) {
102 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');
104 data.proceed_offline = true; data.stash('proceed_offline');
105 dump('Remembering proceed_offline for 200000 ms.\n');
108 data.proceed_offline = false; data.stash('proceed_offline');
109 dump('Setting proceed_offline back to false.\n');
115 dump( r == 0 ? 'Retry Network\n' : 'Proceed Offline\n' );
119 req = obj._request(app,name,params,null,o_params);
120 if (req.getResultObject() == null) proceed = true;
124 return { 'getResultObject' : function() { return { 'ilsevent' : -1, 'textcode' : 'Network/Server Problem' }; } };
130 'rerequest_on_session_timeout' : function(app,name,params,req,o_params) {
133 var robj = req.getResultObject();
134 if (robj != null && robj.ilsevent && robj.ilsevent == 1001) {
135 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
138 + '?login_type=staff'
139 + '&desc_brief=' + window.escape('Your session has expired')
140 + '&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),
142 'chrome,resizable,modal,width=700,height=500'
144 JSAN.use('OpenILS.data');
145 var data = new OpenILS.data(); data.init({'via':'stash'});
146 if (data.temporary_session != '') {
147 data.session.key = data.temporary_session.key;
148 data.session.authtime = data.temporary_session.authtime;
149 data.stash('session');
150 params[0] = data.session.key;
151 req = obj._request(app,name,params,null,o_params);
155 this.error.sdump('D_ERROR',E);
160 'rerequest_on_perm_failure' : function(app,name,params,req,o_params) {
163 var robj = req.getResultObject();
164 if (robj != null && robj.ilsevent && robj.ilsevent == 5000) {
165 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
169 + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
170 + '&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),
172 'chrome,resizable,modal,width=700,height=500'
174 JSAN.use('OpenILS.data');
175 var data = new OpenILS.data(); data.init({'via':'stash'});
176 if (data.temporary_session != '') {
177 params[0] = data.temporary_session;
178 req = obj._request(app,name,params,null,o_params);
182 this.error.sdump('D_ERROR',E);
187 'rerequest_on_override' : function (app,name,params,req,o_params) {
190 if (!o_params.text) o_params.text = {};
191 function override(r) {
193 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
194 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">' +
195 '<groupbox><caption label="Exceptions"/>' +
196 '<grid><columns><column/><column/><column/><column/></columns><rows>';
197 for (var i = 0; i < r.length; i++) {
198 xml += '<row style="color: red">' +
199 '<description>' + r[i].ilsevent + '</description>' +
200 '<description>' + r[i].textcode + '</description>' +
201 '<description>' + (obj.error.get_ilsevent(r[i].ilsevent) ? obj.error.get_ilsevent(r[i].ilsevent) : "") + '</description>' +
202 '<description>' + (o_params.text[r[i].ilsevent] ? o_params.text[r[i].ilsevent](r[i]) : '') + '</description>' +
205 xml += '</rows></grid></groupbox><groupbox><caption label="Override"/><hbox>' +
206 '<description>Force this action?</description>' +
207 '<button accesskey="C" label="Cancel" name="fancy_cancel"/>' +
208 '<button id="override" accesskey="O" label="Override" name="fancy_submit" value="override"/></hbox></groupbox></vbox>';
210 '/xul/server/util/fancy_prompt.xul'
211 + '?xml=' + window.escape(xml)
212 + '&title=' + window.escape(o_params.title),
213 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
215 JSAN.use('OpenILS.data');
216 var data = new OpenILS.data(); data.init({'via':'stash'});
217 if (data.fancy_prompt_data != '') {
218 req = obj._request(app,name + '.override',params);
226 var result = req.getResultObject();
227 if (!result) return req;
229 if ( o_params.overridable_events.indexOf(result.ilsevent) != -1 ) {
230 req = override([result]);
232 var found_good = false; var found_bad = false;
233 for (var i = 0; i < result.length; i++) {
234 if (o_params.overridable_events.indexOf(result[i].ilsevent) != -1 ) {
240 if (found_good && (!found_bad)) req = override(result);
253 function sample_callback(request) {
254 var result = request.getResultObject();
258 dump('exiting util/network.js\n');