]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/auth/controller.js
Bring i18n to the main login window
[Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / auth / controller.js
1 dump('entering auth/controller.js\n');
2 // vim:sw=4:ts=4:noet:
3
4 if (typeof auth == 'undefined') auth = {};
5 auth.controller = function (params) {
6         JSAN.use('util.error'); this.error = new util.error();
7         this.w = params.window;
8
9         return this;
10 };
11
12 auth.controller.prototype = {
13
14         'init' : function () {
15
16                 var obj = this;  // so the 'this' in event handlers don't confuse us
17                 var w = obj.w;
18
19                 JSAN.use('OpenILS.data');
20                 obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
21
22                 // MVC
23                 JSAN.use('util.controller'); obj.controller = new util.controller();
24                 obj.controller.init(
25                         {
26                                 'control_map' : {
27                                         'cmd_login' : [
28                                                 ['command'],
29                                                 function() {
30                                                         obj.login();
31                                                 }
32                                         ],
33                                         'cmd_standalone' : [
34                                                 ['command'],
35                                                 function() {
36                                                         obj.standalone();
37                                                 }
38                                         ],
39                                         'cmd_standalone_import' : [
40                                                 ['command'],
41                                                 function() {
42                                                         obj.standalone_import();
43                                                 }
44                                         ],
45                                         'cmd_standalone_export' : [
46                                                 ['command'],
47                                                 function() {
48                                                         obj.standalone_export();
49                                                 }
50                                         ],
51                                         'cmd_clear_cache' : [
52                                                 ['command'],
53                                                 function() {
54                                                         obj.debug('clear_cache');
55                                                 }
56                                         ],
57                                         'cmd_js_console' : [
58                                                 ['command'],
59                                                 function() {
60                                                         obj.debug('js_console');
61                                                 }
62                                         ],
63                                         'cmd_override' : [
64                                                 ['command'],
65                                                 function() {
66                                                         obj.override();
67                                                 }
68                                         ],
69                                         'cmd_logoff' : [
70                                                 ['command'],
71                                                 function() {
72                                                         obj.logoff()
73                                                 }
74                                         ],
75                                         'cmd_close_window' : [
76                                                 ['command'],
77                                                 function() {
78                                                         obj.close()
79                                                 }
80                                         ],
81                                         'cmd_test_server' : [
82                                                 ['command'],
83                                                 function() {
84                                                         obj.test_server( obj.controller.view.server_prompt.value );
85                                                 }
86                                         ],
87                                         'server_prompt' : [
88                                                 ['keypress'],
89                                                 handle_keypress
90                                         ],
91                                         'name_prompt' : [
92                                                 ['keypress'],
93                                                 handle_keypress
94                                         ],
95                                         'password_prompt' : [
96                                                 ['keypress'],
97                                                 handle_keypress
98                                         ],
99                                         'submit_button' : [
100                                                 ['render'],
101                                                 function(e) { return function() {} }
102                                         ],
103                                         'progress_bar' : [
104                                                 ['render'],
105                                                 function(e) { return function() {} }
106                                         ],
107                                         'status' : [
108                                                 ['render'],
109                                                 function(e) { return function() {
110                                                 } }
111                                         ],
112                                         'ws_deck' : [
113                                                 ['render'],
114                                                 function(e) { return function() {
115                                                         try {
116                                                                 JSAN.use('util.widgets'); util.widgets.remove_children(e);
117                                                                 var x = document.createElement('description');
118                                                                 e.appendChild(x);
119                                                                 if (obj.data.ws_info 
120                                                                         && obj.data.ws_info[ obj.controller.view.server_prompt.value ]) {
121                                                                         var ws = obj.data.ws_info[ obj.controller.view.server_prompt.value ];
122                                                                         x.appendChild(
123                                                                                 document.createTextNode(
124                                                                                         ws.name /*+ ' @  ' + ws.lib_shortname*/
125                                                                                 )
126                                                                         );
127                                                                         netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
128                                                                         JSAN.use('util.file'); var file = new util.file('last_ws_server');
129                                                                         file.set_object(obj.controller.view.server_prompt.value);
130                                                                         file.close();
131                                                                 } else {
132                                                                         x.appendChild(
133                                                                                 document.createTextNode(
134                                                                                         document.getElementById('authStrings').getString('staff.auth.controller.not_configured')
135                                                                                 )
136                                                                         );
137                                                                 }
138                                                         } catch(E) {
139                                                                 alert(E);
140                                                         }
141                                                 } }
142                                         ],
143                                         'menu_spot' : [
144                                                 ['render'],
145                                                 function(e) { return function() {
146                                                 } }
147                                         ],
148
149                                 }
150                         }
151                 );
152                 obj.controller.view.name_prompt.focus();
153
154                 function handle_keypress(ev) {
155                         try {
156                                 if (ev.keyCode && ev.keyCode == 13) {
157                                         switch(this) {
158                                                 case obj.controller.view.server_prompt:
159                                                         ev.preventDefault();
160                                                         obj.controller.view.name_prompt.focus(); obj.controller.view.name_prompt.select();
161                                                 break;
162                                                 case obj.controller.view.name_prompt:
163                                                         ev.preventDefault();
164                                                         obj.controller.view.password_prompt.focus(); obj.controller.view.password_prompt.select();
165                                                 break;
166                                                 case obj.controller.view.password_prompt:
167                                                         ev.preventDefault();
168                                                         obj.controller.view.submit_button.focus(); 
169                                                         obj.login();
170                                                 break;
171                                                 default: break;
172                                         }
173                                 }
174                         } catch(E) {
175                                 alert(E);
176                         }
177                 }
178
179                 obj.controller.view.server_prompt.addEventListener(
180                         'change',
181                         function (ev) { 
182                                 obj.test_server(ev.target.value);
183                                 obj.controller.render('ws_deck'); 
184                         },
185                         false
186                 );
187
188                 // This talks to our ILS
189                 JSAN.use('auth.session');
190                 obj.session = new auth.session(obj.controller.view);
191
192                 obj.controller.render();
193                 obj.test_server( obj.controller.view.server_prompt.value );
194                 obj.controller.render('ws_deck'); 
195
196                 if (typeof this.on_init == 'function') {
197                         this.error.sdump('D_AUTH','auth.controller.on_init()\n');
198                         this.on_init();
199                 }
200         },
201
202         'test_server' : function(url) {
203                 var obj = this;
204                 if (!url) {
205                         netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
206                         JSAN.use('util.file'); var file = new util.file('last_ws_server');
207                         if (file._file.exists()) {
208                                 url = file.get_object(); file.close();
209                                 obj.controller.view.server_prompt.value = url;
210                         }
211                 }
212                 obj.controller.view.submit_button.disabled = true;
213                 obj.controller.view.server_prompt.disabled = true;
214                 var s = document.getElementById('status');
215                 s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.testing_hostname'));
216                 s.setAttribute('style','color: orange;');
217                 document.getElementById('version').value = '';
218                 if (!url) {
219                         s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.prompt_hostname'));
220                         s.setAttribute('style','color: red;');
221                         obj.controller.view.server_prompt.disabled = false;
222                         obj.controller.view.server_prompt.focus();
223                         return;
224                 }
225                 try {
226                         if ( ! url.match(/^http:\/\//) ) url = 'http://' + url;
227                         var x = new XMLHttpRequest();
228                         dump('server url = ' + url + '\n');
229                         x.open("GET",url,true);
230                         x.onreadystatechange = function() {
231                                 try {
232                                         if (x.readyState != 4) return;
233                                         s.setAttribute('value', document.getElementById('authStrings').getFormattedString('staff.auth.controller.status', [x.status, x.statusText]));
234                                         if (x.status == 200) {
235                                                 s.setAttribute('style','color: green;');
236                                         } else {
237                                                 s.setAttribute('style','color: red;');
238                                         }
239                                         obj.test_version(url);
240                                 } catch(E) {
241                                         obj.controller.view.server_prompt.disabled = false;
242                                         obj.controller.view.server_prompt.focus();
243                                         s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.error_hostname'));
244                                         s.setAttribute('style','color: red;');
245                                         obj.error.sdump('D_ERROR',E);
246                                 }
247                         }
248                         x.send(null);
249                 } catch(E) {
250                         s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.error_hostname'));
251                         s.setAttribute('style','color: brown;');
252                         obj.error.sdump('D_ERROR',E);
253                         obj.controller.view.server_prompt.disabled = false;
254                         obj.controller.view.server_prompt.focus();
255                 }
256         },
257
258         'test_version' : function(url) {
259                 var obj = this;
260                 var s = document.getElementById('version');
261                 s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.testing_version'));
262                 s.setAttribute('style','color: orange;');
263                 try {
264                         var x = new XMLHttpRequest();
265                         var url2 = url + '/xul/server/';
266                         dump('version url = ' + url2 + '\n');
267                         x.open("GET",url2,true);
268                         x.onreadystatechange = function() {
269                                 try {
270                                         if (x.readyState != 4) return;
271                                         s.setAttribute('value', document.getElementById('authStrings').getFormattedString('staff.auth.controller.status', [x.status, x.statusText]));
272                                         if (x.status == 200) {
273                                                 s.setAttribute('style','color: green;');
274                                                 obj.controller.view.submit_button.disabled = false;
275                                         } else {
276                                                 s.setAttribute('style','color: red;');
277                                                 obj.test_upgrade_instructions(url);
278                                         }
279                                         obj.controller.view.server_prompt.disabled = false;
280                                 } catch(E) {
281                                         s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.error_version'));
282                                         s.setAttribute('style','color: red;');
283                                         obj.error.sdump('D_ERROR',E);
284                                         obj.controller.view.server_prompt.disabled = false;
285                                 }
286                         }
287                         x.send(null);
288                 } catch(E) {
289                         s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.error_version'));
290                         s.setAttribute('style','color: brown;');
291                         obj.error.sdump('D_ERROR',E);
292                         obj.controller.view.server_prompt.disabled = false;
293                 }
294         },
295
296         'test_upgrade_instructions' : function(url) {
297                 var obj = this;
298                 try {
299                         var x = new XMLHttpRequest();
300                         var url2 = url + '/xul/versions.html';
301                         dump('upgrade url = ' + url2 + '\n');
302                         x.open("GET",url2,true);
303                         x.onreadystatechange = function() {
304                                 try {
305                                         if (x.readyState != 4) return;
306                                         if (x.status == 200) {
307                                                 window.open('data:text/html,'+window.escape(x.responseText),'upgrade','chrome,resizable,modal,centered');
308                                         } else {
309                                                 alert(document.getElementById('authStrings').getString('staff.auth.controller.version_mismatch'));
310                                         }
311                                         obj.controller.view.server_prompt.disabled = false;
312                                 } catch(E) {
313                                         obj.error.sdump('D_ERROR',E);
314                                         obj.controller.view.server_prompt.disabled = false;
315                                 }
316                         }
317                         x.send(null);
318                 } catch(E) {
319                         obj.error.sdump('D_ERROR',E);
320                         obj.controller.view.server_prompt.disabled = false;
321                 }
322         },
323
324         'login' : function() { 
325
326                 var obj = this;
327
328                 this.error.sdump('D_AUTH',
329                         document.getElementById('authStrings').getFormattedString(
330                                 'staff.auth.controller.error_login', [
331                                         this.controller.view.name_prompt.value,
332                                         this.controller.view.password_prompt.value,
333                                         this.controller.view.server_prompt.value
334                                 ]
335                         )
336                 ); 
337                 this.controller.view.server_prompt.disabled = true;
338                 this.controller.view.name_prompt.disabled = true;
339                 this.controller.view.password_prompt.disabled = true;
340                 this.controller.view.submit_button.disabled = true;
341                 XML_HTTP_SERVER = this.controller.view.server_prompt.value;
342
343                 try {
344
345                         if (typeof this.on_login == 'function') {
346                                 this.error.sdump('D_AUTH','auth.controller.session.on_init = ' +
347                                         'auth.controller.on_login\n');
348                                 this.session.on_init = this.on_login;
349                                 this.session.on_error = function() { obj.logoff(); };
350                         }
351                         
352                         this.session.init();
353
354                 } catch(E) {
355                         var error = '!! ' + E + '\n';
356                         this.error.sdump('D_ERROR',error); 
357                         alert(error);
358                         this.logoff();
359                         if (E == 'open-ils.auth.authenticate.init returned false\n') {
360                                 this.controller.view.server_prompt.focus();
361                                 this.controller.view.server_prompt.select();
362                         }
363
364                         if (typeof this.on_login_error == 'function') {
365                                 this.error.sdump('D_AUTH','auth.controller.on_login_error()\n');
366                                 this.on_login_error(E);
367                         }
368                 }
369
370         },
371
372         'standalone' : function() {
373                 var obj = this;
374                 try {
375                         if (typeof this.on_standalone == 'function') {
376                                 obj.on_standalone();
377                         }
378                 } catch(E) {
379                         var error = '!! ' + E + '\n';
380                         obj.error.sdump('D_ERROR',error); 
381                         alert(error);
382                 }
383         },
384
385         'standalone_import' : function() {
386                 var obj = this;
387                 try {
388                         if (typeof this.on_standalone_import == 'function') {
389                                 obj.on_standalone_import();
390                         }
391                 } catch(E) {
392                         var error = '!! ' + E + '\n';
393                         obj.error.sdump('D_ERROR',error); 
394                         alert(error);
395                 }
396         },
397
398         'standalone_export' : function() {
399                 var obj = this;
400                 try {
401                         if (typeof this.on_standalone_export == 'function') {
402                                 obj.on_standalone_export();
403                         }
404                 } catch(E) {
405                         var error = '!! ' + E + '\n';
406                         obj.error.sdump('D_ERROR',error); 
407                         alert(error);
408                 }
409         },
410
411         'debug' : function(action) {
412                 var obj = this;
413                 try {
414                         if (typeof this.on_debug == 'function') {
415                                 obj.on_debug(action);
416                         }
417                 } catch(E) {
418                         var error = '!! ' + E + '\n';
419                         obj.error.sdump('D_ERROR',error);
420                         alert(error);
421                 }
422         },
423
424         'logoff' : function() { 
425         
426                 this.error.sdump('D_AUTH','logoff' + this.w + '\n'); 
427                 this.controller.view.progress_bar.value = 0; 
428                 this.controller.view.progress_bar.setAttribute('real','0.0');
429                 this.controller.view.submit_button.disabled = false;
430                 this.controller.view.password_prompt.disabled = false;
431                 this.controller.view.password_prompt.value = '';
432                 this.controller.view.name_prompt.disabled = false;
433                 this.controller.view.name_prompt.focus(); 
434                 this.controller.view.name_prompt.select();
435                 this.controller.view.server_prompt.disabled = false;
436
437                 var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
438                 var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
439                 var enumerator = windowManagerInterface.getEnumerator(null);
440
441                 var w; // close all other windows
442                 while ( w = enumerator.getNext() ) {
443                         if (w != window) w.close();
444                 }
445
446                 this.controller.render('ws_deck');
447
448                 this.session.close();
449
450                 /* FIXME - need some locking or object destruction for the async tests */
451                 /* this.test_server( this.controller.view.server_prompt.value ); */
452
453                 if (typeof this.on_logoff == 'function') {
454                         this.error.sdump('D_AUTH','auth.controller.on_logoff()\n');
455                         this.on_logoff();
456                 }
457                 
458         },
459         'close' : function() { 
460         
461                 this.error.sdump('D_AUTH','close' + this.w + '\n');
462
463                 if (window.confirm(document.getElementById('authStrings').getString('staff.auth.controller.confirm_close'))) {
464                         this.logoff();
465                         this.w.close(); /* Probably won't go any further */
466
467                         if (typeof this.on_close == 'function') {
468                                 this.error.sdump('D_AUTH','auth.controller.on_close()\n');
469                                 this.on_close();
470                         }
471                 }
472                 
473         }
474 }
475
476 dump('exiting auth/controller.js\n');