using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.ExtendedControls; using CMS.GlobalHelper; using CMS.Reporting; using CMS.UIControls; public partial class CMSModules_Reporting_Tools_ReportCategory_Tree : CMSReportingPage, IPostBackEventHandler { protected void Page_Load(object sender, EventArgs e) { RegisterExportScript(); //// Images imgNewCategory.ImageUrl = GetImageUrl("Objects/CMS_WebPartCategory/add.png"); imgNewReport.ImageUrl = GetImageUrl("Objects/Reporting_report/add.png"); imgDeleteItem.ImageUrl = GetImageUrl("Objects/CMS_WebPart/delete.png"); imgExportObject.ImageUrl = GetImageUrl("Objects/CMS_WebPart/export.png"); imgCloneReport.ImageUrl = GetImageUrl("CMSModules/CMS_WebParts/clone.png"); // Resource strings lnkDeleteItem.Text = GetString("Development-Report_Tree.DeleteSelected"); lnkNewCategory.Text = GetString("Development-Report_Tree.NewCategory"); lnkNewReport.Text = GetString("Development-Report_Tree.NewReport"); lnkExportObject.Text = GetString("Development-Report_Tree.ExportObject"); lnkCloneReport.Text = GetString("Development-Report_Tree.CloneReport"); // Setup menu action scripts lnkNewReport.Attributes.Add("onclick", "NewItem('report');"); lnkNewCategory.Attributes.Add("onclick", "NewItem('reportcategory');"); lnkDeleteItem.Attributes.Add("onclick", "DeleteItem();"); lnkExportObject.Attributes.Add("onclick", "ExportObject();"); lnkCloneReport.Attributes.Add("onclick", "modalDialog('" + URLHelper.ResolveUrl("~/CMSModules/Objects/Dialogs/CloneObjectDialog.aspx?reloadall=1&objecttype=reporting.report&objectid=") + "' + selectedItemId, 'CloneReport', 750, 400)"); // Widgets lnkDeleteItem.ToolTip = GetString("Development-Report_Tree.DeleteSelected"); lnkNewCategory.ToolTip = GetString("Development-Report_Tree.NewCategory"); lnkNewReport.ToolTip = GetString("Development-Report_Tree.NewReport"); lnkExportObject.ToolTip = GetString("Development-Report_Tree.ExportObject"); lnkCloneReport.ToolTip = GetString("Development-Report_Tree.CloneReport"); pnlSubBox.CssClass = BrowserHelper.GetBrowserClass(); //// URLs for menu actions string script = "var categoryURL = '" + ResolveUrl("ReportCategory_Edit_Frameset.aspx") + "';\n"; script += "var reportURL = '" + ResolveUrl("Report_Edit.aspx") + "';\n"; script += "var doNotReloadContent = false;\n"; // Script for deleting widget or category string delPostback = ControlsHelper.GetPostBackEventReference(Page, "##"); string deleteScript = "function DeleteItem() { \n" + " if ((selectedItemId > 0) && (selectedItemParent > 0) && " + " confirm('" + GetString("general.deleteconfirmation") + "')) {\n " + delPostback.Replace("'##'", "selectedItemType+';'+selectedItemId+';'+selectedItemParent") + ";\n" + "}\n" + "}\n"; script += deleteScript; // Preselect tree item if (!RequestHelper.IsPostBack()) { int categoryId = QueryHelper.GetInteger("categoryid", 0); int reportID = QueryHelper.GetInteger("reportid", 0); bool reload = QueryHelper.GetBoolean("reload", false); // Select category if (categoryId > 0) { ReportCategoryInfo rci = ReportCategoryInfoProvider.GetReportCategoryInfo(categoryId); if (rci != null) { // If not set explicitly stop reloading of right frame if (!reload) { script += "doNotReloadContent = true;"; } script += SelectAtferLoad(rci.CategoryPath, categoryId, "reportcategory", rci.CategoryParentID, true); } } // Select report else if (reportID > 0) { ReportInfo ri = ReportInfoProvider.GetReportInfo(reportID); if (ri != null) { ReportCategoryInfo rci = ReportCategoryInfoProvider.GetReportCategoryInfo(ri.ReportCategoryID); if (rci != null) { // If not set explicitly stop reloading of right frame if (!reload) { script += "doNotReloadContent = true;"; } string path = rci.CategoryPath + "/" + ri.ReportName; script += SelectAtferLoad(path, reportID, "report", ri.ReportCategoryID, true); } } } // Select root by default else { ReportCategoryInfo rci = ReportCategoryInfoProvider.GetReportCategoryInfo("/"); if (rci != null) { script += SelectAtferLoad("/", rci.CategoryID, "reportcategory", 0, true); } // Directly dispatch an action, if set by URL if (QueryHelper.GetString("action", null) == "newcategory") { script += "NewItem('reportcategory');"; } } } ltlScript.Text += ScriptHelper.GetScript(script); } /// /// Handles delete action. /// /// Objecttype(report or reportcategory);objectid public void RaisePostBackEvent(string eventArgument) { string[] values = eventArgument.Split(';'); if ((values != null) && (values.Length == 3)) { int id = ValidationHelper.GetInteger(values[1], 0); int parentId = ValidationHelper.GetInteger(values[2], 0); ReportCategoryInfo rci = ReportCategoryInfoProvider.GetReportCategoryInfo(parentId); //Test permission if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.reporting", "Modify")) { String denyScript = @"var redirected = false;if (!redirected) {if ((window.parent != null) && (window.parent.frames['reportcategorytree'] != null)) { parent.frames['reportedit'].location = '" + ResolveUrl(AccessDeniedPage) + @"?resource=cms.reporting&permission=Modify';redirected = true; }}"; if (rci != null) { denyScript = SelectAtferLoad(rci.CategoryPath + "/", id, values[0], parentId, false) + denyScript; } ltlScript.Text += ScriptHelper.GetScript(denyScript); return; } string script = String.Empty; switch (values[0]) { case "report": ReportInfoProvider.DeleteReportInfo(id); break; case "reportcategory": try { ReportCategoryInfoProvider.DeleteReportCategoryInfo(id); } catch (Exception ex) { // Make alert with exception message, most probable cause is deleting category with subcategories script = String.Format("alert('{0}');\n", ex.Message); // Current node stays selected parentId = id; } break; } // Select parent node after delete if (rci != null) { script = SelectAtferLoad(rci.CategoryPath + "/", parentId, "reportcategory", rci.CategoryParentID, true) + script; ltlScript.Text += ScriptHelper.GetScript(script); } treeElem.ReloadData(); } } /// /// Expands tree at specified path and selects tree item by javascript. /// /// Selected path /// ID of selected tree item /// Type of tree item /// Type of tree item /// Indicates whether update right panel private string SelectAtferLoad(string path, int itemId, string type, int parentId, bool updateRightPanel) { treeElem.SelectPath = path; string script = String.Format("SelectReportNode({0},'{1}',{2},'" + updateRightPanel.ToString() + "');", itemId, type, parentId); return script; } }