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