using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using CMS.SettingsProvider; using CMS.UIControls; using CMS.WebAnalytics; using CMS.ExtendedControls; public partial class CMSModules_WebAnalytics_Controls_AnalyticsReportViewer : CMSAdminControl { #region "Variables" private string mReportsCodeName; private string mDataName; private bool mLoadFormParameters = false; /// /// Display control should be loaded only once. /// private bool reportLoaded = false; /// /// Control for display report (separation) problem /// private IDisplayReport ucDisplayReport = null; #endregion #region "Properties" /// /// Messages placeholder /// public override MessagesPlaceHolder MessagesPlaceHolder { get { return plcMess; } } /// /// Indicates if control is used on live site. /// public override bool IsLiveSite { get { return base.IsLiveSite; } set { plcMess.IsLiveSite = value; base.IsLiveSite = value; } } /// /// Report name to show. /// public string ReportsCodeName { get { return mReportsCodeName; } set { mReportsCodeName = value; } } /// /// Data report name. /// public string DataName { get { return mDataName; } set { mDataName = value; } } /// /// If true, report form parameters are loaded,form filter is displayed,period and graph type selector is hidden. /// public bool LoadFormParameters { get { return mLoadFormParameters; } set { EnsureDisplayReport(); mLoadFormParameters = value; ucDisplayReport.LoadFormParameters = value; ucDisplayReport.DisplayFilter = value; pnlPeriodSelectors.Visible = !value; } } /// /// Css class for display report /// public string DisplayReportBodyClass { get { EnsureDisplayReport(); return ucDisplayReport.BodyCssClass; } set { EnsureDisplayReport(); ucDisplayReport.BodyCssClass = value; } } /// /// Start of shown period. /// public DateTime From { get { return ucGraphTypePeriod.From; } } /// /// End of show period. /// public DateTime To { get { return ucGraphTypePeriod.To; } } /// /// Display name of shown report. /// public string ReportDisplayName { get { EnsureDisplayReport(); return ucDisplayReport.ReportDisplayName; } } /// /// Name of single report (f.e. pageviews.monthreport). /// public string ReportName { get { EnsureDisplayReport(); if (!String.IsNullOrEmpty(ucDisplayReport.ReportName)) { return ucDisplayReport.ReportName; } return ucGraphTypePeriod.GetReportName(ReportsCodeName); } set { EnsureDisplayReport(); ucDisplayReport.ReportName = value; } } /// /// Get selected interval of control (year,month,..) /// public HitsIntervalEnum SelectedInterval { get { return ucGraphTypePeriod.SelectedInterval; } } /// /// Returns report's parameters /// public DataRow ReportParameters { get { return ucDisplayReport.ReportParameters; } } #endregion #region "Methods" private void EnsureDisplayReport() { if (ucDisplayReport == null) { ucDisplayReport = this.LoadUserControl("~/CMSModules/Reporting/Controls/DisplayReport.ascx") as IDisplayReport; divGraphArea.Controls.Add((Control)ucDisplayReport); } } protected override void OnLoad(EventArgs e) { EnsureDisplayReport(); if (ucDisplayReport != null) { ucDisplayReport.RenderCssClasses = true; } base.OnLoad(e); } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); DisplayReport(false); } /// /// Extracts report code name from report code names list, based on interval selection. Returns single codename for no interval reports. /// /// Report code name list (delimited by semicolons) public string GetReportCodeName(string reportCodeName) { return ucGraphTypePeriod.GetReportName(reportCodeName); } /// /// Display report with given criteria. /// public void DisplayReport(bool intervalChanged) { // If load form parameters are loaded display report calls reload on onInit (time charts not allowed) if (LoadFormParameters) { return; } if (reportLoaded) { return; } if (ucDisplayReport == null) { return; } ucGraphTypePeriod.ProcessChartSelectors(intervalChanged); ucDisplayReport.ReportName = ucGraphTypePeriod.GetReportName(ReportsCodeName); ucDisplayReport.GraphImageWidth = 100; ucDisplayReport.IgnoreWasInit = true; if (pnlPeriodSelectors.Visible) { // Prepare report parameters 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("FirstCategory", typeof(string)); dtp.Columns.Add("SecondCategory", typeof(string)); dtp.Columns.Add("Direct", typeof(string)); dtp.Columns.Add("Search", typeof(string)); dtp.Columns.Add("Reffering", typeof(string)); object[] parameters = new object[8]; parameters[0] = ucGraphTypePeriod.From; parameters[1] = ucGraphTypePeriod.To; parameters[2] = DataName; parameters[3] = HitLogProvider.VISITORS_FIRST; parameters[4] = HitLogProvider.VISITORS_RETURNING; parameters[5] = HitLogProvider.REFERRINGSITE + "_direct"; parameters[6] = HitLogProvider.REFERRINGSITE + "_search"; parameters[7] = HitLogProvider.REFERRINGSITE + "_referring"; dtp.Rows.Add(parameters); dtp.AcceptChanges(); if (!ucDisplayReport.IsReportLoaded()) { ShowError(String.Format(GetString("Analytics_Report.ReportDoesnotExist"), ucDisplayReport.ReportName)); } else { ucDisplayReport.LoadFormParameters = false; ucDisplayReport.DisplayFilter = false; ucDisplayReport.ReportParameters = dtp.Rows[0]; ucDisplayReport.UseExternalReload = true; ucDisplayReport.UseProgressIndicator = true; ucDisplayReport.SelectedInterval = HitsIntervalEnumFunctions.HitsConversionToString(SelectedInterval); } } ucDisplayReport.ReloadData(true); reportLoaded = true; } /// /// Saves current report. /// public int SaveReport() { if (ucDisplayReport != null) { DisplayReport(false); int result = ucDisplayReport.SaveReport(); // Display info label if (result > 0) { ShowConfirmation(String.Format(GetString("Ecommerce_Report.ReportSavedTo"), ReportDisplayName + " - " + DateTime.Now.ToString())); } return result; } return 0; } /// /// Generates query string parameters. /// public string GetQueryStringParameters() { if (ucDisplayReport != null) { return AnalyticsHelper.GetQueryStringParameters(ucDisplayReport.ReportParameters); } return String.Empty; } #endregion }