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);
35 var orgsel = new oilsRptMyOrgsWidget(
36 DOM.oils_rpt_top_folder_lib_picker, USER.ws_ou());
39 oilsRptTemplateFolderTree =
41 DOM.oils_rpt_template_folder_tree,
42 'oilsRptTemplateFolderTree');
43 //'images/template-page.gif');
45 oilsRptTemplateFolderTree.addNode(this.tId, -1, 'Templates',
47 unHideMe(DOM.oils_rpt_folder_table_alt_td);
48 unHideMe(DOM.oils_rpt_top_folder);
49 hideMe(DOM.oils_rpt_editor_div);
50 appendClear(DOM.oils_rpt_top_folder_type,text('Template'));
51 hideMe(DOM.oils_rpt_folder_table_right_td);
52 DOM.oils_rpt_top_folder_create.onclick = function() {
53 obj.createTopFolder('template', orgsel);
58 oilsRptReportFolderTree =
60 DOM.oils_rpt_report_folder_tree,
61 'oilsRptReportFolderTree');
62 //'images/report-page.gif');
65 oilsRptReportFolderTree.addNode(this.rId, -1, 'Reports',
67 unHideMe(DOM.oils_rpt_folder_table_alt_td);
68 unHideMe(DOM.oils_rpt_top_folder);
69 hideMe(DOM.oils_rpt_editor_div);
70 hideMe(DOM.oils_rpt_folder_table_right_td);
71 appendClear(DOM.oils_rpt_top_folder_type,text('Report'));
72 DOM.oils_rpt_top_folder_create.onclick = function() {
73 obj.createTopFolder('report', orgsel);
80 oilsRptOutputFolderTree =
82 DOM.oils_rpt_output_folder_tree,
83 'oilsRptOutputFolderTree');
84 //'images/output-page.gif');
86 oilsRptOutputFolderTree.addNode(this.oId, -1, 'Output',
88 unHideMe(DOM.oils_rpt_folder_table_alt_td);
89 unHideMe(DOM.oils_rpt_top_folder);
90 hideMe(DOM.oils_rpt_editor_div);
91 hideMe(DOM.oils_rpt_folder_table_right_td);
92 appendClear(DOM.oils_rpt_top_folder_type,text('Output'));
93 DOM.oils_rpt_top_folder_create.onclick = function() {
94 obj.createTopFolder('output', orgsel);
100 oilsRptSharedTemplateFolderTree =
102 DOM.oils_rpt_template_shared_folder_tree,
103 'oilsRptSharedTemplateFolderTree');
104 //'images/template-page.gif');
106 oilsRptSharedTemplateFolderTree.addNode(this.stId, -1, 'Templates')
109 oilsRptSharedReportFolderTree =
111 DOM.oils_rpt_report_shared_folder_tree,
112 'oilsRptSharedReportFolderTree');
113 //'images/report-page.gif');
115 oilsRptSharedReportFolderTree.addNode(this.srId, -1, 'Reports')
117 oilsRptSharedOutputFolderTree =
119 DOM.oils_rpt_output_shared_folder_tree,
120 'oilsRptSharedOutputFolderTree');
121 //'images/output-page.gif');
123 oilsRptSharedOutputFolderTree.addNode(this.soId, -1, 'Output')
125 this.fetchFolders(auth);
128 oilsRptFolderManager.prototype.createTopFolder = function(type, orgsel) {
130 if( type == 'report' ) folder = new rrf();
131 if( type == 'template' ) folder = new rtf();
132 if( type == 'output' ) folder = new rof();
134 folder.owner(USER.id());
136 folder.name(DOM.oils_rpt_top_folder_name.value);
137 folder.shared(getSelectorVal(DOM.oils_rpt_top_folder_shared));
139 if( folder.shared() == 't' )
140 folder.share_with( orgsel.getValue() );
142 oilsRptCreateFolder(folder, type,
145 oilsRptAlertSuccess();
146 oilsRptCurrentFolderManager.draw();
147 hideMe(DOM.oils_rpt_top_folder);
148 hideMe(DOM.oils_rpt_folder_table_alt_td);
149 unHideMe(DOM.oils_rpt_editor_div);
156 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
158 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
159 req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
162 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
163 req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
166 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
167 req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
172 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
175 folders = folders.sort(
177 var asw = a.share_with();
178 var bsw = b.share_with();
179 if( asw ) asw = findOrgDepth(findOrgUnit(asw.id()));
181 if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw.id()));
183 if( asw < bsw ) return 1;
184 if( asw > bsw ) return -1;
190 for( var i = 0; i < folders.length; i++ ) {
191 var folder = folders[i];
192 var id = oilsNextId();
193 var node = { folder : folder, treeId : id };
194 oilsRptFolderNodeCache[type][folder.id()] = node;
195 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
197 _debug("creating folder node for "+folder.name()+" : id = "+
198 folder.id()+' treeId = '+id + ' window id = ' + node.folderWindow.id);
203 for( var i = 0; i < folders.length; i++ ) {
205 var folder = folders[i];
206 var mine = (folder.owner().id() == USER.id());
213 tree = oilsRptTemplateFolderTree;
214 treename = 'oilsRptTemplateFolderTree';
217 tree = oilsRptSharedTemplateFolderTree;
218 treename = 'oilsRptSharedTemplateFolderTree';
224 tree = oilsRptTemplateFolderTree;
225 treename = 'oilsRptTemplateFolderTree';
228 tree = oilsRptSharedTemplateFolderTree;
229 treename = 'oilsRptSharedTemplateFolderTree';
235 tree = oilsRptTemplateFolderTree;
236 treename = 'oilsRptTemplateFolderTree';
239 tree = oilsRptSharedTemplateFolderTree;
240 treename = 'oilsRptSharedTemplateFolderTree';
245 node = this.findNode(type, folder.id());
247 if( folder.parent() )
248 pid = this.findNode(type, folder.parent()).treeId;
252 if(!this.orgTrail[type][folder.share_with().id()]) {
253 tree.addNode(id, pid, folder.share_with().shortname());
257 this.orgTrail[type][folder.share_with().id()] = pid;
259 pid = this.orgTrail[type][folder.share_with().id()];
265 var fname = folder.name();
268 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
269 if(!this.ownerFolders[type][folder.owner().id()]) {
270 tree.addNode(id, pid, folder.owner().usrname());
274 this.ownerFolders[type][folder.owner().id()] = pid;
276 pid = this.ownerFolders[type][folder.owner().id()];
280 if(isTrue(folder.shared()))
281 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
284 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();';
286 _debug('adding node '+fname+' id = ' + id + ' pid = '
287 +pid + ' parent = ' + folder.parent() + ' folder-window = ' + node.folderWindow.id );
290 tree.addNode(id, pid, fname, action);
296 oilsRptFolderManager.prototype.findNode = function(type, id) {
297 return oilsRptFolderNodeCache[type][id];
305 /* this only works if the initial folder tree has been drawn
306 if defined, "action" must be a function pointer that takes the
307 folder node as the param */
309 function oilsRptBuildFolder(type, node, treeVar, rootName, action, shared) {
310 removeChildren(node);
311 var tree = new SlimTree(node, treeVar);
312 this.treeId = oilsNextId();
313 tree.addNode(this.treeId, -1, rootName);
315 __someid = oilsNextId();
317 var cache = oilsRptFolderNodeCache[type];
319 for( var c in cache ) {
320 var tid = cache[c].treeId + __someid;
321 var pid = this.treeId;
322 var f = cache[c].folder;
324 if( !shared && f.owner() != USER.id() ) continue;
327 /* find the parent's tree id so we can latch on to it */
328 var pnode = cache[f.parent()];
329 var pid = pnode.treeId + __someid;
332 tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
334 eval(treeVar +' = tree;');
337 function __setFolderCB(tree, id, action, node) {
340 act = function() { action( node ); };