Просмотр исходного кода

Ticket #32.- Votes system improvements.

AntonLV 11 лет назад
Родитель
Сommit
988662091e

+ 3 - 2
inc/classes/BxDolVote.php

@@ -270,14 +270,15 @@ class BxDolVote extends BxDolObject
         if($iValue > $iMaxValue)
             $iValue = $iMaxValue;
 
-        if(!$this->_oQuery->putVote($iObjectId, $iAuthorId, $iAuthorIp, $iValue, $bPerformUndo)) {
+		$iId = $this->_oQuery->putVote($iObjectId, $iAuthorId, $iAuthorIp, $iValue, $bPerformUndo);
+        if($iId === false) {
             $this->_echoResultJson(array('code' => 5));
             return;
         }
 
         $this->_triggerVote();
 
-        $oZ = new BxDolAlerts($this->_sSystem, 'rate', $this->getId(), $iAuthorId, array('value' => $iValue, 'undo' => $bPerformUndo));
+        $oZ = new BxDolAlerts($this->_sSystem, ($bPerformUndo ? 'un' : '') . 'doVote', $this->getId(), $iAuthorId, array('vote_id' => $iId, 'vote_author_id' => $iAuthorId, 'value' => $iValue));
         $oZ->alert();
 
         $aVote = $this->_oQuery->getVote($iObjectId);

+ 11 - 3
inc/classes/BxDolVoteQuery.php

@@ -83,15 +83,23 @@ class BxDolVoteQuery extends BxDolDb
         if((int)$this->query($sQuery) == 0)
             return false;
 
-        if($bUndo)
-            $sQuery = $this->prepare("DELETE FROM `{$this->_sTableTrack}` WHERE `object_id` = ? AND `author_id` = ? LIMIT 1", $iObjectId, $iAuthorId);
+        if($bUndo) {
+        	$sQuery = $this->prepare("SELECT `id` FROM `{$this->_sTableTrack}` WHERE `object_id` = ? AND `author_id` = ? LIMIT 1", $iObjectId, $iAuthorId);
+        	$iId = (int)$this->getOne($sQuery);
+
+            $sQuery = $this->prepare("DELETE FROM `{$this->_sTableTrack}` WHERE `id` = ? LIMIT 1", $iId);
+            if((int)$this->query($sQuery) > 0)
+            	return $iId;
+        }
         else {
             $iNow = time();
             $iAuthorNip = ip2long($sAuthorIp);
             $sQuery = $this->prepare("INSERT INTO `{$this->_sTableTrack}` SET `object_id` = ?, `author_id` = ?, `author_nip` = ?, `value` = ?, `date` = ?", $iObjectId, $iAuthorId, $iAuthorNip, $iValue, $iNow);
+            if((int)$this->query($sQuery) > 0)
+            	return $this->lastId();
         }
 
-        return (int)$this->query($sQuery) > 0;
+        return false;
     }
 
     public function getSqlParts($sMainTable, $sMainField)

+ 2 - 0
install/sql/system.sql

@@ -897,11 +897,13 @@ CREATE TABLE IF NOT EXISTS `sys_cmts_votes` (
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
 
 CREATE TABLE IF NOT EXISTS `sys_cmts_votes_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
   `object_id` int(11) NOT NULL default '0',
   `author_id` int(11) NOT NULL default '0',
   `author_nip` int(11) unsigned NOT NULL default '0',
   `value` tinyint(4) NOT NULL default '0',
   `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
   KEY `vote` (`object_id`, `author_nip`)
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
 

+ 4 - 0
modules/boonex/albums/install/sql/install.sql

@@ -116,11 +116,13 @@ CREATE TABLE IF NOT EXISTS `bx_albums_votes` (
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
 
 CREATE TABLE IF NOT EXISTS `bx_albums_votes_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
   `object_id` int(11) NOT NULL default '0',
   `author_id` int(11) NOT NULL default '0',
   `author_nip` int(11) unsigned NOT NULL default '0',
   `value` tinyint(4) NOT NULL default '0',
   `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
   KEY `vote` (`object_id`, `author_nip`)
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
 
@@ -132,11 +134,13 @@ CREATE TABLE IF NOT EXISTS `bx_albums_votes_media` (
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
 
 CREATE TABLE IF NOT EXISTS `bx_albums_votes_media_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
   `object_id` int(11) NOT NULL default '0',
   `author_id` int(11) NOT NULL default '0',
   `author_nip` int(11) unsigned NOT NULL default '0',
   `value` tinyint(4) NOT NULL default '0',
   `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
   KEY `vote` (`object_id`, `author_nip`)
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
 

+ 2 - 0
modules/boonex/posts/install/sql/install.sql

@@ -83,11 +83,13 @@ CREATE TABLE IF NOT EXISTS `bx_posts_votes` (
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
 
 CREATE TABLE IF NOT EXISTS `bx_posts_votes_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
   `object_id` int(11) NOT NULL default '0',
   `author_id` int(11) NOT NULL default '0',
   `author_nip` int(11) unsigned NOT NULL default '0',
   `value` tinyint(4) NOT NULL default '0',
   `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
   KEY `vote` (`object_id`, `author_nip`)
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
 

+ 2 - 0
modules/boonex/timeline/install/sql/install.sql

@@ -174,11 +174,13 @@ CREATE TABLE IF NOT EXISTS `bx_timeline_votes` (
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
 
 CREATE TABLE IF NOT EXISTS `bx_timeline_votes_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
   `object_id` int(11) NOT NULL default '0',
   `author_id` int(11) NOT NULL default '0',
   `author_nip` int(11) unsigned NOT NULL default '0',
   `value` tinyint(4) NOT NULL default '0',
   `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
   KEY `vote` (`object_id`, `author_nip`)
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;