diff --git a/src/SemanticScuttle/Service/Vote.php b/src/SemanticScuttle/Service/Vote.php index 168040d..89088f0 100644 --- a/src/SemanticScuttle/Service/Vote.php +++ b/src/SemanticScuttle/Service/Vote.php @@ -261,17 +261,18 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService * Re-calculates all votings for all bookmarks * and updates the voting values in the bookmarks * table. + * This is mainly meant to be an administrative method + * to fix a broken database. * * @return void */ public function rewriteVotings() { - throw new Exception('Not implemented yet'); - //FIXME - $bm = SemanticScuttle_Service_Factory::get('Bookmark'); - $sql = 'UPDATE ' . $bm->getTableName() . ' as B SET bVoting = ' + $bm = SemanticScuttle_Service_Factory::get('Bookmark'); + $query = 'UPDATE ' . $bm->getTableName() . ' as B SET bVoting = ' . '(SELECT SUM(vote) FROM ' . $this->getTableName() . ' as V' . ' WHERE V.bId = B.bId GROUP BY bid)'; + $this->db->sql_query($query); } diff --git a/tests/VoteTest.php b/tests/VoteTest.php index 2579709..b9a859d 100644 --- a/tests/VoteTest.php +++ b/tests/VoteTest.php @@ -329,6 +329,34 @@ class VoteTest extends TestBase $this->assertEquals(-1, $this->vs->getVote($bid, $uid)); } + + + /** + * Test that rewriting votings does work + * + * @return void + */ + public function testRewriteVotings() + { + $uid = 1; + $bid = $this->addBookmark(); + $this->assertTrue($this->vs->vote($bid, $uid, 1)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(1, $bm['bVoting']); + + $this->vs->deleteAll(); + //we assume that $vs->deleteAll() does *not* reset + //voting in bookmarks table + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(1, $bm['bVoting']); + + $this->vs->rewriteVotings(); + $bm = $this->bs->getBookmark($bid); + //now it should be reset to 0 + $this->assertEquals(0, $bm['bVoting']); + } + }//class VoteTest extends TestBase