]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/network.js
re-request wrapper for permission failures
[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) {
25                 var request =  this.bare_request(app,name,params,f);
26                 if (request) {
27                         return request.getResultObject();
28                 } else {
29                         return null;
30                 }
31         },
32
33         'bare_request' : function (app,name,params,f) {
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                                                         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                                 request = obj.rerequest_on_session_timeout(app,name,params,request);
64                                 request = obj.rerequest_on_perm_failure(app,name,params,request);
65                                 var result = request.getResultObject();
66                                 this.error.sdump('D_SES_RESULT','synced result #' + obj.link_id + '\n\n' + js2JSON(result));
67                                 return request;
68                         }
69
70                 } catch(E) {
71                         if (instanceOf(E,perm_ex)) {
72                                 alert('permission exception: ' + js2JSON(E));
73                         }
74                         throw(E);
75                 }
76         },
77
78         'rerequest_on_session_timeout' : function(app,name,params,req) {
79                 try {
80                         var obj = this;
81                         var robj = req.getResultObject();
82                         if (robj.ilsevent && robj.ilsevent == 1001) {
83                                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
84                                 window.open(
85                                         urls.XUL_AUTH_SIMPLE
86                                         + '?login_type=staff'
87                                         + '&desc_brief=' + window.escape('Your session has expired')
88                                         + '&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),
89                                         'simple_auth',
90                                         'chrome,resizable,modal,width=700,height=500'
91                                 );
92                                 JSAN.use('OpenILS.data');
93                                 var data = new OpenILS.data(); data.init({'via':'stash'});
94                                 if (data.temporary_session != '') {
95                                         data.session = data.temporary_session; data.stash('session');
96                                         params[0] = data.session;
97                                         req = obj.bare_request(app,name,params);
98                                 }
99                         }
100                 } catch(E) {
101                         this.error.sdump('D_ERROR',E);
102                 }
103                 return req;
104         },
105         
106         'rerequest_on_perm_failure' : function(app,name,params,req) {
107                 try {
108                         var obj = this;
109                         var robj = req.getResultObject();
110                         if (robj.ilsevent && robj.ilsevent == 5000) {
111                                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
112                                 window.open(
113                                         urls.XUL_AUTH_SIMPLE
114                                         + '?login_type=temp'
115                                         + '&desc_brief=' + window.escape('Permission Denied: ' + robj.ilsperm)
116                                         + '&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),
117                                         'simple_auth',
118                                         'chrome,resizable,modal,width=700,height=500'
119                                 );
120                                 JSAN.use('OpenILS.data');
121                                 var data = new OpenILS.data(); data.init({'via':'stash'});
122                                 if (data.temporary_session != '') {
123                                         params[0] = data.temporary_session;
124                                         req = obj.bare_request(app,name,params);
125                                 }
126                         }
127                 } catch(E) {
128                         this.error.sdump('D_ERROR',E);
129                 }
130                 return req;
131         },
132
133 }
134
135 /*
136 function sample_callback(request) {
137         var result = request.getResultObject();
138 }
139 */
140
141 dump('exiting util/network.js\n');