]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/main/gen_offline_widgets.xul
Improve Firefox/XULRunner Support
[Evergreen.git] / Open-ILS / xul / staff_client / server / main / gen_offline_widgets.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="gen_offline_menus_win" 
24     onload="try { my_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 my_init() {
38             if (typeof JSAN == 'undefined') {
39                 throw(document.getElementById('commonStrings').getString('common.jsan.missing'));
40             }
41             /////////////////////////////////////////////////////////////////////////////
42
43             JSAN.errorLevel = "die"; // none, warn, or die
44             JSAN.addRepository('/xul/server/');
45
46             JSAN.use('util.error'); g.error = new util.error();
47             JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
48             JSAN.use('util.network'); g.network = new util.network();
49
50             gen_offline_menus_init();
51
52             var r = g.network.simple_request('USER_ORG_UNIT_OPT_IN_FEATURE',[]);
53             g.data.user_org_unit_opt_in_enabled = (r == "1" || r == 1);
54             g.data.stash('user_org_unit_opt_in_enabled');
55         }
56
57         function gen_offline_menus_init() {
58
59             JSAN.use('util.functional');
60
61             save_object('offline_ou_list', build_ou_list());
62
63             save_object('offline_pgt_list', build_pgt_list());
64
65             save_object('offline_cit_list', build_cit_list());
66
67             save_object('offline_cnct_list', build_cnct_list());
68
69             save_object('offline_asv_list', build_asv_list());
70
71             var server_time = g.network.request('open-ils.actor','opensrf.system.time',[]);
72             var local_time = parseInt( new Date().getTime() / 1000 );
73
74             var delta = server_time - local_time;
75
76             JSAN.use('util.file'); var file = new util.file('pending_xacts');
77             if (file._file.exists()) {
78                 file.close();
79             } else {
80                 file.close();
81                 save_object('offline_delta', [ delta ]);
82             }
83
84             save_object('print_list_templates',g.data.print_list_templates);
85
86             $('placeholder').setAttribute('value', document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.synced'));
87
88         }
89
90         function $(id) {
91             return document.getElementById(id);
92         }
93
94         function save_object(filename,obj) {
95             JSAN.use('util.file'); var file = new util.file(filename);
96             file.set_object(obj); file.close();
97         }
98
99         function build_ou_list() {
100             JSAN.use('util.fm_utils');
101             return [
102                 util.functional.map_list( 
103                     /*util.fm_utils.flatten_ou_branch(g.data.tree.aou)*/ g.data.list.aou,
104                     function(obj) { 
105                         var sname = obj.shortname();
106                         for (i = sname.length; i < 20; i++) {
107                             sname += ' ';
108                         }
109                         return [ 
110                             obj.name() ? sname + ' ' + obj.name() : obj.shortname(),
111                             obj.id(), 
112                             ( ! get_bool( g.data.hash.aout[ obj.ou_type() ].can_have_users() ) ),
113                             ( g.data.hash.aout[ obj.ou_type() ].depth() * 2),
114                         ]; 
115                     }
116                 ),
117                 g.data.list.au[0].ws_ou()
118             ];
119         }
120
121         function build_pgt_list() {
122             var list = []; var added = {};
123
124             function walk(n) {
125                 if (
126                     (n.application_perm() == 'group_application.user.patron') ||
127                     (n.application_perm() == null) ||
128                     (n.application_perm() == '')
129                 ) {
130                     if (typeof added[n.id()] == 'undefined') {
131                         list.push(n); added[n.id()] = true;
132                         var children = n.children();
133                         if (children) for (var i = 0; i < children.length; i++) {
134                             walk(children[i]);
135                         }
136                     }
137                 } else if (n.parent() == null) {
138                     var children = n.children();
139                     if (children) for (var i = 0; i < children.length; i++) {
140                         walk(children[i]);
141                     }
142                 }
143             }
144
145             walk(g.data.tree.pgt);
146
147             return [
148                 util.functional.map_list( 
149                     list,
150                     function(obj) { return [ 
151                         obj.description() ? obj.name() + ' : ' + obj.description() : obj.name(), 
152                         obj.id() 
153                     ]; }
154                 )
155             ];
156         }
157
158         function build_cit_list() {
159             return [
160                 util.functional.map_list( 
161                     g.data.list.cit,
162                     function(obj) { return [ 
163                         obj.name(), 
164                         obj.id() 
165                     ]; }
166                 )
167             ];
168         }
169
170         function build_cnct_list() {
171             JSAN.use('util.fm_utils');
172             return [
173                 util.functional.map_list(
174                     util.functional.filter_list(
175                         g.data.list.cnct,
176                         function(o) {
177                             return util.fm_utils.compare_aou_a_is_b_or_ancestor(o.owning_lib(), g.data.list.au[0].ws_ou());
178                         }
179                     ).sort(
180
181                         function(a,b) {
182                             try { 
183                                 return util.fm_utils.sort_func_aou_by_depth_and_then_string(
184                                     [ a.owning_lib(), a.name() ],
185                                     [ b.owning_lib(), b.name() ]
186                                 );
187                             } catch(E) {
188                                 alert(document.getElementById('commonStrings').getString('staff.main.gen_offline_widgets.noncat_sort.error') + E);
189                                 return 0;
190                             }
191                         }
192
193                     ),
194                     function(o) {
195                         return [ g.data.hash.aou[ o.owning_lib() ].shortname() + ' : ' + o.name(), js2JSON( [ o.id(), o.circ_duration() ] ) ];
196                     }
197                 )
198             ];
199         }
200
201         function build_asv_list() {
202             var obj = {};
203             /* loop through required surveys */
204             for (var i = 0; i < g.data.list.my_asv.length; i++) {
205                 dump('i = ' + i + '\n');
206                 var survey = g.data.list.my_asv[i];
207                 obj[ survey.name() ] = {};
208                 obj[ survey.name() ][ 'description' ] = survey.description();
209                 obj[ survey.name() ][ 'questions' ] = [];
210
211                 /* loop through survey questions */
212                 for (var j = 0; j < survey.questions().length; j++) {
213                     dump('\tj = ' + j + '\n');
214                     var question = survey.questions()[j];
215                     var q = {};
216                     q[ 'question' ] = question.question();
217                     q[ 'answers' ] = util.functional.map_list( 
218                         question.answers(),
219                         function(obj) { return [ 
220                             obj.answer(), 
221                             '[' + obj.id() + ',' 
222                             + obj.question() + ',' 
223                             + question.survey() + ']'
224                         ]; }
225                     );
226                     obj[ survey.name() ][ 'questions' ].push( q );
227                 }
228             }
229             return obj;
230         }
231
232     ]]>
233     </script>
234
235     <vbox flex="1">
236         <label id="placeholder"/>
237     </vbox>
238 </window>
239