diff --git a/users/forms.py b/users/forms.py index 3dce8ecf..e2f09dca 100644 --- a/users/forms.py +++ b/users/forms.py @@ -530,6 +530,12 @@ class StateForm(FormRevMixin, ModelForm): prefix = kwargs.pop('prefix', self.Meta.model.__name__) super(StateForm, self).__init__(*args, prefix=prefix, **kwargs) + def save(self, commit=True): + user = super(StateForm, self).save(commit=False) + if self.cleaned_data['state']: + user.state=self.cleaned_data.get('state') + user.state_sync() + user.save() class GroupForm(FieldPermissionFormMixin, FormRevMixin, ModelForm): """ Gestion des groupes d'un user""" diff --git a/users/models.py b/users/models.py index 928e771f..da0fb45a 100755 --- a/users/models.py +++ b/users/models.py @@ -543,9 +543,16 @@ class User(RevMixin, FieldPermissionModelMixin, AbstractBaseUser, reversion.set_comment(_("IPv4 unassigning")) interface.save() + def disable_email(self): + """Disable email account and redirection""" + self.email = "" + self.local_email_enabled = False + self.local_email_redirect = False + def archive(self): """ Filling the user; no more active""" self.unassign_ips() + self.disable_email() def unarchive(self): """Unfilling the user""" @@ -1017,7 +1024,7 @@ class User(RevMixin, FieldPermissionModelMixin, AbstractBaseUser, .filter(local_part=self.pseudo.lower()).exclude(user_id=self.id) ): raise ValidationError("This pseudo is already in use.") - if not self.local_email_enabled and not self.email: + if not self.local_email_enabled and not self.email and not (self.state == self.STATE_ARCHIVE): raise ValidationError( {'email': ( _("There is neither a local email address nor an external" @@ -1885,4 +1892,3 @@ class EMailAddress(RevMixin, AclMixin, models.Model): if "@" in self.local_part: raise ValidationError(_("The local part must not contain @.")) super(EMailAddress, self).clean(*args, **kwargs) - diff --git a/users/views.py b/users/views.py index e3060105..a94a7927 100644 --- a/users/views.py +++ b/users/views.py @@ -1034,7 +1034,8 @@ def reset_password(request): try: user = User.objects.get( pseudo=userform.cleaned_data['pseudo'], - email=userform.cleaned_data['email'] + email=userform.cleaned_data['email'], + state__in=[User.STATE_ACTIVE, User.STATE_NOT_YET_ACTIVE], ) except User.DoesNotExist: messages.error(request, _("The user doesn't exist."))