1 var oilsRptFolderNodeCache = {};
2 oilsRptFolderNodeCache.template = {};
3 oilsRptFolderNodeCache.report = {};
4 oilsRptFolderNodeCache.output = {};
6 oilsRptSetSubClass('oilsRptFolderManager','oilsRptObject');
8 function oilsRptFolderManager() { this.init(); }
10 oilsRptFolderManager.prototype.draw = function(auth) {
12 if(!auth) auth = SESSION;
15 this.tId = oilsNextId();
16 this.rId = oilsNextId();
17 this.oId = oilsNextId();
18 this.stId = oilsNextId();
19 this.srId = oilsNextId();
20 this.soId = oilsNextId();
22 this.ownerFolders = {};
23 this.ownerFolders.template = {};
24 this.ownerFolders.report = {};
25 this.ownerFolders.output = {};
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);
34 oilsRptTemplateFolderTree =
36 DOM.oils_rpt_template_folder_tree,
37 'oilsRptTemplateFolderTree');
38 //'images/template-page.gif');
40 oilsRptTemplateFolderTree.addNode(this.tId, -1, 'Templates')
42 oilsRptReportFolderTree =
44 DOM.oils_rpt_report_folder_tree,
45 'oilsRptReportFolderTree');
46 //'images/report-page.gif');
48 oilsRptReportFolderTree.addNode(this.rId, -1, 'Reports')
51 oilsRptOutputFolderTree =
53 DOM.oils_rpt_output_folder_tree,
54 'oilsRptOutputFolderTree');
55 //'images/output-page.gif');
57 oilsRptOutputFolderTree.addNode(this.oId, -1, 'Output')
59 oilsRptSharedTemplateFolderTree =
61 DOM.oils_rpt_template_shared_folder_tree,
62 'oilsRptSharedTemplateFolderTree');
63 //'images/template-page.gif');
65 oilsRptSharedTemplateFolderTree.addNode(this.stId, -1, 'Templates')
67 oilsRptSharedReportFolderTree =
69 DOM.oils_rpt_report_shared_folder_tree,
70 'oilsRptSharedReportFolderTree');
71 //'images/report-page.gif');
73 oilsRptSharedReportFolderTree.addNode(this.srId, -1, 'Reports')
75 oilsRptSharedOutputFolderTree =
77 DOM.oils_rpt_output_shared_folder_tree,
78 'oilsRptSharedOutputFolderTree');
79 //'images/output-page.gif');
81 oilsRptSharedOutputFolderTree.addNode(this.soId, -1, 'Output')
83 this.fetchFolders(auth);
86 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
88 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
89 req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
92 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
93 req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
96 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
97 req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
102 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
105 folders = folders.sort(
107 var asw = a.share_with();
108 var bsw = b.share_with();
109 if( asw ) asw = findOrgDepth(findOrgUnit(asw.id()));
111 if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw.id()));
113 if( asw < bsw ) return 1;
114 if( asw > bsw ) return -1;
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);
131 for( var i = 0; i < folders.length; i++ ) {
133 var folder = folders[i];
134 var mine = (folder.owner().id() == USER.id());
141 tree = oilsRptTemplateFolderTree;
142 treename = 'oilsRptTemplateFolderTree';
145 tree = oilsRptSharedTemplateFolderTree;
146 treename = 'oilsRptSharedTemplateFolderTree';
152 tree = oilsRptTemplateFolderTree;
153 treename = 'oilsRptTemplateFolderTree';
156 tree = oilsRptSharedTemplateFolderTree;
157 treename = 'oilsRptSharedTemplateFolderTree';
163 tree = oilsRptTemplateFolderTree;
164 treename = 'oilsRptTemplateFolderTree';
167 tree = oilsRptSharedTemplateFolderTree;
168 treename = 'oilsRptSharedTemplateFolderTree';
173 node = this.findNode(type, folder.id());
175 if( folder.parent() )
176 pid = this.findNode(type, folder.parent()).treeId;
180 if(!this.orgTrail[type][folder.share_with().id()]) {
181 tree.addNode(id, pid, folder.share_with().shortname());
185 this.orgTrail[type][folder.share_with().id()] = pid;
187 pid = this.orgTrail[type][folder.share_with().id()];
193 var fname = folder.name();
196 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
197 if(!this.ownerFolders[type][folder.owner().id()]) {
198 tree.addNode(id, pid, folder.owner().usrname());
202 this.ownerFolders[type][folder.owner().id()] = pid;
204 pid = this.ownerFolders[type][folder.owner().id()];
208 if(isTrue(folder.shared()))
209 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
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 );
216 tree.addNode(id, pid, fname, action);
222 oilsRptFolderManager.prototype.findNode = function(type, id) {
223 return oilsRptFolderNodeCache[type][id];
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 */
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);
241 __someid = oilsNextId();
243 var cache = oilsRptFolderNodeCache[type];
245 for( var c in cache ) {
246 var tid = cache[c].treeId + __someid;
247 var pid = this.treeId;
248 var f = cache[c].folder;
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;
256 tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
258 eval(treeVar +' = tree;');
261 function __setFolderCB(tree, id, action, node) {
264 act = function() { action( node ); };