diff --git a/app/models/users.py b/app/models/users.py index 1809b0b..ff3a5ae 100644 --- a/app/models/users.py +++ b/app/models/users.py @@ -2,14 +2,15 @@ from datetime import date from app import app, db from flask import flash from flask_login import UserMixin +from os.path import isfile from app.models.privs import SpecialPrivilege, Group, GroupMember, \ GroupPrivilege from app.models.trophies import Trophy, TrophyMember from app.models.notification import Notification import app.utils.unicode_names as unicode_names from app.utils.notify import notify -from config import V5Config import app.utils.ldap as ldap +from config import V5Config import werkzeug.security import re @@ -78,7 +79,7 @@ class Member(User): # Avatars # TODO: rendre ça un peu plus propre @property def avatar(self): - return 'avatars/' + str(self.id) + '.png' + return str(self.id) + '.png' @property def level(self): @@ -382,8 +383,8 @@ class Member(User): # TODO: Trophy "actif" if context in ["on-profile-update", None]: - # TODO: add a better condition (this is for test) - self.add_trophy("Artiste") + if isfile(V5Config.UPLOAD_FOLDER + '/avatars/' + filename): + self.add_trophy("Artiste") db.session.merge(self) db.session.commit() diff --git a/app/routes/account/account.py b/app/routes/account/account.py index 41fe8d1..b8ca632 100644 --- a/app/routes/account/account.py +++ b/app/routes/account/account.py @@ -16,7 +16,9 @@ def edit_account(): if form.validate_on_submit(): if form.avatar.data: f = form.avatar.data - f.save("./app/static/" + current_user.avatar) + f.save(V5Config.UPLOAD_FOLDER + '/avatars/' + + current_user.avatar) + current_user.update_trophies('on-profile-update') current_user.update( email=form.email.data or None, password=form.password.data or None, diff --git a/app/routes/admin/account.py b/app/routes/admin/account.py index b5ace4a..f067405 100644 --- a/app/routes/admin/account.py +++ b/app/routes/admin/account.py @@ -9,6 +9,7 @@ from app.forms.account import AdminUpdateAccountForm, AdminDeleteAccountForm, \ from app.utils.render import render from app.utils.notify import notify from app import app, db +from config import V5Config @app.route('/admin/account//edit', methods=['GET', 'POST']) @@ -30,7 +31,8 @@ def adm_edit_account(user_id): if form.validate_on_submit(): if form.avatar.data: f = form.avatar.data - f.save("./app/static/" + user.avatar) + 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)) diff --git a/app/routes/users.py b/app/routes/users.py index cb3d28c..0bff0de 100644 --- a/app/routes/users.py +++ b/app/routes/users.py @@ -1,8 +1,11 @@ -from flask import redirect, url_for +from flask import redirect, url_for, send_from_directory +from werkzeug.utils import secure_filename +import os.path from app import app from app.models.users import Member from app.utils import unicode_names from app.utils.render import render +from config import V5Config @app.route('/user/') @@ -16,3 +19,11 @@ def user(username): def user_by_id(user_id): member = Member.query.filter_by(id=user_id).first_or_404() return redirect(url_for('user', username=member.name)) + +@app.route('/avatar/') +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) + return redirect(url_for('static', filename='images/default_avatar.png')) diff --git a/app/templates/account/account.html b/app/templates/account/account.html index 7c51129..a7cf6ba 100644 --- a/app/templates/account/account.html +++ b/app/templates/account/account.html @@ -13,7 +13,7 @@
{{ form.avatar.label }}
- + {{ form.avatar }}
diff --git a/app/templates/admin/edit_account.html b/app/templates/admin/edit_account.html index 4527567..6263e5f 100644 --- a/app/templates/admin/edit_account.html +++ b/app/templates/admin/edit_account.html @@ -14,7 +14,7 @@
{{ form.avatar.label }}
- + {{ form.avatar }}
diff --git a/app/templates/base/navbar/account.html b/app/templates/base/navbar/account.html index 7074a14..0536de7 100644 --- a/app/templates/base/navbar/account.html +++ b/app/templates/base/navbar/account.html @@ -2,7 +2,7 @@

- + {{ current_user.name }}

diff --git a/app/templates/widgets/member.html b/app/templates/widgets/member.html index aaeb070..41fefcc 100644 --- a/app/templates/widgets/member.html +++ b/app/templates/widgets/member.html @@ -1,6 +1,6 @@ {% macro profile(member) %}
- Avatar de {{ member.name }} + Avatar de {{ member.name }}
Membre
diff --git a/app/templates/widgets/user.html b/app/templates/widgets/user.html index 1ba38c3..62fd7f7 100644 --- a/app/templates/widgets/user.html +++ b/app/templates/widgets/user.html @@ -1,6 +1,6 @@ {% macro profile(member) %}
- Avatar de {{ member.name }} + Avatar de {{ member.name }}
{{ member.name }}
Membre
diff --git a/config.py b/config.py index 65b2ae0..f1de2ae 100644 --- a/config.py +++ b/config.py @@ -8,7 +8,6 @@ class Config(object): 'postgresql+psycopg2://' + os.environ.get('USER') + ':@/' \ + LocalConfig.DB_NAME SQLALCHEMY_TRACK_MODIFICATIONS = False - UPLOAD_FOLDER = './app/static/avatars' class V5Config(LocalConfig):