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