Gestion des avatars, deuxième et dernier (?) passage

This commit is contained in:
Darks 2019-12-10 00:16:01 +01:00
parent 9341c5883c
commit 6afb6085d1
Signed by: Darks
GPG Key ID: F61F10FA138E797C
5 changed files with 35 additions and 21 deletions

View File

@ -1,8 +1,9 @@
from datetime import date
from app import app, db
from flask import flash
from flask_login import UserMixin
from os.path import isfile
from PIL import Image
from app import app, db
from app.models.privs import SpecialPrivilege, Group, GroupMember, \
GroupPrivilege
from app.models.trophies import Trophy, TrophyMember
@ -156,6 +157,8 @@ class Member(User):
"signature" str Post signature
"birthday" date Birthday date
"newsletter" bool Newsletter setting
"xp" int Experience points
"avatar" File Avatar image
For future compatibility, other attributes are silently ignored. None
values can be specified and are ignored.
@ -182,11 +185,22 @@ class Member(User):
self.birthday = data["birthday"]
if "newsletter" in data:
self.newsletter = data["newsletter"]
if "avatar" in data:
self.set_avatar(data["avatar"])
# For admins only
if "xp" in data:
self.xp = data["xp"]
def set_avatar(self, avatar):
try:
size = 128, 128
im = Image.open(avatar)
im.thumbnail(size, Image.ANTIALIAS)
im.save(V5Config.AVATARS_FOLDER + self.avatar, 'PNG')
except IOError:
flash("Avatar invalide", 'error')
def get_public_data(self):
"""Returns the public information of the member."""
return {
@ -383,8 +397,10 @@ class Member(User):
# TODO: Trophy "actif"
if context in ["on-profile-update", None]:
if isfile(V5Config.UPLOAD_FOLDER + '/avatars/' + filename):
if isfile(V5Config.AVATARS_FOLDER + self.avatar):
self.add_trophy("Artiste")
else:
self.del_trophy("Artiste")
db.session.merge(self)
db.session.commit()

View File

@ -14,12 +14,8 @@ def edit_account():
form = UpdateAccountForm()
if form.submit.data:
if form.validate_on_submit():
if form.avatar.data:
f = form.avatar.data
f.save(V5Config.UPLOAD_FOLDER + '/avatars/'
+ current_user.avatar)
current_user.update_trophies('on-profile-update')
current_user.update(
avatar=form.avatar.data or None,
email=form.email.data or None,
password=form.password.data or None,
birthday=form.birthday.data,
@ -31,6 +27,7 @@ def edit_account():
db.session.commit()
current_user.update_trophies("on-profile-update")
flash('Modifications effectuées', 'ok')
return redirect(request.url)
else:
flash('Erreur lors de la modification', 'error')

View File

@ -1,4 +1,4 @@
from flask import flash, redirect, url_for
from flask import flash, redirect, url_for, request
from flask_login import current_user
from wtforms import BooleanField
from app.utils.priv_required import priv_required
@ -29,16 +29,15 @@ def adm_edit_account(user_id):
if form.submit.data:
if form.validate_on_submit():
if form.avatar.data:
f = form.avatar.data
f.save(V5Config.UPLOAD_FOLDER + '/avatars/'
+ current_user.avatar)
newname = form.username.data
names = list(Member.query.filter(Member.id != user.id).values(Member.name))
if newname in names:
# TODO: avoid this exception
# You cannot user vd.name_available because name will always be
# invalid! Maybe you can add another validator with arguments
raise Exception(f'{newname} is not available')
user.update(
avatar=form.avatar.data or None,
name=form.username.data or None,
email=form.email.data or None,
password=form.password.data or None,
@ -53,6 +52,7 @@ def adm_edit_account(user_id):
# TODO: send an email to member saying his account has been modified
user.notify(f"Vos informations personnelles ont été modifiées par {current_user.name}.")
flash('Modifications effectuées', 'ok')
return redirect(request.url)
else:
flash('Erreur lors de la modification', 'error')

View File

@ -23,7 +23,6 @@ def user_by_id(user_id):
@app.route('/avatar/<filename>')
def avatar(filename):
filename = secure_filename(filename) # No h4ckers allowed
if os.path.isfile(V5Config.UPLOAD_FOLDER + '/avatars/' + filename):
return send_from_directory(V5Config.UPLOAD_FOLDER + '/avatars',
filename)
if os.path.isfile(V5Config.AVATARS_FOLDER + filename):
return send_from_directory(V5Config.AVATARS_FOLDER, filename)
return redirect(url_for('static', filename='images/default_avatar.png'))

View File

@ -1,5 +1,7 @@
DB_NAME = "pcv5"
USE_LDAP = False
LDAP_PASSWORD = "openldap"
LDAP_ORGANIZATION = "o=planet-casio"
SECRET_KEY = "a-random-secret-key" # CHANGE THIS VALUE *NOW*
class LocalConfig(object):
DB_NAME = "pcv5"
USE_LDAP = True
LDAP_PASSWORD = "openldap"
LDAP_ORGANIZATION = "o=planet-casio"
SECRET_KEY = "a-random-secret-key" # CHANGE THIS VALUE *NOW*
AVATARS_FOLDER = '/home/pc/data/avatars/'