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
}