public function getVoteState($questionId, $argumentId) { global $sDB; /*if(!$this->userId) { return VOTE_NONE; }*/ if (!$this->isLoggedIn()) { // check if a vote state exists in the user's cookie $cookieData = $_COOKIE['voteData']; if ($cookieData) { $cookieData = unserialize($cookieData); if (is_array($cookieData) && $cookieData[$questionId] && $cookieData[$questionId][$argumentId]) { validateVote($cookieData[$questionId][$argumentId]); return $cookieData[$questionId][$argumentId]; } return VOTE_NONE; } return VOTE_NONE; } if (!$this->voteData) { $this->voteData = array(); $res = $sDB->exec("SELECT * FROM `user_votes` WHERE `userId` = '" . i($this->userId) . "';"); while ($row = mysql_fetch_object($res)) { if (!@is_array($this->voteData[$row->questionId])) { $this->voteData[$row->questionId] = array(); } $this->voteData[$row->questionId][$row->argumentId] = $row->vote; } } if (@is_array($this->voteData[$questionId])) { if (@$this->voteData[$questionId][$argumentId]) { return $this->voteData[$questionId][$argumentId]; } } return VOTE_NONE; }
public function vote(Question $question, $argumentId, $vote, $user = false, $forceVote = false) { global $sUser, $sDB, $sQuery, $sPermissions; $questionId = $question->questionId(); if ($user == false) { $user = $sUser; if (!$sUser->isLoggedIn() && ($question->type() != QUESTION_TYPE_UNLISTED || !$question->hasFlag(QUESTION_FLAG_PART_ALL))) { return false; } } if (!in_array($vote, array(VOTE_UP, VOTE_DN, VOTE_NONE))) { return false; } if ($sPermissions->getPermission($user, ACTION_VOTE) == PERMISSION_DISALLOWED) { return false; } $cookieData = false; if (!$user->isLoggedIn()) { $cookieData = $_COOKIE['voteData']; if ($cookieData) { $cookieData = unserialize($cookieData); if (is_array($cookieData)) { if (is_array($cookieData[$questionId])) { if ($cookieData[$questionId][$argumentId]) { validateVote($cookieData[$questionId][$argumentId]); } } else { $cookieData[$questionId] = array(); } } else { $cookieData = array(); $cookieData[$questionId] = array(); } } else { $cookieData = array(); $cookieData[$questionId] = array(); } } if ($argumentId && !$forceVote) { $faction = $user->getFactionByQuestionId($questionId); if ($faction == FACTION_NONE) { return false; } $argument = $sQuery->getArgumentById($argumentId); if ($argument->type() != $faction) { return false; } } if ($user->isLoggedIn()) { $this->lazyUpdateUserStats($questionId, $argumentId, $vote, $user->getUserId()); $sDB->exec("DELETE FROM `user_votes` WHERE `userId` = '" . i($user->getUserId()) . "' AND `questionId` = '" . i($questionId) . "' AND `argumentId` = '" . i($argumentId) . "';"); } else { // check if a vote state exists in the user's cookie if ($cookieData[$questionId][$argumentId]) { validateVote($cookieData[$questionId][$argumentId]); $sDB->exec("DELETE FROM `user_votes` WHERE `userId` = '" . i($user->getUserId()) . "' AND `questionId` = '" . i($questionId) . "' AND `argumentId` = '" . i($argumentId) . "' LIMIT 1;"); unset($cookieData[$questionId]); } } if ($vote != VOTE_NONE) { $sDB->exec("INSERT INTO `user_votes` (`voteId`, `userId`, `questionId`, `argumentId`, `vote`, `dateAdded`)\n VALUES (NULL, '" . i($user->getUserId()) . "', '" . i($questionId) . "', '" . i($argumentId) . "', '" . i($vote) . "', '" . time() . "');"); if (!$user->isLoggedIn()) { $cookieData[$questionId][$argumentId] = $vote; } } $this->updateQuestionStats($questionId); if (!$user->isLoggedIn()) { setcookie("voteData", serialize($cookieData)); } return true; }