예제 #1
0
def bbs_topic(id):
    options = {"id": id}
    page = request.args.get('page', 0, type=int)
    topic = Topic.query.get(id)
    if not topic:
        return render_template("topic_not_found.html")

    count, num_pages, replies = get_page_query(Reply.query.replies_at_topic(topic.id), page, page_size=DEFAULT_PAGE_REPLIES)
    def pager_url(p, options):
        return generate_url(".bbs_topic", page=p, **options)

    if current_user.is_anonymous():
        form = None
    else:
        form = ReplyForm(request.form)

    if request.method == "POST":
        if current_user.is_anonymous():
            return redirect(url_for("auth.login", next=request.path) or "/")
        if form.validate():
            reply = Reply(section=topic.section, node=topic.node, user=current_user, topic=topic,
                content=form.data["content"], created=datetime.now(), floor=topic.reply_count+1)
            topic.last_reply_by = current_user.username
            topic.last_reply_at = datetime.now()
            topic.reply_count += 1
            current_user.profile.replies += 1
            node = topic.node
            node.reply_count += 1
            section = topic.section
            section.reply_count += 1
            db.session.add_all([reply, topic, current_user.profile, node, section])
            db.session.commit()

            return redirect(pager_url((reply.floor-1)/DEFAULT_PAGE_REPLIES, options))

        return render_template("topic.html", topic=topic, options=options, count=count, pager_url=pager_url,
                                num_pages=num_pages, page=page, replies=replies, form=form)

    topic.hits += 1
    db.session.commit()

    markdowner = Markdown()
    topic.content = markdowner.convert(topic.content)
    for r in replies:
        r.content = markdowner.convert(r.content)

    return render_template("topic.html", topic=topic,
                                            options=options,
                                            count=count,
                                            pager_url=pager_url,
                                            num_pages=num_pages,
                                            page=page,
                                            replies=replies,
                                            form=form
                            )
예제 #2
0
파일: reply.py 프로젝트: lypinggan/collipa
 def post(self, reply_id):
     reply = Reply.get(id=reply_id)
     if not reply or (reply.author != self.current_user and not self.current_user.is_admin):
         return self.redirect_next_url()
     user = self.current_user
     form = ReplyForm(self.request.arguments)
     if form.validate():
         reply = form.save(user=user, topic=reply.topic, reply=reply)
         reply.put_notifier()
         result = {'status': 'success', 'message': '评论修改成功',
                   'reply_url': reply.url}
         return self.send_result(result, reply.url)
     data = dict(form=form, reply=reply)
     return self.send_result_and_render(form.result, "reply/edit.html", data)
예제 #3
0
파일: reply.py 프로젝트: catsky/collipa
 def post(self):
     if not self.has_permission:
         return
     page = int(self.get_argument('page', 1))
     topic_id = int(self.get_argument('topic_id', 0))
     topic = Topic.get(id=topic_id)
     if not topic_id:
         result = {'status': 'error', 'message': '无此主题,不能创建评论'}
         if self.is_ajax:
             return self.write(result)
         else:
             self.flash_message(result)
             return self.redirect_next_url()
     user = self.current_user
     form = ReplyForm(self.request.arguments)
     if form.validate():
         reply = form.save(user=user, topic=topic)
         if 'class="mention"' in reply.content:
             put_notifier(reply)
         result = {
             'status': 'success',
             'message': '评论创建成功',
             'content': reply.content,
             'name': reply.author.name,
             'nickname': reply.author.nickname,
             'author_avatar': reply.author.get_avatar(size=48),
             'author_url': reply.author.url,
             'author_name': reply.author.name,
             'author_nickname': reply.author.nickname,
             'reply_url': reply.url,
             'created': reply.created,
             'id': reply.id,
             'floor': reply.floor
         }
         if self.is_ajax:
             return self.write(result)
         self.flash_message(result)
         return self.redirect(topic.url)
     if self.is_ajax:
         return self.write(form.result)
     self.flash_message(form.result)
     return self.render("topic/index.html",
                        form=form,
                        topic=topic,
                        category='index',
                        page=page)
예제 #4
0
 def post(self, reply_id):
     if not self.has_permission:
         return
     reply = Reply.get(id=reply_id)
     if not reply or (reply.author != self.current_user and not self.current_user.is_admin):
         return self.redirect_next_url()
     user = self.current_user
     form = ReplyForm(self.request.arguments)
     if form.validate():
         reply = form.save(user=user, topic=reply.topic, reply=reply)
         result = {"status": "success", "message": "评论修改成功", "reply_url": reply.url}
         if self.is_ajax:
             return self.write(result)
         self.flash_message(result)
         return self.redirect(reply.url)
     if self.is_ajax:
         return self.write(form.result)
     return self.render("reply/edit.html", form=form, reply=reply)
예제 #5
0
파일: reply.py 프로젝트: KeenTurbo/collipa
 def post(self, reply_id):
     if not self.has_permission:
         return
     reply = Reply.get(id=reply_id)
     if not reply:
         return self.redirect_next_url()
     user = self.current_user
     form = ReplyForm(self.request.arguments)
     if form.validate():
         reply = form.save(user=user, topic=reply.topic, reply=reply)
         result = {'status': 'success', 'message': '评论修改成功',
                 'reply_url': reply.url}
         if self.is_ajax:
             return self.write(result)
         self.flash_message(result)
         return self.redirect(reply.url)
     if self.is_ajax:
         return self.write(form.result)
     return self.render("reply/edit.html", form=form, reply=reply)
예제 #6
0
 def post(self, reply_id):
     if not self.has_permission:
         return
     reply = Reply.get(id=reply_id)
     if not reply:
         return self.redirect_next_url()
     user = self.current_user
     form = ReplyForm(self.request.arguments)
     if form.validate():
         reply = form.save(user=user, topic=reply.topic, reply=reply)
         result = {'status': 'success', 'message': '评论修改成功',
                 'reply_url': reply.url}
         if self.is_ajax:
             return self.write(result)
         self.flash_message(result)
         return self.redirect(reply.url)
     if self.is_ajax:
         return self.write(form.result)
     return self.render("reply/edit.html", form=form, reply=reply)
예제 #7
0
 def post(self):
     if not self.has_permission:
         return
     page = int(self.get_argument("page", 1))
     topic_id = int(self.get_argument("topic_id", 0))
     topic = Topic.get(id=topic_id)
     if not topic_id:
         result = {"status": "error", "message": "无此主题,不能创建评论"}
         if self.is_ajax:
             return self.write(result)
         else:
             self.flash_message(result)
             return self.redirect_next_url()
     user = self.current_user
     form = ReplyForm(self.request.arguments)
     if form.validate():
         reply = form.save(user=user, topic=topic)
         if 'class="mention"' in reply.content:
             put_notifier(reply)
         result = {
             "status": "success",
             "message": "评论创建成功",
             "content": reply.content,
             "name": reply.author.name,
             "nickname": reply.author.nickname,
             "author_avatar": reply.author.get_avatar(size=48),
             "author_url": reply.author.url,
             "author_name": reply.author.name,
             "author_nickname": reply.author.nickname,
             "reply_url": reply.url,
             "created": reply.created,
             "id": reply.id,
             "floor": reply.floor,
         }
         if self.is_ajax:
             return self.write(result)
         self.flash_message(result)
         return self.redirect(topic.url)
     if self.is_ajax:
         return self.write(form.result)
     self.flash_message(form.result)
     return self.render("topic/index.html", form=form, topic=topic, category="index", page=page)
예제 #8
0
파일: reply.py 프로젝트: KeenTurbo/collipa
 def post(self):
     if not self.has_permission:
         return
     page = int(self.get_argument('page', 1))
     topic_id = int(self.get_argument('topic_id', 0))
     topic = Topic.get(id=topic_id)
     if not topic_id:
         result = {'status': 'error', 'message':
             '无此主题,不能创建评论'}
         if self.is_ajax:
             return self.write(result)
         else:
             self.flash_message(result)
             return self.redirect_next_url()
     user = self.current_user
     form = ReplyForm(self.request.arguments)
     if form.validate():
         reply = form.save(user=user, topic=topic)
         if 'class="mention"' in reply.content:
             put_notifier(reply)
         result = {'status': 'success', 'message': '评论创建成功',
                 'content': reply.content, 'name': reply.author.name,
                 'nickname': reply.author.nickname, 'author_avatar':
                 reply.author.get_avatar(size=48), 'author_url':
                 reply.author.url, 'author_name': reply.author.name,
                 'author_nickname': reply.author.nickname,
                 'reply_url': reply.url, 'created': reply.created,
                 'id': reply.id, 'floor': reply.floor}
         if self.is_ajax:
             return self.write(result)
         self.flash_message(result)
         return self.redirect(topic.url)
     if self.is_ajax:
         return self.write(form.result)
     self.flash_message(form.result)
     return self.render("topic/index.html", form=form, topic=topic,
             category='index', page=page)
예제 #9
0
파일: reply.py 프로젝트: lypinggan/collipa
    def post(self):
        page = int(self.get_argument('page', 1))
        category = self.get_argument('category', 'index')
        topic_id = int(self.get_argument('topic_id', 0))
        topic = Topic.get(id=topic_id)
        if not topic_id:
            result = {'status': 'error', 'message': '无此主题,不能创建评论'}
            if self.is_ajax:
                return self.write(result)
            else:
                self.flash_message(**result)
                return self.redirect_next_url()
        user = self.current_user
        form = ReplyForm(self.request.arguments)
        if form.validate():
            reply = form.save(user=user, topic=topic)
            reply.put_notifier()
            result = {'status': 'success', 'message': '评论创建成功',
                      'content': reply.content, 'name': reply.author.name,
                      'nickname': reply.author.nickname, 'author_avatar':
                      reply.author.get_avatar(size=48), 'author_url':
                      reply.author.url, 'author_name': reply.author.name,
                      'author_nickname': reply.author.nickname,
                      'reply_url': reply.url, 'created': reply.created,
                      'id': reply.id, 'floor': reply.floor}
            if self.is_ajax:
                return self.write(result)
            self.flash_message(**result)
            return self.redirect(topic.url)

        reply_count = topic.reply_count
        page_count = (reply_count + config.reply_paged - 1) // config.reply_paged
        replies = topic.get_replies(page=page, category=category)
        data = dict(form=form, topic=topic, replies=replies, category=category, page=page, page_count=page_count,
                    url=topic.url)
        return self.send_result_and_render(form.result, "topic/index.html", data)
예제 #10
0
파일: views.py 프로젝트: ygxing/flaskbbs
def bbs_topic(id):
    options = {"id": id}
    page = request.args.get('page', 0, type=int)
    topic = Topic.query.get(id)
    if not topic:
        return render_template("topic_not_found.html")

    count, num_pages, replies = get_page_query(Reply.query.replies_at_topic(
        topic.id),
                                               page,
                                               page_size=DEFAULT_PAGE_REPLIES)

    def pager_url(p, options):
        return generate_url(".bbs_topic", page=p, **options)

    if current_user.is_anonymous():
        form = None
    else:
        form = ReplyForm(request.form)

    if request.method == "POST":
        if current_user.is_anonymous():
            return redirect(url_for("auth.login", next=request.path) or "/")
        if form.validate():
            reply = Reply(section=topic.section,
                          node=topic.node,
                          user=current_user,
                          topic=topic,
                          content=form.data["content"],
                          created=datetime.now(),
                          floor=topic.reply_count + 1)
            topic.last_reply_by = current_user.username
            topic.last_reply_at = datetime.now()
            topic.reply_count += 1
            current_user.profile.replies += 1
            node = topic.node
            node.reply_count += 1
            section = topic.section
            section.reply_count += 1
            db.session.add_all(
                [reply, topic, current_user.profile, node, section])
            db.session.commit()

            return redirect(
                pager_url((reply.floor - 1) / DEFAULT_PAGE_REPLIES, options))

        return render_template("topic.html",
                               topic=topic,
                               options=options,
                               count=count,
                               pager_url=pager_url,
                               num_pages=num_pages,
                               page=page,
                               replies=replies,
                               form=form)

    topic.hits += 1
    db.session.commit()

    markdowner = Markdown()
    topic.content = markdowner.convert(topic.content)
    for r in replies:
        r.content = markdowner.convert(r.content)

    return render_template("topic.html",
                           topic=topic,
                           options=options,
                           count=count,
                           pager_url=pager_url,
                           num_pages=num_pages,
                           page=page,
                           replies=replies,
                           form=form)