allow changing of votes
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@493 b3834d28-1941-0410-a4f8-b48e95affb8f
This commit is contained in:
parent
b569921136
commit
d05aebe54e
2 changed files with 163 additions and 5 deletions
|
@ -225,12 +225,12 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->hasVoted($bookmark, $user)) {
|
if ($vote != -1 && $vote != 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($vote != -1 && $vote != 1) {
|
if ($this->hasVoted($bookmark, $user)) {
|
||||||
return false;
|
$this->removeVote($bookmark, $user);
|
||||||
}
|
}
|
||||||
|
|
||||||
$res = $this->db->sql_query(
|
$res = $this->db->sql_query(
|
||||||
|
@ -257,6 +257,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
|
* Re-calculates all votings for all bookmarks
|
||||||
* and updates the voting values in the bookmarks
|
* and updates the voting values in the bookmarks
|
||||||
|
|
|
@ -35,6 +35,13 @@ class VoteTest extends TestBase
|
||||||
*/
|
*/
|
||||||
protected $vs = null;
|
protected $vs = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bookmark service instance.
|
||||||
|
*
|
||||||
|
* @var SemanticScuttle_Service_Bookmark
|
||||||
|
*/
|
||||||
|
protected $bs = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -293,11 +300,11 @@ class VoteTest extends TestBase
|
||||||
$uid = 1;
|
$uid = 1;
|
||||||
$bid = $this->addBookmark();
|
$bid = $this->addBookmark();
|
||||||
$this->assertTrue($this->vs->vote($bid, $uid, 1));
|
$this->assertTrue($this->vs->vote($bid, $uid, 1));
|
||||||
$this->assertFalse($this->vs->vote($bid, $uid, 1));
|
$this->assertTrue($this->vs->vote($bid, $uid, 1));
|
||||||
|
|
||||||
$bid = $this->addBookmark();
|
$bid = $this->addBookmark();
|
||||||
$this->assertTrue($this->vs->vote($bid, $uid, -1));
|
$this->assertTrue($this->vs->vote($bid, $uid, -1));
|
||||||
$this->assertFalse($this->vs->vote($bid, $uid, 1));
|
$this->assertTrue($this->vs->vote($bid, $uid, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -332,6 +339,122 @@ class VoteTest extends TestBase
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify that changing the vote from positive to negative
|
||||||
|
* works.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testVoteChangePosNeg()
|
||||||
|
{
|
||||||
|
$uid = 1;
|
||||||
|
$bid = $this->addBookmark();
|
||||||
|
|
||||||
|
$this->assertTrue($this->vs->vote($bid, $uid, 1));
|
||||||
|
$this->assertEquals(1, $this->vs->getVote($bid, $uid));
|
||||||
|
$this->assertEquals(1, $this->vs->getVotes($bid));
|
||||||
|
|
||||||
|
$b = $this->bs->getBookmark($bid);
|
||||||
|
$this->assertEquals(1, $b['bVoting']);
|
||||||
|
|
||||||
|
//change vote
|
||||||
|
$this->assertTrue($this->vs->vote($bid, $uid, -1));
|
||||||
|
$this->assertEquals(-1, $this->vs->getVote($bid, $uid));
|
||||||
|
$this->assertEquals(1, $this->vs->getVotes($bid));
|
||||||
|
|
||||||
|
$b = $this->bs->getBookmark($bid);
|
||||||
|
$this->assertEquals(-1, $b['bVoting']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify that changing the vote from negative to positive
|
||||||
|
* works.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testVoteChangeNegPos()
|
||||||
|
{
|
||||||
|
$uid = 1;
|
||||||
|
$bid = $this->addBookmark();
|
||||||
|
|
||||||
|
$this->assertTrue($this->vs->vote($bid, $uid, -1));
|
||||||
|
$this->assertEquals(-1, $this->vs->getVote($bid, $uid));
|
||||||
|
$this->assertEquals(1, $this->vs->getVotes($bid));
|
||||||
|
|
||||||
|
$b = $this->bs->getBookmark($bid);
|
||||||
|
$this->assertEquals(-1, $b['bVoting']);
|
||||||
|
|
||||||
|
//change vote
|
||||||
|
$this->assertTrue($this->vs->vote($bid, $uid, 1));
|
||||||
|
$this->assertEquals(1, $this->vs->getVote($bid, $uid));
|
||||||
|
$this->assertEquals(1, $this->vs->getVotes($bid));
|
||||||
|
|
||||||
|
$b = $this->bs->getBookmark($bid);
|
||||||
|
$this->assertEquals(1, $b['bVoting']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify that changing the vote from postitive to positive
|
||||||
|
* has no strange effects
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testVoteChangePosPos()
|
||||||
|
{
|
||||||
|
$uid = 1;
|
||||||
|
$bid = $this->addBookmark();
|
||||||
|
|
||||||
|
$this->assertTrue($this->vs->vote($bid, $uid, 1));
|
||||||
|
$this->assertEquals(1, $this->vs->getVote($bid, $uid));
|
||||||
|
$this->assertEquals(1, $this->vs->getVotes($bid));
|
||||||
|
|
||||||
|
$b = $this->bs->getBookmark($bid);
|
||||||
|
$this->assertEquals(1, $b['bVoting']);
|
||||||
|
|
||||||
|
//change vote
|
||||||
|
$this->assertTrue($this->vs->vote($bid, $uid, 1));
|
||||||
|
$this->assertEquals(1, $this->vs->getVote($bid, $uid));
|
||||||
|
$this->assertEquals(1, $this->vs->getVotes($bid));
|
||||||
|
|
||||||
|
$b = $this->bs->getBookmark($bid);
|
||||||
|
$this->assertEquals(1, $b['bVoting']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify that changing the vote from postitive to positive
|
||||||
|
* has no strange effects
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testVoteChangeNegNeg()
|
||||||
|
{
|
||||||
|
$uid = 1;
|
||||||
|
$bid = $this->addBookmark();
|
||||||
|
|
||||||
|
$this->assertTrue($this->vs->vote($bid, $uid, -1));
|
||||||
|
$this->assertEquals(-1, $this->vs->getVote($bid, $uid));
|
||||||
|
$this->assertEquals(1, $this->vs->getVotes($bid));
|
||||||
|
|
||||||
|
$b = $this->bs->getBookmark($bid);
|
||||||
|
$this->assertEquals(-1, $b['bVoting']);
|
||||||
|
|
||||||
|
//change vote to same value
|
||||||
|
$this->assertTrue($this->vs->vote($bid, $uid, -1));
|
||||||
|
$this->assertEquals(-1, $this->vs->getVote($bid, $uid));
|
||||||
|
$this->assertEquals(1, $this->vs->getVotes($bid));
|
||||||
|
|
||||||
|
$b = $this->bs->getBookmark($bid);
|
||||||
|
$this->assertEquals(-1, $b['bVoting']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test that rewriting votings does work
|
* Test that rewriting votings does work
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue