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