]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_folders.js
more user param and widget work
[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         oilsRptTemplateFolderTree = 
35                 new SlimTree(
36                         DOM.oils_rpt_template_folder_tree, 
37                         'oilsRptTemplateFolderTree');
38                         //'images/template-page.gif');
39
40         oilsRptTemplateFolderTree.addNode(this.tId, -1, 'Templates')
41
42         oilsRptReportFolderTree = 
43                 new SlimTree(
44                         DOM.oils_rpt_report_folder_tree, 
45                         'oilsRptReportFolderTree');
46                         //'images/report-page.gif');
47
48         oilsRptReportFolderTree.addNode(this.rId, -1, 'Reports')
49
50
51         oilsRptOutputFolderTree = 
52                 new SlimTree(
53                         DOM.oils_rpt_output_folder_tree, 
54                         'oilsRptOutputFolderTree');
55                         //'images/output-page.gif');
56
57         oilsRptOutputFolderTree.addNode(this.oId, -1, 'Output')
58
59         oilsRptSharedTemplateFolderTree = 
60                 new SlimTree(
61                         DOM.oils_rpt_template_shared_folder_tree, 
62                         'oilsRptSharedTemplateFolderTree');
63                         //'images/template-page.gif');
64
65         oilsRptSharedTemplateFolderTree.addNode(this.stId, -1, 'Templates')
66
67         oilsRptSharedReportFolderTree = 
68                 new SlimTree(
69                         DOM.oils_rpt_report_shared_folder_tree, 
70                         'oilsRptSharedReportFolderTree');
71                         //'images/report-page.gif');
72
73         oilsRptSharedReportFolderTree.addNode(this.srId, -1, 'Reports')
74
75         oilsRptSharedOutputFolderTree = 
76                 new SlimTree(
77                         DOM.oils_rpt_output_shared_folder_tree, 
78                         'oilsRptSharedOutputFolderTree');
79                         //'images/output-page.gif');
80
81         oilsRptSharedOutputFolderTree.addNode(this.soId, -1, 'Output')
82
83         this.fetchFolders(auth);
84 }
85
86 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
87         var obj = this;
88         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
89         req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
90         req.send();
91
92         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
93         req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
94         req.send();
95
96         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
97         req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
98         req.send();
99 }
100
101
102 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
103         var tree;
104
105         folders = folders.sort(
106                 function(a,b) {
107                         var asw = a.share_with();
108                         var bsw = b.share_with();
109                         if( asw ) asw = findOrgDepth(findOrgUnit(asw.id()));
110                         else asw = -1;
111                         if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw.id()));
112                         else bsw = -1;
113                         if( asw < bsw ) return 1;
114                         if( asw > bsw ) return -1;
115                         return 0;
116                 }
117         );
118
119
120         for( var i = 0; i < folders.length; i++ ) {
121                 var folder = folders[i];
122                 var id = oilsNextId();
123                 var node = { folder : folder, treeId : id };
124                 oilsRptFolderNodeCache[type][folder.id()] = node;
125                 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
126                 _debug("creating folder node for "+folder.name()+" : id = "+
127                         folder.id()+' treeId = '+id + ' window id = ' + node.folderWindow.id);
128         }
129
130
131         for( var i = 0; i < folders.length; i++ ) {
132
133                 var folder = folders[i];
134                 var mine = (folder.owner().id() == USER.id());
135                 var pid;
136                 var treename;
137
138                 switch(type) {
139                         case 'template': 
140                                 if(mine) {
141                                         tree = oilsRptTemplateFolderTree;
142                                         treename = 'oilsRptTemplateFolderTree';
143                                         pid = this.tId;
144                                 } else {
145                                         tree = oilsRptSharedTemplateFolderTree;
146                                         treename = 'oilsRptSharedTemplateFolderTree';
147                                         pid = this.stId;
148                                 }
149                                 break;
150                         case 'report': 
151                                 if(mine) {
152                                         tree = oilsRptTemplateFolderTree;
153                                         treename = 'oilsRptTemplateFolderTree';
154                                         pid = this.rId;
155                                 } else {
156                                         tree = oilsRptSharedTemplateFolderTree;
157                                         treename = 'oilsRptSharedTemplateFolderTree';
158                                         pid = this.srId;
159                                 }
160                                 break;
161                         case 'output': 
162                                 if(mine) {
163                                         tree = oilsRptTemplateFolderTree;
164                                         treename = 'oilsRptTemplateFolderTree';
165                                         pid = this.oId;
166                                 } else {
167                                         tree = oilsRptSharedTemplateFolderTree;
168                                         treename = 'oilsRptSharedTemplateFolderTree';
169                                         pid = this.soId;
170                                 }
171                 }
172
173                 node = this.findNode(type, folder.id());
174                 id = node.treeId;
175                 if( folder.parent() ) 
176                         pid = this.findNode(type, folder.parent()).treeId;
177
178                 /*
179                 if(!mine) {
180                         if(!this.orgTrail[type][folder.share_with().id()]) {
181                                 tree.addNode(id, pid, folder.share_with().shortname());
182                                 tree.close(pid);
183                                 pid = id;
184                                 id = oilsNextId();
185                                 this.orgTrail[type][folder.share_with().id()] = pid;
186                         } else {
187                                 pid = this.orgTrail[type][folder.share_with().id()];
188                                 id = oilsNextId();
189                         }
190                 }
191                 */
192
193                 var fname = folder.name();
194
195                 if(!mine) {
196                         fname = folder.name() + ' ('+folder.share_with().shortname()+')';
197                         if(!this.ownerFolders[type][folder.owner().id()]) {
198                                 tree.addNode(id, pid, folder.owner().usrname());
199                                 tree.close(pid);
200                                 pid = id;
201                                 id = oilsNextId();
202                                 this.ownerFolders[type][folder.owner().id()] = pid;
203                         } else {
204                                 pid = this.ownerFolders[type][folder.owner().id()];
205                                 id = oilsNextId();
206                         }
207                 } else {
208                         if(isTrue(folder.shared()))
209                                 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
210                 }
211
212                 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();';
213                 _debug('adding node '+fname+' id = ' + id + ' pid = '
214                         +pid + ' parent = ' + folder.parent() + ' folder-window = ' + node.folderWindow.id );
215
216                 tree.addNode(id, pid, fname, action);
217                 tree.close(pid);
218         }
219 }
220
221
222 oilsRptFolderManager.prototype.findNode = function(type, id) {
223         return oilsRptFolderNodeCache[type][id];
224 }
225
226
227
228
229
230
231 /* this only works if the initial folder tree has been drawn 
232         if defined, "action" must be a function pointer that takes the
233         folder node as the param */
234 var __someid;
235 function oilsRptBuildFolder(type, node, treeVar, rootName, action) {
236         removeChildren(node);
237         var tree = new SlimTree(node, treeVar);
238         this.treeId = oilsNextId();
239         tree.addNode(this.treeId, -1, rootName);
240
241         __someid = oilsNextId();
242
243         var cache = oilsRptFolderNodeCache[type];
244
245         for( var c in cache ) {
246                 var tid = cache[c].treeId + __someid;
247                 var pid = this.treeId;
248                 var f = cache[c].folder;
249
250                 if(f.parent()) {
251                         /* find the parent's tree id so we can latch on to it */
252                         var pnode = cache[f.parent()];
253                         var pid = pnode.treeId + __someid;
254                 }
255
256                 tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
257         }
258         eval(treeVar +' = tree;');
259 }
260
261 function __setFolderCB(tree, id, action, node) {
262         var act;
263         if( action ) 
264                 act = function() { action( node ); };
265         return act;
266 }
267