Ver Fonte

Ticket #4148 - Build-in API support: Snippet menus.

AntonLV há 3 anos atrás
pai
commit
d2a0f3258b

+ 18 - 6
modules/base/general/classes/BxBaseModGeneralMenuSnippetMeta.php

@@ -48,12 +48,24 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
             $this->addMarkers(array('content_id' => (int)$this->_iContentId));
     }
 
-    protected function _getMenuItemAPI($aItem, $sType = 'link', $aData = [])
+    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'],
-            'content_type' => $sType,
+            'display_type' => $sDisplayType,
+            'content_type' => $sContentType,
             'title' => $aItem['title'],
             'link' => !empty($aItem['link']) && $aItem['link'] != 'javascript:void(0)' ? $aItem['link'] : ''
         ], $aData);
@@ -107,7 +119,7 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
         $sTitle = $oCategory->getCategoryTitle($this->_aContentInfo[$CNF['FIELD_CATEGORY']]);
 
         if($this->_bIsApi)
-            return $this->_getMenuItemAPI($aItem, 'link', [
+            return $this->_getMenuItemAPI($aItem, 'text', [
                 'title' => $sTitle,
                 'link' => $oCategory->getCategoryUrl($this->_aContentInfo[$CNF['FIELD_CATEGORY']])
             ]);
@@ -142,7 +154,7 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
         $sTitle = _t('_view_n_views', $this->_aContentInfo[$CNF['FIELD_VIEWS']]);
 
         if($this->_bIsApi)
-            return $this->_getMenuItemAPI($aItem, 'link', [
+            return $this->_getMenuItemAPI($aItem, 'text', [
                 'title' => $sTitle
             ]);
 
@@ -159,7 +171,7 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
         $sTitle = _t('_vote_n_votes', $this->_aContentInfo[$CNF['FIELD_VOTES']]);
 
         if($this->_bIsApi)
-            return $this->_getMenuItemAPI($aItem, 'link', [
+            return $this->_getMenuItemAPI($aItem, 'text', [
                 'title' => $sTitle
             ]);
 
@@ -215,7 +227,7 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
         $sUrl =  $oComments->getListUrl();
 
         if($this->_bIsApi)
-            return $this->_getMenuItemAPI($aItem, 'link', [
+            return $this->_getMenuItemAPI($aItem, 'text', [
                 'title' => $sTitle,
                 'link' => $sUrl
             ]);

+ 36 - 3
modules/base/profile/classes/BxBaseModProfileMenuSnippetMeta.php

@@ -94,7 +94,14 @@ class BxBaseModProfileMenuSnippetMeta extends BxBaseModGeneralMenuSnippetMeta
         if(!$iFriends && !$this->_bShowZeros)
             return false;
 
-        return $this->getUnitMetaItemText(_t('_sys_menu_item_title_sm_friends', $iFriends));
+        $sTitle = _t('_sys_menu_item_title_sm_friends', $iFriends);
+
+        if($this->_bIsApi)
+            return $this->_getMenuItemAPI($aItem, 'text', [
+                'title' => $sTitle
+            ]);
+
+        return $this->getUnitMetaItemText($sTitle);
     }
 
     protected function _getMenuItemFriendsMutual($aItem)
@@ -112,7 +119,14 @@ class BxBaseModProfileMenuSnippetMeta extends BxBaseModGeneralMenuSnippetMeta
         if(!$iFriends && !$this->_bShowZeros)
             return false;
 
-        return $this->getUnitMetaItemText(_t('_sys_menu_item_title_sm_friends_mutual', $iFriends));
+        $sTitle = _t('_sys_menu_item_title_sm_friends_mutual', $iFriends);
+
+        if($this->_bIsApi)
+            return $this->_getMenuItemAPI($aItem, 'text', [
+                'title' => $sTitle
+            ]);
+
+        return $this->getUnitMetaItemText($sTitle);
     }
 
     protected function _getMenuItemSubscribers($aItem)
@@ -132,6 +146,9 @@ class BxBaseModProfileMenuSnippetMeta extends BxBaseModGeneralMenuSnippetMeta
 
         $sIcon = BxTemplFunctions::getInstanceWithTemplate($this->_oTemplate)->getIconAsHtml(!empty($aItem['icon']) ? $aItem['icon'] : '');
 
+        if($this->_bIsApi)
+            return false;
+
         return $this->getUnitMetaItemCustom($oConnection->getCounter($this->_oContentProfile->id(), false, [
             'caption' => '_sys_menu_item_title_sm_subscribers', 
             'custom_icon' => $sIcon
@@ -155,6 +172,12 @@ class BxBaseModProfileMenuSnippetMeta extends BxBaseModGeneralMenuSnippetMeta
         if(empty($sTitle))
             return false;
 
+        if($this->_bIsApi)
+            return $this->_getMenuItemAPI($aItem, ['display' => 'button', 'content' => 'text'], [
+                'title' => $sTitle,
+                'primary' => !empty($aItem['primary'])
+            ]);
+
         return [
             $this->getUnitMetaItemButton($sTitle, array(
                 'class' => !empty($aItem['primary']) ? 'bx-btn-primary' : '',
@@ -224,7 +247,17 @@ class BxBaseModProfileMenuSnippetMeta extends BxBaseModGeneralMenuSnippetMeta
             return false;
 
         $aMembership = BxDolAcl::getInstance()->getMemberMembershipInfo($this->_oContentProfile->id());
-        return $aMembership ? $this->getUnitMetaItemText(_t($aMembership['name'])) : false;
+        if(empty($aMembership) || !is_array($aMembership))
+            return false;
+
+        $sTitle = _t($aMembership['name']);
+
+        if($this->_bIsApi)
+            return $this->_getMenuItemAPI($aItem, 'text', [
+                'title' => $sTitle
+            ]);
+
+        return $this->getUnitMetaItemText($sTitle);
     }
 }
 

+ 17 - 2
modules/base/profile/classes/BxBaseModProfileSearchResult.php

@@ -236,9 +236,16 @@ class BxBaseModProfileSearchResult extends BxBaseModGeneralSearchResult
     
     function decodeData ($a)
     {
-        $oContentInfo = $this->getContentInfoObject();
         $CNF = $this->oModule->_oConfig->CNF;
-        
+
+        $oPrivacy = BxDolPrivacy::getObjectInstance($CNF['OBJECT_PRIVACY_VIEW']);
+        $bPrivacy = $oPrivacy !== false;
+
+        $oMetaMenu = !empty($CNF['OBJECT_MENU_SNIPPET_META']) ? BxDolMenu::getObjectInstance($CNF['OBJECT_MENU_SNIPPET_META'], $this->oModule->_oTemplate) : false;
+        $bMetaMenu = $oMetaMenu !== false;
+
+        $oContentInfo = $this->getContentInfoObject();
+
         foreach ($a as $i => $r) {
             if (isset($r['author']))
                 $a[$i]['author_data'] = BxDolProfile::getData($r[$CNF['FIELD_AUTHOR']]);
@@ -247,6 +254,14 @@ class BxBaseModProfileSearchResult extends BxBaseModGeneralSearchResult
             $a[$i]['image'] = $oContentInfo->getContentThumb($r['id']);
             $a[$i]['cover'] = $oContentInfo->getContentCover($r['id']);
             $a[$i]['summary_plain'] = $this->decodeDataSummaryPlain($oContentInfo, $r);
+
+            if($bMetaMenu) {
+                $bPublic = !$bPrivacy || $oPrivacy->check($r[$CNF['FIELD_ID']]) || $oPrivacy->isPartiallyVisible($r[$CNF['FIELD_ALLOW_VIEW_TO']]);
+                
+                $oMetaMenu->setContentId($r['id']);
+                $oMetaMenu->setContentPublic($bPublic);
+                $a[$i]['meta'] = $oMetaMenu->getCodeAPI();
+            }
         }
 
         return $a;

+ 2 - 2
modules/base/text/classes/BxBaseModTextSearchResult.php

@@ -242,7 +242,7 @@ class BxBaseModTextSearchResult extends BxBaseModGeneralSearchResult
         $CNF = &$this->oModule->_oConfig->CNF;
 
         $oMetaMenu = !empty($CNF['OBJECT_MENU_SNIPPET_META']) ? BxDolMenu::getObjectInstance($CNF['OBJECT_MENU_SNIPPET_META'], $this->oModule->_oTemplate) : false;
-        $bMetaMenu = $oMetaMenu !== false;       
+        $bMetaMenu = $oMetaMenu !== false;
 
         $oContentInfo = $this->getContentInfoObject();
 
@@ -257,7 +257,7 @@ class BxBaseModTextSearchResult extends BxBaseModGeneralSearchResult
             if($bMetaMenu) {
                 $oMetaMenu->setContentId($r['id']);
                 $a[$i]['meta'] = $oMetaMenu->getCodeAPI();
-            }   
+            }
         }
 
         return $a;