10 from smtplib import SMTPException
12 from django.db import models, IntegrityError
13 from django.conf import settings
15 from django.shortcuts import render
16 from django.utils.translation import ugettext as _
18 from .forms import SubscriptionForm
19 from .models import Subscriber
22 def subscription(request) :
23 INTEGRITY_ERROR = _("You're already registered at our newsletter.")
24 SOCKET_ERROR = _("Connexion error. Try later.")
25 SMTP_ERROR = _("Error to sending email.")
26 REVALIDATION_ERROR = _("You've already receipt a confirmation email.")
28 if request.method == 'POST' :
29 form = SubscriptionForm(request.POST)
32 cd = form.cleaned_data
33 # Va aussi servir pour le lien de validation.
34 passwd = hashlib.sha1(str(random.random())).hexdigest()
36 subscriber = Subscriber(email=cd['email'], password=passwd, is_validated=None, is_registered=False)
39 subscriber.save(request)
41 except IntegrityError :
42 custom_errors.append(INTEGRITY_ERROR)
43 if(Subscriber.objects.get(email=subscriber.email).is_validated != False) :
44 custom_errors.append(REVALIDATION_ERROR)
46 custom_errors.append(SOCKET_ERROR)
47 except SMTPException :
48 custom_errors.append(SMTP_ERROR)
50 return render(request, 'subscription_form.html', {'form' : form, 'custom_errors' : custom_errors, 'is_sent' : is_sent})
52 return render(request, 'subscription_form.html', {'form' : form})
54 form = SubscriptionForm()
55 return render(request, "subscription_form.html", {'form' : form})
59 def unsubscription(request) :
60 UNSUBSCRIPTION_MESSAGE = _("Enter your email for unsunscribe to the newsletter.")
61 UNSUBSCRIPTION_CONFIRMATION_MESSAGE = _("You're now unsubscribed")
63 if request.method == 'GET' :
64 form = SubscriptionForm()
65 return render(request, 'unsubscription_form.html', {'form' : form, 'message' : UNSUBSCRIPTION_MESSAGE})
66 elif request.method == 'POST' :
67 form = SubscriptionForm(request.POST)
69 cd = form.cleaned_data
71 subscriber = Subscriber.objects.get(email = cd['email'])
73 cookie_jar = cookielib.CookieJar()
74 url_opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
76 login_params = urllib.urlencode({'email' : subscriber.email, 'password' : subscriber.password})
77 login_request = urllib2.Request(settings.NEWSLETTER_UNSUBSCRIPTION_URL, login_params)
78 url = url_opener.open(login_request)
80 unsubscribe_action_url = ("%s/%s" % (settings.NEWSLETTER_UNSUBSCRIPTION_URL, subscriber.email))
81 unsubscribe_params = urllib.urlencode({'unsub' : 'Résilier', 'unsubconfirm' : '1'})
82 unsubscribe_request = urllib2.Request(unsubscribe_action_url, unsubscribe_params)
83 url = url_opener.open(unsubscribe_request)
88 return render(request, 'unsubscription_form.html', {'message' : UNSUBSCRIPTION_CONFIRMATION_MESSAGE})
89 except Subscriber.DoesNotExist :
90 error_message = _("The entered email address does not exist. Please try another one.")
91 return render(request, 'unsubscription_form.html', {'form' : form, 'message' : error_message})
98 def registration(request, validation_value) :
100 registration_message = ''
102 subscriber = Subscriber.objects.get(password = validation_value)
103 subscriber.is_validated = True
105 if subscriber.is_registered is False :
106 params = urllib.urlencode({'email' : subscriber.email, 'fullname' : '', 'pw' : subscriber.password, 'pw-conf' : subscriber.password, 'digest' : '0'})
107 response = urllib.urlopen(settings.NEWSLETTER_SUBSCRIPTION_URL, params)
108 if response.getcode() == 200 :
109 subscriber.is_registered = True
110 registration_message = _("You subscribed to our newsletter.")
112 subscriber.is_registered = None # TODO : rajouter une méthode niveau table pour gérer les enregistrements qui échouent (pareil pour la souscription proprement dite).
114 elif subscriber.is_registered :
115 error_message = _('You already subscribed to our newsletter.')
117 error_message = _('Your subscription is pending.')
121 return render(request, 'registration.html', {'user_exist' : True, 'error_message' : error_message, 'registration_message' : registration_message })
123 except Subscriber.DoesNotExist :
124 error_message = _('Forbidden page.')
125 return render(request, 'registration.html', {'user_exist' : False, 'error_message' : error_message})