8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-26 06:32:26 +00:00

Move some code away from the forms

This commit is contained in:
Jean-Romain Garnier 2020-04-17 20:23:28 +02:00 committed by Gabriel Detraz
parent b43bbf9d98
commit 9fe4313540
3 changed files with 31 additions and 33 deletions

View file

@ -333,7 +333,6 @@ class AdherentForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
self.fields["room"].label = _("Room") self.fields["room"].label = _("Room")
self.fields["room"].empty_label = _("No room") self.fields["room"].empty_label = _("No room")
self.fields["school"].empty_label = _("Select a school") self.fields["school"].empty_label = _("Select a school")
self.is_anon = kwargs["user"].is_anonymous()
class Meta: class Meta:
model = Adherent model = Adherent
@ -382,23 +381,6 @@ class AdherentForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
remove_user_room(room) remove_user_room(room)
return return
def save(self, commit=True):
"""On met à jour l'état de l'utilisateur en fonction de son mail"""
user = super(AdherentForm, self).save(commit=commit)
if not self.is_anon and self.initial["email"] and user.email != self.initial["email"]:
# Send a confirmation email
if user.state in [User.STATE_ACTIVE, User.STATE_DISABLED, User.STATE_NOT_YET_ACTIVE]:
user.email_state = User.EMAIL_STATE_PENDING
self.should_send_confirmation_email = True
# Always keep the oldest change date
if user.email_change_date is None:
user.email_change_date = timezone.now()
user.save()
return user
class AdherentCreationForm(AdherentForm): class AdherentCreationForm(AdherentForm):
"""Formulaire de création d'un user. """Formulaire de création d'un user.
@ -518,7 +500,6 @@ class AdherentCreationForm(AdherentForm):
an email to init the password should be sent""" an email to init the password should be sent"""
# Save the provided password in hashed format # Save the provided password in hashed format
user = super(AdherentForm, self).save(commit=False) user = super(AdherentForm, self).save(commit=False)
user.email_change_date = timezone.now()
is_set_password_allowed = OptionalUser.get_cached_value("allow_set_password_during_user_creation") is_set_password_allowed = OptionalUser.get_cached_value("allow_set_password_during_user_creation")
send_email = not is_set_password_allowed or self.cleaned_data.get("init_password_by_mail") send_email = not is_set_password_allowed or self.cleaned_data.get("init_password_by_mail")

View file

@ -800,6 +800,26 @@ class User(
) )
return return
def send_confirm_email_if_necessary(self, request):
"""Update the user's email state
Returns whether an email was sent"""
# Only update the state if the email changed
if self.__original_email == self.email:
return False
# Archived users shouldn't get an email
if self.state not in [self.STATE_ACTIVE, self.STATE_DISABLED, self.STATE_NOT_YET_ACTIVE]:
return False
# Always keep the oldest change date
if self.email_change_date is None:
self.email_change_date = timezone.now()
self.email_state = self.EMAIL_STATE_PENDING
self.confirm_email_address_mail(request)
return True
def confirm_email_before_date(self): def confirm_email_before_date(self):
if self.email_change_date is None or self.email_state == self.EMAIL_STATE_VERIFIED: if self.email_change_date is None or self.email_state == self.EMAIL_STATE_VERIFIED:
return None return None
@ -810,6 +830,7 @@ class User(
def confirm_email_address_mail(self, request): def confirm_email_address_mail(self, request):
"""Prend en argument un request, envoie un mail pour """Prend en argument un request, envoie un mail pour
confirmer l'adresse""" confirmer l'adresse"""
# Create the request and send the email
req = Request() req = Request()
req.type = Request.EMAIL req.type = Request.EMAIL
req.user = self req.user = self

View file

@ -124,11 +124,9 @@ def new_user(request):
is_set_password_allowed = OptionalUser.get_cached_value("allow_set_password_during_user_creation") is_set_password_allowed = OptionalUser.get_cached_value("allow_set_password_during_user_creation")
if user.is_valid(): if user.is_valid():
user = user.save()
# Use "is False" so that if None, the email is sent # Use "is False" so that if None, the email is sent
if is_set_password_allowed and user.should_send_password_reset_email is False: if is_set_password_allowed and user.should_send_password_reset_email:
user.confirm_email_address_mail(request) user.send_confirm_email_if_necessary(request)
messages.success( messages.success(
request, request,
_("The user %s was created, a confirmation email was sent.") _("The user %s was created, a confirmation email was sent.")
@ -142,6 +140,7 @@ def new_user(request):
% user.pseudo, % user.pseudo,
) )
user = user.save()
return redirect(reverse("users:profil", kwargs={"userid": str(user.id)})) return redirect(reverse("users:profil", kwargs={"userid": str(user.id)}))
# Anonymous users are allowed to create new accounts # Anonymous users are allowed to create new accounts
@ -223,13 +222,12 @@ def edit_info(request, user, userid):
) )
if user_form.is_valid(): if user_form.is_valid():
if user_form.changed_data: if user_form.changed_data:
if user.send_confirm_email_if_necessary(request):
messages.success(request, _("Sent a new confirmation email."))
user = user_form.save() user = user_form.save()
messages.success(request, _("The user was edited.")) messages.success(request, _("The user was edited."))
if user_form.should_send_confirmation_email:
user.confirm_email_address_mail(request)
messages.success(request, _("Sent a new confirmation email."))
return redirect(reverse("users:profil", kwargs={"userid": str(userid)})) return redirect(reverse("users:profil", kwargs={"userid": str(userid)}))
return form( return form(
{"userform": user_form, "action_name": _("Edit")}, {"userform": user_form, "action_name": _("Edit")},
@ -544,14 +542,12 @@ def edit_email_settings(request, user_instance, **_kwargs):
) )
if email_settings.is_valid(): if email_settings.is_valid():
if email_settings.changed_data: if email_settings.changed_data:
if user_instance.send_confirm_email_if_necessary(request):
messages.success(request, _("An email to confirm your address was sent."))
email_settings.save() email_settings.save()
messages.success(request, _("The email settings were edited.")) messages.success(request, _("The email settings were edited."))
# Send confirmation email if necessary
if email_settings.should_send_confirmation_email is True:
user_instance.confirm_email_address_mail(request)
messages.success(request, _("An email to confirm your address was sent."))
return redirect( return redirect(
reverse("users:profil", kwargs={"userid": str(user_instance.id)}) reverse("users:profil", kwargs={"userid": str(user_instance.id)})
) )
@ -1073,7 +1069,7 @@ def resend_confirmation_email(request, logged_user, userid):
messages.error(request, _("The user doesn't exist.")) messages.error(request, _("The user doesn't exist."))
if request.method == "POST": if request.method == "POST":
user.confirm_email_address_mail(request) user.send_confirm_email_if_necessary(request)
messages.success(request, _("An email to confirm your address was sent.")) messages.success(request, _("An email to confirm your address was sent."))
return redirect(reverse("users:profil", kwargs={"userid": userid})) return redirect(reverse("users:profil", kwargs={"userid": userid}))