]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_folders.js
Use a locally hosted yaz package to avoid strange firewalls
[Evergreen.git] / Open-ILS / web / reports / oils_rpt_folders.js
1 var oilsRptFolderNodeCache = {};
2 oilsRptFolderNodeCache.template = {};
3 oilsRptFolderNodeCache.report  = {};
4 oilsRptFolderNodeCache.output  = {};
5
6 oilsRptSetSubClass('oilsRptFolderManager','oilsRptObject');
7
8 function oilsRptFolderManager() { this.init(); }
9
10 oilsRptFolderManager.prototype.draw = function(auth) {
11
12         if(!auth) auth = SESSION;
13
14         this.folderTree = {};
15         this.tId = oilsNextId();
16         this.rId = oilsNextId();
17         this.oId = oilsNextId();
18         this.stId = oilsNextId();
19         this.srId = oilsNextId();
20         this.soId = oilsNextId();
21
22         this.ownerFolders = {};
23         this.ownerFolders.template = {};
24         this.ownerFolders.report = {};
25         this.ownerFolders.output = {};
26
27         removeChildren(DOM.oils_rpt_template_folder_tree); 
28         removeChildren(DOM.oils_rpt_report_folder_tree); 
29         removeChildren(DOM.oils_rpt_output_folder_tree); 
30         removeChildren(DOM.oils_rpt_template_shared_folder_tree); 
31         removeChildren(DOM.oils_rpt_report_shared_folder_tree); 
32         removeChildren(DOM.oils_rpt_output_shared_folder_tree); 
33
34         var porg = PERMS.SHARE_REPORT_FOLDER;
35         if( porg < 1 ) 
36                 DOM.oils_rpt_top_folder_shared.disabled = true;
37
38         var obj = this;
39         var orgsel = new oilsRptMyOrgsWidget(
40                 DOM.oils_rpt_top_folder_lib_picker, USER.ws_ou(), porg)
41         orgsel.draw();
42
43         oilsRptTemplateFolderTree = 
44                 new SlimTree(
45                         DOM.oils_rpt_template_folder_tree, 
46                         'oilsRptTemplateFolderTree');
47                         //'images/template-page.gif');
48
49         oilsRptTemplateFolderTree.addNode(this.tId, -1, 'Templates',
50                 function() {
51                         unHideMe(DOM.oils_rpt_folder_table_alt_td);
52                         unHideMe(DOM.oils_rpt_top_folder);
53                         hideMe(DOM.oils_rpt_editor_div);
54                         appendClear(DOM.oils_rpt_top_folder_type,text('Template'));
55                         hideMe(DOM.oils_rpt_folder_table_right_td);
56                         DOM.oils_rpt_top_folder_create.onclick = function() {
57                                 obj.createTopFolder('template', orgsel);
58                         }
59                 }
60         );
61
62         oilsRptReportFolderTree = 
63                 new SlimTree(
64                         DOM.oils_rpt_report_folder_tree, 
65                         'oilsRptReportFolderTree');
66                         //'images/report-page.gif');
67
68
69         oilsRptReportFolderTree.addNode(this.rId, -1, 'Reports',
70                 function() {
71                         unHideMe(DOM.oils_rpt_folder_table_alt_td);
72                         unHideMe(DOM.oils_rpt_top_folder);
73                         hideMe(DOM.oils_rpt_editor_div);
74                         hideMe(DOM.oils_rpt_folder_table_right_td);
75                         appendClear(DOM.oils_rpt_top_folder_type,text('Report'));
76                         DOM.oils_rpt_top_folder_create.onclick = function() {
77                                 obj.createTopFolder('report', orgsel);
78                         }
79                 }
80         );
81
82
83
84         oilsRptOutputFolderTree = 
85                 new SlimTree(
86                         DOM.oils_rpt_output_folder_tree, 
87                         'oilsRptOutputFolderTree');
88                         //'images/output-page.gif');
89
90         oilsRptOutputFolderTree.addNode(this.oId, -1, 'Output',
91                 function() {
92                         unHideMe(DOM.oils_rpt_folder_table_alt_td);
93                         unHideMe(DOM.oils_rpt_top_folder);
94                         hideMe(DOM.oils_rpt_editor_div);
95                         hideMe(DOM.oils_rpt_folder_table_right_td);
96                         appendClear(DOM.oils_rpt_top_folder_type,text('Output'));
97                         DOM.oils_rpt_top_folder_create.onclick = function() {
98                                 obj.createTopFolder('output', orgsel);
99                         }
100                 }
101         );
102
103
104         oilsRptSharedTemplateFolderTree = 
105                 new SlimTree(
106                         DOM.oils_rpt_template_shared_folder_tree, 
107                         'oilsRptSharedTemplateFolderTree');
108                         //'images/template-page.gif');
109
110         oilsRptSharedTemplateFolderTree.addNode(this.stId, -1, 'Templates')
111
112
113         oilsRptSharedReportFolderTree = 
114                 new SlimTree(
115                         DOM.oils_rpt_report_shared_folder_tree, 
116                         'oilsRptSharedReportFolderTree');
117                         //'images/report-page.gif');
118
119         oilsRptSharedReportFolderTree.addNode(this.srId, -1, 'Reports')
120
121         oilsRptSharedOutputFolderTree = 
122                 new SlimTree(
123                         DOM.oils_rpt_output_shared_folder_tree, 
124                         'oilsRptSharedOutputFolderTree');
125                         //'images/output-page.gif');
126
127         oilsRptSharedOutputFolderTree.addNode(this.soId, -1, 'Output')
128
129         this.fetchFolders(auth);
130 }
131
132 oilsRptFolderManager.prototype.createTopFolder = function(type, orgsel) {
133
134         if( type == 'report' ) folder = new rrf();
135         if( type == 'template' ) folder = new rtf();
136         if( type == 'output' ) folder = new rof();
137
138         folder.owner(USER.id());
139         folder.parent(null);
140         folder.name(DOM.oils_rpt_top_folder_name.value);
141         folder.shared(getSelectorVal(DOM.oils_rpt_top_folder_shared));
142
143         if( folder.shared() == 't' )
144                 folder.share_with( orgsel.getValue() );
145
146         oilsRptCreateFolder(folder, type,
147                 function(success) {
148                         if(success) {
149                                 oilsRptAlertSuccess();
150                                 oilsRptCurrentFolderManager.draw();
151                                 hideMe(DOM.oils_rpt_top_folder);
152                                 hideMe(DOM.oils_rpt_folder_table_alt_td);
153                                 unHideMe(DOM.oils_rpt_editor_div);
154                         }
155                 }
156         );
157 }
158
159
160 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
161         var obj = this;
162         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
163         req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
164         req.send();
165
166         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
167         req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
168         req.send();
169
170         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
171         req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
172         req.send();
173 }
174
175
176 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
177
178         var tree;
179         var owners = {};
180
181         for( var i = 0; i < folders.length; i++ ) {
182
183                 var folder = folders[i];
184                 var id = oilsNextId();
185                 var node = { folder : folder, treeId : id };
186
187                 oilsRptFolderNodeCache[type][folder.id()] = node;
188                 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
189
190                 /*
191                 _debug("creating folder node for "+folder.name()+" : id = "+
192                         folder.id()+' treeId = '+id + ' window id = ' + node.folderWindow.id);
193                         */
194
195                 /* shared folders get a folder for the usrname of the 
196                         owner as the parent node for the folders in the tree */
197                 if(!folder.parent() && folder.owner().id() != USER.id()) {
198                         if(owners[folder.owner().id()]) {
199                                 node.ownerNode = owners[folder.owner().id()];
200                                 continue;
201                         }
202
203                         _debug("building usrname node "+type+" -> " +folder.owner().usrname());
204
205                         var id = oilsNextId();
206                         var pid = this.stId;
207                         var tree = oilsRptSharedTemplateFolderTree;
208                         var treename = 'oilsRptSharedTemplateFolderTree';
209
210                         if(type=='report') {
211                                 tree = oilsRptSharedReportFolderTree;
212                                 treename = 'oilsRptSharedReportFolderTree';
213                                 pid = this.srId;
214                         }
215
216                         if(type=='output') {
217                                 tree = oilsRptSharedOutputFolderTree;
218                                 treename = 'oilsRptSharedOutputFolderTree';
219                                 pid = this.soId;
220                         }
221
222                         tree.addNode(id, pid, folder.owner().usrname());
223                         tree.close(pid);
224                         owners[folder.owner().id()] = id;
225                         node.ownerNode = id;
226                 }
227         }
228
229         for( var i = 0; i < folders.length; i++ ) {
230
231
232                 var folder = folders[i];
233                 var mine = (folder.owner().id() == USER.id());
234                 var pid;
235                 var treename;
236
237                 switch(type) {
238                         case 'template': 
239                                 if(mine) {
240                                         tree = oilsRptTemplateFolderTree;
241                                         treename = 'oilsRptTemplateFolderTree';
242                                         pid = this.tId;
243                                 } else {
244                                         tree = oilsRptSharedTemplateFolderTree;
245                                         treename = 'oilsRptSharedTemplateFolderTree';
246                                         pid = this.stId;
247                                 }
248                                 break;
249                         case 'report': 
250                                 if(mine) {
251                                         tree = oilsRptTemplateFolderTree;
252                                         treename = 'oilsRptTemplateFolderTree';
253                                         pid = this.rId;
254                                 } else {
255                                         tree = oilsRptSharedTemplateFolderTree;
256                                         treename = 'oilsRptSharedTemplateFolderTree';
257                                         pid = this.srId;
258                                 }
259                                 break;
260                         case 'output': 
261                                 if(mine) {
262                                         tree = oilsRptTemplateFolderTree;
263                                         treename = 'oilsRptTemplateFolderTree';
264                                         pid = this.oId;
265                                 } else {
266                                         tree = oilsRptSharedTemplateFolderTree;
267                                         treename = 'oilsRptSharedTemplateFolderTree';
268                                         pid = this.soId;
269                                 }
270                 }
271
272                 node = this.findNode(type, folder.id());
273                 id = node.treeId;
274                 if( folder.parent() ) 
275                         pid = this.findNode(type, folder.parent()).treeId;
276
277                 var fname = folder.name();
278
279                 if(!mine) {
280                         fname = folder.name() + ' ('+folder.share_with().shortname()+')';
281                         if( node.ownerNode ) pid = node.ownerNode;
282
283                 } else {
284                         if(isTrue(folder.shared()))
285                                 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
286                 }
287
288                 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();';
289
290                 /*
291                 _debug('adding node '+fname+' id = ' + id + ' pid = '
292                         +pid + ' parent = ' + folder.parent() + ' folder-window = ' + node.folderWindow.id );
293                         */
294
295                 tree.addNode(id, pid, fname, action);
296                 tree.close(pid);
297         }
298 }
299
300
301 oilsRptFolderManager.prototype.findNode = function(type, id) {
302         return oilsRptFolderNodeCache[type][id];
303 }
304
305
306
307
308
309
310 /* this only works if the initial folder tree has been drawn 
311         if defined, "action" must be a function pointer that takes the
312         folder node as the param */
313 var __someid;
314 function oilsRptBuildFolder(type, node, treeVar, rootName, action, shared) {
315         removeChildren(node);
316         var tree = new SlimTree(node, treeVar);
317         this.treeId = oilsNextId();
318         tree.addNode(this.treeId, -1, rootName);
319
320         __someid = oilsNextId();
321
322         var cache = oilsRptFolderNodeCache[type];
323
324         for( var c in cache ) {
325                 var tid = cache[c].treeId + __someid;
326                 var pid = this.treeId;
327                 var f = cache[c].folder;
328
329                 if( !shared && (f.owner().id() != USER.id()) ) continue;
330
331                 if(f.parent()) {
332                         /* find the parent's tree id so we can latch on to it */
333                         var pnode = cache[f.parent()];
334                         var pid = pnode.treeId + __someid;
335                 }
336
337                 tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
338         }
339         eval(treeVar +' = tree;');
340 }
341
342 function __setFolderCB(tree, id, action, node) {
343         var act;
344         if( action ) 
345                 act = function() { action( node ); };
346         return act;
347 }
348