]> git.0d.be Git - django-panik-newsletter.git/commitdiff
misc: handle existing subscribers by resetting existing data
authorFrédéric Péters <fpeters@0d.be>
Sat, 3 Oct 2020 11:56:34 +0000 (13:56 +0200)
committerFrédéric Péters <fpeters@0d.be>
Sat, 3 Oct 2020 11:57:57 +0000 (13:57 +0200)
newsletter/models.py

index 4be986980a93dfbb18358f81a9ec8aafe5005dde..60532650d2be53ffad7b4d23f7f8dc3bbe48c45e 100644 (file)
@@ -28,19 +28,26 @@ from ckeditor.fields import RichTextField
 
 
 class Subscriber(models.Model) :
-    email = models.EmailField(unique = True)   # TODO : informer si déjà inscrit ? Que faire dans ce cas.
+    email = models.EmailField(unique=True)
     inscription_date = models.DateField(auto_now_add=True)
-    is_validated = models.NullBooleanField() # Au click sur le lien de confirmation. Null si erreur à l'envoi au souscripteur.
-    is_registered = models.NullBooleanField() # À l'inscription après la confirmation Null si erreur à l'envoi à mailman.
-    password = models.CharField(max_length=100) # sha1
-    
+    is_validated = models.NullBooleanField()
+    is_registered = models.NullBooleanField()
+    password = models.CharField(max_length=100)
+
     def __unicode__(self) :
         return self.email
 
     def save(self, *args, **kwargs):
-        super(Subscriber, self).save(*args, **kwargs)
-        if self.is_validated is None:
-            self.send_confirmation_email()
+        existing_subscriber = self.objects.filter(email=self.email).first()
+        if existing_subscriber and existing_subscriber.id != self.id:
+            # reset existing subscriber
+            existing_subscriber.is_validated = None
+            existing_subscriber.is_registered = None
+            existing_subscriber.save()
+        else:
+            super(Subscriber, self).save(*args, **kwargs)
+            if self.is_validated is None:
+                self.send_confirmation_email()
 
     def send_confirmation_email(self):
         self.password = hashlib.sha1(force_bytes(str(random.random()))).hexdigest()