PCv5/app/forms/account.py

188 lines
5.6 KiB
Python
Raw Normal View History

2019-02-03 16:52:42 +01:00
from flask_wtf import FlaskForm
2021-07-08 11:43:09 +02:00
from wtforms import StringField, PasswordField, BooleanField, TextAreaField, SubmitField, DecimalField, SelectField, RadioField
2022-04-14 20:01:45 +02:00
from wtforms.fields.datetime import DateField
from wtforms.fields.simple import EmailField
from wtforms.validators import InputRequired, Optional, Email, EqualTo
from flask_wtf.file import FileField # Cuz' wtforms' FileField is shitty
2019-02-03 16:52:42 +01:00
import app.utils.validators as vd
2019-02-03 16:52:42 +01:00
class RegistrationForm(FlaskForm):
username = StringField(
'Pseudonyme',
description='Ce nom est définitif !',
validators=[InputRequired(), vd.name.valid, vd.name.available])
email = EmailField(
'Adresse Email',
validators=[
InputRequired(),
Email(message="Adresse email invalide."),
vd.email
])
password = PasswordField(
'Mot de passe',
validators=[InputRequired(), vd.password.is_strong])
password2 = PasswordField(
'Répéter le mot de passe',
validators=[
InputRequired(),
EqualTo('password', message="Les mots de passe doivent être identiques.")
])
guidelines = BooleanField(
"""J'accepte les <a href="#">CGU</a>""",
validators=[InputRequired()])
newsletter = BooleanField(
'Inscription à la newsletter',
description='Un mail par trimestre environ, pour être prévenu des concours, évènements et nouveautés.')
2019-02-03 16:52:42 +01:00
submit = SubmitField("S'inscrire")
class UpdateAccountBaseForm(FlaskForm):
avatar = FileField(
'Avatar',
validators=[Optional(), vd.file.is_image, vd.file.avatar_size])
email = EmailField(
'Adresse email',
validators=[
Optional(),
Email(message="Addresse email invalide."),
vd.email,
# For users: vd.password.old_password is added dynamically
])
password = PasswordField(
'Nouveau mot de passe',
description="L'ancien mot de passe ne pourra pas être récupéré !",
validators=[
Optional(),
vd.password.is_strong,
# For users: vd.password.old_password is added dynamically
])
birthday = DateField(
'Anniversaire',
validators=[Optional()])
signature = TextAreaField(
'Signature',
validators=[Optional()])
biography = TextAreaField(
'Présentation',
validators=[Optional()])
title = SelectField(
'Titre',
coerce=int,
validators=[
Optional(),
# For users: vd.own_title (admins can assign any title!)
])
newsletter = BooleanField(
'Inscription à la newsletter',
description='Un mail par trimestre environ, pour être prévenu des concours, évènements et nouveautés.')
submit = SubmitField('Mettre à jour')
class UpdateAccountForm(UpdateAccountBaseForm):
password2 = PasswordField(
'Répéter le mot de passe',
validators=[
Optional(),
EqualTo('password', message="Les mots de passe doivent être identiques.")
])
old_password = PasswordField(
'Mot de passe actuel',
validators=[Optional()])
2021-07-08 11:43:09 +02:00
theme = RadioField(
'Thème du site',
choices=[
2021-07-10 09:28:36 +02:00
('default_theme', 'Planète Casio v5'),
('FK_dark_theme', 'Thème sombre (FlamingKite)'),
('Tituya_v43_theme', 'Thème Planète Casio v4 (Tituya)'),
])
class AdminUpdateAccountForm(UpdateAccountBaseForm):
username = StringField(
'Pseudonyme',
validators=[Optional(), vd.name.valid, vd.name.available])
email_confirmed = BooleanField(
"Confirmer l'email",
description="Si décoché, l'utilisateur devra demander explicitement un"
" email de validation, ou faire valider son adresse email par un"
" administrateur.")
xp = DecimalField(
'XP',
validators=[Optional()])
class DeleteAccountBaseForm(FlaskForm):
transfer = BooleanField(
'Conserver les posts sous forme anonyme',
description="Aucune information personnelle n'est conservée ; seul le texte de posts reste. Cela permet de garder un historique fidèle des échanges.",
default=True)
delete = BooleanField(
'Confirmer la suppression',
validators=[InputRequired()],
description='Attention, cette opération est irréversible !')
submit = SubmitField('Supprimer le compte')
class DeleteAccountForm(DeleteAccountBaseForm):
old_password = PasswordField(
'Mot de passe',
validators=[InputRequired(), vd.password.old_password])
class AdminDeleteAccountForm(DeleteAccountBaseForm):
pass
2019-02-06 12:44:44 +01:00
2020-07-21 22:12:18 +02:00
class AskResetPasswordForm(FlaskForm):
email = EmailField(
'Adresse email',
validators=[Optional(), Email(message="Addresse email invalide.")])
2020-07-21 22:12:18 +02:00
submit = SubmitField('Valider')
class ResetPasswordForm(FlaskForm):
password = PasswordField(
'Mot de passe',
validators=[Optional(), vd.password.is_strong])
2020-07-21 22:12:18 +02:00
password2 = PasswordField(
'Répéter le mot de passe',
validators=[
Optional(),
EqualTo('password', message="Les mots de passe doivent être identiques.")
])
2020-07-21 22:12:18 +02:00
submit = SubmitField('Valider')
2019-02-06 12:44:44 +01:00
class AdminAccountEditTrophyForm(FlaskForm):
# Boolean inputs are generated on-the-fly from trophy list
submit = SubmitField('Modifier')
class AdminAccountEditGroupForm(FlaskForm):
# Boolean inputs are generated on-the-fly from group list
submit = SubmitField('Modifier')