summaryrefslogtreecommitdiff
path: root/app/lttr/views.py
blob: c6b0434eb9a700fd68cbc1854c75db67ece769f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import socket
from django.views.generic import ListView, CreateView, TemplateView, FormView
from django.views.generic.detail import DetailView
from django.views.generic.dates import YearArchiveView, MonthArchiveView
from django.contrib.syndication.views import Feed
from django.template.response import TemplateResponse
from django.contrib.auth import get_user_model
from django.db.models import Q
from django.shortcuts import get_object_or_404, redirect
from django.conf import settings
from django.urls import reverse, reverse_lazy

from utils.views import PaginatedListView, LuxDetailView

from smtplib import SMTPException
from .models import OldNewsletterMailing, Subscriber, Newsletter, PostcardSubscriber
from .forms import SubscribeRequestForm, UpdateForm, PostcardForm

ACTIONS = ('subscribe', 'unsubscribe', 'update')


class NewsletterSubscribedView(TemplateView):
    template_name = "lttr/subscribed.html"


class NewsletterOptionsView(ListView):
    model = Newsletter


class ConfirmSubscriptionView(DetailView):
    model = Subscriber
    template_name = "lttr/confirm_activate.html"

    def get_object(self):
        obj = Subscriber.objects.get(newsletter__slug=self.kwargs['slug'], activation_code=self.kwargs['activation_code'])
        if obj.subscribed is False:
            obj.update('subscribe')
        return obj

    def get_context_data(self, **kwargs):
        context = super(ConfirmSubscriptionView, self).get_context_data(**kwargs)
        context['newsletter'] = self.kwargs['slug']
        return context


class NewsletterSubscribeView(CreateView):
    """
    Return a subscribe form for iframe embedding
    """
    model = Subscriber
    form_class = SubscribeRequestForm
    action = 'subscribe'
    slug = None
    

    def get_template_names(self):
        return ["lttr/%s_subscribe.html" % self.slug, 'lttr/subscribe.html']

    def get_form_kwargs(self):
        kwargs = super(NewsletterSubscribeView, self).get_form_kwargs()
        try:
            self.slug = self.kwargs['slug']
        except:
            pass
        nl = Newsletter.objects.get(slug=self.slug)
        kwargs['newsletter'] = nl
        return kwargs

    def get_success_url(self):
        return reverse_lazy('lttr:subscribed')

    def form_valid(self, form, **kwargs):
        form.instance.user, created = get_user_model().objects.get_or_create(
                email=form.cleaned_data['email_field'],
                username=form.cleaned_data['email_field']
        )
        self.object = form.save()
        try:
            self.object.send_activation_email(action=self.action)

        except (SMTPException, socket.error) as e:
            print(e)
            self.error = True

            # Although form was valid there was error while sending email,
            # so stay at the same url.
            return super(NewsletterSubscribeView, self).form_invalid(form)
        return super(NewsletterSubscribeView, self).form_valid(form)


class UnsubscribeRequestView(DetailView):
    model = Subscriber
    template_name = "lttr/unsubscribe.html"

    def get_object(self):
        obj = Subscriber.objects.get(newsletter__slug=self.kwargs['slug'],activation_code=self.kwargs['activation_code'])
        if obj.subscribed is True:
            obj.update('unsubscribe')
        return obj


    def get_context_data(self, **kwargs):
        context = super(UnsubscribeRequestView, self).get_context_data(**kwargs)
        context['subscriber'] = self.get_object()
        context['newsletter'] = self.kwargs['slug']
        return context


class PostcardSubscribedView(TemplateView):
    template_name = "lttr/postcard_subscribed.html"


class PostcardSubscribeView(CreateView):
    """
    Return a subscribe form for iframe embedding
    """
    model = PostcardSubscriber
    form_class = PostcardForm
    

    def get_template_names(self):
        return ["lttr/postcard_subscribe.html",]

    def get_success_url(self):
        return reverse_lazy('lttr:postcard_thanks')