]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/main/ws_info.xul
Improve Firefox/XULRunner Support
[Evergreen.git] / Open-ILS / xul / staff_client / server / main / ws_info.xul
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Application: Evergreen Staff Client -->
3 <!-- Screen: Main, Authentication Window -->
4 <!--
5  vim:noet:sw=4:ts=4:
6 -->
7
8 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
9 <!-- PRESENTATION -->
10 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
11 <?xml-stylesheet href="/xul/server/skin/global.css" type="text/css"?>
12
13 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
14 <!-- LOCALIZATION -->
15 <!DOCTYPE window PUBLIC "" ""[
16     <!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
17 ]>
18
19 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
20 <!-- OVERLAYS -->
21 <?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
22
23 <window id="wsinfo_win" 
24     onload="try { wsinfo_init(); } catch(E) { alert(E); }"
25     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
26
27
28     <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
29     <!-- BEHAVIOR -->
30     <script type="text/javascript">var myPackageDir = 'open_ils_staff_client'; var IAMXUL = true; var g = {};</script>
31     <scripts id="openils_util_scripts"/>
32
33     <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
34     <script>
35     <![CDATA[
36
37         function wsinfo_init() {
38
39             document.getElementById('register_btn').disabled = true;
40             document.getElementById('wsname').disabled = true;
41             document.getElementById('wsname').value = document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.please_wait');
42
43             if (typeof JSAN == 'undefined') {
44                 throw(document.getElementById("commonStrings").getString('common.jsan.missing'));
45             }
46             /////////////////////////////////////////////////////////////////////////////
47
48             JSAN.errorLevel = "die"; // none, warn, or die
49             JSAN.addRepository('/xul/server/');
50
51             JSAN.use('util.error'); g.error = new util.error();
52             JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
53             JSAN.use('util.network'); g.network = new util.network();
54             JSAN.use('util.widgets');
55             JSAN.use('util.functional');
56             JSAN.use('util.fm_utils');
57
58             g.user = g.network.simple_request( 'FM_AU_RETRIEVE_VIA_SESSION', [ xulG.auth.session.key ] );
59
60             g.my_lib = g.user.home_ou();
61
62             g.aout_list = g.network.simple_request(
63                 'FM_AOUT_RETRIEVE',
64                 [ ]
65             );
66             g.aout_hash = {};
67             for (var i = 0; i < g.aout_list.length; i++) {
68                 g.aout_hash[ g.aout_list[i].id() ] = g.aout_list[i];
69             }
70
71             var work_ous = g.network.simple_request(
72                 'PERM_RETRIEVE_WORK_OU',
73                 [ xulG.auth.session.key, 'REGISTER_WORKSTATION']
74             );
75             if (work_ous.length == 0) {
76                 alert(document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.workstation_registration_denied'));
77                 xulG.auth.logoff();
78                 return;
79             }
80             g.my_libs = [];
81             for (var i = 0; i < work_ous.length; i++ ) {
82                 var perm_depth = findOrgDepth( work_ous[i] );
83
84                 g.my_libs_tree = g.network.simple_request(
85                     'FM_AOU_DESCENDANTS_RETRIEVE',
86                     [ work_ous[i], perm_depth ]
87                 );
88                 if (!instanceOf(g.my_libs_tree,aou)) { /* FIXME - workaround for weird descendants call result */
89                     g.my_libs_tree = g.my_libs_tree[0];
90                 }
91                 g.my_libs = g.my_libs.concat( util.fm_utils.flatten_ou_branch( g.my_libs_tree ) );
92             }
93
94             g.my_libs_shortname_hash = {};
95             g.my_libs_ou_hash = {};
96             g.my_deduped_libs = [];
97             for (var i = 0; i < g.my_libs.length; i++) {
98                 if (typeof g.my_libs_shortname_hash[ g.my_libs[i].id() ] == 'undefined') {
99                     g.my_libs_shortname_hash[ g.my_libs[i].id() ] = g.my_libs[i].shortname();
100                     g.my_libs_ou_hash[ g.my_libs[i].id() ] = function(o){return o;}(g.my_libs[i]);
101                     g.my_deduped_libs.push( g.my_libs[i] );
102                 }
103             }
104
105             g.tb = document.getElementById('wsname');
106
107             var dnsService = Components.classes["@mozilla.org/network/dns-service;1"]
108                  .createInstance(Components.interfaces.nsIDNSService);
109
110             render_menulist();
111
112             document.getElementById('register_btn').disabled = false;
113             document.getElementById('wsname').disabled = false;
114             if(dnsService.myHostName && dnsService.myHostName.toLowerCase() != 'localhost')
115                 g.tb.value = dnsService.myHostName;
116             else
117                 g.tb.value = '';
118
119             document.getElementById('wsname').focus();
120         }
121
122         function render_menulist() {
123             var x = document.getElementById('placeholder');
124             util.widgets.remove_children( x );
125
126             var default_lib = g.my_lib; 
127             try {
128                 if (typeof g.my_libs_ou_hash[ default_lib ] == 'undefined') {
129                     default_lib = null;
130                 } else {
131                     if ( !get_bool( g.aout_hash[ g.my_libs_ou_hash[ default_lib ].ou_type() ].can_have_users() ) ) {
132                         default_lib = null;
133                     }
134                 }
135             } catch(E) {
136                 dump('Error in ws_info.xul, render_menulist(): ' + E + '\n');
137                 default_lib = null;
138             }
139
140             g.ml = util.widgets.make_menulist( 
141                 util.functional.map_list( 
142                     g.my_deduped_libs,
143                     function(obj) { 
144                         if (!default_lib) {
145                             if ( get_bool( g.aout_hash[ obj.ou_type() ].can_have_users() ) ) default_lib = obj.id();
146                         }
147                         return [ 
148                             obj.shortname(), 
149                             obj.id(), 
150                             ( !get_bool( g.aout_hash[ obj.ou_type() ].can_have_users() ) ),
151                             ( g.aout_hash[ obj.ou_type() ].depth() )
152                         ]; 
153                     }
154                 ),
155                 default_lib
156             );
157
158             x.appendChild( g.ml );
159         }
160
161         function register() {
162             if(g.tb.value.length == 0) {
163                 alert(document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.registration.empty'));
164                 return;
165             }
166             try {
167                 var robj = g.network.simple_request(
168                     'AUTH_WORKSTATION',
169                     [ xulG.auth.session.key, g.my_libs_shortname_hash[ g.ml.value ] + '-' + g.tb.value, g.ml.value ],
170                     null,
171                     {
172                         'title' : document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.registration.override'),
173                         'overridable_events' : [ 
174                             1703 /* WORKSTATION_NAME_EXISTS */
175                         ]
176                     }
177                 );
178
179                 if (typeof robj.ilsevent != 'undefined') {
180                     switch(Number(robj.ilsevent)) {
181                         case -1 : g.error.standard_network_error_alert(); break;
182                         case 1703 /* WORKSTATION_NAME_EXISTS */ : /* handled with override request */ break;
183                         case 1001 /* NO_SESSION */ : /* handled with request dialog */ break;
184                         default: g.error.standard_unexpected_error_alert(document.getElementById('commonStrings').getFormattedString('staff.main.gen_offline_widgets.registration.error', ['1']), robj); break;
185                     }
186                 } else {
187                     g.data.ws_info[ xulG.auth.controller.view.server_prompt.value ] = { 
188                         'name' : g.my_libs_shortname_hash[ g.ml.value ] + '-' + g.tb.value, 
189                         'owning_lib' : g.ml.value,
190                         'lib_shortname' : g.my_libs_shortname_hash[ g.ml.value ]
191                     };
192                     xulG.file.get('ws_info');
193                     xulG.file.set_object(g.data.ws_info);
194                     alert(document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.registration.success'));
195                     xulG.auth.logoff();
196                 }
197             } catch(E) {
198                 g.error.standard_unexpected_error_alert(document.getElementById('commonStrings').getFormattedString('staff.main.gen_offline_widgets.registration.error', ['2']) ,E);
199             }
200         }
201
202     ]]>
203     </script>
204
205     <vbox flex="1" class="my_overflow">
206         <description id="desc" hidden="true">
207             &staff.main.ws_info.entry;
208         </description>
209             <grid style="border: solid thick red;">
210                 <columns>
211                     <column/>
212                     <column/>
213                 </columns>
214                 <rows>
215                     <row>
216                         <label value="&staff.main.ws_info.name;" control="wsname"/>
217                         <textbox id="wsname"  context="clipboard"/>
218                     </row>
219                     <row>
220                         <label value="&staff.main.ws_info.organization;" control="placeholder"/>
221                         <hbox id="placeholder" flex="1"/>
222                     </row>
223                     <row>
224                         <button id="register_btn" label="&staff.main.ws_info.register_btn.label;" accesskey="&staff.main.ws_info.register_btn.accesskey;" oncommand="register();"/>
225                         <button id="help_btn" label="&staff.main.ws_info.help_btn.label;" accesskey="&staff.main.ws_info.help_btn.accesskey;" oncommand="alert(document.getElementById('desc').textContent); document.getElementById('wsname').focus();"/>
226                     </row>
227                 </rows>
228             </grid>
229     </vbox>
230 </window>
231