def submit_comment(): comment = Comment() content = request.form.get('content') slug = request.form.get('slug') user = User.get(User.id == current_user.id) root = request.form.get('parent') or None if not (content and slug and user): flash('Missing content or reference to Post') return redirect(url_for('feed', feed='new')) else: comment.post = Proposal.get(Proposal.slug == slug) if root is not None and not (Comment.get(Comment.id == root).post == comment.post): flash('Invalid comment reference') return redirect( url_for('post_details', slug=slug, community=comment.post.community.name)) else: comment.content = content comment.user = user comment.root = root try: with database.atomic(): comment.save() except peewee.IntegrityError: flash('Unable to save comment', 'error') else: return redirect( url_for('post_details', slug=slug, community=comment.post.community.name)) return redirect( url_for('post_details', slug=slug, community=comment.post.community))
def proposal_intvote(slug): vote = request.form.get('vote') or None if not vote: return jsonify({"error": "invalid vote parameter"}), 400 prop = Proposal.get(Proposal.slug == slug) if vote == '': # Pull vote PostInternalVote.delete().where( PostInternalVote.user_id == current_user.id and PostInternalVote.post == prop.id).execute() else: (PostInternalVote.insert( post=prop, user=current_user.id, vote=vote).on_conflict( conflict_target=[PostInternalVote.user, PostInternalVote.post], preserve=[PostInternalVote.vote, PostInternalVote.timestamp]).execute()) return jsonify({"status": "ok"})
def proposal_downvote(slug): prop = Proposal.get(Proposal.slug == slug) result = {"diff": '0', "votes": str(prop.votes)} if current_user.id == prop.author_id or current_user.karma <= 0: return jsonify(result) if current_user.has_downvoted(prop): # current_user.karma += 1 prop.author.karma += 1 prop.downvotes -= 1 PostVote.delete().where((PostVote.post == prop) & ( PostVote.user_id == current_user.id)).execute() result["diff"] = '+1' else: # current_user.karma -= 1 prop.author.karma -= 1 score_mod = 1 if current_user.has_upvoted(prop): score_mod = 2 result["diff"] = str(-score_mod) prop.downvotes += score_mod (PostVote.insert(post=prop, user=current_user.id, vote=-1).on_conflict( conflict_target=[PostVote.user, PostVote.post], preserve=[PostVote.vote, PostVote.timestamp]).execute()) Proposal.save(prop) # FIXME move karma to another table User.save(current_user) User.save(prop.author) result["votes"] = str(prop.votes) return jsonify(result)