]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/main/ws_info.xul
more correct permission handling for registering workstations..builds the library...
[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 <!--
12 <?xml-stylesheet href="chrome://open_ils_staff_client/skin/global.css" type="text/css"?>
13 <?xml-stylesheet href="chrome://open_ils_staff_client/skin/auth.css" type="text/css"?>
14 -->
15 <?xml-stylesheet href="/xul/server/skin/global.css" type="text/css"?>
16
17 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
18 <!-- LOCALIZATION -->
19 <!DOCTYPE window PUBLIC "" ""[
20         <!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
21 ]>
22
23 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
24 <!-- OVERLAYS -->
25 <?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
26
27 <window id="wsinfo_win" 
28         onload="try { wsinfo_init(); } catch(E) { alert(E); }"
29         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
30
31
32         <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
33         <!-- BEHAVIOR -->
34         <script type="text/javascript">var myPackageDir = 'open_ils_staff_client'; var IAMXUL = true; var g = {};</script>
35         <scripts id="openils_util_scripts"/>
36
37         <script type='text/javascript' src='/opac/common/js/<!--#echo var="locale"-->/OrgTree.js'/>
38         <script type="text/javascript" src="/opac/common/js/org_utils.js"/>
39         <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
40         <script>
41         <![CDATA[
42
43                 function wsinfo_init() {
44
45                         document.getElementById('register_btn').disabled = true;
46                         document.getElementById('wsname').disabled = true;
47                         document.getElementById('wsname').value = document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.please_wait');
48
49                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
50
51                         if (typeof JSAN == 'undefined') {
52                                 throw(document.getElementById("commonStrings").getString('common.jsan.missing'));
53                         }
54                         /////////////////////////////////////////////////////////////////////////////
55
56                         JSAN.errorLevel = "die"; // none, warn, or die
57                         JSAN.addRepository('/xul/server/');
58
59                         JSAN.use('util.error'); g.error = new util.error();
60                         JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
61                         JSAN.use('util.network'); g.network = new util.network();
62                         JSAN.use('util.widgets');
63                         JSAN.use('util.functional');
64                         JSAN.use('util.fm_utils');
65
66                         g.user = g.network.simple_request( 'FM_AU_RETRIEVE_VIA_SESSION', [ xulG.auth.session.key ] );
67
68                         g.my_lib = g.user.home_ou();
69
70                         g.aout_list = g.network.simple_request(
71                                 'FM_AOUT_RETRIEVE',
72                                 [ ]
73                         );
74                         g.aout_hash = {};
75                         for (var i = 0; i < g.aout_list.length; i++) {
76                                 g.aout_hash[ g.aout_list[i].id() ] = g.aout_list[i];
77                         }
78
79                         var work_ous = g.network.simple_request(
80                                 'PERM_RETRIEVE_WORK_OU',
81                                 [ xulG.auth.session.key, 'REGISTER_WORKSTATION']
82                         );
83                         if (work_ous.length == 0) {
84                                 alert(document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.workstation_registration_denied'));
85                                 xulG.auth.logoff();
86                                 return;
87                         }
88             g.my_libs = [];
89             for (var i = 0; i < work_ous.length; i++ ) {
90                 var perm_depth = findOrgDepth( work_ous[i] );
91
92                 g.my_libs_tree = g.network.simple_request(
93                     'FM_AOU_DESCENDANTS_RETRIEVE',
94                     [ work_ous[i], perm_depth ]
95                 );
96                 if (!instanceOf(g.my_libs_tree,aou)) { /* FIXME - workaround for weird descendants call result */
97                     g.my_libs_tree = g.my_libs_tree[0];
98                 }
99                             g.my_libs = g.my_libs.concat( util.fm_utils.flatten_ou_branch( g.my_libs_tree ) );
100             }
101
102                         g.my_libs_shortname_hash = {};
103                         g.my_libs_ou_hash = {};
104                         for (var i = 0; i < g.my_libs.length; i++) {
105                                 g.my_libs_shortname_hash[ g.my_libs[i].id() ] = g.my_libs[i].shortname();
106                                 g.my_libs_ou_hash[ g.my_libs[i].id() ] = function(o){return o;}(g.my_libs[i]);
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                         if ( !get_bool( g.aout_hash[ g.my_libs_ou_hash[ default_lib ].ou_type() ].can_have_users() ) ) {
126                                 default_lib = null;
127                         }
128
129                         g.ml = util.widgets.make_menulist( 
130                                 util.functional.map_list( 
131                                         util.fm_utils.flatten_ou_branch( g.my_libs_tree ),
132                                         function(obj) { 
133                                                 if (!default_lib) {
134                                                         if ( get_bool( g.aout_hash[ obj.ou_type() ].can_have_users() ) ) default_lib = obj.id();
135                                                 }
136                                                 return [ 
137                                                         obj.shortname(), 
138                                                         obj.id(), 
139                                                         ( !get_bool( g.aout_hash[ obj.ou_type() ].can_have_users() ) ),
140                                                         ( g.aout_hash[ obj.ou_type() ].depth() )
141                                                 ]; 
142                                         }
143                                 ),
144                                 default_lib
145                         );
146
147                         x.appendChild( g.ml );
148                 }
149
150                 function register() {
151                         try {
152                                 var robj = g.network.simple_request(
153                                         'AUTH_WORKSTATION',
154                                         [ xulG.auth.session.key, g.my_libs_shortname_hash[ g.ml.value ] + '-' + g.tb.value, g.ml.value ],
155                                         null,
156                                         {
157                                                 'title' : document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.registration.override'),
158                                                 'overridable_events' : [ 
159                                                         1703 /* WORKSTATION_NAME_EXISTS */
160                                                 ]
161                                         }
162                                 );
163
164                                 if (typeof robj.ilsevent != 'undefined') {
165                                         switch(Number(robj.ilsevent)) {
166                                                 case -1 : g.error.standard_network_error_alert(); break;
167                                                 case 1703 /* WORKSTATION_NAME_EXISTS */ : /* handled with override request */ break;
168                         case 1001 /* NO_SESSION */ : /* handled with request dialog */ break;
169                                                 default: g.error.standard_unexpected_error_alert(document.getElementById('commonStrings').getFormattedString('staff.main.gen_offline_widgets.registration.error', ['1']), robj); break;
170                                         }
171                                 } else {
172                                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalPreferencesWrite UniversalBrowserWrite UniversalPreferencesRead UniversalBrowserRead");
173                                         g.data.ws_info[ xulG.auth.controller.view.server_prompt.value ] = { 
174                                                 'name' : g.my_libs_shortname_hash[ g.ml.value ] + '-' + g.tb.value, 
175                                                 'owning_lib' : g.ml.value,
176                                                 'lib_shortname' : g.my_libs_shortname_hash[ g.ml.value ]
177                                         };
178                                         xulG.file.get('ws_info');
179                                         xulG.file.set_object(g.data.ws_info);
180                                         alert(document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.registration.success'));
181                                         xulG.auth.logoff();
182                                 }
183                         } catch(E) {
184                                 g.error.standard_unexpected_error_alert(document.getElementById('commonStrings').getFormattedString('staff.main.gen_offline_widgets.registration.error', ['2']) ,E);
185                         }
186                 }
187
188         ]]>
189         </script>
190
191     <vbox flex="1" class="my_overflow">
192         <description id="desc" hidden="true">
193             &staff.main.ws_info.entry;
194         </description>
195             <grid style="border: solid thick red;">
196                 <columns>
197                     <column/>
198                     <column/>
199                 </columns>
200                 <rows>
201                     <row>
202                         <label value="&staff.main.ws_info.name;" control="wsname"/>
203                         <textbox id="wsname"  context="clipboard"/>
204                     </row>
205                     <row>
206                         <label value="&staff.main.ws_info.organization;" control="placeholder"/>
207                         <hbox id="placeholder" flex="1"/>
208                     </row>
209                     <row>
210                         <button id="register_btn" label="&staff.main.ws_info.register_btn.label;" accesskey="&staff.main.ws_info.register_btn.accesskey;" oncommand="register();"/>
211                         <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();"/>
212                     </row>
213                 </rows>
214             </grid>
215     </vbox>
216 </window>
217