public ActionResult Subscribe(SubscribeFormViewModel viewModel)
        {
            if (!this.IsLicensed)
            {
                return(this.Content(this.LicensingMessage));
            }

            if (ModelState.IsValid)
            {
                string error;
                bool   isSucceeded = this.Model.AddSubscriber(viewModel, out error);

                this.ViewBag.Error       = error;
                this.ViewBag.IsSucceeded = isSucceeded;
                this.ViewBag.Email       = AntiXssEncoder.HtmlEncode(viewModel.Email, false);

                if (isSucceeded)
                {
                    var validator   = ObjectFactory.Resolve <IRedirectUriValidator>();
                    var redirectUrl = viewModel.RedirectPageUrl;
                    if (this.Model.SuccessfullySubmittedForm == SuccessfullySubmittedForm.OpenSpecificPage && !string.IsNullOrEmpty(viewModel.RedirectPageUrl) && validator.IsValid(redirectUrl))
                    {
                        return(this.Redirect(viewModel.RedirectPageUrl));
                    }

                    this.ModelState.Clear();
                }
            }

            var fullTemplateName = this.templateNamePrefix + this.TemplateName;

            viewModel = this.Model.CreateViewModel();

            return(this.View(fullTemplateName, viewModel));
        }
Exemplo n.º 2
0
        public ActionResult Index(SubscribeFormViewModel viewModel)
        {
            if (!this.IsLicensed)
            {
                return(this.Content(this.LicensingMessage));
            }

            if (ModelState.IsValid)
            {
                string error;
                bool   isSucceeded = this.Model.AddSubscriber(viewModel, out error);

                this.ViewBag.Error       = error;
                this.ViewBag.IsSucceeded = isSucceeded;
                this.ViewBag.Email       = viewModel.Email;

                if (isSucceeded)
                {
                    if (this.Model.SuccessfullySubmittedForm == SuccessfullySubmittedForm.OpenSpecificPage && !string.IsNullOrEmpty(viewModel.RedirectPageUrl))
                    {
                        return(this.Redirect(viewModel.RedirectPageUrl));
                    }

                    this.ModelState.Clear();
                }
            }

            var fullTemplateName = this.templateNamePrefix + this.TemplateName;

            viewModel = this.Model.CreateViewModel();

            return(this.View(fullTemplateName, viewModel));
        }
Exemplo n.º 3
0
        public override bool AddSubscriber(SubscribeFormViewModel viewModel, out string error)
        {
            error = string.Empty;

            return(true);
        }
Exemplo n.º 4
0
        /// <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);
        }
        public ActionResult Subscribe(SubscribeFormViewModel details)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    // Ensure one signature per email address
                    if (subscriptionService.Validate(details.Email))
                    {
                        return View();
                    }

                    // Create signature
                    var subscription = new Subscription()
                    {
                        Email = details.Email
                    };

                    // Add
                    subscriptionService.Add(subscription);

                    // Send confirmation email
                    emailService.Send(subscription.Email, "Thank-you for subscribing!", "Thank-you for subscribing to receive more infomation on the progress of our bid! If you would like to unsubscribe please let us know via email.");

                    return PartialView("_Success");
                }
                catch (Exception ex)
                {
                    throw;
                }
            }

            var modelStateErrors = ModelState.Values.SelectMany(v => v.Errors);

            return View();
        }