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 if(confirm(DOM.oils_rpt_folder_manager_new_confirm.innerHTML + ' "'+folder.name()+'"')) {
143 oilsRptCreateFolder(folder, type,
146 oilsRptAlertSuccess();
147 oilsRptCurrentFolderManager.draw();
148 hideMe(DOM.oils_rpt_top_folder);
149 hideMe(DOM.oils_rpt_folder_table_alt_td);
150 unHideMe(DOM.oils_rpt_editor_div);
158 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
160 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
161 req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
164 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
165 req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
168 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
169 req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
174 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
177 folders = folders.sort(
179 var asw = a.share_with();
180 var bsw = b.share_with();
181 if( asw ) asw = findOrgDepth(findOrgUnit(asw.id()));
183 if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw.id()));
185 if( asw < bsw ) return 1;
186 if( asw > bsw ) return -1;
192 for( var i = 0; i < folders.length; i++ ) {
193 var folder = folders[i];
194 var id = oilsNextId();
195 var node = { folder : folder, treeId : id };
196 oilsRptFolderNodeCache[type][folder.id()] = node;
197 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
199 _debug("creating folder node for "+folder.name()+" : id = "+
200 folder.id()+' treeId = '+id + ' window id = ' + node.folderWindow.id);
205 for( var i = 0; i < folders.length; i++ ) {
207 var folder = folders[i];
208 var mine = (folder.owner().id() == USER.id());
215 tree = oilsRptTemplateFolderTree;
216 treename = 'oilsRptTemplateFolderTree';
219 tree = oilsRptSharedTemplateFolderTree;
220 treename = 'oilsRptSharedTemplateFolderTree';
226 tree = oilsRptTemplateFolderTree;
227 treename = 'oilsRptTemplateFolderTree';
230 tree = oilsRptSharedTemplateFolderTree;
231 treename = 'oilsRptSharedTemplateFolderTree';
237 tree = oilsRptTemplateFolderTree;
238 treename = 'oilsRptTemplateFolderTree';
241 tree = oilsRptSharedTemplateFolderTree;
242 treename = 'oilsRptSharedTemplateFolderTree';
247 node = this.findNode(type, folder.id());
249 if( folder.parent() )
250 pid = this.findNode(type, folder.parent()).treeId;
254 if(!this.orgTrail[type][folder.share_with().id()]) {
255 tree.addNode(id, pid, folder.share_with().shortname());
259 this.orgTrail[type][folder.share_with().id()] = pid;
261 pid = this.orgTrail[type][folder.share_with().id()];
267 var fname = folder.name();
270 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
271 if(!this.ownerFolders[type][folder.owner().id()]) {
272 tree.addNode(id, pid, folder.owner().usrname());
276 this.ownerFolders[type][folder.owner().id()] = pid;
278 pid = this.ownerFolders[type][folder.owner().id()];
282 if(isTrue(folder.shared()))
283 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
286 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();';
288 _debug('adding node '+fname+' id = ' + id + ' pid = '
289 +pid + ' parent = ' + folder.parent() + ' folder-window = ' + node.folderWindow.id );
292 tree.addNode(id, pid, fname, action);
298 oilsRptFolderManager.prototype.findNode = function(type, id) {
299 return oilsRptFolderNodeCache[type][id];
307 /* this only works if the initial folder tree has been drawn
308 if defined, "action" must be a function pointer that takes the
309 folder node as the param */
311 function oilsRptBuildFolder(type, node, treeVar, rootName, action) {
312 removeChildren(node);
313 var tree = new SlimTree(node, treeVar);
314 this.treeId = oilsNextId();
315 tree.addNode(this.treeId, -1, rootName);
317 __someid = oilsNextId();
319 var cache = oilsRptFolderNodeCache[type];
321 for( var c in cache ) {
322 var tid = cache[c].treeId + __someid;
323 var pid = this.treeId;
324 var f = cache[c].folder;
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 ); };