diff options
Diffstat (limited to 'src/SemanticScuttle/Service/Vote.php')
-rw-r--r-- | src/SemanticScuttle/Service/Vote.php | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/src/SemanticScuttle/Service/Vote.php b/src/SemanticScuttle/Service/Vote.php index 89088f0..c0c4995 100644 --- a/src/SemanticScuttle/Service/Vote.php +++ b/src/SemanticScuttle/Service/Vote.php @@ -225,12 +225,12 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService return false; } - if ($this->hasVoted($bookmark, $user)) { + if ($vote != -1 && $vote != 1) { return false; } - if ($vote != -1 && $vote != 1) { - return false; + if ($this->hasVoted($bookmark, $user)) { + $this->removeVote($bookmark, $user); } $res = $this->db->sql_query( @@ -258,6 +258,41 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService /** + * Removes a vote from the database + * + * @param integer $bookmark Bookmark ID + * @param integer $user User ID + * + * @return boolean True if all went well, false if not + */ + protected function removeVote($bookmark, $user) + { + $vote = $this->getVote($bookmark, $user); + if ($vote === null) { + return false; + } + + //remove from votes table + $query = 'DELETE FROM ' . $this->getTableName() + . ' WHERE bId = ' . (int)$bookmark + . ' AND uId = ' . (int)$user; + $this->db->sql_query($query); + + //change voting sum in bookmarks table + $bm = SemanticScuttle_Service_Factory::get('Bookmark'); + $res = $this->db->sql_query( + $sql='UPDATE ' . $bm->getTableName() + . ' SET bVoting = bVoting - ' . (int)$vote + . ' WHERE bId = ' . (int)$bookmark + ); + $this->db->sql_freeresult($res); + + return true; + } + + + + /** * Re-calculates all votings for all bookmarks * and updates the voting values in the bookmarks * table. |