using System; using System.Data; using System.Collections; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using CMS.FormControls; using CMS.FormEngine; using CMS.GlobalHelper; using CMS.SiteProvider; using TimeZoneInfo = CMS.SiteProvider.TimeZoneInfo; public partial class CMSFormControls_TimeZones_TimeZoneSelector : FormEngineUserControl { #region "Variables" private bool mUseZoneNameForSelection = true; private bool mAddNoneItemsRecord = true; private string mTimeZoneName = ""; private int mTimeZoneId = 0; #endregion #region "Methods" /// /// Gets or sets the enabled state of the control. /// public override bool Enabled { get { return base.Enabled; } set { base.Enabled = value; drpTimeZoneSelector.Enabled = value; } } /// /// Gets or sets the field value. /// public override object Value { get { if (UseZoneNameForSelection) { return TimeZoneName; } else { if (TimeZoneID == 0) { return null; } return TimeZoneID; } } set { if (UseZoneNameForSelection) { TimeZoneName = ValidationHelper.GetString(value, ""); } else { TimeZoneID = ValidationHelper.GetInteger(value, 0); } } } /// /// Gets or sets the TagGroup code name. /// public string TimeZoneName { get { if (UseZoneNameForSelection) { return ValidationHelper.GetString(drpTimeZoneSelector.SelectedValue, ""); } else { TimeZoneInfo tzi = TimeZoneInfoProvider.GetTimeZoneInfo(ValidationHelper.GetInteger(drpTimeZoneSelector.SelectedValue, 0)); if (tzi != null) { return tzi.TimeZoneName; } return ""; } } set { if (UseZoneNameForSelection) { SelectValue(value); mTimeZoneName = value; } else { TimeZoneInfo tzi = TimeZoneInfoProvider.GetTimeZoneInfo(value); if (tzi != null) { SelectValue(tzi.TimeZoneID.ToString()); mTimeZoneId = tzi.TimeZoneID; } } } } /// /// Gets or sets the TagGroup ID. /// public int TimeZoneID { get { if (UseZoneNameForSelection) { string name = ValidationHelper.GetString(drpTimeZoneSelector.SelectedValue, ""); TimeZoneInfo tzi = TimeZoneInfoProvider.GetTimeZoneInfo(name); if (tzi != null) { return tzi.TimeZoneID; } return 0; } else { return ValidationHelper.GetInteger(drpTimeZoneSelector.SelectedValue, 0); } } set { if (UseZoneNameForSelection) { TimeZoneInfo tzi = TimeZoneInfoProvider.GetTimeZoneInfo(value); if (tzi != null) { SelectValue(tzi.TimeZoneName); mTimeZoneName = tzi.TimeZoneName; } } else { SelectValue(value.ToString()); mTimeZoneId = value; } } } /// /// If true, selected value is TimeZoneName, if false, selected value is TimeZoneID. /// public bool UseZoneNameForSelection { get { if ((FieldInfo != null) && (FieldInfo.DataType == FormFieldDataTypeEnum.Integer)) { mUseZoneNameForSelection = false; } return mUseZoneNameForSelection; } set { mUseZoneNameForSelection = value; } } /// /// Gets or sets the value which determines, whether to add none item record to the dropdownlist. /// public bool AddNoneItemsRecord { get { return mAddNoneItemsRecord; } set { mAddNoneItemsRecord = value; } } /// /// Returns ClientID of the DropDownList with timezone. /// public override string ValueElementID { get { return drpTimeZoneSelector.ClientID; } } #endregion #region "Events" protected void Page_Load(object sender, EventArgs e) { } /// /// CreateChildControls() override. /// protected override void CreateChildControls() { base.CreateChildControls(); if (!StopProcessing) { ReloadData(); } } #endregion #region "Methods" /// /// Loads public status according to the control settings. /// public void ReloadData() { // Cleanup drpTimeZoneSelector.ClearSelection(); drpTimeZoneSelector.SelectedValue = null; // Populate the dropdownlist if (UseZoneNameForSelection) { FillDropdown("TimeZoneName"); } else { FillDropdown("TimeZoneID"); } // Try to preselect the value if (UseZoneNameForSelection) { SelectValue(mTimeZoneName); } else { SelectValue(mTimeZoneId.ToString()); } } /// /// Tries to select the specified value in drpTimeZoneSelector. /// private void SelectValue(string val) { try { drpTimeZoneSelector.SelectedValue = val; } catch { } } /// /// Fill drop down list. /// /// Data set with time zones /// Data value field private void FillDropdown(string dataValue) { if (drpTimeZoneSelector.Items.Count == 0) { DataSet ds = TimeZoneInfoProvider.GetTimeZones(null, "TimeZoneGMT", -1, "TimeZoneID ,TimeZoneGMT, TimeZoneName, TimeZoneDisplayName"); if (!DataHelper.DataSourceIsEmpty(ds)) { string text = null; foreach (DataRow row in ds.Tables[0].Rows) { text = String.Format("(GMT{0:+00.00;-00.00}) {1}", row["TimeZoneGMT"], row["TimeZoneDisplayName"]); drpTimeZoneSelector.Items.Add(new ListItem(text, row[dataValue].ToString())); } } // Add none record if needed if (AddNoneItemsRecord) { drpTimeZoneSelector.Items.Insert(0, new ListItem(GetString("General.SelectNone"), "")); } } } #endregion }