]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/network.js
pretty_print the D_SES_RESULT results if they're over 80 characters
[Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / util / network.js
1 dump('entering util/network.js\n');
2
3 if (typeof util == 'undefined') util = {};
4 util.network = function () {
5
6         JSAN.use('util.error'); this.error = new util.error();
7
8         return this;
9 };
10
11 util.network.prototype = {
12
13         'link_id' : 0,
14
15         'simple_request' : function(id,params,f) {
16                 return this.request(api[id].app,api[id].method,params,f);
17         },
18
19         'request' : function (app,name,params,f,o_params) {
20                 var request =  this._request(app,name,params,f,o_params);
21                 if (request) {
22                         return request.getResultObject();
23                 } else {
24                         return null;
25                 }
26         },
27
28         '_request' : function (app,name,params,f,o_params) {
29                 var obj = this;
30                 try {
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]);
37                         }
38         
39                         if (f)  {
40                                 request.setCompleteCallback(
41                                         function(req) {
42                                                 try {
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);
49                                                         if (o_params) {
50                                                                 req = obj.rerequest_on_override(app,name,params,req,o_params);
51                                                         }
52                                                         req = obj.check_for_offline(app,name,params,req,o_params);
53                                                         f(req);
54                                                 } catch(E) {
55                                                         alert(E);
56                                                 }
57                                         }
58                                 );
59                                 request.send(false);
60                                 return null;
61                         } else {
62                                 request.send(true);
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);
68                                 if (o_params) {
69                                         request = obj.rerequest_on_override(app,name,params,request,o_params);
70                                 }
71                                 request = obj.check_for_offline(app,name,params,request,o_params);
72                                 return request;
73                         }
74
75                 } catch(E) {
76                         if (instanceOf(E,perm_ex)) {
77                                 alert('permission exception: ' + js2JSON(E));
78                         }
79                         throw(E);
80                 }
81         },
82
83         'check_for_offline' : function (app,name,params,req,o_params) {
84                 var obj = this;
85                 var result = req.getResultObject();
86                 if (result != null) return req;
87
88                 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
89                 var proceed = true;
90
91                 while(proceed) {
92
93                         proceed = false;
94
95                         var r;
96
97                         if (data.proceed_offline) {
98
99                                 r = 1;
100
101                         } else {
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');
103                                 if (r == 1) {
104                                         data.proceed_offline = true; data.stash('proceed_offline');
105                                         dump('Remembering proceed_offline for 200000 ms.\n');
106                                         setTimeout(
107                                                 function() {
108                                                         data.proceed_offline = false; data.stash('proceed_offline');
109                                                         dump('Setting proceed_offline back to false.\n');
110                                                 }, 200000
111                                         );
112                                 }
113                         }
114
115                         dump( r == 0 ? 'Retry Network\n' : 'Proceed Offline\n' );
116
117                         switch(r) {
118                                 case 0: 
119                                         req = obj._request(app,name,params,null,o_params);
120                                         if (req.getResultObject() == null) proceed = true;
121                                         return req;
122                                 break;
123                                 case 1: 
124                                         return { 'getResultObject' : function() { return { 'ilsevent' : -1, 'textcode' : 'Network/Server Problem' }; } };
125                                 break;
126                         }
127                 }
128         },
129
130         'rerequest_on_session_timeout' : function(app,name,params,req,o_params) {
131                 try {
132                         var obj = this;
133                         var robj = req.getResultObject();
134                         if (robj != null && robj.ilsevent && robj.ilsevent == 1001) {
135                                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
136                                 window.open(
137                                         urls.XUL_AUTH_SIMPLE
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),
141                                         'simple_auth',
142                                         'chrome,resizable,modal,width=700,height=500'
143                                 );
144                                 JSAN.use('OpenILS.data');
145                                 var data = new OpenILS.data(); data.init({'via':'stash'});
146                                 if (data.temporary_session != '') {
147                                         data.session = data.temporary_session; data.stash('session');
148                                         params[0] = data.session;
149                                         req = obj._request(app,name,params,null,o_params);
150                                 }
151                         }
152                 } catch(E) {
153                         this.error.sdump('D_ERROR',E);
154                 }
155                 return req;
156         },
157         
158         'rerequest_on_perm_failure' : function(app,name,params,req,o_params) {
159                 try {
160                         var obj = this;
161                         var robj = req.getResultObject();
162                         if (robj != null && robj.ilsevent && robj.ilsevent == 5000) {
163                                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
164                                 window.open(
165                                         urls.XUL_AUTH_SIMPLE
166                                         + '?login_type=temp'
167                                         + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
168                                         + '&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),
169                                         'simple_auth',
170                                         'chrome,resizable,modal,width=700,height=500'
171                                 );
172                                 JSAN.use('OpenILS.data');
173                                 var data = new OpenILS.data(); data.init({'via':'stash'});
174                                 if (data.temporary_session != '') {
175                                         params[0] = data.temporary_session;
176                                         req = obj._request(app,name,params,null,o_params);
177                                 }
178                         }
179                 } catch(E) {
180                         this.error.sdump('D_ERROR',E);
181                 }
182                 return req;
183         },
184
185         'rerequest_on_override' : function (app,name,params,req,o_params) {
186                 var obj = this;
187                 try {
188                         function override(r) {
189                                 try {
190                                         netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
191                                         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>';
192                                         for (var i = 0; i < r.length; i++) {
193                                                 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>';
194                                         }
195                                         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>';
196                                         window.open(
197                                                 '/xul/server/util/fancy_prompt.xul'
198                                                 + '?xml=' + window.escape(xml)
199                                                 + '&title=' + window.escape(o_params.title),
200                                                 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
201                                         );
202                                         JSAN.use('OpenILS.data');
203                                         var data = new OpenILS.data(); data.init({'via':'stash'});
204                                         if (data.fancy_prompt_data != '') {
205                                                 req = obj._request(app,name + '.override',params);
206                                         }
207                                         return req;
208                                 } catch(E) {
209                                         alert(E);
210                                 }
211                         }
212
213                         var result = req.getResultObject();
214                         if (!result) return req;
215
216                         if ( o_params.overridable_events.indexOf(result.ilsevent) != -1 ) {
217                                 req = override([result]);
218                         } else {
219                                 var found_good = false; var found_bad = false;
220                                 for (var i = 0; i < result.length; i++) {
221                                         if (o_params.overridable_events.indexOf(result[i].ilsevent) != -1 ) {
222                                                 found_good = true;
223                                         } else {
224                                                 found_bad = true;
225                                         }
226                                 }
227                                 if (found_good && (!found_bad)) req = override(result);
228                         }
229
230                         return req;
231                 } catch(E) {
232                         throw(E);
233                 }
234         },
235
236
237 }
238
239 /*
240 function sample_callback(request) {
241         var result = request.getResultObject();
242 }
243 */
244
245 dump('exiting util/network.js\n');