using System; using System.Data; 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_ReportHtmlGraph_Edit : CMSReportingModalPage { #region "Variables" protected ReportInfo reportInfo = null; protected ReportGraphInfo graphInfo = null; protected int graphId; private bool newReport = 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 #region "Methods" protected void Page_Load(object sender, EventArgs e) { ucSelectString.Scope = PredefinedObjectType.REPORT; ConnectionStringRow.Visible = CMSContext.CurrentUser.IsAuthorizedPerResource("cms.reporting", "SetConnectionString"); txtQueryQuery.FullScreenParentElementID = pnlWebPartForm_Properties.ClientID; // Test permission for query if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Reporting", "EditSQLQueries")) { txtQueryQuery.Enabled = false; } else { txtQueryQuery.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 script for resize and rollback RegisterResizeAndRollbackScript(divFooter.ClientID, divScrolable.ClientID); string[,] tabs = new string[4, 4]; tabs[0, 0] = GetString("general.general"); tabs[0, 1] = "SetHelpTopic('helpTopic', 'report_htmlgraph_properties')"; tabs[1, 0] = GetString("general.preview"); tabs[1, 1] = "SetHelpTopic('helpTopic', 'report_htmlgraph_properties');"; tabControlElem.Tabs = tabs; tabControlElem.UsePostback = true; CurrentMaster.Title.TitleCssClass = "PageTitleHeader"; CurrentMaster.Title.HelpTopicName = "report_htmlgraph_properties"; CurrentMaster.Title.HelpName = "helpTopic"; Title = "ReportGraph Edit"; btnOk.Text = GetString("General.OK"); btnCancel.Text = GetString("General.Cancel"); btnApply.Text = GetString("General.apply"); rfvCodeName.ErrorMessage = GetString("general.requirescodename"); rfvDisplayName.ErrorMessage = GetString("general.requiresdisplayname"); int reportId = QueryHelper.GetInteger("reportid", 0); bool isPreview = QueryHelper.GetBoolean("preview", false); // If preview by URL -> select preview tab if (isPreview && !RequestHelper.IsPostBack()) { SelectedTab = 1; } if (reportId > 0) { reportInfo = ReportInfoProvider.GetReportInfo(reportId); } if (PersistentEditedObject == null) { if (reportInfo != null) //must be valid reportid parameter { int id = QueryHelper.GetInteger("itemid", 0); // Try to load graph name from hidden field (adding new graph & preview) if (id == 0) { id = ValidationHelper.GetInteger(txtNewGraphHidden.Value, 0); } if (id > 0) { PersistentEditedObject = ReportGraphInfoProvider.GetReportGraphInfo(id); graphInfo = PersistentEditedObject as ReportGraphInfo; } } } else { graphInfo = PersistentEditedObject as ReportGraphInfo; } if (reportInfo != null) { ucSelectString.DefaultConnectionString = reportInfo.ReportConnectionString; } if (graphInfo != null) { CurrentMaster.Title.TitleText = GetString("Reporting_ReportGraph_EditHTML.TitleText"); CurrentMaster.Title.TitleImage = GetImageUrl("Objects/Reporting_ReportGraph/object.png"); graphId = graphInfo.GraphID; if (ObjectVersionManager.DisplayVersionsTab(graphInfo)) { tabs[2, 0] = GetString("objectversioning.tabtitle"); tabs[2, 1] = "SetHelpTopic('helpTopic', 'objectversioning_general');"; versionList.Object = graphInfo; versionList.IsLiveSite = false; } } else { CurrentMaster.Title.TitleText = GetString("Reporting_ReportGraph_EditHTML.NewItemTitleText"); CurrentMaster.Title.TitleImage = GetImageUrl("Objects/Reporting_ReportGraph/new.png"); newReport = true; } if (!RequestHelper.IsPostBack()) { // Load default data for new report if (newReport) { ucSelectString.Value = String.Empty; txtQueryNoRecordText.Text = GetString("attachmentswebpart.nodatafound"); txtItemValueFormat.Text = "{%yval%}"; txtSeriesItemTooltip.Text = "{%ser%}"; chkExportEnable.Checked = true; chkSubscription.Checked = true; } // Otherwise load saved data else { LoadData(); } } } /// /// Loads data from graph storage /// private void LoadData() { if (graphInfo != null) { txtDefaultName.Text = graphInfo.GraphDisplayName; txtDefaultCodeName.Text = graphInfo.GraphName; txtQueryQuery.Text = graphInfo.GraphQuery; chkIsStoredProcedure.Checked = graphInfo.GraphQueryIsStoredProcedure; ReportCustomData settings = graphInfo.GraphSettings; txtQueryNoRecordText.Text = settings["QueryNoRecordText"]; txtGraphTitle.Text = graphInfo.GraphTitle; txtLegendTitle.Text = settings["LegendTitle"]; txtItemValueFormat.Text = settings["ItemValueFormat"]; chkDisplayLegend.Checked = ValidationHelper.GetBoolean(settings["DisplayLegend"], false); txtSeriesItemTooltip.Text = settings["SeriesItemToolTip"]; txtSeriesItemLink.Text = settings["SeriesItemLink"]; txtItemNameFormat.Text = settings["SeriesItemNameFormat"]; chkExportEnable.Checked = ValidationHelper.GetBoolean(settings["ExportEnabled"], false); chkSubscription.Checked = ValidationHelper.GetBoolean(settings["SubscriptionEnabled"], false); ucSelectString.Value = graphInfo.GraphConnectionString; } } /// /// PreRender event handler /// protected override void OnPreRender(EventArgs e) { ShowActionButtons(); divScrolable.CssClass = ""; switch (SelectedTab) { // Edit case 0: divScrolable.CssClass = "ScrollableContent"; pnlPreview.Visible = false; pnlVersions.Visible = false; FormPanelHolder.Visible = true; categoryList.Visible = true; break; // Preview case 1: if (Save(false)) { ShowPreview(); } else { SelectedTab = 0; divScrolable.CssClass = "ScrollableContent"; } break; // Version case 2: FormPanelHolder.Visible = false; categoryList.Visible = false; pnlPreview.Visible = false; if (graphInfo != null) { pnlVersions.Visible = true; ScriptHelper.RegisterStartupScript(this, typeof(string), "SetTabHelpTopic", ScriptHelper.GetScript("SetHelpTopic('helpTopic', 'objectversioning_general');")); } HideActionButtons(); break; } tabControlElem.SelectedTab = SelectedTab; // Register the dialog script ScriptHelper.RegisterDialogScript(this); AddNoCacheTag(); RegisterModalPageScripts(); base.OnPreRender(e); } /// /// Save the changes to DB /// private bool Save(bool save) { string errorMessage = String.Empty; if (save) { if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.reporting", "Modify")) { RedirectToAccessDenied("cms.reporting", "Modify"); } errorMessage = new Validator() .NotEmpty(txtDefaultName.Text, rfvDisplayName.ErrorMessage) .NotEmpty(txtDefaultCodeName.Text, rfvCodeName.ErrorMessage) .NotEmpty(txtQueryQuery.Text, GetString("Reporting_ReportGraph_Edit.ErrorQuery")).Result; if ((errorMessage == "") && (!ValidationHelper.IsIdentifier(txtDefaultCodeName.Text.Trim()))) { errorMessage = GetString("general.erroridentifierformat"); } string fullName = reportInfo.ReportName + "." + txtDefaultCodeName.Text.Trim(); ReportGraphInfo codeNameCheck = ReportGraphInfoProvider.GetReportGraphInfo(fullName); if ((errorMessage == "") && (codeNameCheck != null) && (codeNameCheck.GraphID != graphId)) { errorMessage = GetString("Reporting_ReportGraph_Edit.ErrorCodeNameExist"); } } // Test query in all cases if (errorMessage == String.Empty) { errorMessage = new Validator().NotEmpty(txtQueryQuery.Text, GetString("Reporting_ReportGraph_Edit.ErrorQuery")).Result; } if (errorMessage == String.Empty) { // New graph if (graphInfo == null) { graphInfo = new ReportGraphInfo(); } graphInfo.GraphDisplayName = txtDefaultName.Text.Trim(); graphInfo.GraphName = txtDefaultCodeName.Text.Trim(); if (CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Reporting", "EditSQLQueries")) { graphInfo.GraphQuery = txtQueryQuery.Text; } graphInfo.GraphQueryIsStoredProcedure = chkIsStoredProcedure.Checked; graphInfo.GraphReportID = reportInfo.ReportID; graphInfo.GraphTitle = txtGraphTitle.Text; graphInfo.GraphIsHtml = true; graphInfo.GraphType = String.Empty; graphInfo.GraphConnectionString = ValidationHelper.GetString(ucSelectString.Value, String.Empty); ReportCustomData settings = (ReportCustomData)graphInfo.GraphSettings; settings["QueryNoRecordText"] = txtQueryNoRecordText.Text; settings["LegendTitle"] = txtLegendTitle.Text; settings["DisplayLegend"] = chkDisplayLegend.Checked.ToString(); settings["SeriesItemToolTip"] = txtSeriesItemTooltip.Text; settings["SeriesItemLink"] = txtSeriesItemLink.Text; settings["ItemValueFormat"] = txtItemValueFormat.Text; settings["SeriesItemNameFormat"] = txtItemNameFormat.Text; settings["ExportEnabled"] = chkExportEnable.Checked.ToString(); settings["SubscriptionEnabled"] = chkSubscription.Checked.ToString(); if (save) { ReportGraphInfoProvider.SetReportGraphInfo(graphInfo); } return true; } else { ShowError(errorMessage); return false; } } /// /// 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 { tabControlElem.SelectedTab = 0; } } /// /// Apply changes /// /// Button apply object /// Event arguments protected void btnApply_Click(object sender, EventArgs e) { if (!Save(true)) { SelectedTab = 0; } else { // Redirect for new reports if (newReport) { URLHelper.Redirect(ResolveUrl("~/CMSModules/Reporting/Tools/ReportHtmlGraph_Edit.aspx?reportId=" + graphInfo.GraphReportID + "&itemid=" + graphInfo.GraphID)); } } } /// /// Tab changes /// /// Tab control object /// Event arguments protected void tabControlElem_clicked(object sender, EventArgs e) { // Set tab's selectedtab not by Request param, but from property tabControlElem.SelectedTab = SelectedTab; } /// /// Show graph in preview mode /// private void ShowPreview() { FormPanelHolder.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); ctrlReportGraph.ReportParameters = dr; ctrlReportGraph.Visible = true; // Prepare fully qualified graph name = with reportname string fullReportGraphName = reportInfo.ReportName + "." + graphInfo.GraphName; ctrlReportGraph.ReportGraphInfo = graphInfo; ctrlReportGraph.Parameter = fullReportGraphName; ctrlReportGraph.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"); } /// /// Get info from PersistentEditedObject and reload data /// private void ReloadDataAfrterRollback() { // Load rollbacked info GeneralizedInfo gi = PersistentEditedObject as GeneralizedInfo; if (gi != null) { graphInfo = gi.MainObject as ReportGraphInfo; } LoadData(); } protected void versionList_onAfterRollback(object sender, EventArgs e) { ReloadDataAfrterRollback(); } #endregion }