make UI more adaptable to email provider usecase

This commit is contained in:
Camille 2021-12-20 16:15:13 +00:00
parent 15640c6912
commit 239d5d3e24
8 changed files with 192 additions and 148 deletions

View file

@ -113,6 +113,7 @@ PROFILE_FORM_FIELDS = dict(
mail=wtforms.EmailField(
_("Email address"),
validators=[wtforms.validators.DataRequired(), wtforms.validators.Email()],
description=_("This email will be used as a recovery address to reset the password if needed"),
render_kw={
"placeholder": _("jane@doe.com"),
"spellcheck": "false",

View file

@ -6,6 +6,7 @@
noindicator=false,
indicator_icon=none,
indicator_text=none,
suffix_text=none,
display=true
) -%}
@ -19,13 +20,20 @@
{% if (field.type != 'HiddenField' and field.type !='CSRFTokenField') and label_visible %}
{{ field.label() }}
{% if field.description %}
<div>{{ field.description }}</div>
{% endif %}
{% endif %}
{% set lock_indicator = field.render_kw and ("readonly" in field.render_kw or "disabled" in field.render_kw) %}
{% set required_indicator = "required" in field.flags %}
{% set corner_indicator = not noindicator and (indicator_icon or lock_indicator or required_indicator) %}
{% set labeled = suffix_text or corner_indicator %}
<div class="ui
{% if not noindicator and (indicator_icon or lock_indicator or required_indicator) %}corner labeled{% endif %}
{% if suffix_text %}right{% endif %}
{% if corner_indicator %}corner{% endif %}
{% if labeled %}labeled{% endif %}
{% if icon %}left icon {% endif %}
{% if field.type not in ("BooleanField", "RadioField") %}input{% endif %}
">
@ -39,6 +47,12 @@
{{ field(class_="ui fluid dropdown multiple", **kwargs) }}
{% endif %}
{% if suffix_text %}
<div class="ui basic label">
{{ suffix_text }}{% if corner_indicator %}&emsp;{% endif %}
</div>
{% endif %}
{% if not noindicator %}
{% if indicator_icon %}
<div class="ui corner label"{% if indicator_text %} title="{{ indicator_text }}"{% endif %}>

View file

@ -94,10 +94,18 @@
role="form"
class="ui form"
>
{{ form.hidden_tag() if form.hidden_tag }}
{{ fui.render_field(form.uid, icon="user") }}
{{ fui.render_field(form.mail, icon="mail") }}
{{ fui.render_field(form.groups, icon="users") }}
{{ form.hidden_tag() if form.hidden_tag }}
{% block uid_field scoped %}
{{ fui.render_field(form.uid, icon="user") }}
{% endblock %}
{% block mail_field scoped %}
{{ fui.render_field(form.mail, icon="mail") }}
{% endblock %}
{% block groups_field scoped %}
{{ fui.render_field(form.groups, icon="users") }}
{% endblock %}
<div class="ui right aligned container">
<div class="ui stackable buttons">

View file

@ -26,9 +26,10 @@
>
{{ form.hidden_tag() if form.hidden_tag }}
{{ sui.render_field(form.login, icon="user", noindicator=true) }}
{% block login_field scoped %}{{ sui.render_field(form.login, icon="user", noindicator=true) }}{% endblock %}
{% if "password" in form %}
{{ sui.render_field(form.password, icon="key", noindicator=true) }}
{% block password_field scoped %}{{ sui.render_field(form.password, icon="key", noindicator=true) }}{% endblock %}
{% endif %}
<div class="ui right aligned container">

View file

@ -82,74 +82,81 @@
{% if "jpegPhoto" in form %}
<div class="ui grid">
<div class="three wide column">
{{ render_field(form.jpegPhoto, display=false, class="photo-field") }}
{{ render_field(form.jpegPhoto_delete, display=false, class="photo-delete-button") }}
{% set photo = edited_user.jpegPhoto and edited_user.jpegPhoto[0] %}
<label
class="ui small bordered image photo-content"
for="{{ form.jpegPhoto.id }}"
title="{{ _("Click to upload a photo") }}"
{% if not photo %}style="display: none;"{% endif %}>
{% block photo_field scoped %}
{{ render_field(form.jpegPhoto, display=false, class="photo-field") }}
{{ render_field(form.jpegPhoto_delete, display=false, class="photo-delete-button") }}
{% set photo = edited_user.jpegPhoto and edited_user.jpegPhoto[0] %}
<label
class="ui small bordered image photo-content"
for="{{ form.jpegPhoto.id }}"
title="{{ _("Click to upload a photo") }}"
{% if not photo %}style="display: none;"{% endif %}>
<a class="ui right corner label photo-delete-icon" title="{{ _("Delete the photo") }}">
<i class="times icon"></i>
</a>
<img src="{% if photo %}{{ url_for("account.photo", uid=edited_user.uid[0], field="jpegPhoto") }}{% endif %}" alt="User photo">
</label>
<label
class="ui centered photo-placeholder"
for="{{ form.jpegPhoto.id }}"
title="{{ _("Click to upload a photo") }}"
{% if photo %}style="display: none;"{% endif %}>
<i class="massive centered portrait icon"></i>
</label>
</div>
<a class="ui right corner label photo-delete-icon" title="{{ _("Delete the photo") }}">
<i class="times icon"></i>
</a>
<img src="{% if photo %}{{ url_for("account.photo", uid=edited_user.uid[0], field="jpegPhoto") }}{% endif %}" alt="User photo">
</label>
<label
class="ui centered photo-placeholder"
for="{{ form.jpegPhoto.id }}"
title="{{ _("Click to upload a photo") }}"
{% if photo %}style="display: none;"{% endif %}>
<i class="massive centered portrait icon"></i>
</label>
</div>
{% endblock %}
<div class="thirteen wide column">
{% endif %}
<div class="two fields">
{% if "givenName" in form %}
{{ render_field(form.givenName) }}
{% block given_name_field scoped %}{{ render_field(form.givenName) }}{% endblock %}
{% endif %}
{% if "sn" in form %}
{{ render_field(form.sn) }}
{% block sn_field scoped %}{{ render_field(form.sn) }}{% endblock %}
{% endif %}
</div>
{% if "mail" in form %}
{{ render_field(form.mail) }}
{% block mail_field scoped %}{{ render_field(form.mail) }}{% endblock %}
{% endif %}
{% if "jpegPhoto" in form %}</div></div>{% endif %}
{% if "telephoneNumber" in form %}
{{ render_field(form.telephoneNumber) }}
{% block telephone_number_field scoped %}{{ render_field(form.telephoneNumber) }}{% endblock %}
{% endif %}
{% if "employeeNumber" in form %}
{{ render_field(form.employeeNumber) }}
{% block employee_number_field scoped %}{{ render_field(form.employeeNumber) }}{% endblock %}
{% endif %}
{% if "labeledURI" in form %}
{{ render_field(form.labeledURI) }}
{% block labeled_uri_field scoped %}{{ render_field(form.labeledURI) }}{% endblock %}
{% endif %}
<h4 class="ui dividing header">{% trans %}Account information{% endtrans %}</h4>
{% if "uid" in form %}
{{ render_field(form.uid) }}
{% block uid_field scoped %}{{ render_field(form.uid) }}{% endblock %}
{% endif %}
{% if "groups" in form %}
{{ render_field(form.groups) }}
{% block groups_field scoped %}{{ render_field(form.groups) }}{% endblock %}
{% endif %}
<div class="two fields">
{% if "password1" in form %}
{{ render_field(form.password1, noindicator=true) }}
{{ render_field(form.password2, noindicator=true) }}
{% endif %}
</div>
{% if "password1" in form %}
{% block password_field scoped %}
<div class="two fields">
{{ render_field(form.password1, noindicator=true) }}
{{ render_field(form.password2, noindicator=true) }}
</div>
{% endblock %}
{% endif %}
{% if user.can_manage_users %}

View file

@ -2,18 +2,18 @@
# Copyright (C) 2020 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
# Camille <camille@yaal.coop>, 2021.
# Éloi Rivard <eloi.rivard@aquilenet.fr>, 2020-2021.
# Camille <camille@yaal.coop>, 2021.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: contact@yaal.fr\n"
"POT-Creation-Date: 2021-12-13 23:42+0100\n"
"PO-Revision-Date: 2021-12-13 23:43+0100\n"
"Last-Translator: Éloi Rivard <eloi.rivard@aquilenet.fr>\n"
"POT-Creation-Date: 2021-12-20 16:16+0100\n"
"PO-Revision-Date: 2021-12-20 16:27+0100\n"
"Last-Translator: Camille <camille@yaal.coop>\n"
"Language: fr\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language-Team: French <contact@yaal.coop>\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -145,7 +145,7 @@ msgstr "Votre mot de passe a correctement été mis à jour."
msgid "John Doe"
msgstr "Camille Dupont"
#: canaille/apputils.py:42 canaille/forms.py:93 canaille/forms.py:206
#: canaille/apputils.py:42 canaille/forms.py:93 canaille/forms.py:207
msgid "jdoe"
msgstr "cdupont"
@ -189,28 +189,28 @@ msgstr "L'identifiant '{login}' n'existe pas"
msgid "Login"
msgstr "Identifiant"
#: canaille/forms.py:45 canaille/forms.py:69 canaille/forms.py:117
#: canaille/forms.py:217
#: canaille/forms.py:45 canaille/forms.py:69 canaille/forms.py:118
#: canaille/forms.py:218
msgid "jane@doe.com"
msgstr "camille@dupont.fr"
#: canaille/forms.py:55 canaille/forms.py:78 canaille/forms.py:132
#: canaille/forms.py:55 canaille/forms.py:78 canaille/forms.py:133
msgid "Password"
msgstr "Mot de passe"
#: canaille/forms.py:81 canaille/forms.py:136
#: canaille/forms.py:81 canaille/forms.py:137
msgid "Password confirmation"
msgstr "Confirmation du mot de passe"
#: canaille/forms.py:84 canaille/forms.py:139
#: canaille/forms.py:84 canaille/forms.py:140
msgid "Password and confirmation do not match."
msgstr "Le mot de passe et sa confirmation ne correspondent pas."
#: canaille/forms.py:92 canaille/forms.py:205
#: canaille/forms.py:92 canaille/forms.py:206
msgid "Username"
msgstr "Identifiant"
#: canaille/admin/clients.py:28 canaille/forms.py:96 canaille/forms.py:191
#: canaille/admin/clients.py:28 canaille/forms.py:96 canaille/forms.py:192
#: canaille/templates/admin/client_list.html:23
#: canaille/templates/groups.html:17 canaille/templates/userlist.html:11
msgid "Name"
@ -232,57 +232,64 @@ msgstr "Nom de famille"
msgid "Doe"
msgstr "Dupont"
#: canaille/forms.py:114 canaille/forms.py:210
#: canaille/forms.py:114 canaille/forms.py:211
msgid "Email address"
msgstr "Courriel"
#: canaille/forms.py:123
#: canaille/forms.py:116
msgid ""
"This email will be used as a recovery address to reset the password if needed"
msgstr ""
"Cette adresse servira d'adresse e-mail de récupération pour recevoir un e-"
"mail de réinitialisation de mot de passe en cas de besoin"
#: canaille/forms.py:124
msgid "Phone number"
msgstr "Numéro de téléphone"
#: canaille/forms.py:123
#: canaille/forms.py:124
msgid "555-000-555"
msgstr "06 01 02 03 04"
#: canaille/forms.py:126
#: canaille/forms.py:127
msgid "Photo"
msgstr "Photo"
#: canaille/forms.py:130 canaille/templates/profile.html:94
#: canaille/forms.py:131 canaille/templates/profile.html:95
msgid "Delete the photo"
msgstr "Supprimer la photo"
#: canaille/forms.py:144
#: canaille/forms.py:145
msgid "Number"
msgstr "Numéro"
#: canaille/forms.py:146
#: canaille/forms.py:147
msgid "1234"
msgstr "1234"
#: canaille/forms.py:150
#: canaille/forms.py:151
msgid "Website"
msgstr "Site internet"
#: canaille/forms.py:152
#: canaille/forms.py:153
msgid "https://mywebsite.tld"
msgstr "https://mon-site-internet.fr"
#: canaille/forms.py:176 canaille/forms.py:223
#: canaille/forms.py:177 canaille/forms.py:224
#: canaille/templates/groups.html:11 canaille/templates/userlist.html:17
#: canaille/themes/default/base.html:59
msgid "Groups"
msgstr "Groupes"
#: canaille/forms.py:178
#: canaille/forms.py:179
msgid "users, admins ..."
msgstr "utilisateurs, administrateurs ..."
#: canaille/forms.py:194
#: canaille/forms.py:195
msgid "group"
msgstr "groupe"
#: canaille/forms.py:198 canaille/templates/groups.html:18
#: canaille/forms.py:199 canaille/templates/groups.html:18
msgid "Description"
msgstr "Description"
@ -572,16 +579,16 @@ msgstr "Envoyer le courriel d'initialisation"
#: canaille/templates/admin/client_edit.html:35
#: canaille/templates/admin/client_edit.html:44
#: canaille/templates/admin/client_edit.html:53
#: canaille/templates/fomanticui.html:48
#: canaille/templates/fomanticui.html:62
msgid "This field is not editable"
msgstr "Ce champ n'est pas modifiable"
#: canaille/templates/fomanticui.html:52
#: canaille/templates/fomanticui.html:66
msgid "This field is required"
msgstr "Ce champ est requis"
#: canaille/templates/forgotten-password.html:11
#: canaille/templates/login.html:37 canaille/templates/password.html:35
#: canaille/templates/login.html:42 canaille/templates/password.html:35
msgid "Forgotten password"
msgstr "Mot de passe oublié"
@ -603,7 +610,7 @@ msgstr ""
" "
#: canaille/templates/forgotten-password.html:38
#: canaille/templates/profile.html:180 canaille/templates/profile.html:208
#: canaille/templates/profile.html:202 canaille/templates/profile.html:230
msgid "Send again"
msgstr "Envoyer à nouveau"
@ -667,7 +674,7 @@ msgstr "Supprimer le groupe"
msgid "Create group"
msgstr "Créer le groupe"
#: canaille/templates/group.html:82 canaille/templates/profile.html:248
#: canaille/templates/group.html:82 canaille/templates/profile.html:270
msgid "Submit"
msgstr "Valider"
@ -734,7 +741,7 @@ msgstr ""
msgid "Copy"
msgstr "Copier"
#: canaille/templates/invite.html:62 canaille/templates/invite.html:105
#: canaille/templates/invite.html:62 canaille/templates/invite.html:113
msgid "Create a user"
msgstr "Créer un utilisateur"
@ -759,11 +766,11 @@ msgstr ""
"recevra un email contenant un lien lui permettant de créer un compte "
"utilisateur."
#: canaille/templates/invite.html:108
#: canaille/templates/invite.html:116
msgid "Generate a link"
msgstr "Générer un lien"
#: canaille/templates/invite.html:111
#: canaille/templates/invite.html:119
msgid "Send the invitation"
msgstr "Envoyer l'invitation"
@ -776,7 +783,7 @@ msgstr "Connexion à %(website)s"
msgid "Log-in and manage your authorizations."
msgstr "Connectez-vous et gérez vos autorisations."
#: canaille/templates/login.html:39
#: canaille/templates/login.html:44
msgid "Continue"
msgstr "Continuer"
@ -854,27 +861,27 @@ msgstr "Éditez les informations d'un utilisateur"
msgid "Personal information"
msgstr "Informations personnelles"
#: canaille/templates/profile.html:91 canaille/templates/profile.html:102
#: canaille/templates/profile.html:92 canaille/templates/profile.html:103
msgid "Click to upload a photo"
msgstr "Cliquez pour mettre en ligne une photo"
#: canaille/templates/profile.html:138
#: canaille/templates/profile.html:153
msgid "Account information"
msgstr "Informations sur le compte"
#: canaille/templates/profile.html:160
#: canaille/templates/profile.html:182
msgid "User password is not mandatory"
msgstr "Le mot de passe utilisateur n'est pas requis à la création"
#: canaille/templates/profile.html:163
#: canaille/templates/profile.html:185
msgid "The user password can be set:"
msgstr "Il pourra être renseigné :"
#: canaille/templates/profile.html:165
#: canaille/templates/profile.html:187
msgid "by filling this form;"
msgstr "en remplissant ce formulaire ;"
#: canaille/templates/profile.html:166
#: canaille/templates/profile.html:188
msgid ""
"by sending the user a password initialization mail, after the account "
"creation;"
@ -882,7 +889,7 @@ msgstr ""
"en envoyant un lien d'initialisation de mot de passe, par mail à "
"l'utilisateur, après la création de son compte;"
#: canaille/templates/profile.html:167 canaille/templates/profile.html:196
#: canaille/templates/profile.html:189 canaille/templates/profile.html:218
msgid ""
"or simply waiting for the user to sign-in a first time, and then receive a "
"password initialization mail."
@ -890,46 +897,46 @@ msgstr ""
"ou simplement en attendant la première connexion de l'utilisateur, afin "
"qu'il reçoive un lien d'initialisation de mot de passe par email."
#: canaille/templates/profile.html:170 canaille/templates/profile.html:199
#: canaille/templates/profile.html:192 canaille/templates/profile.html:221
msgid "The user will not be able to authenticate unless the password is set"
msgstr ""
"L'utilisateur ne pourra pas se connecter tant que son mot de passe n'est pas "
"défini"
#: canaille/templates/profile.html:184
#: canaille/templates/profile.html:206
msgid "Send email"
msgstr "Envoyer l'email"
#: canaille/templates/profile.html:189
#: canaille/templates/profile.html:211
msgid "This user does not have a password yet"
msgstr "L'utilisateur n'a pas encore de mot de passe"
#: canaille/templates/profile.html:192
#: canaille/templates/profile.html:214
msgid "You can solve this by:"
msgstr "Vous pouvez régler ceci en :"
#: canaille/templates/profile.html:194
#: canaille/templates/profile.html:216
msgid "setting a password using this form;"
msgstr "renseignant un mot de passe via ce formulaire ;"
#: canaille/templates/profile.html:195
#: canaille/templates/profile.html:217
msgid ""
"sending the user a password initialization mail, by clicking this button;"
msgstr ""
"envoyant un lien d'initialisation de mot de passe, par mail à l'utilisateur, "
"en cliquant sur ce bouton;"
#: canaille/templates/profile.html:210
#: canaille/templates/profile.html:232
msgid "Send mail"
msgstr "Envoyer l'email"
#: canaille/templates/admin/mails.html:34 canaille/templates/profile.html:214
#: canaille/templates/admin/mails.html:34 canaille/templates/profile.html:236
#: canaille/templates/reset-password.html:11
#: canaille/templates/reset-password.html:16
msgid "Password reset"
msgstr "Réinitialisation du mot de passe"
#: canaille/templates/profile.html:216
#: canaille/templates/profile.html:238
msgid ""
"If the user has forgotten his password, you can send him a password reset "
"email by clicking this button."
@ -937,19 +944,19 @@ msgstr ""
"Si l'utilisateur a oublié son mot de passe, vous pouvez lui envoyer un email "
"contenant un lien de réinitilisation en cliquant sur ce bouton."
#: canaille/templates/profile.html:228
#: canaille/templates/profile.html:250
msgid "Delete the user"
msgstr "Supprimer l'utilisateur"
#: canaille/templates/profile.html:230
#: canaille/templates/profile.html:252
msgid "Delete my account"
msgstr "Supprimer mon compte"
#: canaille/templates/profile.html:237
#: canaille/templates/profile.html:259
msgid "Impersonate"
msgstr "Prendre l'identité"
#: canaille/templates/profile.html:243 canaille/templates/users.html:20
#: canaille/templates/profile.html:265 canaille/templates/users.html:20
msgid "Invite a user"
msgstr "Inviter un utilisateur"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-12-13 23:42+0100\n"
"POT-Creation-Date: 2021-12-20 16:16+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -132,7 +132,7 @@ msgstr ""
msgid "John Doe"
msgstr ""
#: canaille/apputils.py:42 canaille/forms.py:93 canaille/forms.py:206
#: canaille/apputils.py:42 canaille/forms.py:93 canaille/forms.py:207
msgid "jdoe"
msgstr ""
@ -176,28 +176,28 @@ msgstr ""
msgid "Login"
msgstr ""
#: canaille/forms.py:45 canaille/forms.py:69 canaille/forms.py:117
#: canaille/forms.py:217
#: canaille/forms.py:45 canaille/forms.py:69 canaille/forms.py:118
#: canaille/forms.py:218
msgid "jane@doe.com"
msgstr ""
#: canaille/forms.py:55 canaille/forms.py:78 canaille/forms.py:132
#: canaille/forms.py:55 canaille/forms.py:78 canaille/forms.py:133
msgid "Password"
msgstr ""
#: canaille/forms.py:81 canaille/forms.py:136
#: canaille/forms.py:81 canaille/forms.py:137
msgid "Password confirmation"
msgstr ""
#: canaille/forms.py:84 canaille/forms.py:139
#: canaille/forms.py:84 canaille/forms.py:140
msgid "Password and confirmation do not match."
msgstr ""
#: canaille/forms.py:92 canaille/forms.py:205
#: canaille/forms.py:92 canaille/forms.py:206
msgid "Username"
msgstr ""
#: canaille/admin/clients.py:28 canaille/forms.py:96 canaille/forms.py:191
#: canaille/admin/clients.py:28 canaille/forms.py:96 canaille/forms.py:192
#: canaille/templates/admin/client_list.html:23
#: canaille/templates/groups.html:17 canaille/templates/userlist.html:11
msgid "Name"
@ -219,57 +219,63 @@ msgstr ""
msgid "Doe"
msgstr ""
#: canaille/forms.py:114 canaille/forms.py:210
#: canaille/forms.py:114 canaille/forms.py:211
msgid "Email address"
msgstr ""
#: canaille/forms.py:123
#: canaille/forms.py:116
msgid ""
"This email will be used as a recovery address to reset the password if "
"needed"
msgstr ""
#: canaille/forms.py:124
msgid "Phone number"
msgstr ""
#: canaille/forms.py:123
#: canaille/forms.py:124
msgid "555-000-555"
msgstr ""
#: canaille/forms.py:126
#: canaille/forms.py:127
msgid "Photo"
msgstr ""
#: canaille/forms.py:130 canaille/templates/profile.html:94
#: canaille/forms.py:131 canaille/templates/profile.html:95
msgid "Delete the photo"
msgstr ""
#: canaille/forms.py:144
#: canaille/forms.py:145
msgid "Number"
msgstr ""
#: canaille/forms.py:146
#: canaille/forms.py:147
msgid "1234"
msgstr ""
#: canaille/forms.py:150
#: canaille/forms.py:151
msgid "Website"
msgstr ""
#: canaille/forms.py:152
#: canaille/forms.py:153
msgid "https://mywebsite.tld"
msgstr ""
#: canaille/forms.py:176 canaille/forms.py:223
#: canaille/forms.py:177 canaille/forms.py:224
#: canaille/templates/groups.html:11 canaille/templates/userlist.html:17
#: canaille/themes/default/base.html:59
msgid "Groups"
msgstr ""
#: canaille/forms.py:178
#: canaille/forms.py:179
msgid "users, admins ..."
msgstr ""
#: canaille/forms.py:194
#: canaille/forms.py:195
msgid "group"
msgstr ""
#: canaille/forms.py:198 canaille/templates/groups.html:18
#: canaille/forms.py:199 canaille/templates/groups.html:18
msgid "Description"
msgstr ""
@ -552,16 +558,16 @@ msgstr ""
#: canaille/templates/admin/client_edit.html:35
#: canaille/templates/admin/client_edit.html:44
#: canaille/templates/admin/client_edit.html:53
#: canaille/templates/fomanticui.html:48
#: canaille/templates/fomanticui.html:62
msgid "This field is not editable"
msgstr ""
#: canaille/templates/fomanticui.html:52
#: canaille/templates/fomanticui.html:66
msgid "This field is required"
msgstr ""
#: canaille/templates/forgotten-password.html:11
#: canaille/templates/login.html:37 canaille/templates/password.html:35
#: canaille/templates/login.html:42 canaille/templates/password.html:35
msgid "Forgotten password"
msgstr ""
@ -577,7 +583,7 @@ msgid ""
msgstr ""
#: canaille/templates/forgotten-password.html:38
#: canaille/templates/profile.html:180 canaille/templates/profile.html:208
#: canaille/templates/profile.html:202 canaille/templates/profile.html:230
msgid "Send again"
msgstr ""
@ -636,7 +642,7 @@ msgstr ""
msgid "Create group"
msgstr ""
#: canaille/templates/group.html:82 canaille/templates/profile.html:248
#: canaille/templates/group.html:82 canaille/templates/profile.html:270
msgid "Submit"
msgstr ""
@ -698,7 +704,7 @@ msgstr ""
msgid "Copy"
msgstr ""
#: canaille/templates/invite.html:62 canaille/templates/invite.html:105
#: canaille/templates/invite.html:62 canaille/templates/invite.html:113
msgid "Create a user"
msgstr ""
@ -719,11 +725,11 @@ msgid ""
" "
msgstr ""
#: canaille/templates/invite.html:108
#: canaille/templates/invite.html:116
msgid "Generate a link"
msgstr ""
#: canaille/templates/invite.html:111
#: canaille/templates/invite.html:119
msgid "Send the invitation"
msgstr ""
@ -736,7 +742,7 @@ msgstr ""
msgid "Log-in and manage your authorizations."
msgstr ""
#: canaille/templates/login.html:39
#: canaille/templates/login.html:44
msgid "Continue"
msgstr ""
@ -810,91 +816,91 @@ msgstr ""
msgid "Personal information"
msgstr ""
#: canaille/templates/profile.html:91 canaille/templates/profile.html:102
#: canaille/templates/profile.html:92 canaille/templates/profile.html:103
msgid "Click to upload a photo"
msgstr ""
#: canaille/templates/profile.html:138
#: canaille/templates/profile.html:153
msgid "Account information"
msgstr ""
#: canaille/templates/profile.html:160
#: canaille/templates/profile.html:182
msgid "User password is not mandatory"
msgstr ""
#: canaille/templates/profile.html:163
#: canaille/templates/profile.html:185
msgid "The user password can be set:"
msgstr ""
#: canaille/templates/profile.html:165
#: canaille/templates/profile.html:187
msgid "by filling this form;"
msgstr ""
#: canaille/templates/profile.html:166
#: canaille/templates/profile.html:188
msgid ""
"by sending the user a password initialization mail, after the account "
"creation;"
msgstr ""
#: canaille/templates/profile.html:167 canaille/templates/profile.html:196
#: canaille/templates/profile.html:189 canaille/templates/profile.html:218
msgid ""
"or simply waiting for the user to sign-in a first time, and then receive "
"a password initialization mail."
msgstr ""
#: canaille/templates/profile.html:170 canaille/templates/profile.html:199
#: canaille/templates/profile.html:192 canaille/templates/profile.html:221
msgid "The user will not be able to authenticate unless the password is set"
msgstr ""
#: canaille/templates/profile.html:184
#: canaille/templates/profile.html:206
msgid "Send email"
msgstr ""
#: canaille/templates/profile.html:189
#: canaille/templates/profile.html:211
msgid "This user does not have a password yet"
msgstr ""
#: canaille/templates/profile.html:192
#: canaille/templates/profile.html:214
msgid "You can solve this by:"
msgstr ""
#: canaille/templates/profile.html:194
#: canaille/templates/profile.html:216
msgid "setting a password using this form;"
msgstr ""
#: canaille/templates/profile.html:195
#: canaille/templates/profile.html:217
msgid "sending the user a password initialization mail, by clicking this button;"
msgstr ""
#: canaille/templates/profile.html:210
#: canaille/templates/profile.html:232
msgid "Send mail"
msgstr ""
#: canaille/templates/admin/mails.html:34 canaille/templates/profile.html:214
#: canaille/templates/admin/mails.html:34 canaille/templates/profile.html:236
#: canaille/templates/reset-password.html:11
#: canaille/templates/reset-password.html:16
msgid "Password reset"
msgstr ""
#: canaille/templates/profile.html:216
#: canaille/templates/profile.html:238
msgid ""
"If the user has forgotten his password, you can send him a password reset"
" email by clicking this button."
msgstr ""
#: canaille/templates/profile.html:228
#: canaille/templates/profile.html:250
msgid "Delete the user"
msgstr ""
#: canaille/templates/profile.html:230
#: canaille/templates/profile.html:252
msgid "Delete my account"
msgstr ""
#: canaille/templates/profile.html:237
#: canaille/templates/profile.html:259
msgid "Impersonate"
msgstr ""
#: canaille/templates/profile.html:243 canaille/templates/users.html:20
#: canaille/templates/profile.html:265 canaille/templates/users.html:20
msgid "Invite a user"
msgstr ""