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);
}