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