using System; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.Controls; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.Newsletter; public partial class CMSModules_Newsletters_Controls_SubscriberBlockedFilter : CMSAbstractBaseFilterControl { #region "Constants" private const string All = "ALL"; private const string Active = "ACTIVE"; private const string Blocked = "BLOCKED"; #endregion #region "Variables" private int mBounceLimit; #endregion #region "Properties" /// /// Gets or sets the where condition. /// public override string WhereCondition { get { base.WhereCondition = GenerateWhereCondition(); return base.WhereCondition; } set { base.WhereCondition = value; } } #endregion #region "Methods" protected override void OnInit(EventArgs e) { base.OnInit(e); if (!RequestHelper.IsPostBack()) { Reload(); } } protected void Page_Load(object sender, EventArgs e) { mBounceLimit = NewsletterHelper.BouncedEmailsLimit(CMSContext.CurrentSiteName); } /// /// Reloads control. /// protected void Reload() { ddlBounceFilter.Items.Clear(); ddlBounceFilter.Items.Add(new ListItem(ResHelper.GetString("general.selectall"), All)); ddlBounceFilter.Items.Add(new ListItem(ResHelper.GetString("newsletter.filter.bouncedemails.active"), Active)); ddlBounceFilter.Items.Add(new ListItem(ResHelper.GetString("newsletter.filter.bouncedemails.blocked"), Blocked)); } /// /// Generates WHERE condition. /// private string GenerateWhereCondition() { if (mBounceLimit <= 0) { return null; } switch (ddlBounceFilter.SelectedValue) { case All: return null; case Active: return string.Format("(((SubscriberType IS NULL OR SubscriberType='{0}' OR SubscriberType='{1}') AND (SubscriberBounces IS NULL OR SubscriberBounces<{2})) OR (SubscriberType = '{3}') OR (SubscriberType = '{4}'))", SiteObjectType.USER, PredefinedObjectType.CONTACT, mBounceLimit, SiteObjectType.ROLE, PredefinedObjectType.CONTACTGROUP); case Blocked: return string.Format("((SubscriberType IS NULL OR SubscriberType='{0}' OR SubscriberType='{1}') AND (SubscriberBounces>={2}))", SiteObjectType.USER, PredefinedObjectType.CONTACT, mBounceLimit); default: return null; } } #endregion #region "State management" /// /// Stores filter state to the specified object. /// /// The object that holds the filter state. public override void StoreFilterState(FilterState state) { state.AddValue("blocked", ddlBounceFilter.SelectedValue); } /// /// Restores filter state from the specified object. /// /// The object that holds the filter state. public override void RestoreFilterState(FilterState state) { ddlBounceFilter.SelectedValue = state.GetString("blocked"); } /// /// Resets the filter settings. /// public override void ResetFilter() { ddlBounceFilter.SelectedIndex = 0; } #endregion }