class EmailAddress(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) email = models.EmailField(max_length=254, unique=settings.ACCOUNT_EMAIL_UNIQUE) verified = models.BooleanField(_("verified"), default=False) primary = models.BooleanField(_("primary"), default=False) objects = EmailAddressManager() class Meta: verbose_name = _("email address") verbose_name_plural = _("email addresses") if not settings.ACCOUNT_EMAIL_UNIQUE: unique_together = [("user", "email")] def __str__(self): return "{0} ({1})".format(self.email, self.user) def set_as_primary(self, conditional=False): old_primary = EmailAddress.objects.get_primary(self.user) if old_primary: if conditional: return False old_primary.primary = False old_primary.save() self.primary = True self.save() self.user.email = self.email self.user.save() return True def send_confirmation(self, **kwargs): confirmation = EmailConfirmation.create(self) confirmation.send(**kwargs) return confirmation def change(self, new_email, confirm=True): """ Given a new email address, change self and re-confirm. """ with transaction.atomic(): self.user.email = new_email self.user.save() self.email = new_email self.verified = False self.save() if confirm: self.send_confirmation() def validate_unique(self, exclude=None): super(EmailAddress, self).validate_unique(exclude=exclude) qs = EmailAddress.objects.filter(email__iexact=self.email) if qs.exists() and settings.ACCOUNT_EMAIL_UNIQUE: raise forms.ValidationError({ 'email': _("A user is registered with this email address."), })
class EmailAddress(models.Model): user = models.ForeignKey(User) email = models.EmailField(unique=settings.ACCOUNT_EMAIL_UNIQUE) verified = models.BooleanField(default=False) primary = models.BooleanField(default=False) objects = EmailAddressManager() class Meta: verbose_name = _("email address") verbose_name_plural = _("email addresses") if not settings.ACCOUNT_EMAIL_UNIQUE: unique_together = [("user", "email")] def __unicode__(self): return u"%s (%s)" % (self.email, self.user) def set_as_primary(self, conditional=False): old_primary = EmailAddress.objects.get_primary(self.user) if old_primary: if conditional: return False old_primary.primary = False old_primary.save() self.primary = True self.save() self.user.email = self.email self.user.save() return True def send_confirmation(self): confirmation = EmailConfirmation.create(self) confirmation.send() return confirmation def change(self, new_email, confirm=True): """ Given a new email address, change self and re-confirm. """ #with transaction.commit_on_success(): #todo: no longer exists as of django 1.6 #commented out for now #fix later, see https://docs.djangoproject.com/en/1.8/topics/db/transactions/ self.user.email = new_email self.user.save() self.email = new_email self.verified = False self.save() if confirm: self.send_confirmation()
class EmailAddress(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL) email = models.EmailField(max_length=254, unique=settings.ACCOUNT_EMAIL_UNIQUE) verified = models.BooleanField(_("verified"), default=False) primary = models.BooleanField(_("primary"), default=False) objects = EmailAddressManager() class Meta: verbose_name = _("email address") verbose_name_plural = _("email addresses") if not settings.ACCOUNT_EMAIL_UNIQUE: unique_together = [("user", "email")] def __str__(self): return "{0} ({1})".format(self.email, self.user) def set_as_primary(self, conditional=False): old_primary = EmailAddress.objects.get_primary(self.user) if old_primary: if conditional: return False old_primary.primary = False old_primary.save() self.primary = True self.save() self.user.email = self.email self.user.save() return True def send_confirmation(self, **kwargs): confirmation = EmailConfirmation.create(self) confirmation.send(**kwargs) return confirmation def change(self, new_email, confirm=True): """ Given a new email address, change self and re-confirm. """ with transaction.atomic(): self.user.email = new_email self.user.save() self.email = new_email self.verified = False self.save() if confirm: self.send_confirmation()
class EmailAddress(models.Model): user = models.ForeignKey(User) email = models.EmailField(unique=settings.ACCOUNT_EMAIL_UNIQUE) verified = models.BooleanField(default=False) primary = models.BooleanField(default=False) objects = EmailAddressManager() class Meta: verbose_name = _("email address") verbose_name_plural = _("email addresses") if not settings.ACCOUNT_EMAIL_UNIQUE: unique_together = [("user", "email")] def __unicode__(self): return u"%s (%s)" % (self.email, self.user) def set_as_primary(self, conditional=False): old_primary = EmailAddress.objects.get_primary(self.user) if old_primary: if conditional: return False old_primary.primary = False old_primary.save() self.primary = True self.save() self.user.email = self.email self.user.save() return True def send_confirmation(self, **kwargs): confirmation = EmailConfirmation.create(self) confirmation.send(**kwargs) return confirmation def change(self, new_email, confirm=True): """ Given a new email address, change self and re-confirm. """ with transaction.commit_on_success(): self.user.email = new_email self.user.save() self.email = new_email self.verified = False self.save() if confirm: self.send_confirmation()
class EmailAddress(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) email = models.EmailField(max_length=254, unique=True) verified = models.BooleanField(_("verified"), default=False) objects = EmailAddressManager() class Meta: verbose_name = _("email address") verbose_name_plural = _("email addresses") def __str__(self): return "{0} ({1})".format(self.email, self.user) def send_confirmation(self, **kwargs): confirmation = EmailConfirmation.create(self) confirmation.send(**kwargs) return confirmation def send_thanks_email(self): ctx = { "email_address": self.email, "user": self.user.username, } hookset.send_thanks_email([self.email], ctx) def change(self, new_email, confirm=True): with transaction.atomic(): self.user.email = new_email self.user.save() self.email = new_email self.verified = False self.save() if confirm: self.send_confirmation()