]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/network.js
pretty printing
[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+' '+obj.error.pretty_print(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                                                                 + obj.error.pretty_print(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' + obj.error.pretty_print(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 != null && 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 != null && 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 (!result) return req;
183
184                         if ( o_params.overridable_events.indexOf(result.ilsevent) != -1 ) {
185                                 req = override([result]);
186                         } else {
187                                 var found_good = false; var found_bad = false;
188                                 for (var i = 0; i < result.length; i++) {
189                                         if (o_params.overridable_events.indexOf(result[i].ilsevent) != -1 ) {
190                                                 found_good = true;
191                                         } else {
192                                                 found_bad = true;
193                                         }
194                                 }
195                                 if (found_good && (!found_bad)) req = override(result);
196                         }
197
198                         return req;
199                 } catch(E) {
200                         throw(E);
201                 }
202         },
203
204
205 }
206
207 /*
208 function sample_callback(request) {
209         var result = request.getResultObject();
210 }
211 */
212
213 dump('exiting util/network.js\n');