27f5cb449fd0d25fefcb7c978fdc716388904373
[evergreen-equinox.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             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
44
45             if (typeof JSAN == 'undefined') {
46                 throw(document.getElementById("commonStrings").getString('common.jsan.missing'));
47             }
48             /////////////////////////////////////////////////////////////////////////////
49
50             JSAN.errorLevel = "die"; // none, warn, or die
51             JSAN.addRepository('/xul/server/');
52
53             JSAN.use('util.error'); g.error = new util.error();
54             JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
55             JSAN.use('util.network'); g.network = new util.network();
56             JSAN.use('util.widgets');
57             JSAN.use('util.functional');
58             JSAN.use('util.fm_utils');
59
60             g.user = g.network.simple_request( 'FM_AU_RETRIEVE_VIA_SESSION', [ xulG.auth.session.key ] );
61
62             g.my_lib = g.user.home_ou();
63
64             g.aout_list = g.network.simple_request(
65                 'FM_AOUT_RETRIEVE',
66                 [ ]
67             );
68             g.aout_hash = {};
69             for (var i = 0; i < g.aout_list.length; i++) {
70                 g.aout_hash[ g.aout_list[i].id() ] = g.aout_list[i];
71             }
72
73             var work_ous = g.network.simple_request(
74                 'PERM_RETRIEVE_WORK_OU',
75                 [ xulG.auth.session.key, 'REGISTER_WORKSTATION']
76             );
77             if (work_ous.length == 0) {
78                 alert(document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.workstation_registration_denied'));
79                 xulG.auth.logoff();
80                 return;
81             }
82             g.my_libs = [];
83             for (var i = 0; i < work_ous.length; i++ ) {
84                 var perm_depth = findOrgDepth( work_ous[i] );
85
86                 g.my_libs_tree = g.network.simple_request(
87                     'FM_AOU_DESCENDANTS_RETRIEVE',
88                     [ work_ous[i], perm_depth ]
89                 );
90                 if (!instanceOf(g.my_libs_tree,aou)) { /* FIXME - workaround for weird descendants call result */
91                     g.my_libs_tree = g.my_libs_tree[0];
92                 }
93                 g.my_libs = g.my_libs.concat( util.fm_utils.flatten_ou_branch( g.my_libs_tree ) );
94             }
95
96             g.my_libs_shortname_hash = {};
97             g.my_libs_ou_hash = {};
98             g.my_deduped_libs = [];
99             for (var i = 0; i < g.my_libs.length; i++) {
100                 if (typeof g.my_libs_shortname_hash[ g.my_libs[i].id() ] == 'undefined') {
101                     g.my_libs_shortname_hash[ g.my_libs[i].id() ] = g.my_libs[i].shortname();
102                     g.my_libs_ou_hash[ g.my_libs[i].id() ] = function(o){return o;}(g.my_libs[i]);
103                     g.my_deduped_libs.push( g.my_libs[i] );
104                 }
105             }
106
107             g.tb = document.getElementById('wsname');
108
109             render_menulist();
110
111             document.getElementById('register_btn').disabled = false;
112             document.getElementById('wsname').disabled = false;
113             document.getElementById('wsname').value = '';
114
115             document.getElementById('wsname').focus();
116         }
117
118         function render_menulist() {
119             var x = document.getElementById('placeholder');
120             util.widgets.remove_children( x );
121
122             var default_lib = g.my_lib; 
123             try {
124                 if (typeof g.my_libs_ou_hash[ default_lib ] == 'undefined') {
125                     default_lib = null;
126                 } else {
127                     if ( !get_bool( g.aout_hash[ g.my_libs_ou_hash[ default_lib ].ou_type() ].can_have_users() ) ) {
128                         default_lib = null;
129                     }
130                 }
131             } catch(E) {
132                 dump('Error in ws_info.xul, render_menulist(): ' + E + '\n');
133                 default_lib = null;
134             }
135
136             g.ml = util.widgets.make_menulist( 
137                 util.functional.map_list( 
138                     g.my_deduped_libs,
139                     function(obj) { 
140                         if (!default_lib) {
141                             if ( get_bool( g.aout_hash[ obj.ou_type() ].can_have_users() ) ) default_lib = obj.id();
142                         }
143                         return [ 
144                             obj.shortname(), 
145                             obj.id(), 
146                             ( !get_bool( g.aout_hash[ obj.ou_type() ].can_have_users() ) ),
147                             ( g.aout_hash[ obj.ou_type() ].depth() )
148                         ]; 
149                     }
150                 ),
151                 default_lib
152             );
153
154             x.appendChild( g.ml );
155         }
156
157         function register() {
158             try {
159                 var robj = g.network.simple_request(
160                     'AUTH_WORKSTATION',
161                     [ xulG.auth.session.key, g.my_libs_shortname_hash[ g.ml.value ] + '-' + g.tb.value, g.ml.value ],
162                     null,
163                     {
164                         'title' : document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.registration.override'),
165                         'overridable_events' : [ 
166                             1703 /* WORKSTATION_NAME_EXISTS */
167                         ]
168                     }
169                 );
170
171                 if (typeof robj.ilsevent != 'undefined') {
172                     switch(Number(robj.ilsevent)) {
173                         case -1 : g.error.standard_network_error_alert(); break;
174                         case 1703 /* WORKSTATION_NAME_EXISTS */ : /* handled with override request */ break;
175                         case 1001 /* NO_SESSION */ : /* handled with request dialog */ break;
176                         default: g.error.standard_unexpected_error_alert(document.getElementById('commonStrings').getFormattedString('staff.main.gen_offline_widgets.registration.error', ['1']), robj); break;
177                     }
178                 } else {
179                     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalPreferencesWrite UniversalBrowserWrite UniversalPreferencesRead UniversalBrowserRead");
180                     g.data.ws_info[ xulG.auth.controller.view.server_prompt.value ] = { 
181                         'name' : g.my_libs_shortname_hash[ g.ml.value ] + '-' + g.tb.value, 
182                         'owning_lib' : g.ml.value,
183                         'lib_shortname' : g.my_libs_shortname_hash[ g.ml.value ]
184                     };
185                     xulG.file.get('ws_info');
186                     xulG.file.set_object(g.data.ws_info);
187                     alert(document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.registration.success'));
188                     xulG.auth.logoff();
189                 }
190             } catch(E) {
191                 g.error.standard_unexpected_error_alert(document.getElementById('commonStrings').getFormattedString('staff.main.gen_offline_widgets.registration.error', ['2']) ,E);
192             }
193         }
194
195     ]]>
196     </script>
197
198     <vbox flex="1" class="my_overflow">
199         <description id="desc" hidden="true">
200             &staff.main.ws_info.entry;
201         </description>
202             <grid style="border: solid thick red;">
203                 <columns>
204                     <column/>
205                     <column/>
206                 </columns>
207                 <rows>
208                     <row>
209                         <label value="&staff.main.ws_info.name;" control="wsname"/>
210                         <textbox id="wsname"  context="clipboard"/>
211                     </row>
212                     <row>
213                         <label value="&staff.main.ws_info.organization;" control="placeholder"/>
214                         <hbox id="placeholder" flex="1"/>
215                     </row>
216                     <row>
217                         <button id="register_btn" label="&staff.main.ws_info.register_btn.label;" accesskey="&staff.main.ws_info.register_btn.accesskey;" oncommand="register();"/>
218                         <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();"/>
219                     </row>
220                 </rows>
221             </grid>
222     </vbox>
223 </window>
224