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