diff --git a/app/models/user.py b/app/models/user.py index 1e9de8c..6e31c62 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -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", diff --git a/app/routes/posts/edit.py b/app/routes/posts/edit.py index 5e708b2..77b2582 100644 --- a/app/routes/posts/edit.py +++ b/app/routes/posts/edit.py @@ -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/', methods=['GET'])