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

Ticket #4148 - Build-in API support: Profile cover menus.

AntonLV 3 лет назад
Родитель
Сommit
093bec3465

+ 0 - 25
modules/base/general/classes/BxBaseModGeneralMenuSnippetMeta.php

@@ -48,31 +48,6 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
             $this->addMarkers(array('content_id' => (int)$this->_iContentId));
     }
 
-    protected function _getMenuItemAPI($aItem, $mixedType = 'text', $aData = [])
-    {
-        $sDisplayType = 'link';
-        $sContentType = 'text';
-        if(is_array($mixedType)) {
-            if(isset($mixedType['display']))
-                $sDisplayType = $mixedType['display'];
-            if(isset($mixedType['content']))
-                $sContentType = $mixedType['content'];
-        }
-        else
-            $sContentType = $mixedType;
-
-        $aItemData = array_merge([
-            'id' => $aItem['id'],
-            'name' => $aItem['name'],
-            'display_type' => $sDisplayType,
-            'content_type' => $sContentType,
-            'title' => $aItem['title'],
-            'link' => !empty($aItem['link']) && $aItem['link'] != 'javascript:void(0)' ? $aItem['link'] : ''
-        ], $aData);
-
-        return $aItemData;
-    }
-
     protected function _getMenuItemAuthor($aItem)
     {
         $CNF = &$this->_oModule->_oConfig->CNF;

+ 47 - 5
modules/base/profile/classes/BxBaseModProfileMenuViewMeta.php

@@ -78,15 +78,24 @@ class BxBaseModProfileMenuViewMeta extends BxTemplMenuUnitMeta
             return false;
 
         $oAcl = BxDolAcl::getInstance();
-        $oTemplate = BxDolTemplate::getInstance();
         $aMembership =  $oAcl->getMemberMembershipInfo($this->_oContentProfile->id());
         $aLevelInfo =  $oAcl->getMembershipInfo($aMembership['id']);
+
+        if($this->_bIsApi)
+            return $this->_getMenuItemAPI($aItem, 'text', [
+                'title' => _t($aMembership['name'])
+            ]);
+
+        $oTemplate = BxDolTemplate::getInstance();
         return $aMembership ? $this->getUnitMetaItemText($oTemplate->parseHtmlByName('menu_meta_item.html', ['icon' => $oTemplate->getImage($aLevelInfo['icon'], array('class' => 'bx-acl-m-thumbnail')), 'caption' => _t($aMembership['name'])])): false;
                                                                                             
     }
     
     protected function _getMenuItemBadges($aItem)
     {
+        if($this->_bIsApi) 
+            return false;
+
         $sResult = $this->_oModule->serviceGetBadges($this->_iContentId);
         if(!empty($sResult))
             $sResult = $this->getUnitMetaItemText($sResult, ['class' => 'bx-base-bages-container']);
@@ -100,14 +109,23 @@ class BxBaseModProfileMenuViewMeta extends BxTemplMenuUnitMeta
 
         if(!$this->_bContentPublic || !$this->_oContentProfile)
             return false;
-
+        
         $oConnection = BxDolConnection::getObjectInstance('sys_profiles_friends');
         if(!$oConnection)
             return false;
 
-        $sIcon = BxTemplFunctions::getInstanceWithTemplate($this->_oTemplate)->getIconAsHtml(!empty($aItem['icon']) ? $aItem['icon'] : '');
+        $iContentProfileId = $this->_oContentProfile->id();
+
+        if($this->_bIsApi) {
+            $aCounter = $oConnection->getCounterAPI($iContentProfileId, true, ['caption' => $aItem['title']], BX_CONNECTIONS_CONTENT_TYPE_INITIATORS);
 
-        return $oConnection->getCounter($this->_oContentProfile->id(), true, ['caption' => $aItem['title'], 'custom_icon' => $sIcon], BX_CONNECTIONS_CONTENT_TYPE_INITIATORS);
+            return $this->_getMenuItemAPI($aItem, ['display' => 'button'], [
+                'title' => $aCounter['countf'],
+            ]);
+        }
+
+        $sIcon = BxTemplFunctions::getInstanceWithTemplate($this->_oTemplate)->getIconAsHtml(!empty($aItem['icon']) ? $aItem['icon'] : '');
+        return $oConnection->getCounter($iContentProfileId, true, ['caption' => $aItem['title'], 'custom_icon' => $sIcon], BX_CONNECTIONS_CONTENT_TYPE_INITIATORS);
     }
 
     protected function _getMenuItemSubscribers($aItem)
@@ -121,8 +139,17 @@ class BxBaseModProfileMenuViewMeta extends BxTemplMenuUnitMeta
         if(!$oConnection)
             return false;
 
+        $iContentProfileId = $this->_oContentProfile->id();
+
+        if($this->_bIsApi) {
+            $aCounter = $oConnection->getCounterAPI($iContentProfileId, false, ['caption' => $aItem['title']], BX_CONNECTIONS_CONTENT_TYPE_INITIATORS);
+
+            return $this->_getMenuItemAPI($aItem, ['display' => 'button'], [
+                'title' => $aCounter['countf'],
+            ]);
+        }
+
         $sIcon = BxTemplFunctions::getInstanceWithTemplate($this->_oTemplate)->getIconAsHtml(!empty($aItem['icon']) ? $aItem['icon'] : '');
-        
         return $oConnection->getCounter($this->_oContentProfile->id(), false, ['caption' => $aItem['title'], 'custom_icon' => $sIcon], BX_CONNECTIONS_CONTENT_TYPE_INITIATORS);
     }
 
@@ -130,6 +157,9 @@ class BxBaseModProfileMenuViewMeta extends BxTemplMenuUnitMeta
     {
         $CNF = &$this->_oModule->_oConfig->CNF;
 
+        if($this->_bIsApi)
+            return false;
+
         if(empty($CNF['OBJECT_VIEWS']) || empty($CNF['FIELD_VIEWS']) || (empty($this->_aContentInfo[$CNF['FIELD_VIEWS']]) && !$this->_bShowZeros))
             return false;
 
@@ -144,6 +174,9 @@ class BxBaseModProfileMenuViewMeta extends BxTemplMenuUnitMeta
     {
         $CNF = &$this->_oModule->_oConfig->CNF;
 
+        if($this->_bIsApi)
+            return false;
+
         if(empty($CNF['OBJECT_VOTES']) || empty($CNF['FIELD_VOTES']) || (empty($this->_aContentInfo[$CNF['FIELD_VOTES']]) && !$this->_bShowZeros))
             return false;
         
@@ -157,6 +190,9 @@ class BxBaseModProfileMenuViewMeta extends BxTemplMenuUnitMeta
     {
         $CNF = &$this->_oModule->_oConfig->CNF;
 
+        if($this->_bIsApi)
+            return false;
+
         if(empty($CNF['OBJECT_REACTIONS']))
             return false;
 
@@ -171,6 +207,9 @@ class BxBaseModProfileMenuViewMeta extends BxTemplMenuUnitMeta
     {
         $CNF = &$this->_oModule->_oConfig->CNF;
 
+        if($this->_bIsApi)
+            return false;
+
         if(empty($CNF['OBJECT_SCORES']))
             return false;
 
@@ -185,6 +224,9 @@ class BxBaseModProfileMenuViewMeta extends BxTemplMenuUnitMeta
     {
         $CNF = &$this->_oModule->_oConfig->CNF;
 
+        if($this->_bIsApi)
+            return false;
+
         if(empty($CNF['OBJECT_COMMENTS']) || empty($CNF['FIELD_COMMENTS']) || (empty($this->_aContentInfo[$CNF['FIELD_COMMENTS']]) && !$this->_bShowZeros))
             return false;
 

+ 10 - 1
template/scripts/BxBaseConnection.php

@@ -130,7 +130,16 @@ class BxBaseConnection extends BxDolConnection
             ));
         }
     }
-    
+
+    public function getCounterAPI($iProfileId, $bIsMutual, $aParams, $sContentType)
+    {
+        $iCount = $this->{'getConnected' . ($sContentType == BX_CONNECTIONS_CONTENT_TYPE_INITIATORS ? 'Initiators' : 'Content') . 'Count'}($iProfileId, $bIsMutual);
+        return [
+            'count' => $iCount,
+            'countf' => _t(isset($aParams['caption']) ? $aParams['caption'] : '_view_counter', $iCount)
+        ];
+    }
+
     protected function _getJsScript($iProfileId, $sContentType, $bIsMutual, $aHtmlIds, $bDynamicMode = false)
     {
         $sJsObject = $this->getJsObjectName($iProfileId);

+ 25 - 0
template/scripts/BxBaseMenuUnitMeta.php

@@ -176,6 +176,31 @@ class BxBaseMenuUnitMeta extends BxTemplMenuCustom
         
         return $sResult;
     }
+
+    protected function _getMenuItemAPI($aItem, $mixedType = 'text', $aData = [])
+    {
+        $sDisplayType = 'link';
+        $sContentType = 'text';
+        if(is_array($mixedType)) {
+            if(isset($mixedType['display']))
+                $sDisplayType = $mixedType['display'];
+            if(isset($mixedType['content']))
+                $sContentType = $mixedType['content'];
+        }
+        else
+            $sContentType = $mixedType;
+
+        $aItemData = array_merge([
+            'id' => $aItem['id'],
+            'name' => $aItem['name'],
+            'display_type' => $sDisplayType,
+            'content_type' => $sContentType,
+            'title' => $aItem['title'],
+            'link' => !empty($aItem['link']) && $aItem['link'] != 'javascript:void(0)' ? $aItem['link'] : ''
+        ], $aData);
+
+        return $aItemData;
+    }
 }
 
 /** @} */