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 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
173 req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
176 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
177 req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
180 var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
181 req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
186 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
191 for( var i = 0; i < folders.length; i++ ) {
193 var folder = folders[i];
194 var id = oilsNextId();
195 var node = { folder : folder, treeId : id };
197 oilsRptFolderNodeCache[type][folder.id()] = node;
198 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);
205 /* shared folders get a folder for the usrname of the
206 owner as the parent node for the folders in the tree */
207 if(!folder.parent() && folder.owner().id() != USER.id()) {
208 if(owners[folder.owner().id()]) {
209 node.ownerNode = owners[folder.owner().id()];
213 _debug("building usrname node "+type+" -> " +folder.owner().usrname());
215 var id = oilsNextId();
217 var tree = oilsRptSharedTemplateFolderTree;
218 var treename = 'oilsRptSharedTemplateFolderTree';
221 tree = oilsRptSharedReportFolderTree;
222 treename = 'oilsRptSharedReportFolderTree';
227 tree = oilsRptSharedOutputFolderTree;
228 treename = 'oilsRptSharedOutputFolderTree';
232 tree.addNode(id, pid, folder.owner().usrname());
234 owners[folder.owner().id()] = id;
239 for( var i = 0; i < folders.length; i++ ) {
242 var folder = folders[i];
243 var mine = (folder.owner().id() == USER.id());
250 tree = oilsRptTemplateFolderTree;
251 treename = 'oilsRptTemplateFolderTree';
254 tree = oilsRptSharedTemplateFolderTree;
255 treename = 'oilsRptSharedTemplateFolderTree';
261 tree = oilsRptTemplateFolderTree;
262 treename = 'oilsRptTemplateFolderTree';
265 tree = oilsRptSharedTemplateFolderTree;
266 treename = 'oilsRptSharedTemplateFolderTree';
272 tree = oilsRptTemplateFolderTree;
273 treename = 'oilsRptTemplateFolderTree';
276 tree = oilsRptSharedTemplateFolderTree;
277 treename = 'oilsRptSharedTemplateFolderTree';
282 node = this.findNode(type, folder.id());
284 if( folder.parent() )
285 pid = this.findNode(type, folder.parent()).treeId;
287 var fname = folder.name();
290 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
291 if( node.ownerNode ) pid = node.ownerNode;
294 if(isTrue(folder.shared()))
295 fname = folder.name() + ' ('+folder.share_with().shortname()+')';
298 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();';
301 _debug('adding node '+fname+' id = ' + id + ' pid = '
302 +pid + ' parent = ' + folder.parent() + ' folder-window = ' + node.folderWindow.id );
305 tree.addNode(id, pid, fname, action);
311 oilsRptFolderManager.prototype.findNode = function(type, id) {
312 return oilsRptFolderNodeCache[type][id];
320 /* this only works if the initial folder tree has been drawn
321 if defined, "action" must be a function pointer that takes the
322 folder node as the param */
324 function oilsRptBuildFolder(type, node, treeVar, rootName, action, shared) {
325 removeChildren(node);
326 var tree = new SlimTree(node, treeVar);
327 this.treeId = oilsNextId();
328 tree.addNode(this.treeId, -1, rootName);
330 __someid = oilsNextId();
332 var cache = oilsRptFolderNodeCache[type];
334 for( var c in cache ) {
335 var tid = cache[c].treeId + __someid;
336 var pid = this.treeId;
337 var f = cache[c].folder;
339 if( !shared && (f.owner().id() != USER.id()) ) continue;
342 /* find the parent's tree id so we can latch on to it */
343 var pnode = cache[f.parent()];
344 var pid = pnode.treeId + __someid;
347 tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
349 eval(treeVar +' = tree;');
352 function __setFolderCB(tree, id, action, node) {
355 act = function() { action( node ); };