Premier jet sur les avatars

This commit is contained in:
Darks 2019-12-09 23:24:05 +01:00
parent d447372bf3
commit 9341c5883c
Signed by untrusted user: Darks
GPG Key ID: F61F10FA138E797C
10 changed files with 28 additions and 13 deletions

View File

@ -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()

View File

@ -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,

View File

@ -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/<user_id>/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))

View File

@ -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/<username>')
@ -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/<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)
return redirect(url_for('static', filename='images/default_avatar.png'))

View File

@ -13,7 +13,7 @@
<div>
{{ form.avatar.label }}
<div>
<img class="avatar" src="{{ url_for('static', filename=current_user.avatar) }}" meta="{{ current_user.avatar }}" />
<img class="avatar" src="{{ url_for('avatar', filename=current_user.avatar) }}" meta="{{ current_user.avatar }}" />
{{ form.avatar }}
</div>
</div>

View File

@ -14,7 +14,7 @@
<div>
{{ form.avatar.label }}
<div>
<img class="avatar" src="{{ url_for('static', filename=user.avatar) }}" meta="{{ user.avatar }}" />
<img class="avatar" src="{{ url_for('avatar', filename=user.avatar) }}" meta="{{ user.avatar }}" />
{{ form.avatar }}
</div>
</div>

View File

@ -2,7 +2,7 @@
<div>
<h2>
<a href="{{ url_for('user', username=current_user.name) }}">
<img src="{{ url_for('static', filename=current_user.avatar) }}"></a>
<img src="{{ url_for('avatar', filename=current_user.avatar) }}"></a>
<a href="{{ url_for('user', username=current_user.name) }}">
{{ current_user.name }}</a>
</h2>

View File

@ -1,6 +1,6 @@
{% macro profile(member) %}
<div class=profile>
<img class=profile-avatar src="{{ url_for('static', filename=member.avatar) }}" alt="Avatar de {{ member.name }}">
<img class=profile-avatar src="{{ url_for('avatar', filename=member.avatar) }}" alt="Avatar de {{ member.name }}">
<div>
<div class=profile-name><a href="{{ url_for('user', username=member.name) }}">{{ member.name }}</a></div>
<div class=profile-title>Membre</div>

View File

@ -1,6 +1,6 @@
{% macro profile(member) %}
<div class=profile>
<img class=profile-avatar src="{{ url_for('static', filename=member.avatar) }}" alt="Avatar de {{ member.name }}">
<img class=profile-avatar src="{{ url_for('avatar', filename=member.avatar) }}" alt="Avatar de {{ member.name }}">
<div>
<div class=profile-name>{{ member.name }}</div>
<div class=profile-title>Membre</div>

View File

@ -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):