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.orgTrail.template = {};
19 this.orgTrail.report = {};
20 this.orgTrail.output = {};
23 oilsRptFolderManager.prototype.draw = function(auth) {
24 oilsRptTemplateFolderTree = new SlimTree(DOM.oils_rpt_template_folder_tree, 'oilsRptTemplateFolderTree');
25 oilsRptTemplateFolderTree.addNode(this.tId, -1, 'Templates')
27 oilsRptReportFolderTree = new SlimTree(DOM.oils_rpt_report_folder_tree, 'oilsRptReportFolderTree');
28 oilsRptReportFolderTree.addNode(this.rId, -1, 'Reports')
30 oilsRptOutputFolderTree = new SlimTree(DOM.oils_rpt_output_folder_tree, 'oilsRptOutputFolderTree');
31 oilsRptOutputFolderTree.addNode(this.oId, -1, 'Output')
33 oilsRptSharedTemplateFolderTree = new SlimTree(DOM.oils_rpt_template_shared_folder_tree, 'oilsRptSharedTemplateFolderTree');
34 oilsRptSharedTemplateFolderTree.addNode(this.stId, -1, 'Templates')
36 oilsRptSharedReportFolderTree = new SlimTree(DOM.oils_rpt_report_shared_folder_tree, 'oilsRptSharedReportFolderTree');
37 oilsRptSharedReportFolderTree.addNode(this.srId, -1, 'Reports')
39 oilsRptSharedOutputFolderTree = new SlimTree(DOM.oils_rpt_output_shared_folder_tree, 'oilsRptSharedOutputFolderTree');
40 oilsRptSharedOutputFolderTree.addNode(this.soId, -1, 'Output')
42 this.fetchFolders(auth);
45 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
47 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
48 req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
51 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
52 req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
55 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
56 req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
61 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
64 folders = folders.sort(
66 var asw = a.share_with().id();
67 var bsw = b.share_with().id();
68 if( asw ) asw = findOrgDepth(findOrgUnit(asw));
70 if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw));
72 if( asw < bsw ) return 1;
73 if( asw > bsw ) return -1;
79 for( var i = 0; i < folders.length; i++ ) {
80 var folder = folders[i];
81 var id = oilsNextId();
82 var node = { folder : folder, treeId : id };
83 oilsRptFolderNodeCache[type][folder.id()] = node;
84 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
88 for( var i = 0; i < folders.length; i++ ) {
90 var folder = folders[i];
91 _debug(js2JSON(folder));
92 var mine = (folder.owner().id() == USER.id());
99 tree = oilsRptTemplateFolderTree;
100 treename = 'oilsRptTemplateFolderTree';
103 tree = oilsRptSharedTemplateFolderTree;
104 treename = 'oilsRptSharedTemplateFolderTree';
110 tree = oilsRptTemplateFolderTree;
111 treename = 'oilsRptTemplateFolderTree';
114 tree = oilsRptSharedTemplateFolderTree;
115 treename = 'oilsRptSharedTemplateFolderTree';
121 tree = oilsRptTemplateFolderTree;
122 treename = 'oilsRptTemplateFolderTree';
125 tree = oilsRptSharedTemplateFolderTree;
126 treename = 'oilsRptSharedTemplateFolderTree';
132 if(!this.orgTrail[type][folder.share_with().id()]) {
133 tree.addNode(id, pid, folder.share_with().shortname());
137 this.orgTrail[type][folder.share_with().id()] = pid;
139 pid = this.orgTrail[type][folder.share_with().id()];
144 if( folder.parent() )
145 pid = this.findNode(type, folder.parent()).treeId;
147 var action = 'javascript:oilsRptObject.find('+
148 node.folderWindow.id+').draw();'+treename+'.toggle("'+id+'");';
149 _debug('adding node '+folder.name()+' pid = '+pid);
150 tree.addNode(id, pid, folder.name(), action);
157 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
158 this.folderTree[type] = { children : [] };
159 this.makeTree(type, folders, this.folderTree[type], -1 );
161 oilsRptFolderManager.prototype.makeTree = function(type, folders, node, parentId, tree) {
166 if( ! node.folder ) {
167 childNodes = grep(folders, function(f){return (!f.parent())});
170 _debug("making subtree with folder "+node.folder.name());
172 var c = oilsRptFolderNodeCache;
173 if(!c[type]) c[type] = {};
174 c[type][node.folder.id()] = node;
178 node.folderWindow = oilsRptBuildFolderWindow(type, node.folder.id());
180 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();'+
181 'oilsRptFolderTree.toggle("'+id+'");';
183 oilsRptFolderTree.addNode(id, parentId, node.folder.name(), action);
186 childNodes = grep(folders,
187 function(i){return (i.parent() == node.folder.id())});
190 if(!childNodes) return;
191 for( var i = 0; i < childNodes.length; i++ )
192 this.makeTree( type, folders, { folder : childNodes[i] }, id );
197 oilsRptFolderManager.prototype.findNode = function(type, id) {
198 _debug('finding : type = ' + type + ' : ' + id);
199 return oilsRptFolderNodeCache[type][id];