from flask_login import current_user from flask import request, redirect, url_for, flash, abort from app import app, db from config import V5Config from app.utils.render import render from app.forms.forum import CommentForm, AnonymousCommentForm from app.models.forum import Forum from app.models.topic import Topic from app.models.thread import Thread from app.models.comment import Comment from app.models.users import Guest @app.route('/forum//', methods=['GET', 'POST']) def forum_topic(f, page): t, page = page # Quick n' dirty workaround to converters if f != t.forum: abort(404) if current_user.is_authenticated: form = CommentForm() else: form = AnonymousCommentForm() if form.validate_on_submit() and \ (V5Config.ENABLE_GUEST_POST or current_user.is_authenticated): if current_user.is_authenticated: author = current_user else: author = Guest(form.pseudo.data) db.session.add(author) c = Comment(author, form.message.data, t.thread) db.session.add(c) db.session.commit() # Update member's xp and trophies if current_user.is_authenticated: current_user.add_xp(V5Config.XP_POINTS['comment']) current_user.update_trophies('new-post') flash('Message envoyé', 'ok') # Redirect to empty the form return redirect(url_for('forum_topic', f=f, page=(t,"fin"), _anchor=c.id)) # Update views t.views += 1 db.session.merge(t) db.session.commit() if page == -1: page = (t.thread.comments.count() - 1) \ // V5Config.COMMENTS_PER_PAGE + 1 comments = t.thread.comments.paginate(page, V5Config.COMMENTS_PER_PAGE, True) return render('/forum/topic.html', t=t, form=form, comments=comments)