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('drawing folder window for ' + this.folderNode.folder.name() );
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.disabled) {
71 this.drawEditActions();
73 var porg = PERMS.SHARE_REPORT_FOLDER;
75 DOM.oils_rpt_folder_manager_share_opt.disabled = true;
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 var porg = PERMS.SHARE_REPORT_FOLDER;
114 DOM.oils_rpt_folder_manager_sub_shared.disabled = true;
115 removeChildren(DOM.oils_rpt_folder_manager_sub_lib_picker);
116 unHideMe(DOM.oils_rpt_folder_manager_create_sub);
117 obj.myOrgSelector = new oilsRptMyOrgsWidget(
118 DOM.oils_rpt_folder_manager_sub_lib_picker, USER.ws_ou(), porg)
119 obj.myOrgSelector.draw();
122 obj.doFolderDelete();
136 oilsRptFolderWindow.prototype.shareFolder = function() {
137 var folder = this.folderNode.folder;
138 if(isTrue(folder.shared()))
139 return alertId('oils_rpt_folder_already_shared');
140 unHideMe(DOM.oils_rpt_folder_manager_share_div);
143 var orgsel = new oilsRptMyOrgsWidget(
144 DOM.oils_rpt_folder_manager_share_lib_picker,
145 USER.ws_ou(), PERMS.SHARE_REPORT_FOLDER);
148 var type = this.type;
149 DOM.oils_rpt_folder_manager_share_submit.onclick = function() {
151 folder.share_with(orgsel.getValue());
152 oilsRptUpdateFolder( folder, type,
155 oilsRptAlertSuccess();
156 oilsRptCurrentFolderManager.draw();
163 oilsRptFolderWindow.prototype.unShareFolder = function() {
164 var folder = this.folderNode.folder;
165 if(!isTrue(folder.shared()))
166 return alertId('oils_rpt_folder_already_unshared');
167 if(!confirmId('oils_rpt_folder_unshare_confirm')) return;
169 var type = this.type;
170 oilsRptUpdateFolder( folder, type,
173 oilsRptAlertSuccess();
174 oilsRptCurrentFolderManager.draw();
181 oilsRptFolderWindow.prototype.hideFolderActions = function() {
182 hideMe(DOM.oils_rpt_folder_manager_change_name_div);
183 hideMe(DOM.oils_rpt_folder_manager_create_sub);
184 hideMe(DOM.oils_rpt_folder_manager_share_div);
188 oilsRptFolderWindow.prototype.doFolderAction = function() {
189 var objs = this.fmTable.getSelected();
190 if( objs.length == 0 )
191 return alert('Please select an item from the list');
192 var action = getSelectorVal(DOM.oils_rpt_folder_contents_action_selector);
195 var successCallback = function(errid) {
196 if(errid) alertId(errid)
197 else oilsRptAlertSuccess();
203 case 'create_report' :
204 hideMe(DOM.oils_rpt_folder_table_right_td);
205 unHideMe(DOM.oils_rpt_folder_table_alt_td);
206 unHideMe(DOM.oils_rpt_editor_div);
207 new oilsRptReportEditor(new oilsReport(objs[0]), this);
209 case 'delete_report' :
210 if(!confirmId('oils_rpt_folder_contents_confirm_delete')) return;
211 this.deleteReports(objs, 0, successCallback);
214 case 'delete_template' :
215 if(!confirmId('oils_rpt_folder_contents_confirm_delete')) return;
216 this.deleteTemplates(objs, 0, successCallback);
220 this.showOutput(objs[0]);
223 case 'delete_output':
224 if(!confirmId('oils_rpt_folder_contents_confirm_delete')) return;
225 this.deleteOutputs(objs,0, successCallback);
232 oilsRptFolderWindow.prototype.deleteOutputs = function(list, idx, callback, errid) {
233 if( idx >= list.length ) return callback(errid);
234 var output = list[idx];
236 if( output.runner().id() != USER.id() ) {
237 this.deleteOutputs(list, ++idx,
238 callback, 'oils_rpt_folder_contents_no_delete');
241 _debug('deleting output ' + output.id());
242 var req = new Request(OILS_RPT_DELETE_SCHEDULE,SESSION,output.id());
244 req.callback(function(){obj.deleteOutputs(list, ++idx, callback, errid);});
249 oilsRptFolderWindow.prototype.showOutput = function(sched) {
250 oilsRptFetchReport(sched.report(),
252 var url = oilsRptBuildOutputLink(r.template(), r.id(), sched.id());
259 oilsRptFolderWindow.prototype.deleteReports = function(list, idx, callback, errid) {
260 if( idx >= list.length ) return callback(errid);
261 var report = list[idx];
263 if( report.owner().id() != USER.id() ) {
264 this.deleteReports(list, ++idx,
265 callback, 'oils_rpt_folder_contents_no_delete');
270 var req0 = new Request(OILS_RPT_REPORT_HAS_OUTS, SESSION, report.id());
273 var r0es = r0.getResultObject();
275 obj.deleteReports(list, ++idx,
276 callback, 'oils_rpt_folder_contents_report_no_delete');
278 _debug('deleting report ' + report.id());
279 var req = new Request(OILS_RPT_DELETE_REPORT, SESSION, report.id());
280 req.callback(function(r) {
281 var res = r.getResultObject();
282 if( res != 1 ) return oilsRptAlertFailure();
283 obj.deleteReports(list, ++idx, callback, errid)
294 oilsRptFolderWindow.prototype.deleteTemplates = function(list, idx, callback, errid) {
295 if( idx >= list.length ) return callback(errid);
296 var tmpl = list[idx];
299 if( tmpl.owner().id() != USER.id() ) {
300 this.deleteTemplates(list, ++idx,
301 callback, 'oils_rpt_folder_contents_no_delete');
305 var req0 = new Request( OILS_RPT_TEMPLATE_HAS_RPTS, SESSION, tmpl.id() );
308 var resp = r0.getResultObject();
311 obj.deleteTemplates(list, ++idx,
312 callback, 'oils_rpt_folder_contents_template_no_delete');
315 _debug('deleting template ' + tmpl.id());
316 var req = new Request(OILS_RPT_DELETE_TEMPLATE, SESSION, tmpl.id());
317 req.callback(function(r) {
318 var res = r.getResultObject();
319 if( res != 1 ) return oilsRptAlertFailure();
320 obj.deleteTemplates(list, ++idx, callback, errid)
332 oilsRptFolderWindow.prototype.drawFolderDetails = function() {
333 appendClear(DOM.oils_rpt_folder_creator_label,
334 text(this.folderNode.folder.owner().usrname()));
335 appendClear(DOM.oils_rpt_folder_name_label,
336 text(this.folderNode.folder.name()));
340 oilsRptFolderWindow.prototype.fetchFolderData = function(callback) {
341 removeChildren(this.selector);
342 var req = new Request(OILS_RPT_FETCH_FOLDER_DATA,
343 SESSION, this.type, this.folderNode.folder.id(), oilsRptOutputLimit);
345 if(this.type == 'output') {
346 req = new Request(OILS_RPT_FETCH_OUTPUT,
347 SESSION, this.folderNode.folder.id(), oilsRptOutputLimit);
351 removeChildren(obj.selector);
354 var res = r.getResultObject();
355 if( obj.type == 'output' ) {
356 obj.fleshSchedules(res, 0);
358 obj.fmTable = drawFMObjectTable(
363 selectColName : 'Select',
364 selectAllName : 'All',
365 selectNoneName : 'None'
375 oilsRptFolderWindow.prototype.fleshSchedules = function(list, idx, table) {
377 if( idx >= list.length ) return;
379 var sched = list[idx];
382 oilsRptFetchUser(sched.runner(),
386 oilsRptFetchTemplate(sched.report().template(),
389 sched.report().template(template);
391 obj.fmTable = drawFMObjectTable(
396 selectColName : 'Select',
397 selectAllName : 'All',
398 selectNoneName : 'None'
402 obj.fmTable.add(sched);
404 obj.fleshSchedules(list, ++idx);
412 oilsRptFolderWindow.prototype.setSelected = function(folderNode) {
413 this.selectedFolder = folderNode;
416 oilsRptFolderWindow.prototype.setFolderEditActions = function() {
417 var folder = this.folderNode.folder;
420 DOM.oils_rpt_folder_manager_name_input.value = folder.name();
421 DOM.oils_rpt_folder_manager_change_name_submit.onclick = function() {
422 var name = DOM.oils_rpt_folder_manager_name_input.value;
425 if(confirmId('oils_rpt_folder_manager_change_name_confirm')) {
426 oilsRptUpdateFolder(folder, obj.type,
429 oilsRptAlertSuccess();
430 oilsRptCurrentFolderManager.draw();
438 DOM.oils_rpt_folder_manager_sub_lib_create.onclick = function() {
441 if( obj.type == 'report' ) folder = new rrf();
442 if( obj.type == 'template' ) folder = new rtf();
443 if( obj.type == 'output' ) folder = new rof();
445 folder.owner(USER.id());
446 folder.parent(obj.folderNode.folder.id());
447 folder.name(DOM.oils_rpt_folder_manager_sub_name.value);
448 var shared = getSelectorVal(DOM.oils_rpt_folder_manager_sub_shared);
449 folder.shared( (shared == 'yes') ? 't' : 'f');
450 if( folder.shared() == 't' )
451 folder.share_with( obj.myOrgSelector.getValue() );
453 oilsRptCreateFolder(folder, obj.type,
456 oilsRptAlertSuccess();
457 oilsRptCurrentFolderManager.draw();
465 oilsRptFolderWindow.prototype.doFolderDelete = function() {
467 var cache = oilsRptFolderNodeCache[this.type];
468 /* let's see if this folder has any children */
469 for( var c in cache )
470 if( cache[c].folder.parent() == this.folderNode.folder.id() )
471 return alertId('oils_rpt_folder_cannot_delete');
473 /* lets see if the folder has contents */
474 var req = new Request(OILS_RPT_FETCH_FOLDER_DATA,
475 SESSION, this.type, this.folderNode.folder.id(), 1);
477 if(this.type == 'output') {
478 req = new Request(OILS_RPT_FETCH_OUTPUT,
479 SESSION, this.folderNode.folder.id(), 1);
488 var contents = r.getResultObject();
489 if( contents.length > 0 )
490 return alertId('oils_rpt_folder_cannot_delete');
492 if( confirmId('oils_rpt_folder_manager_delete_confirm') ) {
493 var req2 = new Request(OILS_RPT_DELETE_FOLDER,
494 SESSION, obj.type, obj.folderNode.folder.id());
498 var res = r2.getResultObject();
500 oilsRptAlertSuccess();
501 oilsRptCurrentFolderManager.draw();
503 else alert('error: '+js2JSON(res));