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 req = obj.rerequest_on_session_timeout(app,name,params,req,o_params);
49 req = obj.rerequest_on_perm_failure(app,name,params,req,o_params);
51 req = obj.rerequest_on_override(app,name,params,req,o_params);
53 req = obj.check_for_offline(app,name,params,req,o_params);
64 var result = request.getResultObject();
65 var json_string = js2JSON(result);
66 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 ) );
67 request = obj.rerequest_on_session_timeout(app,name,params,request,o_params);
68 request = obj.rerequest_on_perm_failure(app,name,params,request,o_params);
70 request = obj.rerequest_on_override(app,name,params,request,o_params);
72 request = obj.check_for_offline(app,name,params,request,o_params);
77 if (instanceOf(E,perm_ex)) {
78 alert('permission exception: ' + js2JSON(E));
84 'check_for_offline' : function (app,name,params,req,o_params) {
86 var result = req.getResultObject();
87 if (result != null) return req;
89 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
98 if (data.proceed_offline) {
103 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');
105 data.proceed_offline = true; data.stash('proceed_offline');
106 dump('Remembering proceed_offline for 200000 ms.\n');
109 data.proceed_offline = false; data.stash('proceed_offline');
110 dump('Setting proceed_offline back to false.\n');
116 dump( r == 0 ? 'Retry Network\n' : 'Proceed Offline\n' );
120 req = obj._request(app,name,params,null,o_params);
121 if (req.getResultObject() == null) proceed = true;
125 return { 'getResultObject' : function() { return { 'ilsevent' : -1, 'textcode' : 'Network/Server Problem' }; } };
131 'rerequest_on_session_timeout' : function(app,name,params,req,o_params) {
134 var robj = req.getResultObject();
135 if (robj != null && robj.ilsevent && robj.ilsevent == 1001) {
136 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
139 + '?login_type=staff'
140 + '&desc_brief=' + window.escape('Your session has expired')
141 + '&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 'simple_auth' + (new Date()).toString(),
143 'chrome,resizable,modal,width=700,height=500'
145 JSAN.use('OpenILS.data');
146 var data = new OpenILS.data(); data.init({'via':'stash'});
147 if (data.temporary_session != '') {
148 data.session.key = data.temporary_session.key;
149 data.session.authtime = data.temporary_session.authtime;
150 data.stash('session');
151 params[0] = data.session.key;
152 req = obj._request(app,name,params,null,o_params);
156 this.error.sdump('D_ERROR',E);
161 'rerequest_on_perm_failure' : function(app,name,params,req,o_params) {
164 var robj = req.getResultObject();
165 if (robj != null && robj.ilsevent && robj.ilsevent == 5000) {
166 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
170 + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
171 + '&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 'simple_auth' + (new Date()).toString(),
173 'chrome,resizable,modal,width=700,height=500'
175 JSAN.use('OpenILS.data');
176 var data = new OpenILS.data(); data.init({'via':'stash'});
177 if (data.temporary_session != '') {
178 params[0] = data.temporary_session.key;
179 req = obj._request(app,name,params,null,o_params);
183 this.error.sdump('D_ERROR',E);
188 'rerequest_on_override' : function (app,name,params,req,o_params) {
191 if (!o_params.text) o_params.text = {};
192 function override(r) {
194 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
195 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">' +
196 '<groupbox><caption label="Exceptions"/>' +
197 '<grid><columns><column/><column/></columns><rows>';
198 for (var i = 0; i < r.length; i++) {
200 '<description style="color: red" tooltiptext="' + r[i].ilsevent + '">' + r[i].textcode + '</description>' +
201 '<description>' + (o_params.text[r[i].ilsevent] ? o_params.text[r[i].ilsevent](r[i]) : '') + '</description>' +
202 '</row><row>' + '<description>' + r[i].desc + '</description>' + '</row>';
204 xml += '</rows></grid></groupbox><groupbox><caption label="Override"/><hbox>' +
205 '<description>Force this action?</description>' +
206 '<button accesskey="N" label="No" name="fancy_cancel"/>' +
207 '<button id="override" accesskey="Y" label="Yes" name="fancy_submit" value="override"/></hbox></groupbox></vbox>';
209 urls.XUL_FANCY_PROMPT
210 + '?xml=' + window.escape(xml)
211 + '&title=' + window.escape(o_params.title),
212 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
214 JSAN.use('OpenILS.data');
215 var data = new OpenILS.data(); data.init({'via':'stash'});
216 if (data.fancy_prompt_data != '') {
217 req = obj._request(app,name + '.override',params);
225 var result = req.getResultObject();
226 if (!result) return req;
228 if ( (typeof result.ilsevent != 'undefined') && (o_params.overridable_events.indexOf(result.ilsevent) != -1) ) {
229 req = override([result]);
231 var found_good = false; var found_bad = false;
232 for (var i = 0; i < result.length; i++) {
233 if ( (result[i].ilsevent != 'undefined') && (o_params.overridable_events.indexOf(result[i].ilsevent) != -1) ) {
239 if (found_good && (!found_bad)) req = override(result);
252 function sample_callback(request) {
253 var result = request.getResultObject();
257 dump('exiting util/network.js\n');