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

Ticket #4148 - Build-in API support: Timeline actions.

AntonLV 3 лет назад
Родитель
Сommit
2de6e04a4d

+ 15 - 1
inc/classes/BxDolObject.php

@@ -255,7 +255,21 @@ class BxDolObject extends BxDolFactory implements iBxDolReplaceable
         //TODO: Implement for Objects like Views, Votes, etc.
         $sClass = get_class($this);
         return [
-            'display_type' => 'element', // 'element_action', 'element_counter'
+            'display_type' => 'element',
+            'name' => md5($sClass),
+            'title' => get_class($this)
+        ];
+    }
+
+    public function getCounterAPI($aParams = [])
+    {
+        if(!($this->_bApi = bx_is_api()))
+            return;
+
+        //TODO: Implement for Objects like Views, Votes, etc.
+        $sClass = get_class($this);
+        return [
+            'display_type' => 'element',
             'name' => md5($sClass),
             'title' => get_class($this)
         ];

+ 46 - 4
modules/boonex/timeline/classes/BxTimelineMenuItemActions.php

@@ -26,6 +26,7 @@ class BxTimelineMenuItemActions extends BxTemplMenuCustom
     protected $_sType;
     protected $_sView;
 
+    protected $_bIsApi;
     protected $_sMode;
     protected $_bShowTitles;
     protected $_bShowCounters;
@@ -45,6 +46,7 @@ class BxTimelineMenuItemActions extends BxTemplMenuCustom
 
         $this->_setBrowseParams();
 
+        $this->_bIsApi = bx_is_api();
         $this->_sMode = self::$_sModeActions;
         $this->_bShowTitles = true;
         $this->_bShowCounters = false;
@@ -182,7 +184,14 @@ class BxTimelineMenuItemActions extends BxTemplMenuCustom
                 break;
         }
 
-        return $this->_oModule->getViewObject($sViewsSystem, $iViewsObject)->$sViewsMethod($aViewsParams);
+        $oObject = $this->_oModule->getViewObject($sViewsSystem, $iViewsObject);
+
+        if($this->_bIsApi)
+            return $this->_getMenuItemElementApi($aItem, $oObject->getElementApi(array_merge($aViewsParams, [
+                'show_counter' => true, 
+            ])));
+
+        return $oObject->$sViewsMethod($aViewsParams);
     }
 
     protected function _getMenuItemItemVote($aItem)
@@ -210,7 +219,14 @@ class BxTimelineMenuItemActions extends BxTemplMenuCustom
                 break;
         }
 
-        return $this->_oModule->getVoteObject($sVotesSystem, $iVotesObject)->$sVotesMethod($aVotesParams);
+        $oObject = $this->_oModule->getVoteObject($sVotesSystem, $iVotesObject);
+
+        if($this->_bIsApi)
+            return $this->_getMenuItemElementApi($aItem, $oObject->getElementApi(array_merge($aVotesParams, [
+                'show_counter' => true,
+            ])));
+
+        return $oObject->$sVotesMethod($aVotesParams);
     }
 
     protected function _getMenuItemItemReaction($aItem)
@@ -239,7 +255,14 @@ class BxTimelineMenuItemActions extends BxTemplMenuCustom
                 break;
         }
 
-    	return $this->_oModule->getReactionObject($sReactionsSystem, $iReactionsObject)->$sReactionsMethod($aReactionsParams);
+        $oObject = $this->_oModule->getReactionObject($sReactionsSystem, $iReactionsObject);
+
+        if($this->_bIsApi)
+            return $this->_getMenuItemElementApi($aItem, $oObject->getElementApi(array_merge($aReactionsParams, [
+                'show_counter' => true,
+            ])));
+
+        return $oObject->$sReactionsMethod($aReactionsParams);
     }
 
     protected function _getMenuItemItemScore($aItem)
@@ -267,7 +290,14 @@ class BxTimelineMenuItemActions extends BxTemplMenuCustom
                 break;
         }
 
-        return $this->_oModule->getScoreObject($sScoresSystem, $iScoresObject)->$sScoresMethod($aScoresParams);
+        $oObject = $this->_oModule->getScoreObject($sScoresSystem, $iScoresObject);
+
+        if($this->_bIsApi)
+            return $this->_getMenuItemElementApi($aItem, $oObject->getElementApi(array_merge($aScoresParams, [
+                'show_counter' => true,
+            ])));
+
+        return $oObject->$sScoresMethod($aScoresParams);
     }
 
     protected function _getMenuItemItemReport($aItem)
@@ -339,6 +369,18 @@ class BxTimelineMenuItemActions extends BxTemplMenuCustom
         return parent::_getMenuItemDefault ($aItem);
     }
 
+    protected function _getMenuItemElementApi($aItem, $aElement)
+    {
+        if(!$this->_bIsApi)
+            return $aItem;
+
+        return [
+                'id' => $aItem['id'],
+                'name' => $aItem['name'],
+                'display_type' => 'element',
+                'data' => $aElement
+            ];
+    }
     /**
      * Check if menu items is visible.
      * @param $a menu item array

+ 12 - 1
modules/boonex/timeline/classes/BxTimelineTemplate.php

@@ -337,11 +337,22 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
         $oModule = $this->getModule();
         
         if (bx_is_api()){
+            $oMenuActions = BxDolMenu::getObjectInstance($this->_oConfig->getObject('menu_item_actions_all'));
+            if(!$oMenuActions)
+                $oMenuActions = BxDolMenu::getObjectInstance($this->_oConfig->getObject('menu_item_actions'));
+            $bMenuActions = $oMenuActions !== false;
+
             $aPosts = $this->getPosts(array_merge($aParams, ['return_data_type' => 'array']));
             foreach($aPosts as &$aPost)  {
                 $aPost['author_data'] = BxDolProfile::getData($aPost['object_owner_id']);
                 $aPost['url'] = bx_ltrim_str($aPost['content']['url'], BX_DOL_URL_ROOT);
-                
+
+                if($bMenuActions) {
+                    $oMenuActions->setEvent($aPost, $aParams);
+
+                    $aPost['menu_actions'] = $oMenuActions->getCodeAPI();
+                }
+
                 $aCmts = [];
                 $oCmts = $oModule->getCmtsObject($aPost['comments']['system'], $aPost['comments']['object_id']);
                 if($oCmts !== false){