from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, BooleanField, TextAreaField, SubmitField, DecimalField, SelectField from wtforms.fields.html5 import DateField, EmailField from wtforms.validators import DataRequired, Optional, Email, EqualTo from flask_wtf.file import FileField # Cuz' wtforms' FileField is shitty import app.utils.validators as vd class RegistrationForm(FlaskForm): username = StringField( 'Pseudonyme', description='Ce nom est définitif !', validators=[ DataRequired(), vd.name_valid, vd.name_available, ], ) email = EmailField( 'Adresse Email', validators=[ DataRequired(), Email(message="Adresse email invalide."), vd.email, ], ) password = PasswordField( 'Mot de passe', validators=[ DataRequired(), vd.password, ], ) password2 = PasswordField( 'Répéter le mot de passe', validators=[ DataRequired(), EqualTo('password', message="Les mots de passe doivent être identiques."), ], ) guidelines = BooleanField( """J'accepte les CGU""", validators=[ DataRequired(), ], ) newsletter = BooleanField( 'Inscription à la newsletter', description='Un mail par trimestre environ, pour être prévenu des concours, évènements et nouveautés.', ) submit = SubmitField( "S'inscrire", ) class UpdateAccountForm(FlaskForm): avatar = FileField( 'Avatar', validators=[ Optional(), vd.avatar, ], ) email = EmailField( 'Adresse email', validators=[ Optional(), Email(message="Addresse email invalide."), vd.email, vd.old_password, ], ) password = PasswordField( 'Nouveau mot de passe', validators=[ Optional(), vd.password, vd.old_password, ], ) 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(), ], ) birthday = DateField( 'Anniversaire', validators=[ Optional(), ], ) signature = TextAreaField( 'Signature', validators=[ Optional(), ] ) biography = TextAreaField( 'Présentation', validators=[ Optional(), ] ) title = SelectField( 'Titre', coerce=int, validators=[ Optional(), vd.own_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 DeleteAccountForm(FlaskForm): delete = BooleanField( 'Confirmer la suppression', validators=[ DataRequired(), ], description='Attention, cette opération est irréversible !' ) old_password = PasswordField( 'Mot de passe', validators=[ DataRequired(), vd.old_password, ], ) submit = SubmitField( 'Supprimer le compte', ) class AskResetPasswordForm(FlaskForm): email = EmailField( 'Adresse email', validators=[ Optional(), Email(message="Addresse email invalide."), ], ) submit = SubmitField('Valider') class ResetPasswordForm(FlaskForm): password = PasswordField( 'Mot de passe', validators=[ Optional(), vd.password, ], ) password2 = PasswordField( 'Répéter le mot de passe', validators=[ Optional(), EqualTo('password', message="Les mots de passe doivent être identiques."), ], ) submit = SubmitField('Valider') class AdminUpdateAccountForm(FlaskForm): username = StringField( 'Pseudonyme', validators=[ Optional(), vd.name_valid, ], ) avatar = FileField( 'Avatar', validators=[ Optional(), vd.avatar, ], ) email = EmailField( 'Adresse email', validators=[ Optional(), Email(message="Addresse email invalide."), vd.email, ], ) 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.", ) password = PasswordField( 'Mot de passe', description="L'ancien mot de passe ne pourra pas être récupéré !", validators=[ Optional(), vd.password, ], ) xp = DecimalField( 'XP', validators=[ Optional(), ] ) birthday = DateField( 'Anniversaire', validators=[ Optional(), ], ) signature = TextAreaField( 'Signature', validators=[ Optional(), ], ) biography = TextAreaField( 'Présentation', validators=[ Optional(), ], ) title = SelectField( 'Titre', coerce=int, validators=[ Optional(), # Admin can set any title to any member! ] ) 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 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', ) class AdminDeleteAccountForm(FlaskForm): delete = BooleanField( 'Confirmer la suppression', validators=[ DataRequired(), ], description='Attention, cette opération est irréversible !', ) submit = SubmitField( 'Supprimer le compte', )