def view_forum(forum_id, slug=None): page = request.args.get('page', 1, type=int) if current_user.is_authenticated(): forum = Forum.query.\ filter(Forum.id == forum_id).\ options(db.joinedload("category")).\ outerjoin(ForumsRead, db.and_(ForumsRead.forum_id == Forum.id, ForumsRead.user_id == current_user.id)).\ add_entity(ForumsRead).\ first_or_404() topics = Topic.query.filter_by(forum_id=forum[0].id).\ filter(Post.topic_id == Topic.id).\ outerjoin(TopicsRead, db.and_(TopicsRead.topic_id == Topic.id, TopicsRead.user_id == current_user.id)).\ add_entity(TopicsRead).\ order_by(Post.id.desc()).\ paginate(page, current_app.config['TOPICS_PER_PAGE'], True) else: forum = Forum.query.filter(Forum.id == forum_id).first_or_404() forum = (forum, None) topics = Topic.query.filter_by(forum_id=forum[0].id).\ filter(Post.topic_id == Topic.id).\ order_by(Post.id.desc()).\ paginate(page, current_app.config['TOPICS_PER_PAGE'], True, True) return render_template("forum/forum.html", forum=forum, topics=topics)
def get_forum(cls, forum_id, user): """Returns the forum and forumsread object as a tuple for the user. :param forum_id: The forum id :param user: The user object is needed to check if we also need their forumsread object. """ if user.is_authenticated: forum, forumsread = Forum.query.\ filter(Forum.id == forum_id).\ options(db.joinedload("category")).\ outerjoin(ForumsRead, db.and_(ForumsRead.forum_id == Forum.id, ForumsRead.user_id == user.id)).\ add_entity(ForumsRead).\ first_or_404() else: forum = Forum.query.filter(Forum.id == forum_id).first_or_404() forumsread = None return forum, forumsread