]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_folders.js
initial merge/overlay profile editor ui
[working/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         folder.name(DOM.oils_rpt_top_folder_name.value);
145         folder.shared(getSelectorVal(DOM.oils_rpt_top_folder_shared));
146
147         if( folder.shared() == 't' )
148                 folder.share_with( orgsel.getValue() );
149
150         oilsRptCreateFolder(folder, type,
151                 function(success) {
152                         if(success) {
153                                 oilsRptAlertSuccess();
154                                 oilsRptCurrentFolderManager.draw();
155                                 hideMe(DOM.oils_rpt_top_folder);
156                                 hideMe(DOM.oils_rpt_folder_table_alt_td);
157                                 unHideMe(DOM.oils_rpt_editor_div);
158                         }
159                 }
160         );
161 }
162
163
164 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
165         var obj = this;
166         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
167         req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
168         req.send();
169
170         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
171         req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
172         req.send();
173
174         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
175         req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
176         req.send();
177 }
178
179
180 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
181
182         var tree;
183         var owners = {};
184
185         for( var i = 0; i < folders.length; i++ ) {
186
187                 var folder = folders[i];
188                 var id = oilsNextId();
189                 var node = { folder : folder, treeId : id };
190
191                 oilsRptFolderNodeCache[type][folder.id()] = node;
192                 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
193
194                 /*
195                 _debug("creating folder node for "+folder.name()+" : id = "+
196                         folder.id()+' treeId = '+id + ' window id = ' + node.folderWindow.id);
197                         */
198
199                 /* shared folders get a folder for the usrname of the 
200                         owner as the parent node for the folders in the tree */
201                 if(!folder.parent() && folder.owner().id() != USER.id()) {
202                         if(owners[folder.owner().id()]) {
203                                 node.ownerNode = owners[folder.owner().id()];
204                                 continue;
205                         }
206
207                         _debug("building usrname node "+type+" -> " +folder.owner().usrname());
208
209                         var id = oilsNextId();
210                         var pid = this.stId;
211                         var tree = oilsRptSharedTemplateFolderTree;
212                         var treename = 'oilsRptSharedTemplateFolderTree';
213
214                         if(type=='report') {
215                                 tree = oilsRptSharedReportFolderTree;
216                                 treename = 'oilsRptSharedReportFolderTree';
217                                 pid = this.srId;
218                         }
219
220                         if(type=='output') {
221                                 tree = oilsRptSharedOutputFolderTree;
222                                 treename = 'oilsRptSharedOutputFolderTree';
223                                 pid = this.soId;
224                         }
225
226                         tree.addNode(id, pid, folder.owner().usrname());
227                         tree.close(pid);
228                         owners[folder.owner().id()] = id;
229                         node.ownerNode = id;
230                 }
231         }
232
233         for( var i = 0; i < folders.length; i++ ) {
234
235
236                 var folder = folders[i];
237                 var mine = (folder.owner().id() == USER.id());
238                 var pid;
239                 var treename;
240
241                 switch(type) {
242                         case 'template': 
243                                 if(mine) {
244                                         tree = oilsRptTemplateFolderTree;
245                                         treename = 'oilsRptTemplateFolderTree';
246                                         pid = this.tId;
247                                 } else {
248                                         tree = oilsRptSharedTemplateFolderTree;
249                                         treename = 'oilsRptSharedTemplateFolderTree';
250                                         pid = this.stId;
251                                 }
252                                 break;
253                         case 'report': 
254                                 if(mine) {
255                                         tree = oilsRptTemplateFolderTree;
256                                         treename = 'oilsRptTemplateFolderTree';
257                                         pid = this.rId;
258                                 } else {
259                                         tree = oilsRptSharedTemplateFolderTree;
260                                         treename = 'oilsRptSharedTemplateFolderTree';
261                                         pid = this.srId;
262                                 }
263                                 break;
264                         case 'output': 
265                                 if(mine) {
266                                         tree = oilsRptTemplateFolderTree;
267                                         treename = 'oilsRptTemplateFolderTree';
268                                         pid = this.oId;
269                                 } else {
270                                         tree = oilsRptSharedTemplateFolderTree;
271                                         treename = 'oilsRptSharedTemplateFolderTree';
272                                         pid = this.soId;
273                                 }
274                 }
275
276                 node = this.findNode(type, folder.id());
277                 id = node.treeId;
278                 if( folder.parent() ) 
279                         pid = this.findNode(type, folder.parent()).treeId;
280
281                 var fname = folder.name();
282
283                 if(!mine) {
284                         fname = folder.name() + ' ('+folder.share_with().shortname()+')';
285                         if( node.ownerNode ) pid = node.ownerNode;
286
287                 } else {
288                         if(isTrue(folder.shared()))
289                                 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
290                 }
291
292                 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();';
293
294                 /*
295                 _debug('adding node '+fname+' id = ' + id + ' pid = '
296                         +pid + ' parent = ' + folder.parent() + ' folder-window = ' + node.folderWindow.id );
297                         */
298
299                 tree.addNode(id, pid, fname, action);
300                 tree.close(pid);
301         }
302 }
303
304
305 oilsRptFolderManager.prototype.findNode = function(type, id) {
306         return oilsRptFolderNodeCache[type][id];
307 }
308
309
310
311
312
313
314 /* this only works if the initial folder tree has been drawn 
315         if defined, "action" must be a function pointer that takes the
316         folder node as the param */
317 var __someid;
318 function oilsRptBuildFolder(type, node, treeVar, rootName, action, shared) {
319         removeChildren(node);
320         var tree = new SlimTree(node, treeVar);
321         this.treeId = oilsNextId();
322         tree.addNode(this.treeId, -1, rootName);
323
324         __someid = oilsNextId();
325
326         var cache = oilsRptFolderNodeCache[type];
327
328         for( var c in cache ) {
329                 var tid = cache[c].treeId + __someid;
330                 var pid = this.treeId;
331                 var f = cache[c].folder;
332
333                 if( !shared && (f.owner().id() != USER.id()) ) continue;
334
335                 if(f.parent()) {
336                         /* find the parent's tree id so we can latch on to it */
337                         var pnode = cache[f.parent()];
338                         var pid = pnode.treeId + __someid;
339                 }
340
341                 tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
342         }
343         eval(treeVar +' = tree;');
344 }
345
346 function __setFolderCB(tree, id, action, node) {
347         var act;
348         if( action ) 
349                 act = function() { action( node ); };
350         return act;
351 }
352