using System; using System.Globalization; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.OnlineMarketing; using CMS.SettingsProvider; using CMS.UIControls; using CMS.WebAnalytics; using CMS.ExtendedControls.ActionsConfig; public partial class CMSModules_OnlineMarketing_Pages_Content_ABTesting_ABTest_ABTestReports : CMSABTestPage { #region "Variables" private bool isSaved = false; private bool reportLoaded = false; private string testName = String.Empty; String siteName = String.Empty; private IDisplayReport ucDisplayReport = null; #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { ucDisplayReport = this.LoadUserControl("~/CMSModules/Reporting/Controls/DisplayReport.ascx") as IDisplayReport; reportHeader.ActionPerformed += HeaderActions_ActionPerformed; pnlContent.Controls.Add((Control)ucDisplayReport); // Set disabled module info ucDisabledModule.SettingsKeys = "CMSAnalyticsEnabled;CMSABTestingEnabled"; ucDisabledModule.InfoTexts.Add(GetString("WebAnalytics.Disabled") + "
"); ucDisabledModule.InfoTexts.Add(GetString("abtesting.disabled")); ucDisabledModule.ParentPanel = pnlWarning; CurrentMaster.PanelContent.CssClass = ""; UIHelper.AllowUpdateProgress = false; // ABTest Info int abTestID = QueryHelper.GetInteger("abtestid", 0); ABTestInfo abInfo = ABTestInfoProvider.GetABTestInfo(abTestID); if (abInfo == null) { return; } siteName = CMSContext.CurrentSiteName; testName = abInfo.ABTestName; // Variants condition ucSelectVariation.WhereCondition = "ABVariantTestID IN ( SELECT ABTestID FROM OM_ABTest WHERE ABTestName = N'" + testName + "')"; ucGraphType.ProcessChartSelectors(false); // Enables/disables radio buttons (based on UI elements) CurrentUserInfo ui = CMSContext.CurrentUser; if (!RequestHelper.IsPostBack()) { if (!ui.IsGlobalAdministrator) { rbCount.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "ABTest.ConversionsCount"); rbRate.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "ABTest.ConversionsRate"); rbValue.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "ABTest.ConversionsValue"); rbSourcePages.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "ABTest.ConversionsSourcePages"); rbVariants.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "ABTest.ConversionsByVariations"); bool checkedButton = false; // Check first enabled button foreach (Control ctrl in pnlRadios.Controls) { RadioButton rb = ctrl as RadioButton; if (rb != null) { if (rb.Enabled) { rb.Checked = true; checkedButton = true; break; } } } // No report avaible -> redirect to access denied if (!checkedButton) { RedirectToAccessDenied(GetString("abtest.noreportavaible")); } } else { // Admin check first radio button rbCount.Checked = true; } } } protected void HeaderActions_ActionPerformed(object sender, CommandEventArgs e) { switch (e.CommandName) { case ComponentEvents.SAVE: Save(); break; } } /// /// Display report /// /// If true, display report control is reloaded private void DisplayReport(bool reload) { if (reportLoaded) { return; } String siteName = CMSContext.CurrentSiteName; // Set reports name String conversionCount = "abtestconversioncount.yearreport;abtestconversioncount.monthreport;abtestconversioncount.weekreport;abtestconversioncount.dayreport;abtestconversioncount.hourreport"; String conversionRate = "abtestdetailconversionrate.yearreport;abtestdetailconversionrate.monthreport;abtestdetailconversionrate.weekreport;abtestdetailconversionrate.dayreport;abtestdetailconversionrate.hourreport"; String conversionValue = "abtestconversionvalue.yearreport;abtestconversionvalue.monthreport;abtestconversionvalue.weekreport;abtestconversionvalue.dayreport;abtestconversionvalue.hourreport"; String conversionSourcePages = "abtestconversionsource.yearreport;abtestconversionsource.monthreport;abtestconversionsource.weekreport;abtestconversionsource.dayreport;abtestconversionsource.hourreport"; String conversionVariant = "abtestconversionsbyvariations.yearreport;abtestconversionsbyvariations.monthreport;abtestconversionsbyvariations.weekreport;abtestconversionsbyvariations.dayreport;abtestconversionsbyvariations.hourreport"; pnlVariant.Visible = false; if (rbCount.Checked) { CheckWebAnalyticsUI("ABTest.ConversionsCount"); ucDisplayReport.ReportName = ucGraphType.GetReportName(conversionCount); } if (rbRate.Checked) { CheckWebAnalyticsUI("ABTest.ConversionsRate"); ucDisplayReport.ReportName = ucGraphType.GetReportName(conversionRate); } if (rbValue.Checked) { CheckWebAnalyticsUI("ABTest.ConversionsValue"); ucDisplayReport.ReportName = ucGraphType.GetReportName(conversionValue); } if (rbSourcePages.Checked) { CheckWebAnalyticsUI("ABTest.ConversionsSourcePages"); ucDisplayReport.ReportName = ucGraphType.GetReportName(conversionSourcePages); } if (rbVariants.Checked) { CheckWebAnalyticsUI("ABTest.ConversionsByVariations"); pnlVariant.Visible = true; ucDisplayReport.ReportName = ucGraphType.GetReportName(conversionVariant); } // Conversion ucConversions.PostbackOnDropDownChange = true; ucConversions.ABTestName = testName; ucConversions.ReloadData(true); String conversion = ValidationHelper.GetString(ucConversions.Value, String.Empty); if (conversion == ucConversions.AllRecordValue) { conversion = String.Empty; } // General report data ucDisplayReport.LoadFormParameters = false; ucDisplayReport.DisplayFilter = false; ucDisplayReport.GraphImageWidth = 100; ucDisplayReport.IgnoreWasInit = true; ucDisplayReport.TableFirstColumnWidth = Unit.Percentage(30); ucDisplayReport.UseExternalReload = true; ucDisplayReport.UseProgressIndicator = true; ucDisplayReport.SelectedInterval = HitsIntervalEnumFunctions.HitsConversionToString(ucGraphType.SelectedInterval); // Resolve report macros DataTable dtp = new DataTable(); dtp.Columns.Add("FromDate", typeof(DateTime)); dtp.Columns.Add("ToDate", typeof(DateTime)); dtp.Columns.Add("CodeName", typeof(string)); dtp.Columns.Add("TestName", typeof(string)); dtp.Columns.Add("ConversionName", typeof(string)); dtp.Columns.Add("VariationName", typeof(string)); object[] parameters = new object[6]; parameters[0] = ucGraphType.From; parameters[1] = ucGraphType.To; parameters[2] = "pageviews"; parameters[3] = testName; parameters[4] = conversion; parameters[5] = ValidationHelper.GetString(ucSelectVariation.Value, String.Empty); dtp.Rows.Add(parameters); dtp.AcceptChanges(); ucDisplayReport.ReportParameters = dtp.Rows[0]; if (reload) { ucDisplayReport.ReloadData(true); } reportLoaded = true; } protected override void OnPreRender(EventArgs e) { DisplayReport(true); reportHeader.ReportName = ucDisplayReport.ReportName; reportHeader.ReportParameters = ucDisplayReport.ReportParameters; reportHeader.SelectedInterval = ucGraphType.SelectedInterval; reportHeader.ManageDataCodeName = "abconversion;" + testName + ";%"; base.OnPreRender(e); } /// /// VerifyRenderingInServerForm. /// /// Control public override void VerifyRenderingInServerForm(Control control) { if (!isSaved) { base.VerifyRenderingInServerForm(control); } } /// /// Saves the graph report. /// private void Save() { // Check web analytics save permission if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.WebAnalytics", "SaveReports")) { RedirectToCMSDeskAccessDenied("CMS.WebAnalytics", "SaveReports"); } DisplayReport(false); // Saves the report isSaved = true; if (ucDisplayReport.SaveReport() > 0) { ShowConfirmation(String.Format(GetString("Analytics_Report.ReportSavedTo"), ucDisplayReport.ReportDisplayName + " - " + DateTime.Now.ToString())); } isSaved = false; } #endregion }