diff --git a/app/forms/account.py b/app/forms/account.py index 236547a..d1a7c25 100644 --- a/app/forms/account.py +++ b/app/forms/account.py @@ -1,5 +1,5 @@ from flask_wtf import FlaskForm -from wtforms import StringField, PasswordField, BooleanField, TextAreaField, SubmitField, DecimalField, SelectField +from wtforms import StringField, PasswordField, BooleanField, TextAreaField, SubmitField, DecimalField, SelectField, RadioField from wtforms.fields.html5 import DateField, EmailField from wtforms.validators import InputRequired, Optional, Email, EqualTo from flask_wtf.file import FileField # Cuz' wtforms' FileField is shitty @@ -122,6 +122,13 @@ class UpdateAccountForm(FlaskForm): 'Inscription à la newsletter', description='Un mail par trimestre environ, pour être prévenu des concours, évènements et nouveautés.', ) + theme = RadioField( + 'Thème du site', + choices=[ + ('default_theme', 'Thème par défaut (clair)'), + ('FK_dark_theme', 'Thème sombre de FlamingKite'), + ], + ) submit = SubmitField('Mettre à jour') diff --git a/app/models/user.py b/app/models/user.py index d4d5218..afedac5 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -108,6 +108,7 @@ class Member(User): # Settings newsletter = db.Column(db.Boolean, default=False) + theme = db.Column(db.Unicode(32)) # Relations trophies = db.relationship('Trophy', secondary=TrophyMember, @@ -131,6 +132,7 @@ class Member(User): # Workflow with LDAP enabled is User → Postgresql → LDAP → set password self.xp = 0 + self.theme = 'default_theme' self.bio = "" self.signature = "" self.birthday = None @@ -238,6 +240,7 @@ class Member(User): "newsletter" bool Newsletter setting "xp" int Experience points "avatar" File Avatar image + "theme" str Name of theme file For future compatibility, other attributes are silently ignored. None values can be specified and are ignored. @@ -271,6 +274,8 @@ class Member(User): self.set_avatar(data["avatar"]) if "title" in data: self.title = Title.query.get(data["title"]) + if "theme" in data: + self.theme = data["theme"] # For admins only if "email_confirmed" in data: diff --git a/app/routes/account/account.py b/app/routes/account/account.py index e15b00e..9dede19 100644 --- a/app/routes/account/account.py +++ b/app/routes/account/account.py @@ -30,7 +30,8 @@ def edit_account(): signature=form.signature.data, bio=form.biography.data, title=form.title.data, - newsletter=form.newsletter.data + newsletter=form.newsletter.data, + theme=form.theme.data ) db.session.merge(current_user) db.session.commit() @@ -39,6 +40,8 @@ def edit_account(): return redirect(request.url) else: flash('Erreur lors de la modification', 'error') + else: + form.theme.data = current_user.theme or 'default_theme' return render('account/account.html', scripts=["+scripts/entropy.js"], form=form) diff --git a/app/static/css/form.css b/app/static/css/form.css index fa11e42..1cb019a 100644 --- a/app/static/css/form.css +++ b/app/static/css/form.css @@ -46,6 +46,10 @@ box-shadow: 0 0 0 3px var(--shadow-focused); } +.form input[type='radio'] { + margin: 0 4px 0 0; +} + .form textarea { max-width: 100%; resize: vertical; diff --git a/app/static/css/theme.css b/app/static/css/themes/default_theme.css similarity index 100% rename from app/static/css/theme.css rename to app/static/css/themes/default_theme.css diff --git a/app/templates/account/account.html b/app/templates/account/account.html index 03981da..ee80383 100644 --- a/app/templates/account/account.html +++ b/app/templates/account/account.html @@ -89,6 +89,16 @@ {{ error }} {% endfor %} +