1 var oilsRptFolderNodeCache = {};
2 oilsRptFolderNodeCache.template = {};
3 oilsRptFolderNodeCache.report = {};
4 oilsRptFolderNodeCache.output = {};
6 oilsRptSetSubClass('oilsRptFolderManager','oilsRptObject');
8 function oilsRptFolderManager() {
11 this.tId = oilsNextId();
12 this.rId = oilsNextId();
13 this.oId = oilsNextId();
14 this.stId = oilsNextId();
15 this.srId = oilsNextId();
16 this.soId = oilsNextId();
18 this.ownerFolders = {};
19 this.ownerFolders.template = {};
20 this.ownerFolders.report = {};
21 this.ownerFolders.output = {};
24 oilsRptFolderManager.prototype.draw = function(auth) {
26 oilsRptTemplateFolderTree =
28 DOM.oils_rpt_template_folder_tree,
29 'oilsRptTemplateFolderTree');
30 //'images/template-page.gif');
32 oilsRptTemplateFolderTree.addNode(this.tId, -1, 'Templates')
34 oilsRptReportFolderTree =
36 DOM.oils_rpt_report_folder_tree,
37 'oilsRptReportFolderTree');
38 //'images/report-page.gif');
40 oilsRptReportFolderTree.addNode(this.rId, -1, 'Reports')
43 oilsRptOutputFolderTree =
45 DOM.oils_rpt_output_folder_tree,
46 'oilsRptOutputFolderTree');
47 //'images/output-page.gif');
49 oilsRptOutputFolderTree.addNode(this.oId, -1, 'Output')
51 oilsRptSharedTemplateFolderTree =
53 DOM.oils_rpt_template_shared_folder_tree,
54 'oilsRptSharedTemplateFolderTree');
55 //'images/template-page.gif');
57 oilsRptSharedTemplateFolderTree.addNode(this.stId, -1, 'Templates')
59 oilsRptSharedReportFolderTree =
61 DOM.oils_rpt_report_shared_folder_tree,
62 'oilsRptSharedReportFolderTree');
63 //'images/report-page.gif');
65 oilsRptSharedReportFolderTree.addNode(this.srId, -1, 'Reports')
67 oilsRptSharedOutputFolderTree =
69 DOM.oils_rpt_output_shared_folder_tree,
70 'oilsRptSharedOutputFolderTree');
71 //'images/output-page.gif');
73 oilsRptSharedOutputFolderTree.addNode(this.soId, -1, 'Output')
75 this.fetchFolders(auth);
78 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
80 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
81 req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
84 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
85 req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
88 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
89 req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
94 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
97 folders = folders.sort(
99 var asw = a.share_with();
100 var bsw = b.share_with();
101 if( asw ) asw = findOrgDepth(findOrgUnit(asw.id()));
103 if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw.id()));
105 if( asw < bsw ) return 1;
106 if( asw > bsw ) return -1;
112 for( var i = 0; i < folders.length; i++ ) {
113 var folder = folders[i];
114 var id = oilsNextId();
115 var node = { folder : folder, treeId : id };
116 oilsRptFolderNodeCache[type][folder.id()] = node;
117 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
118 _debug("creating folder node for "+folder.name()+" : id = "+folder.id()+' treeId = '+id);
122 for( var i = 0; i < folders.length; i++ ) {
124 var folder = folders[i];
125 var mine = (folder.owner().id() == USER.id());
132 tree = oilsRptTemplateFolderTree;
133 treename = 'oilsRptTemplateFolderTree';
136 tree = oilsRptSharedTemplateFolderTree;
137 treename = 'oilsRptSharedTemplateFolderTree';
143 tree = oilsRptTemplateFolderTree;
144 treename = 'oilsRptTemplateFolderTree';
147 tree = oilsRptSharedTemplateFolderTree;
148 treename = 'oilsRptSharedTemplateFolderTree';
154 tree = oilsRptTemplateFolderTree;
155 treename = 'oilsRptTemplateFolderTree';
158 tree = oilsRptSharedTemplateFolderTree;
159 treename = 'oilsRptSharedTemplateFolderTree';
164 id = this.findNode(type, folder.id()).treeId;
165 if( folder.parent() )
166 pid = this.findNode(type, folder.parent()).treeId;
171 if(!this.orgTrail[type][folder.share_with().id()]) {
172 tree.addNode(id, pid, folder.share_with().shortname());
176 this.orgTrail[type][folder.share_with().id()] = pid;
178 pid = this.orgTrail[type][folder.share_with().id()];
184 var fname = folder.name();
187 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
188 if(!this.ownerFolders[type][folder.owner().id()]) {
189 tree.addNode(id, pid, folder.owner().usrname());
193 this.ownerFolders[type][folder.owner().id()] = pid;
195 pid = this.ownerFolders[type][folder.owner().id()];
199 if(isTrue(folder.shared()))
200 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
203 var action = 'javascript:oilsRptObject.find('+
204 node.folderWindow.id+').draw();'+treename+'.toggle("'+id+'");';
206 _debug('adding node '+fname+' id = ' + id + ' pid = '+pid + ' parent = ' + folder.parent() );
208 tree.addNode(id, pid, fname, action);
214 oilsRptFolderManager.prototype.findNode = function(type, id) {
215 return oilsRptFolderNodeCache[type][id];
223 /* this only works if the initial folder tree has been drawn
224 if defined, "action" must be a function pointer that takes the
225 folder node as the param */
227 function oilsRptBuildFolder(type, node, treeVar, rootName, action) {
228 removeChildren(node);
229 var tree = new SlimTree(node, treeVar);
230 this.treeId = oilsNextId();
231 tree.addNode(this.treeId, -1, rootName);
233 __someid = oilsNextId();
235 var cache = oilsRptFolderNodeCache[type];
237 for( var c in cache ) {
238 var tid = cache[c].treeId + __someid;
239 var pid = this.treeId;
240 var f = cache[c].folder;
243 /* find the parent's tree id so we can latch on to it */
244 var pnode = cache[f.parent()];
245 var pid = pnode.treeId + __someid;
248 tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
250 eval(treeVar +' = tree;');
253 function __setFolderCB(tree, id, action, node) {
256 act = function() { tree.toggle(id); action( node ); };