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 var porg = PERMS.SHARE_REPORT_FOLDER;
36 DOM.oils_rpt_top_folder_shared.disabled = true;
39 var orgsel = new oilsRptMyOrgsWidget(
40 DOM.oils_rpt_top_folder_lib_picker, USER.ws_ou(), porg)
43 oilsRptTemplateFolderTree =
45 DOM.oils_rpt_template_folder_tree,
46 'oilsRptTemplateFolderTree');
47 //'images/template-page.gif');
49 oilsRptTemplateFolderTree.addNode(this.tId, -1, 'Templates',
51 unHideMe(DOM.oils_rpt_folder_table_alt_td);
52 unHideMe(DOM.oils_rpt_top_folder);
53 hideMe(DOM.oils_rpt_editor_div);
54 appendClear(DOM.oils_rpt_top_folder_type,text('Template'));
55 hideMe(DOM.oils_rpt_folder_table_right_td);
56 DOM.oils_rpt_top_folder_create.onclick = function() {
57 obj.createTopFolder('template', orgsel);
62 oilsRptReportFolderTree =
64 DOM.oils_rpt_report_folder_tree,
65 'oilsRptReportFolderTree');
66 //'images/report-page.gif');
69 oilsRptReportFolderTree.addNode(this.rId, -1, 'Reports',
71 unHideMe(DOM.oils_rpt_folder_table_alt_td);
72 unHideMe(DOM.oils_rpt_top_folder);
73 hideMe(DOM.oils_rpt_editor_div);
74 hideMe(DOM.oils_rpt_folder_table_right_td);
75 appendClear(DOM.oils_rpt_top_folder_type,text('Report'));
76 DOM.oils_rpt_top_folder_create.onclick = function() {
77 obj.createTopFolder('report', orgsel);
84 oilsRptOutputFolderTree =
86 DOM.oils_rpt_output_folder_tree,
87 'oilsRptOutputFolderTree');
88 //'images/output-page.gif');
90 oilsRptOutputFolderTree.addNode(this.oId, -1, 'Output',
92 unHideMe(DOM.oils_rpt_folder_table_alt_td);
93 unHideMe(DOM.oils_rpt_top_folder);
94 hideMe(DOM.oils_rpt_editor_div);
95 hideMe(DOM.oils_rpt_folder_table_right_td);
96 appendClear(DOM.oils_rpt_top_folder_type,text('Output'));
97 DOM.oils_rpt_top_folder_create.onclick = function() {
98 obj.createTopFolder('output', orgsel);
104 oilsRptSharedTemplateFolderTree =
106 DOM.oils_rpt_template_shared_folder_tree,
107 'oilsRptSharedTemplateFolderTree');
108 //'images/template-page.gif');
110 oilsRptSharedTemplateFolderTree.addNode(this.stId, -1, 'Templates')
113 oilsRptSharedReportFolderTree =
115 DOM.oils_rpt_report_shared_folder_tree,
116 'oilsRptSharedReportFolderTree');
117 //'images/report-page.gif');
119 oilsRptSharedReportFolderTree.addNode(this.srId, -1, 'Reports')
121 oilsRptSharedOutputFolderTree =
123 DOM.oils_rpt_output_shared_folder_tree,
124 'oilsRptSharedOutputFolderTree');
125 //'images/output-page.gif');
127 oilsRptSharedOutputFolderTree.addNode(this.soId, -1, 'Output')
129 this.fetchFolders(auth);
132 oilsRptFolderManager.prototype.createTopFolder = function(type, orgsel) {
134 if( type == 'report' ) folder = new rrf();
135 if( type == 'template' ) folder = new rtf();
136 if( type == 'output' ) folder = new rof();
138 folder.owner(USER.id());
140 folder.name(DOM.oils_rpt_top_folder_name.value);
141 folder.shared(getSelectorVal(DOM.oils_rpt_top_folder_shared));
143 if( folder.shared() == 't' )
144 folder.share_with( orgsel.getValue() );
146 oilsRptCreateFolder(folder, type,
149 oilsRptAlertSuccess();
150 oilsRptCurrentFolderManager.draw();
151 hideMe(DOM.oils_rpt_top_folder);
152 hideMe(DOM.oils_rpt_folder_table_alt_td);
153 unHideMe(DOM.oils_rpt_editor_div);
160 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
162 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
163 req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
166 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
167 req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
170 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
171 req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
176 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
179 folders = folders.sort(
181 var asw = a.share_with();
182 var bsw = b.share_with();
183 if( asw ) asw = findOrgDepth(findOrgUnit(asw.id()));
185 if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw.id()));
187 if( asw < bsw ) return 1;
188 if( asw > bsw ) return -1;
194 for( var i = 0; i < folders.length; i++ ) {
195 var folder = folders[i];
196 var id = oilsNextId();
197 var node = { folder : folder, treeId : id };
198 oilsRptFolderNodeCache[type][folder.id()] = node;
199 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
201 _debug("creating folder node for "+folder.name()+" : id = "+
202 folder.id()+' treeId = '+id + ' window id = ' + node.folderWindow.id);
207 for( var i = 0; i < folders.length; i++ ) {
209 var folder = folders[i];
210 var mine = (folder.owner().id() == USER.id());
217 tree = oilsRptTemplateFolderTree;
218 treename = 'oilsRptTemplateFolderTree';
221 tree = oilsRptSharedTemplateFolderTree;
222 treename = 'oilsRptSharedTemplateFolderTree';
228 tree = oilsRptTemplateFolderTree;
229 treename = 'oilsRptTemplateFolderTree';
232 tree = oilsRptSharedTemplateFolderTree;
233 treename = 'oilsRptSharedTemplateFolderTree';
239 tree = oilsRptTemplateFolderTree;
240 treename = 'oilsRptTemplateFolderTree';
243 tree = oilsRptSharedTemplateFolderTree;
244 treename = 'oilsRptSharedTemplateFolderTree';
249 node = this.findNode(type, folder.id());
251 if( folder.parent() )
252 pid = this.findNode(type, folder.parent()).treeId;
256 if(!this.orgTrail[type][folder.share_with().id()]) {
257 tree.addNode(id, pid, folder.share_with().shortname());
261 this.orgTrail[type][folder.share_with().id()] = pid;
263 pid = this.orgTrail[type][folder.share_with().id()];
269 var fname = folder.name();
272 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
273 if(!this.ownerFolders[type][folder.owner().id()]) {
274 tree.addNode(id, pid, folder.owner().usrname());
278 this.ownerFolders[type][folder.owner().id()] = pid;
280 pid = this.ownerFolders[type][folder.owner().id()];
284 if(isTrue(folder.shared()))
285 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
288 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();';
290 _debug('adding node '+fname+' id = ' + id + ' pid = '
291 +pid + ' parent = ' + folder.parent() + ' folder-window = ' + node.folderWindow.id );
294 tree.addNode(id, pid, fname, action);
300 oilsRptFolderManager.prototype.findNode = function(type, id) {
301 return oilsRptFolderNodeCache[type][id];
309 /* this only works if the initial folder tree has been drawn
310 if defined, "action" must be a function pointer that takes the
311 folder node as the param */
313 function oilsRptBuildFolder(type, node, treeVar, rootName, action, shared) {
314 removeChildren(node);
315 var tree = new SlimTree(node, treeVar);
316 this.treeId = oilsNextId();
317 tree.addNode(this.treeId, -1, rootName);
319 __someid = oilsNextId();
321 var cache = oilsRptFolderNodeCache[type];
323 for( var c in cache ) {
324 var tid = cache[c].treeId + __someid;
325 var pid = this.treeId;
326 var f = cache[c].folder;
328 if( !shared && (f.owner().id() != USER.id()) ) continue;
331 /* find the parent's tree id so we can latch on to it */
332 var pnode = cache[f.parent()];
333 var pid = pnode.treeId + __someid;
336 tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
338 eval(treeVar +' = tree;');
341 function __setFolderCB(tree, id, action, node) {
344 act = function() { action( node ); };