12 from django.conf import settings
13 from django.core.exceptions import PermissionDenied
14 from django.core.urlresolvers import reverse_lazy
15 from django.db import models, IntegrityError
16 from django.http import JsonResponse
17 from django.shortcuts import get_object_or_404
18 from django.utils.translation import ugettext as _
20 from django.views.generic.base import TemplateView, RedirectView
21 from django.views.generic.detail import DetailView
22 from django.views.generic.list import ListView
23 from django.views.generic.edit import CreateView, UpdateView
24 from django.views.decorators.csrf import csrf_exempt
26 from .forms import SubscribeForm, NewsletterForm
27 from .models import Subscriber, Newsletter
30 class SubscribeView(CreateView):
31 form_class = SubscribeForm
34 success_url = 'thanks'
35 subscribe = csrf_exempt(SubscribeView.as_view())
38 class ThanksView(TemplateView):
39 template_name = 'newsletter/thanks.html'
40 thanks = ThanksView.as_view()
43 class ConfirmationView(TemplateView):
44 template_name = 'newsletter/done.html'
46 def get_context_data(self, token, **kwargs):
47 context = super(ConfirmationView, self).get_context_data(**kwargs)
48 subscriber = get_object_or_404(Subscriber, password=token, is_validated=False)
49 subscriber.is_validated = True
52 confirmation = ConfirmationView.as_view()
55 def unsubscription(request) :
56 UNSUBSCRIPTION_MESSAGE = _("Enter your email for unsunscribe to the newsletter.")
57 UNSUBSCRIPTION_CONFIRMATION_MESSAGE = _("You're now unsubscribed")
59 if request.method == 'GET' :
60 form = SubscriptionForm()
61 return render(request, 'unsubscription_form.html', {'form' : form, 'message' : UNSUBSCRIPTION_MESSAGE})
62 elif request.method == 'POST' :
63 form = SubscriptionForm(request.POST)
65 cd = form.cleaned_data
67 subscriber = Subscriber.objects.get(email = cd['email'])
69 cookie_jar = cookielib.CookieJar()
70 url_opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
72 login_params = urllib.urlencode({'email' : subscriber.email, 'password' : subscriber.password})
73 login_request = urllib2.Request(settings.NEWSLETTER_UNSUBSCRIPTION_URL, login_params)
74 url = url_opener.open(login_request)
76 unsubscribe_action_url = ("%s/%s" % (settings.NEWSLETTER_UNSUBSCRIPTION_URL, subscriber.email))
77 unsubscribe_params = urllib.urlencode({'unsub' : 'RĂ©silier', 'unsubconfirm' : '1'})
78 unsubscribe_request = urllib2.Request(unsubscribe_action_url, unsubscribe_params)
79 url = url_opener.open(unsubscribe_request)
84 return render(request, 'unsubscription_form.html', {'message' : UNSUBSCRIPTION_CONFIRMATION_MESSAGE})
85 except Subscriber.DoesNotExist :
86 error_message = _("The entered email address does not exist. Please try another one.")
87 return render(request, 'unsubscription_form.html', {'form' : form, 'message' : error_message})
90 class NewsletterCreateView(CreateView):
91 form_class = NewsletterForm
94 success_url = reverse_lazy('newsletter-list')
96 def get_form(self, *args, **kwargs):
97 if not self.request.user.has_perm('newsletter.add_newsletter'):
98 raise PermissionDenied()
99 return super(NewsletterCreateView, self).get_form(*args, **kwargs)
101 def get_initial(self):
102 initial = super(NewsletterCreateView, self).get_initial()
103 initial['date'] = datetime.datetime.today()
106 newsletter_create = NewsletterCreateView.as_view()
109 class NewsletterListView(ListView):
112 newsletter_list = NewsletterListView.as_view()
115 class NewsletterDetailView(DetailView):
118 newsletter_view = NewsletterDetailView.as_view()
120 class NewsletterUpdateView(UpdateView):
121 form_class = NewsletterForm
124 def get_form(self, *args, **kwargs):
125 if not self.request.user.has_perm('newsletter.add_newsletter'):
126 raise PermissionDenied()
127 return super(NewsletterUpdateView, self).get_form(*args, **kwargs)
129 newsletter_update = NewsletterUpdateView.as_view()
132 class NewsletterSendView(RedirectView):
134 def get_redirect_url(self, pk):
135 if not self.request.user.has_perm('newsletter.add_newsletter'):
136 raise PermissionDenied()
138 newsletter = get_object_or_404(Newsletter, pk=pk)
140 return reverse_lazy('newsletter-list')
142 newsletter_send = NewsletterSendView.as_view()
146 return JsonResponse({'registered': Subscriber.objects.filter(is_registered=True).count()})