1 dojo.requireLocalization("openils.reports", "reports");
3 var rpt_strings = dojo.i18n.getLocalization("openils.reports", "reports");
5 var oilsRptFolderNodeCache = {};
6 oilsRptFolderNodeCache.template = {};
7 oilsRptFolderNodeCache.report = {};
8 oilsRptFolderNodeCache.output = {};
10 oilsRptSetSubClass('oilsRptFolderManager','oilsRptObject');
12 function oilsRptFolderManager() { this.init(); }
14 oilsRptFolderManager.prototype.draw = function(auth) {
16 if(!auth) auth = SESSION;
19 this.tId = oilsNextId();
20 this.rId = oilsNextId();
21 this.oId = oilsNextId();
22 this.stId = oilsNextId();
23 this.srId = oilsNextId();
24 this.soId = oilsNextId();
26 this.ownerFolders = {};
27 this.ownerFolders.template = {};
28 this.ownerFolders.report = {};
29 this.ownerFolders.output = {};
31 removeChildren(DOM.oils_rpt_template_folder_tree);
32 removeChildren(DOM.oils_rpt_report_folder_tree);
33 removeChildren(DOM.oils_rpt_output_folder_tree);
34 removeChildren(DOM.oils_rpt_template_shared_folder_tree);
35 removeChildren(DOM.oils_rpt_report_shared_folder_tree);
36 removeChildren(DOM.oils_rpt_output_shared_folder_tree);
38 var porg = PERMS.SHARE_REPORT_FOLDER;
40 DOM.oils_rpt_top_folder_shared.disabled = true;
43 var orgsel = new oilsRptMyOrgsWidget(
44 DOM.oils_rpt_top_folder_lib_picker, USER.ws_ou(), porg)
47 oilsRptTemplateFolderTree =
49 DOM.oils_rpt_template_folder_tree,
50 'oilsRptTemplateFolderTree');
51 //'images/template-page.gif');
53 oilsRptTemplateFolderTree.addNode(this.tId, -1, rpt_strings.FOLDERS_TEMPLATES,
55 unHideMe(DOM.oils_rpt_folder_table_alt_td);
56 unHideMe(DOM.oils_rpt_top_folder);
57 hideMe(DOM.oils_rpt_editor_div);
58 appendClear(DOM.oils_rpt_top_folder_type,text(rpt_strings.FOLDERS_TEMPLATE));
59 hideMe(DOM.oils_rpt_folder_table_right_td);
60 DOM.oils_rpt_top_folder_create.onclick = function() {
61 obj.createTopFolder('template', orgsel);
66 oilsRptReportFolderTree =
68 DOM.oils_rpt_report_folder_tree,
69 'oilsRptReportFolderTree');
70 //'images/report-page.gif');
73 oilsRptReportFolderTree.addNode(this.rId, -1, rpt_strings.FOLDERS_REPORTS,
75 unHideMe(DOM.oils_rpt_folder_table_alt_td);
76 unHideMe(DOM.oils_rpt_top_folder);
77 hideMe(DOM.oils_rpt_editor_div);
78 hideMe(DOM.oils_rpt_folder_table_right_td);
79 appendClear(DOM.oils_rpt_top_folder_type,text(rpt_strings.FOLDERS_REPORT));
80 DOM.oils_rpt_top_folder_create.onclick = function() {
81 obj.createTopFolder('report', orgsel);
88 oilsRptOutputFolderTree =
90 DOM.oils_rpt_output_folder_tree,
91 'oilsRptOutputFolderTree');
92 //'images/output-page.gif');
94 oilsRptOutputFolderTree.addNode(this.oId, -1, rpt_strings.FOLDERS_OUTPUT,
96 unHideMe(DOM.oils_rpt_folder_table_alt_td);
97 unHideMe(DOM.oils_rpt_top_folder);
98 hideMe(DOM.oils_rpt_editor_div);
99 hideMe(DOM.oils_rpt_folder_table_right_td);
100 appendClear(DOM.oils_rpt_top_folder_type,text(rpt_strings.FOLDERS_OUTPUT));
101 DOM.oils_rpt_top_folder_create.onclick = function() {
102 obj.createTopFolder('output', orgsel);
108 oilsRptSharedTemplateFolderTree =
110 DOM.oils_rpt_template_shared_folder_tree,
111 'oilsRptSharedTemplateFolderTree');
112 //'images/template-page.gif');
114 oilsRptSharedTemplateFolderTree.addNode(this.stId, -1, rpt_strings.FOLDERS_TEMPLATES)
117 oilsRptSharedReportFolderTree =
119 DOM.oils_rpt_report_shared_folder_tree,
120 'oilsRptSharedReportFolderTree');
121 //'images/report-page.gif');
123 oilsRptSharedReportFolderTree.addNode(this.srId, -1, rpt_strings.FOLDERS_REPORTS)
125 oilsRptSharedOutputFolderTree =
127 DOM.oils_rpt_output_shared_folder_tree,
128 'oilsRptSharedOutputFolderTree');
129 //'images/output-page.gif');
131 oilsRptSharedOutputFolderTree.addNode(this.soId, -1, rpt_strings.FOLDERS_OUTPUT)
133 this.fetchFolders(auth);
136 oilsRptFolderManager.prototype.createTopFolder = function(type, orgsel) {
138 if( type == 'report' ) folder = new rrf();
139 if( type == 'template' ) folder = new rtf();
140 if( type == 'output' ) folder = new rof();
142 folder.owner(USER.id());
145 /* Protect against empty folder names */
146 if (!DOM.oils_rpt_top_folder_name.value) {
150 folder.name(DOM.oils_rpt_top_folder_name.value);
151 folder.shared(getSelectorVal(DOM.oils_rpt_top_folder_shared));
153 if( folder.shared() == 't' )
154 folder.share_with( orgsel.getValue() );
156 oilsRptCreateFolder(folder, type,
159 oilsRptAlertSuccess();
160 oilsRptCurrentFolderManager.draw();
161 hideMe(DOM.oils_rpt_top_folder);
162 hideMe(DOM.oils_rpt_folder_table_alt_td);
163 unHideMe(DOM.oils_rpt_editor_div);
170 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
172 if(PERMS.RUN_REPORTS != -1) {
173 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
174 req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
177 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
178 req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
182 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
183 req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
188 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
193 for( var i = 0; i < folders.length; i++ ) {
195 var folder = folders[i];
196 var id = oilsNextId();
197 var node = { folder : folder, treeId : id };
199 oilsRptFolderNodeCache[type][folder.id()] = node;
200 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
203 _debug("creating folder node for "+folder.name()+" : id = "+
204 folder.id()+' treeId = '+id + ' window id = ' + node.folderWindow.id);
207 /* shared folders get a folder for the usrname of the
208 owner as the parent node for the folders in the tree */
209 if(!folder.parent() && folder.owner().id() != USER.id()) {
210 if(owners[folder.owner().id()]) {
211 node.ownerNode = owners[folder.owner().id()];
215 _debug("building usrname node "+type+" -> " +folder.owner().usrname());
217 var id = oilsNextId();
219 var tree = oilsRptSharedTemplateFolderTree;
220 var treename = 'oilsRptSharedTemplateFolderTree';
223 tree = oilsRptSharedReportFolderTree;
224 treename = 'oilsRptSharedReportFolderTree';
229 tree = oilsRptSharedOutputFolderTree;
230 treename = 'oilsRptSharedOutputFolderTree';
234 tree.addNode(id, pid, folder.owner().usrname());
236 owners[folder.owner().id()] = id;
241 for( var i = 0; i < folders.length; i++ ) {
244 var folder = folders[i];
245 var mine = (folder.owner().id() == USER.id());
252 tree = oilsRptTemplateFolderTree;
253 treename = 'oilsRptTemplateFolderTree';
256 tree = oilsRptSharedTemplateFolderTree;
257 treename = 'oilsRptSharedTemplateFolderTree';
263 tree = oilsRptTemplateFolderTree;
264 treename = 'oilsRptTemplateFolderTree';
267 tree = oilsRptSharedTemplateFolderTree;
268 treename = 'oilsRptSharedTemplateFolderTree';
274 tree = oilsRptTemplateFolderTree;
275 treename = 'oilsRptTemplateFolderTree';
278 tree = oilsRptSharedTemplateFolderTree;
279 treename = 'oilsRptSharedTemplateFolderTree';
284 node = this.findNode(type, folder.id());
286 if( folder.parent() )
287 pid = this.findNode(type, folder.parent()).treeId;
289 var fname = folder.name();
292 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
293 if( node.ownerNode ) pid = node.ownerNode;
296 if(isTrue(folder.shared()))
297 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
300 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();';
303 _debug('adding node '+fname+' id = ' + id + ' pid = '
304 +pid + ' parent = ' + folder.parent() + ' folder-window = ' + node.folderWindow.id );
307 tree.addNode(id, pid, fname, action);
313 oilsRptFolderManager.prototype.findNode = function(type, id) {
314 return oilsRptFolderNodeCache[type][id];
322 /* this only works if the initial folder tree has been drawn
323 if defined, "action" must be a function pointer that takes the
324 folder node as the param
326 eachFolder - optional callback called with each folder
327 node after its added to the folder list.
330 function oilsRptBuildFolder(type, node, treeVar, rootName, action, shared, eachFolder) {
331 removeChildren(node);
332 var tree = new SlimTree(node, treeVar);
333 this.treeId = oilsNextId();
334 tree.addNode(this.treeId, -1, rootName);
336 __someid = oilsNextId();
338 var cache = oilsRptFolderNodeCache[type];
340 for( var c in cache ) {
341 var tid = cache[c].treeId + __someid;
342 var pid = this.treeId;
343 var f = cache[c].folder;
345 if( !shared && (f.owner().id() != USER.id()) ) continue;
348 /* find the parent's tree id so we can latch on to it */
349 var pnode = cache[f.parent()];
350 var pid = pnode.treeId + __someid;
353 tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
355 if (eachFolder) eachFolder(cache[c]);
357 eval(treeVar +' = tree;');
360 function __setFolderCB(tree, id, action, node) {
363 act = function() { action( node ); };