예제 #1
0
파일: blog.py 프로젝트: xzconly/only-forum
def upvote():
    import json
    form = request.form
    vote = Vote(form)
    if not vote.is_voted():
        vote.save()
        blog_id = int(form.get('blog_id', 0))
        Blog.upvote(blog_id)
        blog = Blog.query.get(blog_id)
        upvotes = blog.upvotes
        response = dict(status=1, vote_num=upvotes, msg='点赞成功')
    else:
        response = dict(status=0, msg='点赞失败')
    return json.dumps(response)
예제 #2
0
def test_response(db_conn, posts_table):
    """
    Expect a vote to require a response (None is okay).
    """

    vote = Vote({
        'user_id': 'A',
        'topic_id': 'B',
        'replies_to_id': 'D',
    })
    del vote['response']
    vote, errors = vote.save()
    assert len(errors) == 0
    vote['response'] = True
    vote, errors = vote.save()
    assert len(errors) == 0
예제 #3
0
def test_kind(db_conn, posts_table):
    """
    Expect a vote to always have a kind of vote.
    """

    vote = Vote({
        'user_id': 'A',
        'topic_id': 'B',
        'replies_to_id': 'D',
        'response': True,
    })
    del vote['kind']
    vote, errors = vote.save()
    assert len(errors) == 1
    vote['kind'] = 'vote'
    vote, errors = vote.save()
    assert len(errors) == 0
예제 #4
0
def test_response(db_conn, posts_table, units_table):
    """
    Expect a vote to require a response.
    """

    create_proposal(posts_table, units_table, db_conn)
    vote = Vote({
        'user_id': 'A',
        'topic_id': 'B',
        'replies_to_id': 'D',
    })
    del vote['response']
    vote, errors = vote.save(db_conn)
    assert len(errors) == 0
    vote['response'] = True
    vote, errors = vote.save(db_conn)
    assert len(errors) == 0
예제 #5
0
def vote_post(parent_id, vote_type, parent_type):
    if check.logged_in():
        if (parent_type == 0 or parent_type == 1) and (vote_type == 0
                                                       or vote_type == 1):
            ## parent type = 0 post
            ## parent type = 1 comment
            create_vote = False
            delete_vote = False
            try:
                if parent_type == 0:
                    parent = Post(parent_id)
                    user_vote = Vote.get_user_post_vote(
                        session.get("user_id", ""), parent_id)

                elif parent_type == 1:
                    parent = Comment(parent_id)
                    user_vote = Vote.get_user_comment_vote(
                        session.get("user_id", ""), parent_id)

                if not user_vote:  #User did not vote this post before
                    if (vote_type == 1
                        ):  #If upvote increment the count, else decrement.
                        parent.current_vote += 1
                    else:
                        parent.current_vote -= 1
                    parent.save()
                    create_vote = True
                else:  #User voted this post before
                    if user_vote[0].vote:  #Previous vote was upvote
                        if vote_type == 0:  #User wants to change the vote to downwote
                            parent.current_vote -= 2
                            user_vote[0].last_update_time = datetime.utcnow()
                            user_vote[0].save()
                        else:
                            parent.current_vote -= 1  #User takes the vote back by clicking twice
                            delete_vote = True  #Vote will be delete
                    else:  #Previous vote was downvote
                        if vote_type == 0:  #Current vote is downvote
                            parent.current_vote += 1  #Vote will be deleted since it was clicked twice
                            delete_vote = True
                        else:
                            parent.current_vote += 2  #User wants to chane the vote to upvote
                            user_vote[0].last_update_time = datetime.utcnow()
                            user_vote[0].save()
                    if delete_vote:
                        user_vote[0].delete()
                    else:
                        user_vote[0].vote = bool(vote_type)
                        user_vote[0].save()
                    parent.save()

                #New vote gets created and sended as a JSON object
                if create_vote:
                    vote = Vote()
                    vote.date = datetime.utcnow()
                    vote.is_comment = bool(parent_type)
                    vote.vote = bool(vote_type)
                    vote.vote_ip = request.remote_addr
                    vote.last_update_time = datetime.utcnow()
                    vote.user_id = session.get("user_id", "")
                    vote.post_id = parent_id if parent_type == 0 else None
                    vote.comment_id = parent_id if parent_type == 1 else None
                    vote.save()
                return jsonify({
                    'success': 'Successfuly voted!',
                    'final_vote': parent.current_vote
                })
            except NotImplementedError as error:
                return jsonify({'error': str(error)})
    return jsonify({'error': 'Invalid vote.'})