/// <summary>
    /// Builds where condition with subscriber IDs from main DB who meet base filter condition.
    /// </summary>
    /// <param name="baseCondition">Base condition</param>
    /// <param name="subscriberCondition">Condition for subscribers from main DB</param>
    /// <param name="useView">Indicates if subscriber view should be used</param>
    protected string BuildCondition(string baseCondition, string subscriberCondition, bool useView)
    {
        string result = string.Empty;

        // Get IDs of subscribers from current site who meet the original condition
        string  tempWhere = SqlHelper.AddWhereCondition("SubscriberSiteID=" + SiteContext.CurrentSiteID, subscriberCondition);
        DataSet ds        = null;

        if (useView)
        {
            ds = SubscriberInfoProvider.GetSubscribersFromView().Where(tempWhere).Column("SubscriberID");
        }
        else
        {
            ds = SubscriberInfoProvider.GetSubscribers().Where(tempWhere).Column("SubscriberID");
        }

        if (!DataHelper.DataSourceIsEmpty(ds))
        {
            List <string> subscriberIDs = DataHelper.GetStringValues(ds.Tables[0], "SubscriberID");

            string subscriberIDCond = string.Empty;
            int    maxItems         = 10000;
            int    maxToProcess     = 0;
            do
            {
                maxToProcess = (subscriberIDs.Count > maxItems) ? maxItems : subscriberIDs.Count;

                // Get condition in form 'SubscriberID IN (....)' with maximally 10.000 items
                subscriberIDCond = SqlHelper.AddWhereCondition(subscriberIDCond, SqlHelper.GetWhereCondition <string>("SubscriberID", subscriberIDs.GetRange(0, maxToProcess), false), "OR");

                subscriberIDs.RemoveRange(0, maxToProcess);
            }while (subscriberIDs.Count > 0);

            // Add the condition that only clasic subscribers should be filtered with the IDs condition
            result = SqlHelper.AddWhereCondition("SubscriberID>0", subscriberIDCond);
        }

        // Add original condition for contact group members
        return(SqlHelper.AddWhereCondition(result, string.Format("(SubscriberID=0 AND {0})", baseCondition), "OR"));
    }
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        // Check email format
        string email  = txtEmail.Text.Trim();
        string result = new Validator().IsEmail(email, GetString("unsubscribe.invalidemailformat")).Result;

        if (String.IsNullOrEmpty(result))
        {
            bool requestSent = false;
            int  siteId      = 0;
            if (CMSContext.CurrentSite != null)
            {
                siteId = CMSContext.CurrentSiteID;
            }

            // Try to get all subscriber infos with given e-mail
            DataSet ds = SubscriberInfoProvider.GetSubscribersFromView(email, siteId);
            if (!DataHelper.DataSourceIsEmpty(ds))
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    SubscriberInfo sb = new SubscriberInfo(dr);
                    if ((sb != null) && (string.IsNullOrEmpty(sb.SubscriberType) || sb.SubscriberType.EqualsCSafe(PredefinedObjectType.CONTACT, true) || sb.SubscriberType.EqualsCSafe(SiteObjectType.USER, true)))
                    {
                        // Get newsletter information
                        NewsletterInfo news = NewsletterInfoProvider.GetNewsletterInfo(NewsletterName, siteId);
                        if (news != null)
                        {
                            // Get subscription info
                            SubscriberNewsletterInfo sni = SubscriberNewsletterInfoProvider.GetSubscriberNewsletterInfo(sb.SubscriberID, news.NewsletterID);
                            // Send e-mail to subscribed user only
                            if ((sni != null) && (sni.SubscriptionEnabled))
                            {
                                SendUnsubscriptionRequest(sb, news, sni, CMSContext.CurrentSiteName);
                                requestSent = true; // At least one request was sent
                            }
                        }
                    }
                }
            }

            // Unsubscription failed if none confirmation e-mail was sent
            if (!requestSent)
            {
                // Use default error message if none is specified
                if (String.IsNullOrEmpty(ErrorText))
                {
                    result = GetString("unsubscribe.notsubscribed");
                }
                else
                {
                    result = ErrorText;
                }
            }
        }

        // Display error message if set
        if (!string.IsNullOrEmpty(result))
        {
            lblError.Text    = result;
            lblError.Visible = true;
        }
        else
        {
            // Display unsubscription confirmation
            lblInfo.Visible = true;
            if (String.IsNullOrEmpty(ResultText))
            {
                // Use default message if none was specified
                lblInfo.Text = GetString("unsubscribe.confirmtext");
            }
            else
            {
                lblInfo.Text = ResultText;
            }
            lblError.Visible  = false;
            txtEmail.Visible  = false;
            btnSubmit.Visible = false;
        }
    }