Project

General

Profile

Development #19716

Pour les utilisateurs d'une ou, lorsque l'adresse de courriel de l'utilisateur est validé, modifier cette adresse en BO envoi un courriel de validation

Added by Mikaël Ates over 5 years ago. Updated about 4 years ago.

Status:
Fermé
Priority:
Normal
Category:
-
Target version:
-
Start date:
27 October 2017
Due date:
% Done:

100%

Estimated time:
Patch proposed:
Yes
Planning:

Description

Par exemple pour tous les utilisateurs d'une OU usagers où le drapeau courriel validé est utilisé, modifier l'adresse de courriel en BO pour les utilisateurs qui ont déjà une adresse de courriel validée, n'est pas directe. Elle génère l'envoi d'un courriel de validation.

La configuration pourrait se faire en indiquant les slugs des ou pour lesquelles appliquer ce comportement.


Files

Associated revisions

Revision 25e8ca54 (diff)
Added by Benjamin Dauvergne about 5 years ago

a2_rbac: add a validate_emails flag to OU model (#19716)

Revision bbb4b9a6 (diff)
Added by Benjamin Dauvergne about 5 years ago

utils: factorize sending of email change verification email (#19716)

Revision 15878fbf (diff)
Added by Benjamin Dauvergne about 5 years ago

manager: add a change email action on users (fixes #19716)

It's only visible for OU with the validate_emails flag.

Revision c9206ea1 (diff)
Added by Benjamin Dauvergne about 5 years ago

manager: add field validate_emails in OUEditForm (#19716)

History

#3

Updated by Paul Marillonnet about 5 years ago

    if app_settings.A2_EMAIL_IS_UNIQUE:
        [...]
    elif user.ou and user.ou.email_is_unique:

Est-ce qu'on a pas intérêt ici à avoir un paramétrage de l'OU qui redéfinisse la config globale A2 ? (et donc s/elif/if/ ?)

#4

Updated by Frédéric Péters about 5 years ago

Ça envoie le même message "Vous avez demandé ..." alors bien sûr on dira que depuis le backoffice même si c'est un agent il le fait à la demande d'un usager mais pour d'autres templates on a des messages différents (ex: "An administrator has created you an account...").

Aussi, j'ajouterais un message dans la boite de dialogue pour annoncer à l'agent que ça enverra un message demandant validation à l'usager.

#5

Updated by Benjamin Dauvergne about 5 years ago

Frédéric Péters a écrit :

Ça envoie le même message "Vous avez demandé ..." alors bien sûr on dira que depuis le backoffice même si c'est un agent il le fait à la demande d'un usager mais pour d'autres templates on a des messages différents (ex: "An administrator has created you an account...").

Je vais gérer ça dans #20333 qui arrive (j'ajoute une version HTML pour ce mail, j'en profiterai pour gérer cet ajustement, j'ai ajouté un commentaire sur le ticket pour ne pas oublier).

Aussi, j'ajouterais un message dans la boite de dialogue pour annoncer à l'agent que ça enverra un message demandant validation à l'usager.

Patch du patch (intégré dans le nouveau 0003):

diff --git a/src/authentic2/manager/templates/authentic2/manager/user_change_email.html b/src/authentic2/manager/templates/authentic2/manager/user_change_email.html
new file mode 100644
index 0000000..0eec0f2
--- /dev/null
+++ b/src/authentic2/manager/templates/authentic2/manager/user_change_email.html
@@ -0,0 +1,11 @@
+{% extends "authentic2/manager/form.html" %}
+{% load i18n %}
+
+{% block beforeform %}
+  <p>
+      {% blocktrans %}User's email will not be changed immediately. First an email will be sent to this
+      new email address containing a link on which the user's will have to click to verify that it owns
+      the email address, then it will be changed.{% endblocktrans %}
+  </p>
+  {{ block.super }}
+{% endblock %}
diff --git a/src/authentic2/manager/user_views.py b/src/authentic2/manager/user_views.py
index 104629e..74e904c 100644
--- a/src/authentic2/manager/user_views.py
+++ b/src/authentic2/manager/user_views.py
@@ -332,7 +332,7 @@ user_change_password = UserChangePasswordView.as_view()

 class UserChangeEmailView(BaseEditView):
-    template_name = 'authentic2/manager/form.html'
+    template_name = 'authentic2/manager/user_change_email.html'
     model = get_user_model()
     form_class = UserChangeEmailForm
     permissions = ['custom_user.change_email_user']

#6

Updated by Benjamin Dauvergne about 5 years ago

Paul Marillonnet a écrit :

[...]

Est-ce qu'on a pas intérêt ici à avoir un paramétrage de l'OU qui redéfinisse la config globale A2 ? (et donc s/elif/if/ ?)

On a pas de valeur "prendre la valeur par défaut", si on avait des champs tri-valeurs Oui/Non/Valeur par défaut, je dirai oui mais là non (au niveau modèle on pourrait faire que le champ soit nullable et donc avoir True/False/None et avoir un widget qui gère ça, mais là on a pas ça, si tu veux ajouter le champ de modèle, le champ de formulaire et le widget qui va bien je suis pour, ça permettra d'adapter pas mal de trucs comme cela), aussi il faudrait que dans ce cas le widget sache récupérer et afficher la valeur par défaut (c'est bien joli de dire prendre la valeur par défaut, mais l'utilisateur aime bien savoir ce qu'elle est actuellement).

Donc oui c'est très imparfait mais à ce stade c'est difficile à faire (et on a le problème inverse que le choix qui est fait sur une OU est totalement ignoré à partir du moment ou le setting est posé et que ça aussi c'est invisible).

#7

Updated by Frédéric Péters about 5 years ago

Je vais gérer ça dans #20333

J'imaginais plutôt que ça regarde aussi pour un manager/change_email_notification dans le cas de l'envoi via le /manage/; histoire de garder des templates simples à lire, qu'un jour ils en viennent même à pouvoir être modifiés par des non-dev.

#8

Updated by Benjamin Dauvergne about 5 years ago

Ok je duplique le template ici, mais je gèrerai la version HTML basée sur un template commun dans l'autre ticket.

#9

Updated by Benjamin Dauvergne about 5 years ago

  • Assignee set to Benjamin Dauvergne
#10

Updated by Benjamin Dauvergne about 5 years ago

Diff:

it rediff --git a/src/authentic2/manager/templates/authentic2/manager/user_change_email_notification_body.txt b/src/authentic2/manager/templates/authentic2/manager/user_change_email_notification_body.txt
new file mode 100644
index 0000000..8613504
--- /dev/null
+++ b/src/authentic2/manager/templates/authentic2/manager/user_change_email_notification_body.txt
@@ -0,0 +1,35 @@
+{% load i18n %}{% autoescape off %}{% if email_is_not_unique%}{% blocktrans with name=user.get_short_name old_email=user.email %}Hi {{ name }} !
+
+An administrator requested for changing your email on {{ domain }} from:
+
+  {{ old_email }}
+
+to:
+
+  {{ email }}
+
+But this email is already linked to another account.
+
+You can recover this account password using the password reset form:
+
+  {{ password_reset_url }}
+
+--
+{{ domain }}{% endblocktrans %}{% else %}{% blocktrans with name=user.get_short_name old_email=user.email %}Hi {{ name }} !
+
+And administrator requested for changing your email on {{ domain }} from:
+
+  {{ old_email }}
+
+to:
+
+  {{ email }}
+
+To validate this change please click on the following link:
+
+  {{ link }}
+
+This link will be valid for {{ token_lifetime }}.
+
+--
+{{ domain }}{% endblocktrans %}{% endif %}{% endautoescape %}
diff --git a/src/authentic2/manager/templates/authentic2/manager/user_change_email_notification_subject.txt b/src/authentic2/manager/templates/authentic2/manager/user_change_email_notification_subject.txt
new file mode 100644
index 0000000..6fab6fa
--- /dev/null
+++ b/src/authentic2/manager/templates/authentic2/manager/user_change_email_notification_subject.txt
@@ -0,0 +1 @@
+{% load i18n %}{% autoescape off %}{% blocktrans %}Change email on {{ domain }} requested by an administrator{% endblocktrans %}{% endautoescape %}
diff --git a/src/authentic2/manager/user_views.py b/src/authentic2/manager/user_views.py
index 74e904c..fd0367a 100644
--- a/src/authentic2/manager/user_views.py
+++ b/src/authentic2/manager/user_views.py
@@ -353,7 +353,8 @@ class UserChangeEmailView(BaseEditView):
         email = form.cleaned_data['email']
         hooks.call_hooks('event', name='manager-change-email-request', user=self.request.user,
                          instance=form.instance, form=form, email=email)
-        send_email_change_mail(self.object, email, request=self.request)
+        send_email_change_mail(self.object, email, request=self.request,
+                               template_names=['authentic2/manager/user_change_email_notification'])
         return response

 user_change_email = UserChangeEmailView.as_view()
#11

Updated by Paul Marillonnet about 5 years ago

Benjamin Dauvergne a écrit :

au niveau modèle on pourrait faire que le champ soit nullable et donc avoir True/False/None et avoir un widget qui gère ça, mais là on a pas ça, si tu veux ajouter le champ de modèle, le champ de formulaire et le widget qui va bien je suis pour, ça permettra d'adapter pas mal de trucs comme cela

Ok je vais regarder ça et créer un ticket.

#12

Updated by Paul Marillonnet about 5 years ago

Paul Marillonnet a écrit :

Ok je vais regarder ça et créer un ticket.

Créé #20474.

#13

Updated by Benjamin Dauvergne about 5 years ago

Dernier ajustement: renommage de send_email_change_mail en send_email_change_email (pour garder le nom d'avant en fait, et parce que mail c'est pas le bon nom) et correction à l'API de changement d'email qui utilisait toujours l'implémentation sur EmailChangeView. Tous les tests passent maintenant.

#14

Updated by Frédéric Péters about 5 years ago

Il y un <div class="other_actions"> qui se trouve dans la popup et lui fait un espace vide sur la droite.

#15

Updated by Frédéric Péters about 5 years ago

À regarder davantage, ça vient aussi de la classe form-inner-container.

#16

Updated by Frédéric Péters about 5 years ago

  • Status changed from Nouveau to En cours

Point de stylé déplacé dans #20509, ack pour celui-ci ainsi.

#17

Updated by Benjamin Dauvergne about 5 years ago

  • Status changed from En cours to Résolu (à déployer)
  • % Done changed from 0 to 100
#18

Updated by Benjamin Dauvergne about 4 years ago

  • Status changed from Résolu (à déployer) to Fermé

Also available in: Atom PDF