5 /* generic folder window class */
6 oilsRptSetSubClass('oilsRptFolderWindow', 'oilsRptObject');
7 function oilsRptFolderWindow(type, folderId) {
9 var node = oilsRptCurrentFolderManager.findNode(type, folderId);
10 this.selector = DOM.oils_rpt_folder_contents_selector;
11 this.folderNode = node;
16 oilsRptFolderWindow.prototype.draw = function() {
18 _debug(this.folderNode.folder.owner().id() + ' : ' + USER.id());
21 setSelector(DOM.oils_rpt_output_limit_selector, oilsRptOutputLimit);
22 DOM.oils_rpt_output_limit_redraw.onclick = function() {
23 oilsRptOutputLimit = getSelectorVal(DOM.oils_rpt_output_limit_selector);
27 if( this.folderNode.folder.owner().id() == USER.id() && this.type == 'template')
28 unHideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
29 else hideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
31 unHideMe(DOM.oils_rpt_folder_window_contents_div);
32 hideMe(DOM.oils_rpt_folder_manager_div);
33 hideMe(DOM.oils_rpt_top_folder);
35 DOM.oils_rpt_folder_window_manage_tab.onclick = function() {
36 unHideMe(DOM.oils_rpt_folder_window_contents_div);
37 hideMe(DOM.oils_rpt_folder_manager_div);
39 DOM.oils_rpt_folder_window_edit_tab.onclick = function() {
40 hideMe(DOM.oils_rpt_folder_window_contents_div);
41 unHideMe(DOM.oils_rpt_folder_manager_div);
44 this.setFolderEditActions();
46 hideMe(DOM.oils_rpt_template_folder_new_report);
47 unHideMe(DOM.oils_rpt_folder_table_right_td);
48 hideMe(DOM.oils_rpt_folder_table_alt_td);
49 this.drawFolderDetails();
51 DOM.oils_rpt_folder_content_action_go.onclick =
52 function() {obj.doFolderAction()}
54 this.fetchFolderData();
56 var sel = DOM.oils_rpt_folder_contents_action_selector;
58 for( var i = 0; i < sel.options.length; i++ ) {
59 var opt = sel.options[i];
60 if( opt.getAttribute('type') == this.type ) {
61 if(x) opt.selected = true;
67 sel.options[0].selected = true;
70 hideMe(DOM.oils_rpt_output_limit_selector.parentNode);
71 if( this.type == 'output' )
72 unHideMe(DOM.oils_rpt_output_limit_selector.parentNode);
75 this.drawEditActions();
78 oilsRptFolderWindow.prototype.drawEditActions = function() {
80 DOM.oils_rpt_folder_window_contents_new_template.onclick = function() {
81 var s = location.search+'';
82 s = s.replace(/\&folder=\d+/,'');
83 goTo( 'oils_rpt_builder.xhtml'+s+'&folder='+obj.folderNode.folder.id());
87 if( this.folderNode.folder.owner().id() != USER.id() )
88 hideMe(DOM.oils_rpt_folder_manager_tab_table);
90 unHideMe(DOM.oils_rpt_folder_manager_tab_table);
92 if( isTrue(this.folderNode.folder.shared())) {
93 DOM.oils_rpt_folder_manager_share_opt.disabled = true;
94 DOM.oils_rpt_folder_manager_unshare_opt.disabled = false;
96 DOM.oils_rpt_folder_manager_share_opt.disabled = false;
97 DOM.oils_rpt_folder_manager_unshare_opt.disabled = true;
100 this.hideFolderActions();
103 DOM.oils_rpt_folder_manager_actions_submit.onclick = function() {
104 var act = getSelectorVal(DOM.oils_rpt_folder_manager_actions);
105 _debug("doing folder action: " + act);
106 obj.hideFolderActions();
109 unHideMe(DOM.oils_rpt_folder_manager_change_name_div);
111 case 'create_sub_folder':
112 unHideMe(DOM.oils_rpt_folder_manager_create_sub);
113 obj.myOrgSelector = new oilsRptMyOrgsWidget(
114 DOM.oils_rpt_folder_manager_sub_lib_picker, USER.ws_ou());
115 obj.myOrgSelector.draw();
118 obj.doFolderDelete();
132 oilsRptFolderWindow.prototype.shareFolder = function() {
133 var folder = this.folderNode.folder;
134 if(isTrue(folder.shared()))
135 return alertId('oils_rpt_folder_already_shared');
136 unHideMe(DOM.oils_rpt_folder_manager_share_div);
138 var orgsel = new oilsRptMyOrgsWidget(
139 DOM.oils_rpt_folder_manager_share_lib_picker, USER.ws_ou());
142 var type = this.type;
143 DOM.oils_rpt_folder_manager_share_submit.onclick = function() {
145 folder.share_with(orgsel.getValue());
146 oilsRptUpdateFolder( folder, type,
149 oilsRptAlertSuccess();
150 oilsRptCurrentFolderManager.draw();
157 oilsRptFolderWindow.prototype.unShareFolder = function() {
158 var folder = this.folderNode.folder;
159 if(!isTrue(folder.shared()))
160 return alertId('oils_rpt_folder_already_unshared');
161 if(!confirmId('oils_rpt_folder_unshare_confirm')) return;
163 var type = this.type;
164 oilsRptUpdateFolder( folder, type,
167 oilsRptAlertSuccess();
168 oilsRptCurrentFolderManager.draw();
175 oilsRptFolderWindow.prototype.hideFolderActions = function() {
176 hideMe(DOM.oils_rpt_folder_manager_change_name_div);
177 hideMe(DOM.oils_rpt_folder_manager_create_sub);
178 hideMe(DOM.oils_rpt_folder_manager_share_div);
182 oilsRptFolderWindow.prototype.doFolderAction = function() {
183 var objs = this.fmTable.getSelected();
184 if( objs.length == 0 )
185 return alert('Please select an item from the list');
186 var action = getSelectorVal(DOM.oils_rpt_folder_contents_action_selector);
190 case 'create_report' :
191 hideMe(DOM.oils_rpt_folder_table_right_td);
192 unHideMe(DOM.oils_rpt_folder_table_alt_td);
193 unHideMe(DOM.oils_rpt_editor_div);
194 new oilsRptReportEditor(new oilsReport(objs[0]), this);
196 case 'delete_report' :
197 for(var r = 0; r < objs.length; r++)
198 this.deleteReport(objs[r]);
200 case 'delete_template' :
201 for(var r = 0; r < objs.length; r++)
202 this.deleteTemplate(objs[r]);
205 this.showOutput(objs[0]);
207 case 'delete_output':
208 this.deleteOutputs(objs,0,
210 oilsRptAlertSuccess();
220 oilsRptFolderWindow.prototype.deleteOutputs = function(list, idx, callback) {
221 if( idx >= list.length ) return callback();
222 var req = new Request(OILS_RPT_DELETE_SCHEDULE,SESSION,list[idx].id());
224 req.callback(function(){obj.deleteOutputs(list, ++idx, callback);});
228 oilsRptFolderWindow.prototype.showOutput = function(sched) {
229 oilsRptFetchReport(sched.report(),
231 var url = oilsRptBuildOutputLink(r.template(), r.id(), sched.id());
238 oilsRptFolderWindow.prototype.deleteReport = function(report) {
239 if(!confirmId('oils_rpt_folder_contents_confirm_report_delete')) return;
240 var req = new Request(OILS_RPT_DELETE_REPORT, SESSION, report.id());
243 var res = r.getResultObject();
245 oilsRptAlertSuccess();
246 oilsRptCurrentFolderManager.draw();
253 oilsRptFolderWindow.prototype.deleteTemplate = function(tmpl) {
254 var req0 = new Request( OILS_RPT_TEMPLATE_HAS_RPTS, SESSION, tmpl.id() );
257 var resp = r0.getResultObject();
259 return alertId('oils_rpt_folder_contents_template_no_delete');
260 if(!confirmId('oils_rpt_folder_contents_confirm_template_delete')) return;
261 var req = new Request(OILS_RPT_DELETE_TEMPLATE, SESSION, tmpl.id());
264 var res = r.getResultObject();
266 oilsRptAlertSuccess();
267 oilsRptCurrentFolderManager.draw();
279 oilsRptFolderWindow.prototype.drawFolderDetails = function() {
280 appendClear(DOM.oils_rpt_folder_creator_label,
281 text(this.folderNode.folder.owner().usrname()));
282 appendClear(DOM.oils_rpt_folder_name_label,
283 text(this.folderNode.folder.name()));
287 oilsRptFolderWindow.prototype.fetchFolderData = function(callback) {
288 removeChildren(this.selector);
289 var req = new Request(OILS_RPT_FETCH_FOLDER_DATA,
290 SESSION, this.type, this.folderNode.folder.id(), oilsRptOutputLimit);
292 if(this.type == 'output') {
293 req = new Request(OILS_RPT_FETCH_OUTPUT,
294 SESSION, this.folderNode.folder.id(), oilsRptOutputLimit);
298 removeChildren(obj.selector);
301 var res = r.getResultObject();
302 if( obj.type == 'output' ) {
303 obj.fleshSchedules(res, 0);
305 obj.fmTable = drawFMObjectTable(
310 selectColName : 'Select',
311 selectAllName : 'All',
312 selectNoneName : 'None'
322 oilsRptFolderWindow.prototype.fleshSchedules = function(list, idx) {
323 if( idx >= list.length ) {
324 this.fmTable = drawFMObjectTable(
326 dest : this.selector,
329 selectColName : 'Select',
330 selectAllName : 'All',
331 selectNoneName : 'None'
337 var sched = list[idx];
339 oilsRptFetchUser(sched.runner(),
342 oilsRptFetchReport(sched.report(),
344 sched.report(report);
345 oilsRptFetchTemplate(report.template(),
347 report.template(template);
348 obj.fleshSchedules(list, ++idx);
358 oilsRptFolderWindow.prototype.setSelected = function(folderNode) {
359 this.selectedFolder = folderNode;
362 oilsRptFolderWindow.prototype.setFolderEditActions = function() {
363 var folder = this.folderNode.folder;
366 DOM.oils_rpt_folder_manager_name_input.value = folder.name();
367 DOM.oils_rpt_folder_manager_change_name_submit.onclick = function() {
368 var name = DOM.oils_rpt_folder_manager_name_input.value;
371 if(confirmId('oils_rpt_folder_manager_change_name_confirm')) {
372 oilsRptUpdateFolder(folder, obj.type,
375 oilsRptAlertSuccess();
376 oilsRptCurrentFolderManager.draw();
384 DOM.oils_rpt_folder_manager_sub_lib_create.onclick = function() {
387 if( obj.type == 'report' ) folder = new rrf();
388 if( obj.type == 'template' ) folder = new rtf();
389 if( obj.type == 'output' ) folder = new rof();
391 folder.owner(USER.id());
392 folder.parent(obj.folderNode.folder.id());
393 folder.name(DOM.oils_rpt_folder_manager_sub_name.value);
394 var shared = getSelectorVal(DOM.oils_rpt_folder_manager_sub_shared);
395 folder.shared( (shared == 'yes') ? 't' : 'f');
396 if( folder.shared() == 't' )
397 folder.share_with( obj.myOrgSelector.getValue() );
399 oilsRptCreateFolder(folder, obj.type,
402 oilsRptAlertSuccess();
403 oilsRptCurrentFolderManager.draw();
411 oilsRptFolderWindow.prototype.doFolderDelete = function() {
413 var cache = oilsRptFolderNodeCache[this.type];
414 /* let's see if this folder has any children */
415 for( var c in cache )
416 if( cache[c].folder.parent() == this.folderNode.folder.id() )
417 return alertId('oils_rpt_folder_cannot_delete');
419 /* lets see if the folder has contents */
420 var req = new Request(OILS_RPT_FETCH_FOLDER_DATA,
421 SESSION, this.type, this.folderNode.folder.id(), 1);
423 if(this.type == 'output') {
424 req = new Request(OILS_RPT_FETCH_OUTPUT,
425 SESSION, this.folderNode.folder.id(), 1);
434 var contents = r.getResultObject();
435 if( contents.length > 0 )
436 return alertId('oils_rpt_folder_cannot_delete');
438 if( confirmId('oils_rpt_folder_manager_delete_confirm') ) {
439 var req2 = new Request(OILS_RPT_DELETE_FOLDER,
440 SESSION, obj.type, obj.folderNode.folder.id());
444 var res = r2.getResultObject();
446 oilsRptAlertSuccess();
447 oilsRptCurrentFolderManager.draw();
449 else alert('error: '+js2JSON(res));