HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/TDijk1/erp-apps.eu/wwwroot/CMSModules/Newsletters/Controls/WinnerOptions.ascx.cs
using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;

using CMS.UIControls;
using CMS.Newsletters;
using CMS.Helpers;

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"

    /// <summary>
    /// Gets or sets value that indicates how to select a winner.
    /// </summary>
    public ABTestWinnerSelectionEnum WinnerSelection
    {
        get { return GetWinnerSelection(); }
        set { SetWinnerSelection(value); }
    }


    /// <summary>
    /// Gets or sets time interval in minutes.
    /// </summary>
    public int TimeInterval
    {
        get { return GetTimeInterval(); }
        set { SetTimeInterval(value); }
    }


    /// <summary>
    /// Enables/disables control.
    /// </summary>
    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();
    }


    /// <summary>
    /// Forcibly reloads control data.
    /// </summary>
    /// <param name="forceReload">Enforce reload</param>
    public override void ReloadData(bool forceReload)
    {
        if (forceReload || !RequestHelper.IsPostBack())
        {
            SetWinnerSelection(WinnerSelection);
            SetTimeInterval(TimeInterval);
        }
        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);
        }
    }


    /// <summary>
    /// Loads specified time interval to control.
    /// </summary>
    /// <param name="timeInterval">Time interval in hours</param>
    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<string, int> intervals = new Dictionary<string,int>();
        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;
            }
        }
    }


    /// <summary>
    /// Returns time interval from control.
    /// </summary>
    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;
        }
    }


    /// <summary>
    /// Load specified option to controls.
    /// </summary>
    /// <param name="winnerSelection">Winner selection option</param>
    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;
    }


    /// <summary>
    /// Returns winner selection option from controls.
    /// </summary>
    private ABTestWinnerSelectionEnum GetWinnerSelection() 
    {
        if (radClicks.Checked) return ABTestWinnerSelectionEnum.TotalUniqueClicks;
        else if (radOpen.Checked) return ABTestWinnerSelectionEnum.OpenRate;
        return ABTestWinnerSelectionEnum.Manual;
    }
}