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; } }