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) {
181 for( var i = 0; i < folders.length; i++ ) {
183 var folder = folders[i];
184 var id = oilsNextId();
185 var node = { folder : folder, treeId : id };
187 oilsRptFolderNodeCache[type][folder.id()] = node;
188 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
191 _debug("creating folder node for "+folder.name()+" : id = "+
192 folder.id()+' treeId = '+id + ' window id = ' + node.folderWindow.id);
195 /* shared folders get a folder for the usrname of the
196 owner as the parent node for the folders in the tree */
197 if(!folder.parent() && folder.owner().id() != USER.id()) {
198 if(owners[folder.owner().id()]) {
199 node.ownerNode = owners[folder.owner().id()];
203 _debug("building usrname node "+type+" -> " +folder.owner().usrname());
205 var id = oilsNextId();
207 var tree = oilsRptSharedTemplateFolderTree;
208 var treename = 'oilsRptSharedTemplateFolderTree';
211 tree = oilsRptSharedReportFolderTree;
212 treename = 'oilsRptSharedReportFolderTree';
217 tree = oilsRptSharedOutputFolderTree;
218 treename = 'oilsRptSharedOutputFolderTree';
222 tree.addNode(id, pid, folder.owner().usrname());
224 owners[folder.owner().id()] = id;
229 for( var i = 0; i < folders.length; i++ ) {
232 var folder = folders[i];
233 var mine = (folder.owner().id() == USER.id());
240 tree = oilsRptTemplateFolderTree;
241 treename = 'oilsRptTemplateFolderTree';
244 tree = oilsRptSharedTemplateFolderTree;
245 treename = 'oilsRptSharedTemplateFolderTree';
251 tree = oilsRptTemplateFolderTree;
252 treename = 'oilsRptTemplateFolderTree';
255 tree = oilsRptSharedTemplateFolderTree;
256 treename = 'oilsRptSharedTemplateFolderTree';
262 tree = oilsRptTemplateFolderTree;
263 treename = 'oilsRptTemplateFolderTree';
266 tree = oilsRptSharedTemplateFolderTree;
267 treename = 'oilsRptSharedTemplateFolderTree';
272 node = this.findNode(type, folder.id());
274 if( folder.parent() )
275 pid = this.findNode(type, folder.parent()).treeId;
277 var fname = folder.name();
280 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
281 if( node.ownerNode ) pid = node.ownerNode;
284 if(isTrue(folder.shared()))
285 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
288 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();';
291 _debug('adding node '+fname+' id = ' + id + ' pid = '
292 +pid + ' parent = ' + folder.parent() + ' folder-window = ' + node.folderWindow.id );
295 tree.addNode(id, pid, fname, action);
301 oilsRptFolderManager.prototype.findNode = function(type, id) {
302 return oilsRptFolderNodeCache[type][id];
310 /* this only works if the initial folder tree has been drawn
311 if defined, "action" must be a function pointer that takes the
312 folder node as the param */
314 function oilsRptBuildFolder(type, node, treeVar, rootName, action, shared) {
315 removeChildren(node);
316 var tree = new SlimTree(node, treeVar);
317 this.treeId = oilsNextId();
318 tree.addNode(this.treeId, -1, rootName);
320 __someid = oilsNextId();
322 var cache = oilsRptFolderNodeCache[type];
324 for( var c in cache ) {
325 var tid = cache[c].treeId + __someid;
326 var pid = this.treeId;
327 var f = cache[c].folder;
329 if( !shared && (f.owner().id() != USER.id()) ) continue;
332 /* find the parent's tree id so we can latch on to it */
333 var pnode = cache[f.parent()];
334 var pid = pnode.treeId + __someid;
337 tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
339 eval(treeVar +' = tree;');
342 function __setFolderCB(tree, id, action, node) {
345 act = function() { action( node ); };