/// <inheritdoc /> public virtual bool AddSubscriber(SubscribeFormViewModel viewModel, out string error) { error = string.Empty; if (NewsletterValidator.IsValidEmail(viewModel.Email)) { var newslettersManager = NewslettersManager.GetManager(this.Provider); // check if subscriber exists var email = viewModel.Email.ToLower(); IQueryable <Subscriber> matchingSubscribers = newslettersManager.GetSubscribers().Where(s => s.Email == email); bool subscriberAlreadyInList = false; foreach (Subscriber s in matchingSubscribers) { if (s.Lists.Any(ml => ml.Id == this.SelectedMailingListId)) { subscriberAlreadyInList = true; break; } } if (subscriberAlreadyInList) { // If the email has already been subscribed, consider it as success. return(true); } else { Subscriber subscriber = matchingSubscribers.FirstOrDefault(); if (subscriber == null) { subscriber = newslettersManager.CreateSubscriber(true); subscriber.Email = viewModel.Email; subscriber.FirstName = viewModel.FirstName != null ? viewModel.FirstName : string.Empty; subscriber.LastName = viewModel.LastName != null ? viewModel.LastName : string.Empty; } // check if the mailing list exists if (newslettersManager.Subscribe(subscriber, this.SelectedMailingListId)) { if (this.SuccessfullySubmittedForm == SuccessfullySubmittedForm.OpenSpecificPage) { viewModel.RedirectPageUrl = HyperLinkHelpers.GetFullPageUrl(this.PageId); } newslettersManager.SaveChanges(); return(true); } } } error = Res.Get <SubscribeFormResources>().EmailAddressErrorMessageResourceName; return(false); }
/// <inheritdoc /> public virtual bool AddSubscriber(SubscribeFormViewModel viewModelOld, out string error) { var agreed = SystemManager.CurrentHttpContext.Request.Params["TermsAgreement"].Split(',').Count() > 1; var viewModel = new SubscribeFormViewModelCustom() { FirstName = viewModelOld.FirstName, LastName = viewModelOld.LastName, Email = viewModelOld.Email, CssClass = viewModelOld.CssClass, RedirectPageUrl = viewModelOld.RedirectPageUrl, // custom - getting the property values from the request TermsAgreement = agreed }; error = string.Empty; if (viewModel.TermsAgreement) { if (NewsletterValidator.IsValidEmail(viewModel.Email)) { var newslettersManager = NewslettersManager.GetManager(this.Provider); // check if subscriber exists var email = viewModel.Email.ToLower(); IQueryable <Subscriber> matchingSubscribers = newslettersManager.GetSubscribers().Where(s => s.Email == email); bool subscriberAlreadyInList = false; foreach (Subscriber s in matchingSubscribers) { if (s.Lists.Any(ml => ml.Id == this.SelectedMailingListId)) { subscriberAlreadyInList = true; break; } } if (subscriberAlreadyInList) { Subscriber subscriber = matchingSubscribers.FirstOrDefault(); if (subscriber != null) { //update their name subscriber.FirstName = viewModel.FirstName; subscriber.LastName = viewModel.LastName; //update their terms acceptance subscriber.SetValue("TermsAccepted", viewModel.TermsAgreement); newslettersManager.SaveChanges(); } // If the email has already been subscribed, consider it as success. return(true); } else { Subscriber subscriber = matchingSubscribers.FirstOrDefault(); if (subscriber == null) { subscriber = newslettersManager.CreateSubscriber(true); subscriber.Email = viewModel.Email; subscriber.FirstName = viewModel.FirstName ?? string.Empty; subscriber.LastName = viewModel.LastName ?? string.Empty; // custom - setting the property values subscriber.SetValue("TermsAccepted", viewModel.TermsAgreement); } else { subscriber.FirstName = viewModel.FirstName ?? string.Empty; subscriber.LastName = viewModel.LastName ?? string.Empty; //update acceptance of terms subscriber.SetValue("TermsAccepted", viewModel.TermsAgreement); } // check if the mailing list exists if (newslettersManager.Subscribe(subscriber, this.SelectedMailingListId)) { if (this.SuccessfullySubmittedForm == SuccessfullySubmittedForm.OpenSpecificPage) { viewModel.RedirectPageUrl = HyperLinkHelpers.GetFullPageUrl(this.PageId); } newslettersManager.SaveChanges(); return(true); } } } error = Res.Get <SubscribeFormResources>().EmailAddressErrorMessageResourceName; } error = "You must agree to the terms"; return(false); }