Projet

Général

Profil

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

Ajouté par Mikaël Ates (de retour le 29 avril) il y a plus de 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
27 octobre 2017
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
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.


Fichiers

Révisions associées

Révision 25e8ca54 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 6 ans

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

Révision bbb4b9a6 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 6 ans

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

Révision 15878fbf (diff)
Ajouté par Benjamin Dauvergne il y a plus de 6 ans

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

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

Révision c9206ea1 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 6 ans

manager: add field validate_emails in OUEditForm (#19716)

Historique

#3

Mis à jour par Paul Marillonnet il y a plus de 6 ans

    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

Mis à jour par Frédéric Péters il y a plus de 6 ans

Ç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

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

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

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

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

Mis à jour par Frédéric Péters il y a plus de 6 ans

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

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

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

#9

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

  • Assigné à mis à Benjamin Dauvergne
#10

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

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

Mis à jour par Paul Marillonnet il y a plus de 6 ans

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

Mis à jour par Paul Marillonnet il y a plus de 6 ans

Paul Marillonnet a écrit :

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

Créé #20474.

#13

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

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

Mis à jour par Frédéric Péters il y a plus de 6 ans

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

#15

Mis à jour par Frédéric Péters il y a plus de 6 ans

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

#16

Mis à jour par Frédéric Péters il y a plus de 6 ans

  • Statut changé de Nouveau à En cours

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

#17

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

  • Statut changé de En cours à Résolu (à déployer)
  • % réalisé changé de 0 à 100
#18

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF