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.SettingsProvider;
using CMS.UIControls;
using CMS.WebAnalytics;
public partial class CMSModules_WebAnalytics_Pages_Tools_Campaign_Tab_Reports : CMSCampaignAndConversionPage
{
#region "Variables"
private bool isSaved = false;
private bool reportLoaded = false;
private string campaignName = String.Empty;
private CampaignInfo campaignInfo;
private IDisplayReport ucDisplayReport = null;
#endregion
#region "Methods"
protected void Page_Load(object sender, EventArgs e)
{
reportHeaderActions.ActionPerformed += HeaderActions_ActionPerformed;
ucDisplayReport = this.LoadUserControl("~/CMSModules/Reporting/Controls/DisplayReport.ascx") as IDisplayReport;
pnlContent.Controls.Add((Control)ucDisplayReport);
CurrentMaster.PanelContent.CssClass = string.Empty;
UIHelper.AllowUpdateProgress = false;
ScriptHelper.RegisterDialogScript(Page);
// Campaign Info
int campaignID = QueryHelper.GetInteger("campaignID", 0);
campaignInfo = CampaignInfoProvider.GetCampaignInfo(campaignID);
if (campaignInfo == null)
{
return;
}
// Validate SiteID for non administrators
if (!CMSContext.CurrentUser.IsGlobalAdministrator)
{
if (campaignInfo.CampaignSiteID != CMSContext.CurrentSiteID)
{
RedirectToAccessDenied(GetString("cmsmessages.accessdenied"));
}
}
campaignName = campaignInfo.CampaignName;
ScriptHelper.RegisterPrintDialogScript(this);
ucGraphType.ProcessChartSelectors(false);
// Enables/disables radio buttons (based on UI elements)
CurrentUserInfo ui = CMSContext.CurrentUser;
bool checkedButton = false;
if (!RequestHelper.IsPostBack())
{
if (!ui.IsGlobalAdministrator)
{
rbCount.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "CampaignConversionCount");
rbDetail.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "CampaignDetails");
rbGoalCount.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "goals.numberofconversions");
rbGoalValue.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "goals.totalvalueofconversions");
rbGoalView.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "goals.numberofvisitors");
rbValue.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "campaignsConversionValue");
rbValuePerVisitor.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "valuepervisitor");
rbViews.Enabled = ui.IsAuthorizedPerUIElement("cms.WebAnalytics", "campaign.overview");
// 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("campaign.noreportavaible"));
}
}
else
{
// Admin check first radio button
rbViews.Checked = true;
}
}
}
///
/// Display report
///
/// If true, display report control is reloaded
private void DisplayReport(bool reload)
{
if (reportLoaded)
{
return;
}
ucGraphType.ProcessChartSelectors(false);
// Set reports name
const string views = "campaign.yearreport;campaign.monthreport;campaign.weekreport;campaign.dayreport;campaign.hourreport";
const string conversionCount = "campaignconversioncount.yearreport;campaignconversioncount.monthreport;campaignconversioncount.weekreport;campaignconversioncount.dayreport;campaignconversioncount.hourreport";
const string conversionValue = "campaignconversionvalue.yearreport;campaignconversionvalue.monthreport;campaignconversionvalue.weekreport;campaignconversionvalue.dayreport;campaignconversionvalue.hourreport";
const string details = "campaigns.singledetails";
const string visitorsGoal = "goalsnumberofvisitors.yearreport;goalsnumberofvisitors.monthreport;goalsnumberofvisitors.weekreport;goalsnumberofvisitors.dayreport;goalsnumberofvisitors.hourreport";
const string valuePerVisitor = "goalsvaluepervisit.yearreport;goalsvaluepervisit.monthreport;goalsvaluepervisit.weekreport;goalsvaluepervisit.dayreport;goalsvaluepervisit.hourreport";
const string valueGoal = "goalsvalueofconversions.yearreport;goalsvalueofconversions.monthreport;goalsvalueofconversions.weekreport;goalsvalueofconversions.dayreport;goalsvalueofconversions.hourreport";
const string countGoal = "goalsnumberofconversions.yearreport;goalsnumberofconversions.monthreport;goalsnumberofconversions.weekreport;goalsnumberofconversions.dayreport;goalsnumberofconversions.hourreport";
String codeName = String.Empty;
pnlConversions.Visible = false;
ucGraphType.EnableDateTimePicker = true;
if (rbViews.Checked)
{
CheckWebAnalyticsUI("campaign.overview");
codeName = "campaign";
ucDisplayReport.ReportName = ucGraphType.GetReportName(views);
}
if (rbCount.Checked)
{
CheckWebAnalyticsUI("CampaignConversionCount");
pnlConversions.Visible = true;
codeName = "campconversion";
ucDisplayReport.ReportName = ucGraphType.GetReportName(conversionCount);
}
if (rbValue.Checked)
{
CheckWebAnalyticsUI("campaignsConversionValue");
pnlConversions.Visible = true;
codeName = "campconversion";
ucDisplayReport.ReportName = ucGraphType.GetReportName(conversionValue);
}
if (rbDetail.Checked)
{
CheckWebAnalyticsUI("CampaignDetails");
ucDisplayReport.ReportName = ucGraphType.GetReportName(details);
ucGraphType.EnableDateTimePicker = false;
}
if (rbGoalView.Checked)
{
CheckWebAnalyticsUI("goals.numberofvisitors");
ucDisplayReport.ReportName = ucGraphType.GetReportName(visitorsGoal);
}
if (rbGoalCount.Checked)
{
CheckWebAnalyticsUI("goals.numberofconversions");
ucDisplayReport.ReportName = ucGraphType.GetReportName(countGoal);
}
if (rbGoalValue.Checked)
{
CheckWebAnalyticsUI("goals.totalvalueofconversions");
ucDisplayReport.ReportName = ucGraphType.GetReportName(valueGoal);
}
if (rbValuePerVisitor.Checked)
{
CheckWebAnalyticsUI("goals.valuepervisitor");
ucDisplayReport.ReportName = ucGraphType.GetReportName(valuePerVisitor);
}
// Load conversions fit to campaign
if ((pnlConversions.Visible) && (campaignInfo != null))
{
ucConversions.PostbackOnDropDownChange = true;
if (!campaignInfo.CampaignUseAllConversions)
{
ucConversions.WhereCondition = "ConversionID IN (SELECT ConversionID FROM Analytics_ConversionCampaign WHERE CampaignID =" + campaignInfo.CampaignID + ")";
}
ucConversions.WhereCondition = SqlHelperClass.AddWhereCondition(ucConversions.WhereCondition, "ConversionSiteID =" + CMSContext.CurrentSiteID);
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;
// 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("CampaignName", typeof(string));
dtp.Columns.Add("ConversionName", typeof(string));
object[] parameters = new object[5];
parameters[0] = ucGraphType.From;
parameters[1] = ucGraphType.To;
parameters[2] = codeName;
parameters[3] = campaignName;
parameters[4] = conversion;
dtp.Rows.Add(parameters);
dtp.AcceptChanges();
ucDisplayReport.ReportParameters = dtp.Rows[0];
if (reload)
{
ucDisplayReport.ReloadData(true);
}
reportLoaded = true;
}
///
/// Handles lnkSave click event.
///
protected void lnkSave_Click(object sender, EventArgs e)
{
Save();
}
protected override void OnPreRender(EventArgs e)
{
DisplayReport(true);
reportHeaderActions.ReportName = ucDisplayReport.ReportName;
reportHeaderActions.ReportParameters = ucDisplayReport.ReportParameters;
reportHeaderActions.SelectedInterval = ucGraphType.SelectedInterval;
reportHeaderActions.ManageDataCodeName = "singlecampaign;" + campaignName;
base.OnPreRender(e);
}
///
/// VerifyRenderingInServerForm.
///
/// Control
public override void VerifyRenderingInServerForm(Control control)
{
if (!isSaved)
{
base.VerifyRenderingInServerForm(control);
}
}
protected void HeaderActions_ActionPerformed(object sender, CommandEventArgs e)
{
switch (e.CommandName)
{
case ComponentEvents.SAVE:
Save();
break;
}
}
///
/// 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)
{
lblInfo.Visible = true;
lblInfo.Text = String.Format(GetString("Analytics_Report.ReportSavedTo"), ucDisplayReport.ReportDisplayName + " - " + DateTime.Now.ToString());
}
isSaved = false;
}
#endregion
}