Phosphorum\Controllers\DiscussionsController::voteDownAction PHP Method

voteDownAction() public method

Votes a post down
public voteDownAction ( integer $id ) : Phalcon\Http\ResponseInterface
$id integer The post ID.
return Phalcon\Http\ResponseInterface
    public function voteDownAction($id = 0)
    {
        $response = new Response();
        if (!$this->checkTokenGetJson('post-' . $id)) {
            $csrfTokenError = ['status' => 'error', 'message' => 'This post is outdated. Please try to vote for the post again.'];
            return $response->setJsonContent($csrfTokenError);
        }
        /**
         * Find the post using get
         */
        $post = Posts::findFirstById($id);
        if (!$post) {
            $contentNotExist = ['status' => 'error', 'message' => 'Post does not exist'];
            return $response->setJsonContent($contentNotExist);
        }
        $user = Users::findFirstById($this->session->get('identity'));
        if (!$user) {
            $responseContent = ['status' => 'error', 'message' => 'You must log in first to vote'];
            return $response->setJsonContent($responseContent);
        }
        if ($user->votes <= 0) {
            $contentDontHave = ['status' => 'error', 'message' => "You don't have enough votes available"];
            return $response->setJsonContent($contentDontHave);
        }
        if (PostsVotes::count(['posts_id = ?0 AND users_id = ?1', 'bind' => [$post->id, $user->id]])) {
            $contentAlreadyVote = ['status' => 'error', 'message' => 'You have already voted this post'];
            return $response->setJsonContent($contentAlreadyVote);
        }
        $postVote = new PostsVotes();
        $postVote->posts_id = $post->id;
        $postVote->users_id = $user->id;
        $postVote->vote = PostsVotes::VOTE_DOWN;
        $postVote->save();
        $post->votes_down++;
        if ($post->users_id != $user->id) {
            $post->user->decreaseKarma(Karma::SOMEONE_DID_VOTE_MY_POST);
            $user->increaseKarma(Karma::VOTE_ON_SOMEONE_ELSE_POST);
        }
        if ($post->save()) {
            $user->votes--;
            if (!$user->save()) {
                foreach ($user->getMessages() as $message) {
                    $contentErrorSave = ['status' => 'error', 'message' => $message->getMessage()];
                    return $response->setJsonContent($contentErrorSave);
                }
            }
        }
        $contentOk = ['status' => 'OK'];
        return $response->setJsonContent($contentOk);
    }