AntonLV 10 лет назад
Родитель
Сommit
dfefa94283

+ 10 - 4
inc/classes/BxDolFavorite.php

@@ -44,7 +44,6 @@ define('BX_DOL_FAVORITE_USAGE_DEFAULT', BX_DOL_FAVORITE_USAGE_BLOCK);
  *  CREATE TABLE `my_favorites_track` (
  *      `object_id` int(11) NOT NULL default '0', -- this field type must be exact as your object id type
  *      `author_id` int(11) NOT NULL default '0', -- favoring user profile id
- *      `author_nip` int(11) unsigned NOT NULL default '0', -- favoring user ip address
  *      `date` int(11) NOT NULL default '0', -- timestamp of last recorded view
  *      KEY `id` (`object_id`,`author_id`)
  *  ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
@@ -112,9 +111,9 @@ class BxDolFavorite extends BxDolObject
                 SELECT
                     `id` as `id`,
                     `name` AS `name`,
-                    `table_main` AS `table_main`,
                     `table_track` AS `table_track`,
                     `is_on` AS `is_on`,
+                    `is_public` AS `is_public`,
                     `base_url` AS `base_url`,
                     `trigger_table` AS `trigger_table`,
                     `trigger_field_id` AS `trigger_field_id`,
@@ -149,6 +148,11 @@ class BxDolFavorite extends BxDolObject
     /**
      * Permissions functions
      */
+    public function isPublic()
+    {
+        return (int)$this->_aSystem['is_public'] == 1;
+    }
+
     public function isAllowedFavorite($isPerformAction = false)
     {
         if(isAdmin())
@@ -164,6 +168,9 @@ class BxDolFavorite extends BxDolObject
 
     public function isAllowedFavoriteView($isPerformAction = false)
     {
+        if(!$this->isPublic())
+            return false;
+
         if(isAdmin())
             return true;
 
@@ -189,13 +196,12 @@ class BxDolFavorite extends BxDolObject
         $iObjectId = $this->getId();
         $iObjectAuthorId = $this->_oQuery->getObjectAuthorId($iObjectId);
         $iAuthorId = $this->_getAuthorId();
-        $sAuthorIp = $this->_getAuthorIp();
 
         $bPerformed = $this->_oQuery->isPerformed($iObjectId, $iAuthorId);
         if($bPerformed)
         	return array('code' => 3, 'msg' => _t('_favorite_err_duplicate_favorite'));
 
-        $iId = (int)$this->_oQuery->doFavorite($iObjectId, $iAuthorId, $sAuthorIp);
+        $iId = (int)$this->_oQuery->doFavorite($iObjectId, $iAuthorId);
         if($iId == 0)
             return array('code' => 4, 'msg' => _t('_favorite_err_cannot_perform_action'));
 

+ 3 - 24
inc/classes/BxDolFavoriteQuery.php

@@ -33,33 +33,16 @@ class BxDolFavoriteQuery extends BxDolObjectQuery
 
 	public function getFavorite($iObjectId)
     {
-        $sQuery = $this->prepare("SELECT `count` as `count` FROM {$this->_sTable} WHERE `object_id` = ? LIMIT 1", $iObjectId);
-
-        $aResult = $this->getRow($sQuery);
-        if(empty($aResult) || !is_array($aResult))
-            $aResult = array('count' => 0);
-
-        return $aResult;
+        return array('count' => $this->getObjectCount($iObjectId));
     }
 
-    public function doFavorite($iObjectId, $iAuthorId, $sAuthorIp)
+    public function doFavorite($iObjectId, $iAuthorId)
     {
-        $iAuthorNip = ip2long($sAuthorIp);
-
         $sQuery = $this->prepare("SELECT `date` FROM `{$this->_sTableTrack}` WHERE `object_id` = ? AND `author_id` = ? LIMIT 1", $iObjectId, $iAuthorId);
         if((int)$this->getOne($sQuery) > 0)
         	return true;
 
-        $sQuery = $this->prepare("INSERT IGNORE INTO `{$this->_sTableTrack}` SET `object_id` = ?, `author_id` = ?, `author_nip` = ?, `date` = ?", $iObjectId, $iAuthorId, $iAuthorNip, time());
-        if((int)$this->query($sQuery) == 0)
-            return false;
-
-        $sQuery = $this->prepare("SELECT `object_id` FROM `{$this->_sTable}` WHERE `object_id` = ? LIMIT 1", $iObjectId);
-        if((int)$this->getOne($sQuery) == 0)
-            $sQuery = $this->prepare("INSERT INTO `{$this->_sTable}` SET `object_id` = ?, `count` = '1'", $iObjectId);
-        else
-            $sQuery = $this->prepare("UPDATE `{$this->_sTable}` SET `count` = `count` + 1 WHERE `object_id` = ?", $iObjectId);
-
+        $sQuery = $this->prepare("INSERT IGNORE INTO `{$this->_sTableTrack}` SET `object_id` = ?, `author_id` = ?, `date` = ?", $iObjectId, $iAuthorId, time());
         return (int)$this->query($sQuery) > 0;
     }
 
@@ -70,10 +53,6 @@ class BxDolFavoriteQuery extends BxDolObjectQuery
         	return true;
 
         $sQuery = $this->prepare("DELETE FROM `{$this->_sTableTrack}` WHERE `object_id` = ? AND `author_id` = ? LIMIT 1", $iObjectId, $iAuthorId);
-		if((int)$this->query($sQuery) == 0)
-		    return false;
-
-        $sQuery = $this->prepare("UPDATE `{$this->_sTable}` SET `count` = `count` - 1 WHERE `object_id` = ?", $iObjectId);
         return (int)$this->query($sQuery) > 0;
     }
 

+ 9 - 3
inc/classes/BxDolObjectQuery.php

@@ -40,7 +40,7 @@ class BxDolObjectQuery extends BxDolDb
 
     public function getSqlParts($sMainTable, $sMainField)
     {
-        if(empty($sMainTable) || empty($sMainField))
+        if(empty($this->_sTable) || empty($sMainTable) || empty($sMainField))
             return array();
 
         return array (
@@ -51,7 +51,7 @@ class BxDolObjectQuery extends BxDolDb
 
     public function getSqlPartsTrack($sMainTable, $sMainField)
     {
-        if(empty($sMainTable) || empty($sMainField))
+        if(empty($this->_sTableTrack) || empty($sMainTable) || empty($sMainField))
             return array();
 
         return array (
@@ -90,7 +90,13 @@ class BxDolObjectQuery extends BxDolDb
 	public function getObjectAuthorId($iId)
     {
         $sQuery = $this->prepare("SELECT `{$this->_sTriggerFieldAuthor}` FROM `{$this->_sTriggerTable}` WHERE `{$this->_sTriggerFieldId}` = ? LIMIT 1", $iId);
-        return $this->getOne($sQuery);
+        return (int)$this->getOne($sQuery);
+    }
+
+    public function getObjectCount($iId)
+    {
+        $sQuery = $this->prepare("SELECT `{$this->_sTriggerFieldCount}` FROM `{$this->_sTriggerTable}` WHERE `{$this->_sTriggerFieldId}` = ? LIMIT 1", $iId);
+        return (int)$this->getOne($sQuery);
     }
 
     public function updateTriggerTable($iObjectId)

+ 1 - 1
install/sql/system.sql

@@ -1184,9 +1184,9 @@ CREATE TABLE `sys_objects_view` (
 CREATE TABLE `sys_objects_favorite` (
   `id` int(11) NOT NULL auto_increment,
   `name` varchar(64) NOT NULL,
-  `table_main` varchar(32) NOT NULL,
   `table_track` varchar(32) NOT NULL,
   `is_on` tinyint(4) NOT NULL default '1',
+  `is_public` tinyint(4) NOT NULL default '1',
   `base_url` varchar(256) NOT NULL default '',
   `trigger_table` varchar(32) NOT NULL,
   `trigger_field_id` varchar(32) NOT NULL,