コード例 #1
0
        public async Task <ActionResult> Edit(long id)
        {
            MailingListSubscriber mailingListSubscriber = await db.ActiveMailingListSubscribers.FindAsync(id);

            if (mailingListSubscriber == null)
            {
                return(HttpNotFound());
            }

            return(View(mailingListSubscriber));
        }
コード例 #2
0
        public async Task <ActionResult> Create(long id, [Bind(Include = AllowedFields)] MailingListSubscriber mailingListSubscriber)
        {
            if (ModelState.IsValid)
            {
                var mailinglist = await db.ActiveMailingLists.Where(m => m.AllowSubscribe).FindAsync(id);

                if (mailinglist != null)
                {
                    MailingListSubscriber existing = await db.ActiveMailingListSubscribers.FirstOrDefaultAsync(s => s.Email == mailingListSubscriber.Email && s.MailingList.Id == mailinglist.Id);

                    if (existing == null)
                    {
                        mailinglist.Subscribers.Add(mailingListSubscriber);
                        await db.SaveChangesAsync();
                    }
                    else
                    {
                        mailingListSubscriber = existing;
                    }
                    if (!mailingListSubscriber.Enabled)
                    {
                        EmailSender sender = new EmailSender(
                            mailinglist.Name + " - Confirm Subscription",
                            string.Format("Confirm your email address by following this link: <br/><a href=\"{0}\">{0}</a>",
                                          string.Format("http://{0}/MailingListSubscribers/Verify/{1}", Settings.CanonicalHostName, mailingListSubscriber.Verification)),
                            mailingListSubscriber.Email);
                        sender.ToName = mailingListSubscriber.FullName();
                        sender.IsHTML = true;
                        sender.Execute();
                    }

                    if (Roles.UserInAnyRole(User, Roles.ListManagers))
                    {
                        return(RedirectToMailingList(id));
                    }
                    else
                    {
                        return(RedirectToAction("Confirm"));
                    }
                }
                else
                {
                    return(HttpNotFound());
                }
            }

            return(View(mailingListSubscriber));
        }
コード例 #3
0
        public MailingListController()
        {
            Post("/api/v1/mailing_list/subscribe", _ => {
                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "email" }),
                    new ShouldBeValidEmail(),
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var email = GetRequestStr("email");

                var existingSubscriber = MailingListSubscriber.FindBy("email", email);

                if (existingSubscriber == null)
                {
                    MailingListSubscriber.Create(email);
                }

                return(HttpResponse.Data(new JObject()
                {
                    ["status"] = "subscribed"
                }));
            });

            Delete("/api/v1/mailing_list/unsubscribe", _ => {
                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "unsubscribe_key" })
                });
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var subscriber = MailingListSubscriber.FindBy(
                    "unsubscribe_key", GetRequestStr("unsubscribe_key")
                    );
                subscriber?.Delete();

                return(HttpResponse.Data(new JObject()
                {
                    ["status"] = "unsubscribed"
                }));
            });
        }
コード例 #4
0
        public async Task <ActionResult> Delete(long id)
        {
            MailingListSubscriber mailingListSubscriber = await db.ActiveMailingListSubscribers.FindAsync(id);

            if (mailingListSubscriber == null)
            {
                return(HttpNotFound());
            }
            var mailingListId = mailingListSubscriber.MailingList.Id;

            db.MailingListSubscribers.Remove(mailingListSubscriber);
            await db.SaveChangesAsync();

            SetSuccessMessage("{0} was removed successfully!", mailingListSubscriber.FullName());

            return(RedirectToMailingList(mailingListId));
        }
コード例 #5
0
        public async Task <ActionResult> Verify(string id)
        {
            MailingListSubscriber mailingListSubscriber = await db.ActiveMailingListSubscribers
                                                          .Where(m => m.Verification == id)
                                                          .FirstOrDefaultAsync();

            if (mailingListSubscriber == null)
            {
                return(HttpNotFound());
            }

            mailingListSubscriber.Enabled         = true;
            db.Entry(mailingListSubscriber).State = EntityState.Modified;
            await db.SaveChangesAsync();

            return(RedirectToAction("Verified"));
        }
コード例 #6
0
        public async Task <ActionResult> Unsubscribe(long id, string email)
        {
            MailingListSubscriber mailingListSubscriber = await db.ActiveMailingListSubscribers.FindAsync(id);

            if (mailingListSubscriber != null)
            {
                db.MailingListSubscribers.Remove(mailingListSubscriber);
                await db.SaveChangesAsync();
            }
            if (!string.IsNullOrEmpty(email))
            {
                var subs = db.ActiveMailingListSubscribers.Where(m => m.Email == email).ToList();
                if (subs != null && subs.Count > 0)
                {
                    db.MailingListSubscribers.RemoveRange(subs);
                    await db.SaveChangesAsync();
                }
            }

            return(RedirectToAction("Unsubscribed"));
        }
コード例 #7
0
        public async Task <ActionResult> Edit([Bind(Include = AllowedFields)] MailingListSubscriber subscriber)
        {
            if (ModelState.IsValid)
            {
                MailingListSubscriber mailingListSubscriber = await db.ActiveMailingListSubscribers.FindAsync(subscriber.Id);

                if (mailingListSubscriber == null)
                {
                    return(HttpNotFound());
                }
                mailingListSubscriber.Update(subscriber);

                db.Entry(mailingListSubscriber).State = EntityState.Modified;
                await db.SaveChangesAsync();

                SetSuccessMessage("List subscriber {0} was updated successfully!", mailingListSubscriber.FullName());

                return(RedirectToMailingList(mailingListSubscriber.MailingList.Id));
            }

            return(Auto(subscriber));
        }
コード例 #8
0
        public async Task <ActionResult> Unsubscribe(string id)
        {
            MailingListSubscriber mailingListSubscriber = await db.ActiveMailingListSubscribers.Where(m => m.Verification == id).FirstOrDefaultAsync();

            return(View(mailingListSubscriber ?? new MailingListSubscriber()));
        }