]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/auth/controller.js
toward workstation id
[working/Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / auth / controller.js
1 dump('entering auth/controller.js\n');
2
3 if (typeof auth == 'undefined') auth = {};
4 auth.controller = function (params) {
5         JSAN.use('util.error'); this.error = new util.error();
6         this.w = params.window;
7
8         return this;
9 };
10
11 auth.controller.prototype = {
12
13         'init' : function () {
14
15                 var obj = this;  // so the 'this' in event handlers don't confuse us
16                 var w = obj.w;
17
18                 // MVC
19                 JSAN.use('util.controller'); obj.controller = new util.controller();
20                 obj.controller.init(
21                         {
22                                 'control_map' : {
23                                         'cmd_login' : [
24                                                 ['command'],
25                                                 function() {
26                                                         obj.login();
27                                                 }
28                                         ],
29                                         'cmd_override' : [
30                                                 ['command'],
31                                                 function() {
32                                                         obj.override();
33                                                 }
34                                         ],
35                                         'cmd_register' : [
36                                                 ['command'],
37                                                 function() {
38                                                         dump('cmd_register handler\n');
39                                                         obj.register();
40                                                 }
41                                         ],
42                                         'cmd_logoff' : [
43                                                 ['command'],
44                                                 function() {
45                                                         obj.logoff()
46                                                 }
47                                         ],
48                                         'cmd_close_window' : [
49                                                 ['command'],
50                                                 function() {
51                                                         obj.close()
52                                                 }
53                                         ],
54
55                                         'server_prompt' : [
56                                                 ['keypress'],
57                                                 handle_keypress
58                                         ],
59                                         'name_prompt' : [
60                                                 ['keypress'],
61                                                 handle_keypress
62                                         ],
63                                         'password_prompt' : [
64                                                 ['keypress'],
65                                                 handle_keypress
66                                         ],
67                                         'wsid_prompt' : [
68                                                 ['keypress'],
69                                                 handle_keypress
70                                         ],
71
72                                         'submit_button' : [
73                                                 ['render'],
74                                                 function(e) { return function() {} }
75                                         ],
76                                         'register_button' : [
77                                                 ['render'],
78                                                 function(e) { return function() {} }
79                                         ],
80                                         'progress_bar' : [
81                                                 ['render'],
82                                                 function(e) { return function() {} }
83                                         ],
84                                         'status' : [
85                                                 ['render'],
86                                                 function(e) { return function() {
87                                                 } }
88                                         ],
89                                         'ws_deck' : [
90                                                 ['render'],
91                                                 function(e) { return function() {
92                                                 } }
93                                         ],
94                                         'menu_spot' : [
95                                                 ['render'],
96                                                 function(e) { return function() {
97                                                 } }
98                                         ],
99
100                                 }
101                         }
102                 );
103                 obj.controller.view.name_prompt.focus();
104
105                 function handle_keypress(ev) {
106                         try {
107                                 if (ev.keyCode && ev.keyCode == 13) {
108                                         switch(this) {
109                                                 case obj.controller.view.server_prompt:
110                                                         ev.preventDefault();
111                                                         obj.controller.view.name_prompt.focus(); obj.controller.view.name_prompt.select();
112                                                 break;
113                                                 case obj.controller.view.name_prompt:
114                                                         ev.preventDefault();
115                                                         obj.controller.view.password_prompt.focus(); obj.controller.view.password_prompt.select();
116                                                 break;
117                                                 case obj.controller.view.password_prompt:
118                                                         ev.preventDefault();
119                                                         obj.controller.view.submit_button.focus(); 
120                                                         obj.login();
121                                                 break;
122                                                 case obj.controller.view.wsid_prompt:
123                                                         ev.preventDefault();
124                                                         obj.controller.view.register_button.focus();
125                                                         obj.register();
126                                                 break;
127                                                 default: break;
128                                         }
129                                 }
130                         } catch(E) {
131                                 alert(E);
132                         }
133                 }
134
135                 // This talks to our ILS
136                 JSAN.use('auth.session');
137                 obj.session = new auth.session(obj.controller.view);
138
139                 obj.controller.render();
140
141                 if (typeof this.on_init == 'function') {
142                         this.error.sdump('D_AUTH','auth.controller.on_init()\n');
143                         this.on_init();
144                 }
145         },
146
147         'login' : function() { 
148
149                 var obj = this;
150
151                 this.error.sdump('D_AUTH','login with ' 
152                         + this.controller.view.name_prompt.value + ' and ' 
153                         + this.controller.view.password_prompt.value + ' at ' 
154                         + this.controller.view.server_prompt.value + '\n'
155                 ); 
156                 this.controller.view.server_prompt.disabled = true;
157                 this.controller.view.name_prompt.disabled = true;
158                 this.controller.view.password_prompt.disabled = true;
159                 this.controller.view.submit_button.disabled = true;
160                 XML_HTTP_SERVER = this.controller.view.server_prompt.value;
161
162                 try {
163
164                         if (typeof this.on_login == 'function') {
165                                 this.error.sdump('D_AUTH','auth.controller.session.on_init = ' +
166                                         'auth.controller.on_login\n');
167                                 this.session.on_init = this.on_login;
168                                 this.session.on_error = function() { obj.logoff(); };
169                         }
170                         
171                         this.session.init();
172
173                 } catch(E) {
174                         var error = '!! ' + E + '\n';
175                         this.error.sdump('D_ERROR',error); 
176                         alert(error);
177                         this.logoff();
178                         if (E == 'open-ils.auth.authenticate.init returned false\n') {
179                                 this.controller.view.server_prompt.focus();
180                                 this.controller.view.server_prompt.select();
181                         }
182
183                         if (typeof this.on_login_error == 'function') {
184                                 this.error.sdump('D_AUTH','auth.controller.on_login_error()\n');
185                                 this.on_login_error(E);
186                         }
187                 }
188
189         },
190
191         'register' : function() { 
192                 try {
193                 dump('register code\n');
194                 var obj = this;
195
196                 var orgid = obj.controller.view.menu_spot.firstChild.value;
197                 var wsname = obj.controller.view.wsid_prompt.value;
198
199                 obj.error.sdump('D_AUTH','register workstation with ' + orgid + ' and ' + wsname + '\n'); 
200
201                 obj.controller.view.menu_spot.firstChild.disabled = true;
202                 obj.controller.view.wsid_prompt.disabled = true;
203
204                 try {
205
206                         var server = obj.controller.view.server_prompt.value;
207
208                         if (typeof obj.on_register == 'function') {
209                                 dump('calling on_register\n');
210                                 obj.on_register(obj.session.key,server,orgid,wsname);
211                         }
212                         
213
214                 } catch(E) {
215                         var error = '!! ' + E + '\n';
216                         this.error.sdump('D_ERROR',error); 
217                         alert(error);
218                         this.controller.view.menu_spot.firstChild.disabled = false;
219                         this.controller.view.wsid_prompt.disabled = false;
220                 }
221                 } catch(E) {
222                         alert(E);
223                 }
224
225         },
226
227         'logoff' : function() { 
228         
229                 this.error.sdump('D_AUTH','logoff' + this.w + '\n'); 
230                 this.controller.view.progress_bar.value = 0; 
231                 this.controller.view.progress_bar.setAttribute('real','0.0');
232                 this.controller.view.submit_button.disabled = false;
233                 this.controller.view.password_prompt.disabled = false;
234                 this.controller.view.password_prompt.value = '';
235                 this.controller.view.name_prompt.disabled = false;
236                 this.controller.view.name_prompt.focus(); 
237                 this.controller.view.name_prompt.select();
238                 this.controller.view.server_prompt.disabled = false;
239
240                 var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
241                 var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
242                 var enumerator = windowManagerInterface.getEnumerator(null);
243
244                 var w; // close all other windows
245                 while ( w = enumerator.getNext() ) {
246                         if (w != window) w.close();
247                 }
248
249                 this.session.close();
250
251                 if (typeof this.on_logoff == 'function') {
252                         this.error.sdump('D_AUTH','auth.controller.on_logoff()\n');
253                         this.on_logoff();
254                 }
255                 
256         },
257         'close' : function() { 
258         
259                 this.error.sdump('D_AUTH','close' + this.w + '\n');
260                 this.logoff();
261                 //Basically, we want to close all the windows for this application (and in case we're running this as
262                 //a firefox extension, we don't want to merely shutdown mozilla).  I'll probably create an XPCOM for
263                 //tracking the windows.
264                 //for (var w in this.G.window.appshell_list) {
265                 //      this.G.window.appshell_list[w].close();
266                 //}
267                 this.w.close(); /* Probably won't go any further */
268
269                 if (typeof this.on_close == 'function') {
270                         this.error.sdump('D_AUTH','auth.controller.on_close()\n');
271                         this.on_close();
272                 }
273                 
274         }
275 }
276
277 dump('exiting auth/controller.js\n');