]> git.0d.be Git - django-panik-newsletter.git/blob - newsletter/models.py
use listadmin to do the mailman plumbing
[django-panik-newsletter.git] / newsletter / models.py
1 # -*- coding: utf8 -*-
2
3 import hashlib
4 import random
5 import subprocess
6
7 from django.db import models
8
9 from django.template import loader, Context 
10 from django.conf import settings
11
12 from django.utils.translation import ugettext as _
13 from django.core.mail import send_mail
14 # rajout d'un commentaire inutile
15
16 class Subscriber(models.Model) :
17     email = models.EmailField(unique = True)   # TODO : informer si déjà inscrit ? Que faire dans ce cas.
18     inscription_date = models.DateField(auto_now_add=True)
19     is_validated = models.NullBooleanField() # Au click sur le lien de confirmation. Null si erreur à l'envoi au souscripteur.
20     is_registered = models.NullBooleanField() # À l'inscription après la confirmation Null si erreur à l'envoi à mailman.
21     password = models.CharField(max_length=100) # sha1
22     
23     def __unicode__(self) :
24         return self.email
25
26     def save(self, *args, **kwargs):
27         super(Subscriber, self).save(*args, **kwargs)
28         if self.is_validated is None:
29             self.send_confirmation_email()
30
31     def send_confirmation_email(self):
32         self.password = hashlib.sha1(str(random.random())).hexdigest()
33         confirm_subject = loader.get_template('newsletter/confirmation_email_subject.txt')
34         confirm_body = loader.get_template('newsletter/confirmation_email_body.txt')
35         context = Context({'token': self.password})
36         send_mail(confirm_subject.render(context).strip(), confirm_body.render(context),
37                 settings.NEWSLETTER_SENDER, [self.email])
38         self.is_validated = False
39         self.save()
40
41     def subscribe_in_mailman(self):
42         t = subprocess.call(['listadmin', '--add-member', self.email, settings.NEWSLETTER_NAME])
43         if t != 0:
44             return
45         self.registered = True
46         self.save()