summaryrefslogtreecommitdiff
path: root/app/lttr/views.py
blob: d17a609e05f3cb709ebfa30572409cea454b456e (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
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 Subscriber, Newsletter
from .forms import SubscribeRequestForm, UpdateForm

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