forum: update trophies/xp of deleted topics' contributors

This commit is contained in:
Lephe 2021-07-12 20:39:44 +02:00
parent 76f03be60f
commit be644a6e18
Signed by: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
2 changed files with 18 additions and 8 deletions

View File

@ -438,12 +438,8 @@ class Member(User):
else:
self.del_trophy(trophies[level])
if context in ["new-post", "new-program", "new-tutorial", "new-test",
None]:
# FIXME: Use ORM tools with careful, non-circular imports
post_count = db.session.execute(f"""SELECT COUNT(*) FROM post
INNER JOIN member ON member.id = post.author_id
WHERE member.id = {self.id}""").first()[0]
if context in ["new-post","new-program","new-tutorial","new-test",None]:
post_count = len(self.posts)
levels = {
20: "Premiers mots",
@ -454,7 +450,7 @@ class Member(User):
progress(levels, post_count)
if context in ["new-program", None]:
program_count = self.programs.count()
program_count = len(self.programs)
levels = {
5: "Programmeur du dimanche",

View File

@ -92,18 +92,32 @@ def delete_post(postid):
if current_user.is_anonymous or not current_user.can_delete_post(p):
abort(403)
# Users who need to have their trophies updated
authors = set()
# When deleting topics, return to forum page
if isinstance(p, Topic):
next_page = url_for('forum_page', f=p.forum)
xp = -2
for comment in p.thread.comments:
if isinstance(comment.author, Member):
comment.author.add_xp(-1)
db.session.merge(comment.author)
authors.add(comment.author)
if isinstance(p.author, Member):
factor = 3 if request.args.get('penalty') == 'True' else 1
p.author.add_xp(xp * factor)
db.session.add(p.author)
db.session.merge(p.author)
authors.add(p.author)
p.delete()
db.session.commit()
for author in authors:
author.update_trophies("new-post")
return redirect(next_page)
@app.route('/post/entete/<int:postid>', methods=['GET'])