def submit_comment(request, post): """Used by the form on `get_comments` to submit the form data to the database. Returns partial data for the remote side. """ if not request.is_xhr: raise BadRequest() post = Post.query.get(post) if post is None: raise NotFound() # not even moderators can submit comments for deleted posts. if post.is_deleted: message = _(u'You cannot submit comments for deleted posts') return json_response(success=False, form_errors=[message]) form = _get_comment_form(post) if form.validate(): comment = form.create_comment() session.commit() comment_box = get_macro('kb/_boxes.html', 'render_comment') comment_link = get_macro('kb/_boxes.html', 'render_comment_link') return json_response(html=comment_box(comment), link=comment_link(post), success=True) return json_response(success=False, form_errors=form.as_widget().all_errors)
def vote(request, post): """Votes on a post.""" # TODO: this is currently also fired as GET if JavaScript is # not available. Not very nice. post = Post.query.get(post) if post is None: raise NotFound() # you cannot cast votes on deleted shit if post.is_deleted: message = _(u"You cannot vote on deleted posts.") if request.is_xhr: return json_response(message=message, error=True) request.flash(message, error=True) return redirect(url_for(post)) # otherwise val = request.args.get("val", 0, type=int) if val == 0: request.user.unvote(post) elif val == 1: # users cannot upvote on their own stuff if post.author == request.user: message = _(u"You cannot upvote your own post.") if request.is_xhr: return json_response(message=message, error=True) request.flash(message, error=True) return redirect(url_for(post)) # also some reputation is needed if not request.user.is_admin and request.user.reputation < settings.REPUTATION_MAP["UPVOTE"]: message = _(u"In order to upvote you " u"need at least %d reputation") % settings.REPUTATION_MAP["UPVOTE"] if request.is_xhr: return json_response(message=message, error=True) request.flash(message, error=True) return redirect(url_for(post)) request.user.upvote(post) elif val == -1: # users need some reputation to downvote. Keep in mind that # you *can* downvote yourself. if not request.user.is_admin and request.user.reputation < settings.REPUTATION_MAP["DOWNVOTE"]: message = ( _(u"In order to downvote you " u"need at least %d reputation") % settings.REPUTATION_MAP["DOWNVOTE"] ) if request.is_xhr: return json_response(message=message, error=True) request.flash(message, error=True) return redirect(url_for(post)) request.user.downvote(post) else: raise BadRequest() session.commit() # standard requests are answered with a redirect back if not request.is_xhr: return redirect(url_for(post)) # others get a re-rendered vote box box = get_macro("kb/_boxes.html", "render_vote_box") return json_response(html=box(post, request.user))
def vote(request, post): """Votes on a post.""" # TODO: this is currently also fired as GET if JavaScript is # not available. Not very nice. post = Post.query.get(post) if post is None: raise NotFound() # you cannot cast votes on deleted shit if post.is_deleted: message = _(u'You cannot vote on deleted posts.') if request.is_xhr: return json_response(message=message, error=True) request.flash(message, error=True) return redirect(url_for(post)) # otherwise val = request.args.get('val', 0, type=int) if val == 0: request.user.unvote(post) elif val == 1: # users cannot upvote on their own stuff if post.author == request.user: message = _(u'You cannot upvote your own post.') if request.is_xhr: return json_response(message=message, error=True) request.flash(message, error=True) return redirect(url_for(post)) # also some reputation is needed if not request.user.is_admin and \ request.user.reputation < settings.REPUTATION_MAP['UPVOTE']: message = _(u'In order to upvote you ' u'need at least %d reputation') % \ settings.REPUTATION_MAP['UPVOTE'] if request.is_xhr: return json_response(message=message, error=True) request.flash(message, error=True) return redirect(url_for(post)) request.user.upvote(post) elif val == -1: # users need some reputation to downvote. Keep in mind that # you *can* downvote yourself. if not request.user.is_admin and \ request.user.reputation < settings.REPUTATION_MAP['DOWNVOTE']: message = _(u'In order to downvote you ' u'need at least %d reputation') % \ settings.REPUTATION_MAP['DOWNVOTE'] if request.is_xhr: return json_response(message=message, error=True) request.flash(message, error=True) return redirect(url_for(post)) request.user.downvote(post) else: raise BadRequest() session.commit() # standard requests are answered with a redirect back if not request.is_xhr: return redirect(url_for(post)) # others get a re-rendered vote box box = get_macro('kb/_boxes.html', 'render_vote_box') return json_response(html=box(post, request.user))