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);
23 DOM.oils_rpt_output_limit_selector.onchange = function() {
24 oilsRptOutputLimit = getSelectorVal(DOM.oils_rpt_output_limit_selector);
29 if( this.folderNode.folder.owner().id() == USER.id() && this.type == 'template')
30 unHideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
31 else hideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
33 unHideMe(DOM.oils_rpt_folder_window_contents_div);
34 hideMe(DOM.oils_rpt_folder_manager_div);
35 hideMe(DOM.oils_rpt_top_folder);
37 DOM.oils_rpt_folder_window_manage_tab.onclick = function() {
38 unHideMe(DOM.oils_rpt_folder_window_contents_div);
39 hideMe(DOM.oils_rpt_folder_manager_div);
41 DOM.oils_rpt_folder_window_edit_tab.onclick = function() {
42 hideMe(DOM.oils_rpt_folder_window_contents_div);
43 unHideMe(DOM.oils_rpt_folder_manager_div);
46 this.setFolderEditActions();
48 hideMe(DOM.oils_rpt_template_folder_new_report);
49 unHideMe(DOM.oils_rpt_folder_table_right_td);
50 hideMe(DOM.oils_rpt_folder_table_alt_td);
51 this.drawFolderDetails();
53 DOM.oils_rpt_folder_content_action_go.onclick =
54 function() {obj.doFolderAction()}
56 this.fetchFolderData();
58 var sel = DOM.oils_rpt_folder_contents_action_selector;
60 for( var i = 0; i < sel.options.length; i++ ) {
61 var opt = sel.options[i];
62 if( opt.getAttribute('type') == this.type ) {
63 if(x) opt.selected = true;
69 sel.options[0].selected = true;
72 hideMe(DOM.oils_rpt_output_limit_selector.parentNode);
73 if( this.type == 'output' )
74 unHideMe(DOM.oils_rpt_output_limit_selector.parentNode);
77 this.drawEditActions();
80 oilsRptFolderWindow.prototype.drawEditActions = function() {
82 DOM.oils_rpt_folder_window_contents_new_template.onclick = function() {
83 var s = location.search+'';
84 s = s.replace(/\&folder=\d+/,'');
85 goTo( 'oils_rpt_builder.xhtml'+s+'&folder='+obj.folderNode.folder.id());
89 if( this.folderNode.folder.owner().id() != USER.id() )
90 hideMe(DOM.oils_rpt_folder_manager_tab_table);
92 unHideMe(DOM.oils_rpt_folder_manager_tab_table);
94 if( isTrue(this.folderNode.folder.shared())) {
95 DOM.oils_rpt_folder_manager_share_opt.disabled = true;
96 DOM.oils_rpt_folder_manager_unshare_opt.disabled = false;
98 DOM.oils_rpt_folder_manager_share_opt.disabled = false;
99 DOM.oils_rpt_folder_manager_unshare_opt.disabled = true;
102 this.hideFolderActions();
105 DOM.oils_rpt_folder_manager_actions_submit.onclick = function() {
106 var act = getSelectorVal(DOM.oils_rpt_folder_manager_actions);
107 _debug("doing folder action: " + act);
108 obj.hideFolderActions();
111 unHideMe(DOM.oils_rpt_folder_manager_change_name_div);
113 case 'create_sub_folder':
114 unHideMe(DOM.oils_rpt_folder_manager_create_sub);
115 obj.myOrgSelector = new oilsRptMyOrgsWidget(
116 DOM.oils_rpt_folder_manager_sub_lib_picker, USER.ws_ou());
117 obj.myOrgSelector.draw();
120 obj.doFolderDelete();
134 oilsRptFolderWindow.prototype.shareFolder = function() {
135 var folder = this.folderNode.folder;
136 if(isTrue(folder.shared()))
137 return alertId('oils_rpt_folder_already_shared');
138 unHideMe(DOM.oils_rpt_folder_manager_share_div);
140 var orgsel = new oilsRptMyOrgsWidget(
141 DOM.oils_rpt_folder_manager_share_lib_picker, USER.ws_ou());
144 var type = this.type;
145 DOM.oils_rpt_folder_manager_share_submit.onclick = function() {
147 folder.share_with(orgsel.getValue());
148 oilsRptUpdateFolder( folder, type,
151 oilsRptAlertSuccess();
152 oilsRptCurrentFolderManager.draw();
159 oilsRptFolderWindow.prototype.unShareFolder = function() {
160 var folder = this.folderNode.folder;
161 if(!isTrue(folder.shared()))
162 return alertId('oils_rpt_folder_already_unshared');
163 if(!confirmId('oils_rpt_folder_unshare_confirm')) return;
165 var type = this.type;
166 oilsRptUpdateFolder( folder, type,
169 oilsRptAlertSuccess();
170 oilsRptCurrentFolderManager.draw();
177 oilsRptFolderWindow.prototype.hideFolderActions = function() {
178 hideMe(DOM.oils_rpt_folder_manager_change_name_div);
179 hideMe(DOM.oils_rpt_folder_manager_create_sub);
180 hideMe(DOM.oils_rpt_folder_manager_share_div);
184 oilsRptFolderWindow.prototype.doFolderAction = function() {
185 var objs = this.fmTable.getSelected();
186 if( objs.length == 0 )
187 return alert('Please select an item from the list');
188 var action = getSelectorVal(DOM.oils_rpt_folder_contents_action_selector);
192 case 'create_report' :
193 hideMe(DOM.oils_rpt_folder_table_right_td);
194 unHideMe(DOM.oils_rpt_folder_table_alt_td);
195 unHideMe(DOM.oils_rpt_editor_div);
196 new oilsRptReportEditor(new oilsReport(objs[0]), this);
198 case 'delete_report' :
199 for(var r = 0; r < objs.length; r++)
200 this.deleteReport(objs[r]);
202 case 'delete_template' :
203 for(var r = 0; r < objs.length; r++)
204 this.deleteTemplate(objs[r]);
207 this.showOutput(objs[0]);
209 case 'delete_output':
210 for( var i = 0; i < objs.length; i++ ) {
211 if( objs[i].runner().id() != USER.id() )
212 return alertId('oils_rpt_folder_contents_no_delete');
214 this.deleteOutputs(objs,0,
216 oilsRptAlertSuccess();
226 oilsRptFolderWindow.prototype.deleteOutputs = function(list, idx, callback) {
227 if( idx >= list.length ) return callback();
228 var req = new Request(OILS_RPT_DELETE_SCHEDULE,SESSION,list[idx].id());
230 req.callback(function(){obj.deleteOutputs(list, ++idx, callback);});
234 oilsRptFolderWindow.prototype.showOutput = function(sched) {
235 oilsRptFetchReport(sched.report(),
237 var url = oilsRptBuildOutputLink(r.template(), r.id(), sched.id());
244 oilsRptFolderWindow.prototype.deleteReport = function(report) {
245 if( report.owner().id() != USER.id() )
246 return alertId('oils_rpt_folder_contents_no_delete');
247 if(!confirmId('oils_rpt_folder_contents_confirm_report_delete')) return;
248 var req = new Request(OILS_RPT_DELETE_REPORT, SESSION, report.id());
251 var res = r.getResultObject();
253 oilsRptAlertSuccess();
254 oilsRptCurrentFolderManager.draw();
261 oilsRptFolderWindow.prototype.deleteTemplate = function(tmpl) {
262 if( tmpl.owner().id() != USER.id() )
263 return alertId('oils_rpt_folder_contents_no_delete');
264 var req0 = new Request( OILS_RPT_TEMPLATE_HAS_RPTS, SESSION, tmpl.id() );
267 var resp = r0.getResultObject();
269 return alertId('oils_rpt_folder_contents_template_no_delete');
270 if(!confirmId('oils_rpt_folder_contents_confirm_template_delete')) return;
271 var req = new Request(OILS_RPT_DELETE_TEMPLATE, SESSION, tmpl.id());
274 var res = r.getResultObject();
276 oilsRptAlertSuccess();
277 oilsRptCurrentFolderManager.draw();
289 oilsRptFolderWindow.prototype.drawFolderDetails = function() {
290 appendClear(DOM.oils_rpt_folder_creator_label,
291 text(this.folderNode.folder.owner().usrname()));
292 appendClear(DOM.oils_rpt_folder_name_label,
293 text(this.folderNode.folder.name()));
297 oilsRptFolderWindow.prototype.fetchFolderData = function(callback) {
298 removeChildren(this.selector);
299 var req = new Request(OILS_RPT_FETCH_FOLDER_DATA,
300 SESSION, this.type, this.folderNode.folder.id(), oilsRptOutputLimit);
302 if(this.type == 'output') {
303 req = new Request(OILS_RPT_FETCH_OUTPUT,
304 SESSION, this.folderNode.folder.id(), oilsRptOutputLimit);
308 removeChildren(obj.selector);
311 var res = r.getResultObject();
312 if( obj.type == 'output' ) {
313 obj.fleshSchedules(res, 0);
315 obj.fmTable = drawFMObjectTable(
320 selectColName : 'Select',
321 selectAllName : 'All',
322 selectNoneName : 'None'
332 oilsRptFolderWindow.prototype.fleshSchedules = function(list, idx) {
333 if( idx >= list.length ) {
334 this.fmTable = drawFMObjectTable(
336 dest : this.selector,
339 selectColName : 'Select',
340 selectAllName : 'All',
341 selectNoneName : 'None'
347 var sched = list[idx];
349 oilsRptFetchUser(sched.runner(),
352 oilsRptFetchReport(sched.report(),
354 sched.report(report);
355 oilsRptFetchTemplate(report.template(),
357 report.template(template);
358 obj.fleshSchedules(list, ++idx);
368 oilsRptFolderWindow.prototype.setSelected = function(folderNode) {
369 this.selectedFolder = folderNode;
372 oilsRptFolderWindow.prototype.setFolderEditActions = function() {
373 var folder = this.folderNode.folder;
376 DOM.oils_rpt_folder_manager_name_input.value = folder.name();
377 DOM.oils_rpt_folder_manager_change_name_submit.onclick = function() {
378 var name = DOM.oils_rpt_folder_manager_name_input.value;
381 if(confirmId('oils_rpt_folder_manager_change_name_confirm')) {
382 oilsRptUpdateFolder(folder, obj.type,
385 oilsRptAlertSuccess();
386 oilsRptCurrentFolderManager.draw();
394 DOM.oils_rpt_folder_manager_sub_lib_create.onclick = function() {
397 if( obj.type == 'report' ) folder = new rrf();
398 if( obj.type == 'template' ) folder = new rtf();
399 if( obj.type == 'output' ) folder = new rof();
401 folder.owner(USER.id());
402 folder.parent(obj.folderNode.folder.id());
403 folder.name(DOM.oils_rpt_folder_manager_sub_name.value);
404 var shared = getSelectorVal(DOM.oils_rpt_folder_manager_sub_shared);
405 folder.shared( (shared == 'yes') ? 't' : 'f');
406 if( folder.shared() == 't' )
407 folder.share_with( obj.myOrgSelector.getValue() );
409 oilsRptCreateFolder(folder, obj.type,
412 oilsRptAlertSuccess();
413 oilsRptCurrentFolderManager.draw();
421 oilsRptFolderWindow.prototype.doFolderDelete = function() {
423 var cache = oilsRptFolderNodeCache[this.type];
424 /* let's see if this folder has any children */
425 for( var c in cache )
426 if( cache[c].folder.parent() == this.folderNode.folder.id() )
427 return alertId('oils_rpt_folder_cannot_delete');
429 /* lets see if the folder has contents */
430 var req = new Request(OILS_RPT_FETCH_FOLDER_DATA,
431 SESSION, this.type, this.folderNode.folder.id(), 1);
433 if(this.type == 'output') {
434 req = new Request(OILS_RPT_FETCH_OUTPUT,
435 SESSION, this.folderNode.folder.id(), 1);
444 var contents = r.getResultObject();
445 if( contents.length > 0 )
446 return alertId('oils_rpt_folder_cannot_delete');
448 if( confirmId('oils_rpt_folder_manager_delete_confirm') ) {
449 var req2 = new Request(OILS_RPT_DELETE_FOLDER,
450 SESSION, obj.type, obj.folderNode.folder.id());
454 var res = r2.getResultObject();
456 oilsRptAlertSuccess();
457 oilsRptCurrentFolderManager.draw();
459 else alert('error: '+js2JSON(res));