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.
Files
Associated revisions
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)
History
Updated by Benjamin Dauvergne over 5 years ago
- File 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 added
- File 0002-utils-factorize-sending-of-email-change-verification.patch 0002-utils-factorize-sending-of-email-change-verification.patch added
- File 0003-manager-add-a-change-email-action-on-users-fixes-197.patch 0003-manager-add-a-change-email-action-on-users-fixes-197.patch added
- Patch proposed changed from No to Yes
Updated by Paul Marillonnet over 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/
?)
Updated by Frédéric Péters over 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.
Updated by Benjamin Dauvergne over 5 years ago
- File 0003-manager-add-a-change-email-action-on-users-fixes-197.patch 0003-manager-add-a-change-email-action-on-users-fixes-197.patch added
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']
Updated by Benjamin Dauvergne over 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).
Updated by Frédéric Péters over 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.
Updated by Benjamin Dauvergne over 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.
Updated by Benjamin Dauvergne over 5 years ago
- File 0003-manager-add-a-change-email-action-on-users-fixes-197.patch 0003-manager-add-a-change-email-action-on-users-fixes-197.patch added
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()
Updated by Paul Marillonnet over 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.
Updated by Paul Marillonnet over 5 years ago
Updated by Benjamin Dauvergne over 5 years ago
- File 0003-manager-add-a-change-email-action-on-users-fixes-197.patch 0003-manager-add-a-change-email-action-on-users-fixes-197.patch added
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.
Updated by Frédéric Péters over 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.
Updated by Frédéric Péters over 5 years ago
À regarder davantage, ça vient aussi de la classe form-inner-container.
Updated by Frédéric Péters over 5 years ago
- Status changed from Nouveau to En cours
Point de stylé déplacé dans #20509, ack pour celui-ci ainsi.
Updated by Benjamin Dauvergne over 5 years ago
- Status changed from En cours to Résolu (à déployer)
- % Done changed from 0 to 100
Appliqué par commit authentic2|15878fbfaab5b466a50972812b0ae6f3641a9c31.
a2_rbac: add a validate_emails flag to OU model (#19716)