]> git.0d.be Git - django-panik-newsletter.git/blob - views.py
Enregistrement à mailman.
[django-panik-newsletter.git] / views.py
1 # -*- coding: utf8 -*-
2
3 import hashlib
4 import random
5 import socket
6 import urllib
7
8 from smtplib import SMTPException 
9
10 from django.db import models, IntegrityError
11 from django.shortcuts import render
12 from django.conf import settings
13 from django.utils.translation import ugettext as _
14
15 from .forms import SubscriptionForm
16 from .models import Subscriber 
17
18
19 def subscription(request) :
20     INTEGRITY_ERROR = _("You're already registered at our newsletter.")
21     SOCKET_ERROR = _("Connexion error. Try later.")
22     SMTP_ERROR = _("Error to sending email.")
23     REVALIDATION_ERROR = _("You've already receipt a confirmation email.")
24     
25     if request.method == 'POST' :
26         form = SubscriptionForm(request.POST)
27         custom_errors = []
28         if form.is_valid() :
29             cd = form.cleaned_data
30             # Va aussi servir pour le lien de validation.
31             passwd = hashlib.sha1(str(random.random())).hexdigest()
32             
33             subscriber = Subscriber(email=cd['email'], password=passwd, is_validated=None, is_registered=False)
34             is_sent=False
35             try :
36                 subscriber.save(request)
37                 is_sent=True
38             except IntegrityError :
39                 custom_errors.append(INTEGRITY_ERROR)
40                 if(Subscriber.objects.get(email=subscriber.email).is_validated != False) :
41                     custom_errors.append(REVALIDATION_ERROR)
42             except socket.error :
43                 custom_errors.append(SOCKET_ERROR)
44             except SMTPException :
45                 custom_errors.append(SMTP_ERROR)
46
47             return render(request, 'subscription_form.html', {'form' : form, 'custom_errors' : custom_errors, 'is_sent' : is_sent})
48         else :
49             return render(request, 'subscription_form.html', {'form' : form})
50     else :
51         form = SubscriptionForm()
52         return render(request, "subscription_form.html", {'form' : form})
53
54
55
56
57 def registration(request, validation_value) :
58     error_message = ''
59     registration_message = ''
60     try :
61         subscriber = Subscriber.objects.get(password = validation_value)
62         subscriber.is_validated = True
63
64         if subscriber.is_registered is False  :
65             params = urllib.urlencode({'email' : subscriber.email, 'fullname' : '', 'pw' : subscriber.password, 'pw-conf' : subscriber.password, 'digest' : '0'})
66             response = urllib.urlopen(settings.NEWSLETTER_SUBSCRIPTION_URL, params)
67             if  response.getcode() == 200 :
68                 subscriber.is_registered = True
69                 registration_message = _("You subscribed to our newsletter.")
70             else :
71                 subscriber.is_registered = None # TODO : rajouter une méthode niveau table pour gérer les enregistrements qui échouent (pareil pour la souscription proprement dite).
72         elif subscriber.is_registered :
73             error_message = _('You already subscribed to our newsletter.')
74         else :
75             error_message = _('Your subscription is pending.')
76
77         subscriber.save()
78         
79         return render(request, 'registration.html', {'user_exist' : True, 'error_message' : error_message, 'registration_message' : registration_message })
80
81     except Subscriber.DoesNotExist :
82         error_message = _('Forbidden page.')
83         return render(request, 'registration.html', {'user_exist' : False, 'error_message' : error_message})
84         
85     
86
87