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
100%
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
utils: factorize sending of email change verification email (#19716)
manager: add a change email action on users (fixes #19716)
It's only visible for OU with the validate_emails flag.
manager: add field validate_emails in OUEditForm (#19716)
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0001-a2_rbac-add-a-validate_emails-flag-to-OU-model-19716.patch 0001-a2_rbac-add-a-validate_emails-flag-to-OU-model-19716.patch ajouté
- Fichier 0002-utils-factorize-sending-of-email-change-verification.patch 0002-utils-factorize-sending-of-email-change-verification.patch ajouté
- Fichier 0003-manager-add-a-change-email-action-on-users-fixes-197.patch 0003-manager-add-a-change-email-action-on-users-fixes-197.patch ajouté
- Patch proposed changé de Non à Oui
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/
?)
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.
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0003-manager-add-a-change-email-action-on-users-fixes-197.patch 0003-manager-add-a-change-email-action-on-users-fixes-197.patch ajouté
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']
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).
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.
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.
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0003-manager-add-a-change-email-action-on-users-fixes-197.patch 0003-manager-add-a-change-email-action-on-users-fixes-197.patch ajouté
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()
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.
Mis à jour par Paul Marillonnet il y a plus de 6 ans
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- Fichier 0003-manager-add-a-change-email-action-on-users-fixes-197.patch 0003-manager-add-a-change-email-action-on-users-fixes-197.patch ajouté
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.
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.
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.
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.
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
Appliqué par commit authentic2|15878fbfaab5b466a50972812b0ae6f3641a9c31.
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Fermé
a2_rbac: add a validate_emails flag to OU model (#19716)