using System; using System.Data; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.ExtendedControls; using CMS.FormEngine; using CMS.GlobalHelper; using CMS.Reporting; using CMS.SettingsProvider; using CMS.Synchronization; using CMS.UIControls; public partial class CMSModules_Reporting_Tools_ReportTable_Edit : CMSReportingModalPage { #region "Variables" protected ReportTableInfo tableInfo = null; protected int tableId; protected ReportInfo reportInfo = null; private bool newTable = false; #endregion #region "Properties" /// /// Messages placeholder /// public override MessagesPlaceHolder MessagesPlaceHolder { get { return plcMess; } } /// /// Tab state (edit, preview, version) /// private int SelectedTab { get { return ValidationHelper.GetInteger(hdnSelectedTab.Value, 0); } set { hdnSelectedTab.Value = value.ToString(); } } #endregion protected void Page_Load(object sender, EventArgs e) { ucSelectString.Scope = PredefinedObjectType.REPORT; ConnectionStringRow.Visible = CMSContext.CurrentUser.IsAuthorizedPerResource("cms.reporting", "SetConnectionString"); txtQuery.FullScreenParentElementID = pnlWebPartForm_Properties.ClientID; // Test permission for query if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Reporting", "EditSQLQueries")) { txtQuery.Enabled = false; } else { txtQuery.Enabled = true; } versionList.OnAfterRollback += new EventHandler(versionList_onAfterRollback); // Own javascript tab change handling -> because tab control raises changetab after prerender - too late // Own selected tab change handling RegisterTabScript(hdnSelectedTab.ClientID, tabControlElem); // Register common resize and refresh scripts RegisterResizeAndRollbackScript(divFooter.ClientID, divScrolable.ClientID); string[,] tabs = new string[4, 4]; tabs[0, 0] = GetString("general.general"); tabs[0, 1] = "SetHelpTopic('helpTopic', 'report_table_properties')"; tabs[1, 0] = GetString("general.preview"); tabs[0, 1] = "SetHelpTopic('helpTopic', 'report_table_properties')"; tabControlElem.Tabs = tabs; tabControlElem.UsePostback = true; CurrentMaster.Title.HelpName = "helpTopic"; CurrentMaster.Title.HelpTopicName = "report_table_properties"; CurrentMaster.Title.TitleCssClass = "PageTitleHeader"; rfvCodeName.ErrorMessage = GetString("general.requirescodename"); rfvDisplayName.ErrorMessage = GetString("general.requiresdisplayname"); btnApply.Text = GetString("General.apply"); btnOk.Text = GetString("General.OK"); btnCancel.Text = GetString("General.Cancel"); int reportId = QueryHelper.GetInteger("reportid", 0); bool preview = QueryHelper.GetBoolean("preview", false); if (reportId > 0) { reportInfo = ReportInfoProvider.GetReportInfo(reportId); } // If preview by URL -> select preview tab bool isPreview = QueryHelper.GetBoolean("preview", false); if (isPreview && !RequestHelper.IsPostBack()) { SelectedTab = 1; } if (PersistentEditedObject == null) { if (reportInfo != null) // Must be valid reportid parameter { int id = QueryHelper.GetInteger("itemid", 0); // Try to load tableName from hidden field (adding new graph & preview) if (id == 0) { id = ValidationHelper.GetInteger(txtNewTableHidden.Value, 0); } if (id > 0) { PersistentEditedObject = ReportTableInfoProvider.GetReportTableInfo(id); tableInfo = PersistentEditedObject as ReportTableInfo; } } } else { tableInfo = PersistentEditedObject as ReportTableInfo; } if (reportInfo != null) { ucSelectString.DefaultConnectionString = reportInfo.ReportConnectionString; // Control text initializations if (tableInfo != null) { CurrentMaster.Title.TitleText = GetString("Reporting_ReportTable_Edit.TitleText"); CurrentMaster.Title.TitleImage = GetImageUrl("Objects/Reporting_ReportTable/object.png"); tableId = tableInfo.TableID; if (ObjectVersionManager.DisplayVersionsTab(tableInfo)) { tabs[2, 0] = GetString("objectversioning.tabtitle"); tabs[2, 1] = "SetHelpTopic('helpTopic', 'objectversioning_general');"; versionList.Object = tableInfo; versionList.IsLiveSite = false; } } else // New item { CurrentMaster.Title.TitleText = GetString("Reporting_ReportTable_Edit.NewItemTitleText"); CurrentMaster.Title.TitleImage = GetImageUrl("Objects/Reporting_ReportTable/new.png"); if (!RequestHelper.IsPostBack()) { ucSelectString.Value = String.Empty; txtPageSize.Text = "15"; txtQueryNoRecordText.Text = GetString("attachmentswebpart.nodatafound"); chkExportEnable.Checked = true; chkSubscription.Checked = true; } newTable = true; } // Set help key CurrentMaster.Title.HelpTopicName = "report_table_properties"; if (!RequestHelper.IsPostBack()) { DataHelper.FillListControlWithEnum(typeof(PagerButtons), drpPageMode, "PagerButtons.", null); // Preselect page numbers paging drpPageMode.SelectedValue = ((int)PagerButtons.Numeric).ToString(); LoadData(); } } if ((preview) && (!RequestHelper.IsPostBack())) { tabControlElem.SelectedTab = 1; ShowPreview(); } // In case of preview paging without saving table if (RequestHelper.IsPostBack() && tabControlElem.SelectedTab == 1) { // Reload default parameters FormInfo fi = new FormInfo(reportInfo.ReportParameters); // Get datarow with required columns ctrlReportTable.ReportParameters = fi.GetDataRow(); fi.LoadDefaultValues(ctrlReportTable.ReportParameters, true); // Collect data and put them in table info Save(false); ctrlReportTable.TableInfo = tableInfo; } } /// /// Reload data for table in prerender because of paging /// /// Event arguments protected override void OnPreRender(EventArgs e) { ShowActionButtons(); divScrolable.CssClass = ""; switch (SelectedTab) { // Versions case 2: divPanelHolder.Visible = false; categoryList.Visible = false; pnlPreview.Visible = false; if (tableInfo != null) { pnlVersions.Visible = true; ScriptHelper.RegisterStartupScript(this, typeof(string), "SetTabHelpTopic", ScriptHelper.GetScript("SetHelpTopic('helpTopic', 'objectversioning_general');")); } HideActionButtons(); break; // Preview case 1: // Create table preview if (Save(false)) { ShowPreview(); } else { tabControlElem.SelectedTab = 0; divScrolable.CssClass = "ScrollableContent"; } break; // Edit case 0: divScrolable.CssClass = "ScrollableContent"; pnlPreview.Visible = false; pnlVersions.Visible = false; divPanelHolder.Visible = true; categoryList.Visible = true; break; } tabControlElem.SelectedTab = SelectedTab; base.OnPreRender(e); } /// /// Loads data from tableInfo /// protected void LoadData() { if (tableInfo != null) { txtDisplayName.Text = tableInfo.TableDisplayName; txtCodeName.Text = tableInfo.TableName; txtQuery.Text = tableInfo.TableQuery; chkIsProcedure.Checked = tableInfo.TableQueryIsStoredProcedure; txtSkinID.Text = ValidationHelper.GetString(tableInfo.TableSettings["skinid"], ""); txtPageSize.Text = ValidationHelper.GetInteger(tableInfo.TableSettings["pagesize"], 10).ToString(); chkEnablePaging.Checked = ValidationHelper.GetBoolean(tableInfo.TableSettings["enablepaging"], false); drpPageMode.SelectedValue = ValidationHelper.GetString(tableInfo.TableSettings["pagemode"], ""); txtQueryNoRecordText.Text = ValidationHelper.GetString(tableInfo.TableSettings["QueryNoRecordText"], String.Empty); chkExportEnable.Checked = ValidationHelper.GetBoolean(tableInfo.TableSettings["ExportEnabled"], false); chkSubscription.Checked = ValidationHelper.GetBoolean(tableInfo.TableSettings["SubscriptionEnabled"], false); ucSelectString.Value = tableInfo.TableConnectionString; } } /// /// Saves data /// protected bool Save(bool save) { string errorMessage = String.Empty; // Check 'Modify' permission if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.reporting", "Modify")) { RedirectToAccessDenied("cms.reporting", "Modify"); } if (save) { errorMessage = new Validator() .NotEmpty(txtDisplayName.Text, rfvDisplayName.ErrorMessage) .NotEmpty(txtCodeName.Text, rfvCodeName.ErrorMessage) .NotEmpty(txtQuery.Text, GetString("Reporting_ReportGraph_Edit.ErrorQuery")).Result; if ((errorMessage == "") && (!ValidationHelper.IsIdentifier(txtCodeName.Text.Trim()))) { errorMessage = GetString("general.erroridentifierformat"); } string fullName = reportInfo.ReportName + "." + txtCodeName.Text.Trim(); ReportTableInfo codeNameCheck = ReportTableInfoProvider.GetReportTableInfo(fullName); if ((errorMessage == "") && (codeNameCheck != null) && (codeNameCheck.TableID != tableId)) { errorMessage = GetString("Reporting_ReportTable_Edit.ErrorCodeNameExist"); } } // Test query in all cases if (errorMessage == String.Empty) { errorMessage = new Validator().NotEmpty(txtQuery.Text, GetString("Reporting_ReportGraph_Edit.ErrorQuery")).Result; } if ((errorMessage == "") && (txtPageSize.Text.Trim() != String.Empty) && (!ValidationHelper.IsInteger(txtPageSize.Text) || !ValidationHelper.IsPositiveNumber(txtPageSize.Text))) { errorMessage = GetString("Reporting_ReportTable_Edit.errorinvalidpagesize"); } if ((errorMessage == "")) { // New table if (tableInfo == null) { tableInfo = new ReportTableInfo(); } tableInfo.TableDisplayName = txtDisplayName.Text.Trim(); tableInfo.TableName = txtCodeName.Text.Trim(); if (CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Reporting", "EditSQLQueries")) { tableInfo.TableQuery = txtQuery.Text.Trim(); } tableInfo.TableQueryIsStoredProcedure = chkIsProcedure.Checked; tableInfo.TableReportID = reportInfo.ReportID; tableInfo.TableSettings["SkinID"] = txtSkinID.Text.Trim(); tableInfo.TableSettings["enablepaging"] = chkEnablePaging.Checked.ToString(); tableInfo.TableSettings["pagesize"] = txtPageSize.Text; tableInfo.TableSettings["pagemode"] = drpPageMode.SelectedValue; tableInfo.TableSettings["QueryNoRecordText"] = txtQueryNoRecordText.Text; tableInfo.TableSettings["ExportEnabled"] = chkExportEnable.Checked.ToString(); tableInfo.TableSettings["SubscriptionEnabled"] = chkSubscription.Checked.ToString(); tableInfo.TableConnectionString = ValidationHelper.GetString(ucSelectString.Value, String.Empty); ; if (save) { ReportTableInfoProvider.SetReportTableInfo(tableInfo); } } else { ShowError(errorMessage); return false; } return true; } /// /// Save data and close editor /// /// Button save object /// Event arguments protected void btnOK_Click(object sender, EventArgs e) { if (Save(true)) { ltlScript.Text += ScriptHelper.GetScript("window.RefreshContent();CloseDialog();"); } else { SelectedTab = 0; } } /// /// Save changed data /// /// Apply button object /// Event arguments protected void btnApply_Click(object sender, EventArgs e) { if (!Save(true)) { SelectedTab = 0; } else { // Redirect for new reports if (newTable) { URLHelper.Redirect(ResolveUrl("~/CMSModules/Reporting/Tools/ReportTable_Edit.aspx?reportId=" + tableInfo.TableReportID + "&itemid=" + tableInfo.TableID)); } } } /// /// Show preview /// private void ShowPreview() { divPanelHolder.Visible = false; categoryList.Visible = false; pnlVersions.Visible = false; if (reportInfo != null) { pnlPreview.Visible = true; FormInfo fi = new FormInfo(reportInfo.ReportParameters); // Get datarow with required columns DataRow dr = fi.GetDataRow(); fi.LoadDefaultValues(dr, true); // ReportGraph.ContextParameters ctrlReportTable.ReportParameters = dr; // Prepare fully qualified graph name = with reportname if (tableInfo != null) { string fullReportGraphName = reportInfo.ReportName + "." + tableInfo.TableName; ctrlReportTable.Parameter = fullReportGraphName; } ctrlReportTable.TableInfo = tableInfo; ctrlReportTable.ReloadData(true); } } /// /// Hide buttons that are connected with reporting object /// private void HideActionButtons() { btnApply.Visible = false; btnOk.Visible = false; btnCancel.Text = GetString("general.close"); } /// /// Show buttons that are connected with reporting object /// private void ShowActionButtons() { btnApply.Visible = true; btnOk.Visible = true; btnCancel.Text = GetString("general.cancel"); } /// /// Tab changed event /// /// Tab control /// Event arguments protected void tabControlElem_clicked(object sender, EventArgs ea) { tabControlElem.SelectedTab = SelectedTab; } /// /// Get info from PersistentEditedObject and reload data /// private void ReloadDataAfrterRollback() { // Load rollbacked info GeneralizedInfo gi = PersistentEditedObject as GeneralizedInfo; if (gi != null) { tableInfo = gi.MainObject as ReportTableInfo; } LoadData(); } protected void versionList_onAfterRollback(object sender, EventArgs e) { ReloadDataAfrterRollback(); } }