]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/network.js
override and checkout example
[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                                                         f(req);
57                                                 } catch(E) {
58                                                         alert(E);
59                                                 }
60                                         }
61                                 );
62                                 request.send(false);
63                                 return null;
64                         } else {
65                                 request.send(true);
66                                 request = obj.rerequest_on_session_timeout(app,name,params,request);
67                                 request = obj.rerequest_on_perm_failure(app,name,params,request);
68                                 if (o_params) {
69                                         request = obj.rerequest_on_override(app,name,params,request,o_params);
70                                 }
71                                 var result = request.getResultObject();
72                                 this.error.sdump('D_SES_RESULT','synced result #' + obj.link_id + '\n\n' + js2JSON(result));
73                                 return request;
74                         }
75
76                 } catch(E) {
77                         if (instanceOf(E,perm_ex)) {
78                                 alert('permission exception: ' + js2JSON(E));
79                         }
80                         throw(E);
81                 }
82         },
83
84         'rerequest_on_session_timeout' : function(app,name,params,req) {
85                 try {
86                         var obj = this;
87                         var robj = req.getResultObject();
88                         if (robj.ilsevent && robj.ilsevent == 1001) {
89                                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
90                                 window.open(
91                                         urls.XUL_AUTH_SIMPLE
92                                         + '?login_type=staff'
93                                         + '&desc_brief=' + window.escape('Your session has expired')
94                                         + '&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),
95                                         'simple_auth',
96                                         'chrome,resizable,modal,width=700,height=500'
97                                 );
98                                 JSAN.use('OpenILS.data');
99                                 var data = new OpenILS.data(); data.init({'via':'stash'});
100                                 if (data.temporary_session != '') {
101                                         data.session = data.temporary_session; data.stash('session');
102                                         params[0] = data.session;
103                                         req = obj._request(app,name,params);
104                                 }
105                         }
106                 } catch(E) {
107                         this.error.sdump('D_ERROR',E);
108                 }
109                 return req;
110         },
111         
112         'rerequest_on_perm_failure' : function(app,name,params,req) {
113                 try {
114                         var obj = this;
115                         var robj = req.getResultObject();
116                         if (robj.ilsevent && robj.ilsevent == 5000) {
117                                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
118                                 window.open(
119                                         urls.XUL_AUTH_SIMPLE
120                                         + '?login_type=temp'
121                                         + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
122                                         + '&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),
123                                         'simple_auth',
124                                         'chrome,resizable,modal,width=700,height=500'
125                                 );
126                                 JSAN.use('OpenILS.data');
127                                 var data = new OpenILS.data(); data.init({'via':'stash'});
128                                 if (data.temporary_session != '') {
129                                         params[0] = data.temporary_session;
130                                         req = obj._request(app,name,params);
131                                 }
132                         }
133                 } catch(E) {
134                         this.error.sdump('D_ERROR',E);
135                 }
136                 return req;
137         },
138
139         'rerequest_on_override' : function (app,name,params,req,o_params) {
140                 var obj = this;
141                 try {
142                         function override(r) {
143                                 try {
144                                         netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
145                                         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>';
146                                         for (var i = 0; i < r.length; i++) {
147                                                 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>';
148                                         }
149                                         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>';
150                                         window.open(
151                                                 '/xul/server/util/fancy_prompt.xul'
152                                                 + '?xml=' + window.escape(xml)
153                                                 + '&title=' + window.escape(o_params.title),
154                                                 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500'
155                                         );
156                                         JSAN.use('OpenILS.data');
157                                         var data = new OpenILS.data(); data.init({'via':'stash'});
158                                         if (data.fancy_prompt_data != '') {
159                                                 req = obj._request(app,name + '.override',params);
160                                         }
161                                         return req;
162                                 } catch(E) {
163                                         alert(E);
164                                 }
165                         }
166
167                         var result = req.getResultObject();
168                         if ( o_params.overridable_events.indexOf(result.ilsevent) != -1 ) {
169                                 req = override([result]);
170                         } else {
171                                 var found_good = false; var found_bad = false;
172                                 for (var i = 0; i < result.length; i++) {
173                                         if (o_params.overridable_events.indexOf(result[i].ilsevent) != -1 ) {
174                                                 found_good = true;
175                                         } else {
176                                                 found_bad = true;
177                                         }
178                                 }
179                                 if (found_good && (!found_bad)) req = override(result);
180                         }
181
182                         return req;
183                 } catch(E) {
184                         throw(E);
185                 }
186         },
187
188
189 }
190
191 /*
192 function sample_callback(request) {
193         var result = request.getResultObject();
194 }
195 */
196
197 dump('exiting util/network.js\n');