]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/network.js
simple offline detection. However, it's possible to get nulls and have the offline...
[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         // Place a test here for network connectivity
8         // this.offline = true;
9
10         return this;
11 };
12
13 util.network.prototype = {
14
15         // Flag for whether the staff client should act as if it were offline or not
16         'offline' : false,
17
18         'link_id' : 0,
19
20         'simple_request' : function(id,params,f) {
21                 return this.request(api[id].app,api[id].method,params,f);
22         },
23
24         'request' : function (app,name,params,f,o_params) {
25                 var request =  this._request(app,name,params,f,o_params);
26                 if (request) {
27                         return request.getResultObject();
28                 } else {
29                         return null;
30                 }
31         },
32
33         '_request' : function (app,name,params,f,o_params) {
34                 var obj = this;
35                 try {
36                         var sparams = js2JSON(params);
37                         obj.error.sdump('D_SES','request '+app+' '+name+' '+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]);
42                         }
43         
44                         if (f)  {
45                                 request.setCompleteCallback(
46                                         function(req) {
47                                                 try {
48                                                         obj.error.sdump('D_SES_RESULT','asynced result #' 
49                                                                 + obj.link_id + '\n\n' 
50                                                                 + js2JSON(req.getResultObject()));
51                                                         req = obj.rerequest_on_session_timeout(app,name,params,req);
52                                                         req = obj.rerequest_on_perm_failure(app,name,params,req);
53                                                         if (o_params) {
54                                                                 req = obj.rerequest_on_override(app,name,params,req,o_params);
55                                                         }
56                                                         req = obj.check_for_offline(req);
57                                                         f(req);
58                                                 } catch(E) {
59                                                         alert(E);
60                                                 }
61                                         }
62                                 );
63                                 request.send(false);
64                                 return null;
65                         } else {
66                                 request.send(true);
67                                 request = obj.rerequest_on_session_timeout(app,name,params,request);
68                                 request = obj.rerequest_on_perm_failure(app,name,params,request);
69                                 if (o_params) {
70                                         request = obj.rerequest_on_override(app,name,params,request,o_params);
71                                 }
72                                 request = obj.check_for_offline(request);
73                                 var result = request.getResultObject();
74                                 this.error.sdump('D_SES_RESULT','synced result #' + obj.link_id + '\n\n' + js2JSON(result));
75                                 return request;
76                         }
77
78                 } catch(E) {
79                         if (instanceOf(E,perm_ex)) {
80                                 alert('permission exception: ' + js2JSON(E));
81                         }
82                         throw(E);
83                 }
84         },
85
86         'check_for_offline' : function (req) {
87                 var result = req.getResultObject();
88                 if (result != null) return req;
89                 var test = new RemoteRequest( 'open-ils.actor','opensrf.system.time');
90                 test.send(true);
91                 if (test.getResultObject() == null) { /* opensrf/network problem */
92                         return { 'getResultObject' : function() { return { 'ilsevent' : -1, 'textcode' : 'Network/Server Problem' }; } };
93                 } else { /* legitimate null result */
94                         return req; 
95                 }
96         },
97
98         'rerequest_on_session_timeout' : function(app,name,params,req) {
99                 try {
100                         var obj = this;
101                         var robj = req.getResultObject();
102                         if (robj.ilsevent && robj.ilsevent == 1001) {
103                                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
104                                 window.open(
105                                         urls.XUL_AUTH_SIMPLE
106                                         + '?login_type=staff'
107                                         + '&desc_brief=' + window.escape('Your session has expired')
108                                         + '&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),
109                                         'simple_auth',
110                                         'chrome,resizable,modal,width=700,height=500'
111                                 );
112                                 JSAN.use('OpenILS.data');
113                                 var data = new OpenILS.data(); data.init({'via':'stash'});
114                                 if (data.temporary_session != '') {
115                                         data.session = data.temporary_session; data.stash('session');
116                                         params[0] = data.session;
117                                         req = obj._request(app,name,params);
118                                 }
119                         }
120                 } catch(E) {
121                         this.error.sdump('D_ERROR',E);
122                 }
123                 return req;
124         },
125         
126         'rerequest_on_perm_failure' : function(app,name,params,req) {
127                 try {
128                         var obj = this;
129                         var robj = req.getResultObject();
130                         if (robj.ilsevent && robj.ilsevent == 5000) {
131                                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
132                                 window.open(
133                                         urls.XUL_AUTH_SIMPLE
134                                         + '?login_type=temp'
135                                         + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
136                                         + '&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),
137                                         'simple_auth',
138                                         'chrome,resizable,modal,width=700,height=500'
139                                 );
140                                 JSAN.use('OpenILS.data');
141                                 var data = new OpenILS.data(); data.init({'via':'stash'});
142                                 if (data.temporary_session != '') {
143                                         params[0] = data.temporary_session;
144                                         req = obj._request(app,name,params);
145                                 }
146                         }
147                 } catch(E) {
148                         this.error.sdump('D_ERROR',E);
149                 }
150                 return req;
151         },
152
153         'rerequest_on_override' : function (app,name,params,req,o_params) {
154                 var obj = this;
155                 try {
156                         function override(r) {
157                                 try {
158                                         netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
159                                         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>';
160                                         for (var i = 0; i < r.length; i++) {
161                                                 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>';
162                                         }
163                                         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>';
164                                         window.open(
165                                                 '/xul/server/util/fancy_prompt.xul'
166                                                 + '?xml=' + window.escape(xml)
167                                                 + '&title=' + window.escape(o_params.title),
168                                                 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
169                                         );
170                                         JSAN.use('OpenILS.data');
171                                         var data = new OpenILS.data(); data.init({'via':'stash'});
172                                         if (data.fancy_prompt_data != '') {
173                                                 req = obj._request(app,name + '.override',params);
174                                         }
175                                         return req;
176                                 } catch(E) {
177                                         alert(E);
178                                 }
179                         }
180
181                         var result = req.getResultObject();
182                         if ( o_params.overridable_events.indexOf(result.ilsevent) != -1 ) {
183                                 req = override([result]);
184                         } else {
185                                 var found_good = false; var found_bad = false;
186                                 for (var i = 0; i < result.length; i++) {
187                                         if (o_params.overridable_events.indexOf(result[i].ilsevent) != -1 ) {
188                                                 found_good = true;
189                                         } else {
190                                                 found_bad = true;
191                                         }
192                                 }
193                                 if (found_good && (!found_bad)) req = override(result);
194                         }
195
196                         return req;
197                 } catch(E) {
198                         throw(E);
199                 }
200         },
201
202
203 }
204
205 /*
206 function sample_callback(request) {
207         var result = request.getResultObject();
208 }
209 */
210
211 dump('exiting util/network.js\n');