]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/main/ws_info.xul
Don't let the menu default to an org that can't have users, regardless of the home_ou...
[Evergreen.git] / Open-ILS / xul / staff_client / server / main / ws_info.xul
1 <?xml version="1.0"?>
2 <!-- Application: Evergreen Staff Client -->
3 <!-- Screen: Main, Authentication Window -->
4
5 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
6 <!-- PRESENTATION -->
7 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
8 <?xml-stylesheet href="chrome://open_ils_staff_client/skin/global.css" type="text/css"?>
9 <?xml-stylesheet href="chrome://open_ils_staff_client/skin/auth.css" type="text/css"?>
10
11 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
12 <!-- LOCALIZATION -->
13 <!DOCTYPE window PUBLIC "" ""[
14         <!--#include virtual="/opac/locale/en-US/lang.dtd"-->
15 ]>
16
17 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
18 <!-- OVERLAYS -->
19 <?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
20
21 <window id="wsinfo_win" 
22         onload="try { wsinfo_init(); } catch(E) { alert(E); }"
23         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
24
25
26         <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
27         <!-- BEHAVIOR -->
28         <script type="text/javascript">var myPackageDir = 'open_ils_staff_client'; var IAMXUL = true; var g = {};</script>
29         <scripts id="openils_util_scripts"/>
30
31         <script type="text/javascript" src="chrome://open_ils_staff_client/content/main/lang.js"/>
32         <script type="text/javascript" src="/xul/server/main/lang.js"/>
33         <script type="text/javascript" src="/opac/common/js/OrgTree.js"/>
34         <script type="text/javascript" src="/opac/common/js/org_utils.js"/>
35         <script type="text/javascript" src="chrome://open_ils_staff_client/content/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 = 'Please Wait';
44
45                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
46
47                         if (typeof JSAN == 'undefined') {
48                                 throw(
49                                         "The JSAN library object is missing."
50                                 );
51                         }
52                         /////////////////////////////////////////////////////////////////////////////
53
54                         JSAN.errorLevel = "die"; // none, warn, or die
55                         JSAN.addRepository('/xul/server/');
56
57                         JSAN.use('util.error'); g.error = new util.error();
58                         JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
59                         JSAN.use('util.network'); g.network = new util.network();
60                         JSAN.use('util.widgets');
61                         JSAN.use('util.functional');
62                         JSAN.use('util.fm_utils');
63
64                         g.user = g.network.simple_request( 'FM_AU_RETRIEVE_VIA_SESSION', [ xulG.auth.session.key ] );
65
66                         g.my_lib = g.user.home_ou();
67
68                         g.aout_list = g.network.simple_request(
69                                 'FM_AOUT_RETRIEVE',
70                                 [ ]
71                         );
72                         g.aout_hash = {};
73                         for (var i = 0; i < g.aout_list.length; i++) {
74                                 g.aout_hash[ g.aout_list[i].id() ] = g.aout_list[i];
75                         }
76
77                         var highest_org_id = g.network.simple_request(
78                                 'PERM_RETRIEVE_HIGHEST_ORG',
79                                 [ xulG.auth.session.key, g.user.id(), 'REGISTER_WORKSTATION']
80                         );
81                         if (highest_org_id == -1) {
82                                 alert('You do not have permission to register a workstation.');
83                                 xulG.auth.logoff();
84                                 return;
85                         }
86                         var perm_depth = findOrgDepth( highest_org_id );
87
88                         g.my_libs_tree = g.network.simple_request(
89                                 'FM_AOU_DESCENDANTS_RETRIEVE',
90                                 [ g.user.home_ou(), 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 = util.fm_utils.flatten_ou_branch( g.my_libs_tree );
96
97                         g.my_libs_shortname_hash = {};
98                         g.my_libs_ou_hash = {};
99                         for (var i = 0; i < g.my_libs.length; i++) {
100                                 g.my_libs_shortname_hash[ g.my_libs[i].id() ] = g.my_libs[i].shortname();
101                                 g.my_libs_ou_hash[ g.my_libs[i].id() ] = function(o){return o;}(g.my_libs[i]);
102                         }
103
104                         g.tb = document.getElementById('wsname');
105
106                         render_menulist();
107
108                         document.getElementById('register_btn').disabled = false;
109                         document.getElementById('wsname').disabled = false;
110                         document.getElementById('wsname').value = '';
111
112                         document.getElementById('wsname').focus();
113                 }
114
115                 function render_menulist() {
116                         var x = document.getElementById('placeholder');
117                         util.widgets.remove_children( x );
118
119                         var default_lib = g.my_lib; 
120                         if ( !get_bool( g.aout_hash[ g.my_libs_ou_hash[ default_lib ].ou_type() ].can_have_users() ) ) {
121                                 default_lib = null;
122                         }
123
124                         g.ml = util.widgets.make_menulist( 
125                                 util.functional.map_list( 
126                                         util.fm_utils.flatten_ou_branch( g.my_libs_tree ),
127                                         function(obj) { 
128                                                 if (!default_lib) {
129                                                         if ( get_bool( g.aout_hash[ obj.ou_type() ].can_have_users() ) ) default_lib = obj.id();
130                                                 }
131                                                 return [ 
132                                                         obj.shortname(), 
133                                                         obj.id(), 
134                                                         ( !get_bool( g.aout_hash[ obj.ou_type() ].can_have_users() ) ),
135                                                         ( g.aout_hash[ obj.ou_type() ].depth() ),
136                                                 ]; 
137                                         }
138                                 ),
139                                 default_lib
140                         );
141
142                         x.appendChild( g.ml );
143                 }
144
145                 function register() {
146                         try {
147                                 var robj = g.network.simple_request(
148                                         'AUTH_WORKSTATION',
149                                         [ xulG.auth.session.key, g.my_libs_shortname_hash[ g.ml.value ] + '-' + g.tb.value, g.ml.value ],
150                                         null,
151                                         {
152                                                 'title' : 'Override Registration Failure?',
153                                                 'overridable_events' : [ 
154                                                         1703 /* WORKSTATION_NAME_EXISTS */, 
155                                                 ],
156                                         }
157                                 );
158
159                                 if (typeof robj.ilsevent != 'undefined') {
160                                         switch(robj.ilsevent) {
161                                                 case -1 : g.error.standard_network_error_alert(); break;
162                                                 case 1703 /* WORKSTATION_NAME_EXISTS */ : /* handled with override request */ break;
163                                                 default: g.error.standard_unexpected_error_alert('Workstation Registration',robj); break;
164                                         }
165                                 } else {
166                                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalPreferencesWrite UniversalBrowserWrite UniversalPreferencesRead UniversalBrowserRead");
167                                         g.data.ws_info[ xulG.auth.controller.view.server_prompt.value ] = { 
168                                                 'name' : g.my_libs_shortname_hash[ g.ml.value ] + '-' + g.tb.value, 
169                                                 'owning_lib' : g.ml.value,
170                                                 'lib_shortname' : g.my_libs_shortname_hash[ g.ml.value ],
171                                         };
172                                         xulG.file.get('ws_info');
173                                         xulG.file.set_object(g.data.ws_info);
174                                         alert('Registration successful');
175                                         xulG.auth.logoff();
176                                 }
177                         } catch(E) {
178                                 g.error.standard_unexpected_error_alert('Workstation Registration 2',E);
179                         }
180                 }
181
182         ]]>
183         </script>
184
185         <vbox flex="1" style="background: #993333">
186                 <description>
187                         Enter a workstation name and library to register this client under:
188                 </description>
189                 <hbox>
190                         <label value="Name" control="wsname"/>
191                         <textbox id="wsname" />
192                 </hbox>
193                 <hbox>
194                         <hbox id="placeholder"/>
195                         <button id="register_btn" label="Register" accesskey="R" oncommand="register();"/>
196                 </hbox>
197         </vbox>
198 </window>
199