using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using CMS.UIControls;
using CMS.Newsletter;
using CMS.GlobalHelper;
public partial class CMSModules_Newsletters_Controls_WinnerOptions : CMSAdminControl
{
#region "Constants"
private const string INTERVAL_MINUTES = "-1";
private const string INTERVAL_HOURS = "0";
private const string INTERVAL_DAYS = "1";
private const string INTERVAL_WEEKS = "2";
private const string INTERVAL_MONTHS = "3";
#endregion
private bool mEnabled = true;
#region "Properties"
///
/// Gets or sets value that indicates how to select a winner.
///
public ABTestWinnerSelectionEnum WinnerSelection
{
get { return GetWinnerSelection(); }
set { SetWinnerSelection(value); }
}
///
/// Gets or sets time interval in minutes.
///
public int TimeInterval
{
get { return GetTimeInterval(); }
set { SetTimeInterval(value); }
}
///
/// Enables/disables control.
///
public bool Enabled
{
get { return mEnabled; }
set { mEnabled = value; }
}
#endregion
#region "Events"
public event EventHandler OnChange;
#endregion
protected void Page_Load(object sender, EventArgs e)
{
if (StopProcessing)
{
return;
}
radClicks.CheckedChanged += new EventHandler(radClicks_CheckedChanged);
radOpen.CheckedChanged += new EventHandler(radClicks_CheckedChanged);
radManually.CheckedChanged += new EventHandler(radClicks_CheckedChanged);
ReloadData();
}
///
/// Forcibly reloads control data.
///
/// Enforce reload
public override void ReloadData(bool forceReload)
{
if (forceReload || !RequestHelper.IsPostBack())
{
SetWinnerSelection(WinnerSelection);
SetTimeInterval(TimeInterval);
}
pnlG.GroupingText = GetString("newsletterissue_send.grpwinnerselection");
radClicks.Enabled = radOpen.Enabled = radManually.Enabled = drpInterval.Enabled = txtInterval.Enabled = Enabled;
radClicks_CheckedChanged(this, EventArgs.Empty);
}
protected void radClicks_CheckedChanged(object sender, EventArgs e)
{
// Disable interval settings if winner will be selected manually
txtInterval.Enabled = !radManually.Checked;
txtInterval.ReadOnly = radManually.Checked;
drpInterval.Enabled = !radManually.Checked;
if (OnChange != null)
{
OnChange(this, EventArgs.Empty);
}
}
///
/// Loads specified time interval to control.
///
/// Time interval in hours
private void SetTimeInterval(int timeInterval)
{
// Load dropdown list for the first time
if (drpInterval.Items.Count <= 0)
{
drpInterval.Items.Add(new ListItem(GetString("newsletterissue_send.minutes"), INTERVAL_MINUTES));
drpInterval.Items.Add(new ListItem(GetString("newsletterissue_send.hours"), INTERVAL_HOURS));
drpInterval.Items.Add(new ListItem(GetString("newsletterissue_send.days"), INTERVAL_DAYS));
drpInterval.Items.Add(new ListItem(GetString("newsletterissue_send.weeks"), INTERVAL_WEEKS));
drpInterval.Items.Add(new ListItem(GetString("newsletterissue_send.months"), INTERVAL_MONTHS));
}
Dictionary intervals = new Dictionary();
intervals.Add(INTERVAL_MONTHS, 60 * 24 * 30);
intervals.Add(INTERVAL_WEEKS, 60 * 24 * 7);
intervals.Add(INTERVAL_DAYS, 60 * 24);
intervals.Add(INTERVAL_HOURS, 60);
intervals.Add(INTERVAL_MINUTES, 1);
foreach (string key in intervals.Keys)
{
if ((timeInterval % intervals[key]) == 0)
{
drpInterval.SelectedValue = key;
txtInterval.Text = Convert.ToString(timeInterval / intervals[key]);
break;
}
}
}
///
/// Returns time interval from control.
///
private int GetTimeInterval()
{
int value = ValidationHelper.GetInteger(txtInterval.Text, 0);
switch (drpInterval.SelectedValue)
{
case INTERVAL_HOURS:
return value * 60;
case INTERVAL_DAYS:
return value * 60 * 24;
case INTERVAL_WEEKS:
return value * 60 * 24 * 7;
case INTERVAL_MONTHS:
return value * 60 * 24 * 30;
default:
return value;
}
}
///
/// Load specified option to controls.
///
/// Winner selection option
private void SetWinnerSelection(ABTestWinnerSelectionEnum winnerSelection)
{
radClicks.Checked = radOpen.Checked = radManually.Checked = false;
radClicks.Checked = winnerSelection == ABTestWinnerSelectionEnum.TotalUniqueClicks;
radOpen.Checked = winnerSelection == ABTestWinnerSelectionEnum.OpenRate;
radManually.Checked = winnerSelection == ABTestWinnerSelectionEnum.Manual;
}
///
/// Returns winner selection option from controls.
///
private ABTestWinnerSelectionEnum GetWinnerSelection()
{
if (radClicks.Checked) return ABTestWinnerSelectionEnum.TotalUniqueClicks;
else if (radOpen.Checked) return ABTestWinnerSelectionEnum.OpenRate;
return ABTestWinnerSelectionEnum.Manual;
}
}