1
0
Эх сурвалжийг харах

Ticket #4148 - Build-in API support: Snippet meta in Text based modules.

AntonLV 3 жил өмнө
parent
commit
88bafc9e2d

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

@@ -93,18 +93,24 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
             return false;
 
         $sTitle = $oCategory->getCategoryTitle($this->_aContentInfo[$CNF['FIELD_CATEGORY']]);
+        $sLink = $oCategory->getCategoryUrl($this->_aContentInfo[$CNF['FIELD_CATEGORY']]);
 
         if($this->_bIsApi)
             return $this->_getMenuItemAPI($aItem, 'text', [
                 'title' => $sTitle,
-                'link' => $oCategory->getCategoryUrl($this->_aContentInfo[$CNF['FIELD_CATEGORY']])
+                'link' => $sLink
             ]);
-        
-        return $this->getUnitMetaItemCustom($oCategory->getCategoryLink($sTitle, $this->_aContentInfo[$CNF['FIELD_CATEGORY']]));
+
+        return $this->getUnitMetaItemLink($sTitle, [
+            'href' => $sLink
+        ]);
     }
 
     protected function _getMenuItemTags($aItem)
     {
+        if($this->_bIsApi) //--- API: Isn't supported
+            return false;
+
         $CNF = &$this->_oModule->_oConfig->CNF;
 
         if(empty($CNF['OBJECT_METATAGS']))
@@ -114,14 +120,16 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
         if(!$oMetatags || !$oMetatags->keywordsIsEnabled())
             return false;
 
-        if($this->_bIsApi)
-            return false;
-
         return $this->getUnitMetaItemCustom($oMetatags->getKeywordsList($this->_aContentInfo[$CNF['FIELD_ID']], 3));
     }
 
-    protected function _getMenuItemViews($aItem)
+    protected function _getMenuItemViews($aItem, $aParams = [])
     {
+        $bShowAsObject = isset($aParams['show_as_object']) && (bool)$aParams['show_as_object'] === true;
+
+        if($bShowAsObject && !$this->_bIsApi) //--- API: Object based views aren't supported
+            return $this->_getMenuItemViewsObject($aItem, $aParams);
+
         $CNF = &$this->_oModule->_oConfig->CNF;
 
         if(empty($CNF['FIELD_VIEWS']) || (empty($this->_aContentInfo[$CNF['FIELD_VIEWS']]) && !$this->_bShowZeros))
@@ -136,12 +144,39 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
 
         return $this->getUnitMetaItemText($sTitle);
     }
+    protected function _getMenuItemViewsObject($aItem, $aParams = []) 
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(empty($CNF['OBJECT_VIEWS']))
+            return false;
+
+        $oObject = BxDolView::getObjectInstance($CNF['OBJECT_VIEWS'], $this->_aContentInfo[$CNF['FIELD_ID']]);
+        if(!$oObject || !$oObject->isEnabled())
+            return false;
+
+        $aObjectOptions = [
+            'show_counter' => true
+        ];
+        if(!empty($aParams['object_options']) && is_array($aParams['object_options']))
+            $aObjectOptions = array_merge($aObjectOptions, $aParams['object_options']);
+
+        if($this->_bIsApi)
+            return false;
+
+        return $this->getUnitMetaItemCustom($oObject->getElementInline($aObjectOptions));
+    }
 
-    protected function _getMenuItemVotes($aItem)
+    protected function _getMenuItemVotes($aItem, $aParams = [])
     {
+        $bShowAsObject = isset($aParams['show_as_object']) && (bool)$aParams['show_as_object'] === true;
+
+        if($bShowAsObject || $this->_bIsApi)  //--- API: Object base votes are used by default
+            return $this->_getMenuItemVotesObject($aItem, $aParams);
+
         $CNF = &$this->_oModule->_oConfig->CNF;
 
-        if(empty($CNF['OBJECT_VOTES']) || (empty($this->_aContentInfo[$CNF['FIELD_VOTES']]) && !$this->_bShowZeros))
+        if(empty($CNF['FIELD_VOTES']) || (empty($this->_aContentInfo[$CNF['FIELD_VOTES']]) && !$this->_bShowZeros))
             return false;
 
         $sTitle = _t('_vote_n_votes', $this->_aContentInfo[$CNF['FIELD_VOTES']]);
@@ -154,14 +189,37 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
         return $this->getUnitMetaItemText($sTitle);
     }
 
-    protected function _getMenuItemRating($aItem)
+    protected function _getMenuItemVotesObject($aItem, $aParams = [])
     {
         $CNF = &$this->_oModule->_oConfig->CNF;
 
-        if(empty($CNF['OBJECT_VOTES_STARS']))
+        if(empty($CNF['OBJECT_VOTES']))
             return false;
 
+        $oObject = BxDolVote::getObjectInstance($CNF['OBJECT_VOTES'], $this->_aContentInfo[$CNF['FIELD_ID']]);
+        if(!$oObject || !$oObject->isEnabled())
+            return false;
+
+        $aObjectOptions = [
+            'show_counter' => true
+        ];
+        if(!empty($aParams['object_options']) && is_array($aParams['object_options']))
+            $aObjectOptions = array_merge($aObjectOptions, $aParams['object_options']);
+
         if($this->_bIsApi)
+            return $oObject->getElementApi($aObjectOptions);
+
+        return $this->getUnitMetaItemCustom($oObject->getElementInline($aObjectOptions));
+    }
+
+    protected function _getMenuItemRating($aItem)
+    {
+        if($this->_bIsApi) //--- API: Isn't supported
+            return false;
+
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(empty($CNF['OBJECT_VOTES_STARS']))
             return false;
 
         $oVotes = BxDolVote::getObjectInstance($CNF['OBJECT_VOTES_STARS'], $this->_aContentInfo[$CNF['FIELD_ID']]);
@@ -173,14 +231,14 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
     
     protected function _getMenuItemReactions($aItem)
     {
+        if($this->_bIsApi) //--- API: Isn't supported
+            return false;
+
         $CNF = &$this->_oModule->_oConfig->CNF;
 
         if(empty($CNF['OBJECT_REACTIONS']))
             return false;
 
-        if($this->_bIsApi)
-            return false;
-
         $oVotes = BxDolVote::getObjectInstance($CNF['OBJECT_REACTIONS'], $this->_aContentInfo[$CNF['FIELD_ID']]);
         if(!$oVotes)
             return false;
@@ -188,10 +246,60 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
         return $this->getUnitMetaItemCustom($oVotes->getElementInline(array('show_counter' => false)));
     }
 
-    protected function _getMenuItemComments($aItem)
+    protected function _getMenuItemScore($aItem, $aParams = [])
+    {
+        $bShowAsObject = isset($aParams['show_as_object']) && (bool)$aParams['show_as_object'] === true;
+
+        if($bShowAsObject || $this->_bIsApi)  //--- API: Object base scores are used by default
+            return $this->_getMenuItemScoreObject($aItem, $aParams);
+
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(empty($CNF['FIELD_SCORE']) || (empty($this->_aContentInfo[$CNF['FIELD_SCORE']]) && !$this->_bShowZeros))
+            return false;
+
+        $sTitle = _t('_sys_score_n_score', $this->_aContentInfo[$CNF['FIELD_SCORE']]);
+
+        if($this->_bIsApi)
+            return $this->_getMenuItemAPI($aItem, 'text', [
+                'title' => $sTitle
+            ]);
+
+        return $this->getUnitMetaItemText($sTitle);
+    }
+
+    protected function _getMenuItemScoreObject($aItem, $aParams = [])
     {
         $CNF = &$this->_oModule->_oConfig->CNF;
 
+        if(empty($CNF['OBJECT_SCORES']))
+            return false;
+
+        $oObject = BxDolScore::getObjectInstance($CNF['OBJECT_SCORES'], $this->_aContentInfo[$CNF['FIELD_ID']], true, $this->_oModule->_oTemplate);
+        if(!$oObject || !$oObject->isEnabled())
+            return false;
+
+        $aObjectOptions = [
+            'show_counter' => true
+        ];
+        if(!empty($aParams['object_options']) && is_array($aParams['object_options']))
+            $aObjectOptions = array_merge($aObjectOptions, $aParams['object_options']);
+
+        if($this->_bIsApi)
+            return $oObject->getElementApi($aObjectOptions);
+
+        return $this->getUnitMetaItemCustom($oObject->getElementInline($aObjectOptions));
+    }
+
+    protected function _getMenuItemComments($aItem, $aParams = [])
+    {
+        $bShowAsObject = isset($aParams['show_as_object']) && (bool)$aParams['show_as_object'] === true;
+
+        if($bShowAsObject || $this->_bIsApi)  //--- API: Object base comments are used by default
+            return $this->_getMenuItemCommentsObject($aItem, $aParams);
+
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
         if(empty($CNF['OBJECT_COMMENTS']) || empty($CNF['FIELD_COMMENTS']) || (empty($this->_aContentInfo[$CNF['FIELD_COMMENTS']]) && !$this->_bShowZeros))
             return false;
 
@@ -200,19 +308,42 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
             return false;
         
         $sTitle = _t('_cmt_txt_n_comments', $oComments->getCommentsCountAll(0, true));
-        $sUrl =  $oComments->getListUrl();
+        $sLink =  $oComments->getListUrl();
 
         if($this->_bIsApi)
             return $this->_getMenuItemAPI($aItem, 'text', [
                 'title' => $sTitle,
-                'link' => $sUrl
+                'link' => $sLink
             ]);
 
         return $this->getUnitMetaItemLink($sTitle, [
-            'href' => $sUrl
+            'href' => $sLink
         ]);
     }
 
+    protected function _getMenuItemCommentsObject($aItem, $aParams = [])
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(empty($CNF['OBJECT_COMMENTS']))
+            return false;
+
+        $oObject = BxDolCmts::getObjectInstance($CNF['OBJECT_COMMENTS'], $this->_aContentInfo[$CNF['FIELD_ID']], true, $this->_oModule->_oTemplate);
+        if(!$oObject || !$oObject->isEnabled())
+            return false;
+
+        $aObjectOptions = [
+            'show_counter' => true
+        ];
+        if(!empty($aParams['object_options']) && is_array($aParams['object_options']))
+            $aObjectOptions = array_merge($aObjectOptions, $aParams['object_options']);
+
+        if($this->_bIsApi)
+            return $oObject->getElementApi($aObjectOptions);
+
+        return $this->getUnitMetaItemCustom($oObject->getElementInline($aObjectOptions));
+    }
+
     protected function _getMenuItemDefault($aItem)
     {
         $sResult = false;

+ 0 - 3
modules/base/text/classes/BxBaseModTextModule.php

@@ -914,14 +914,11 @@ class BxBaseModTextModule extends BxBaseModGeneralModule implements iBxDolConten
         if(isset($aParams['extended']) && $aParams['extended'] === true)
             $aResult['text'] = $aData[$CNF['FIELD_TEXT']];
 
-        /**
-         * Disabled for now, because Author is used only.
         if(!empty($CNF['OBJECT_MENU_SNIPPET_META']) && ($oMetaMenu = BxDolMenu::getObjectInstance($CNF['OBJECT_MENU_SNIPPET_META'], $this->_oTemplate)) !== false) {
             $oMetaMenu->setContentId($iId);
 
             $aResult['meta'] = $oMetaMenu->getCodeAPI();
         }
-         */
 
         return $aResult;
     }

+ 1 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -3559,6 +3559,7 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_request_method_not_found_cnt"><![CDATA[Method({0}) was not found in module({1})]]></string>
 	<string name="_sys_score_counter"><![CDATA[{0}]]></string>
 	<string name="_sys_score_counter_empty"><![CDATA[Vote]]></string>
+        <string name="_sys_score_n_score"><![CDATA[{0} score]]></string>
 	<string name="_sys_score_do_up"><![CDATA[Up]]></string>
 	<string name="_sys_score_do_down"><![CDATA[Down]]></string>
 	<string name="_sys_score_do_by"><![CDATA[Voted by]]></string>

+ 1 - 0
modules/boonex/forum/classes/BxForumConfig.php

@@ -68,6 +68,7 @@ class BxForumConfig extends BxBaseModTextConfig
             'FIELD_VIEWS' => 'views',
             'FIELD_VOTES' => 'votes',
             'FIELD_COMMENTS' => 'comments',
+            'FIELD_SCORE' => 'score',
             'FIELD_STICK' => 'stick',
             'FIELD_LOCK' => 'lock',
             'FIELD_RESOLVE' => 'resolved',

+ 50 - 44
modules/boonex/forum/classes/BxForumMenuSnippetMeta.php

@@ -18,47 +18,11 @@ class BxForumMenuSnippetMeta extends BxBaseModTextMenuSnippetMeta
         parent::__construct($aObject, $oTemplate);
     }
 
-    protected function _getMenuItemViews($aItem)
-    {
-        $CNF = &$this->_oModule->_oConfig->CNF;
-
-        if(empty($CNF['FIELD_VIEWS']) || empty($CNF['FIELD_VIEWS']) || (empty($this->_aContentInfo[$CNF['FIELD_VIEWS']]) && !$this->_bShowZeros))
-            return false;
-
-        $oViews = BxDolView::getObjectInstance($CNF['OBJECT_VIEWS'], $this->_aContentInfo[$CNF['FIELD_ID']]);
-        if(!$oViews || !$oViews->isEnabled())
-            return false;
-
-        return $this->getUnitMetaItemCustom($oViews->getElementInline(array('show_counter' => true)));
-    }
-
-    protected function _getMenuItemVotes($aItem)
+    protected function _getMenuItemReplyAuthor($aItem)
     {
-        $CNF = &$this->_oModule->_oConfig->CNF;
-
-        if(empty($CNF['OBJECT_VOTES']) || empty($CNF['FIELD_VOTES']) || (empty($this->_aContentInfo[$CNF['FIELD_VOTES']]) && !$this->_bShowZeros))
+        if($this->_bIsApi) //--- API: Isn't supported
             return false;
 
-        $oVotes = BxDolVote::getObjectInstance($CNF['OBJECT_VOTES'], $this->_aContentInfo[$CNF['FIELD_ID']]);
-        if(!$oVotes || !$oVotes->isEnabled())
-            return false;
-
-        return $this->getUnitMetaItemCustom($oVotes->getElementInline(array('show_counter' => true)));
-    }
-    
-    protected function _getMenuItemScore($aItem)
-    {
-        $CNF = &$this->_oModule->_oConfig->CNF;
-        
-        $oVotes = BxDolScore::getObjectInstance($CNF['OBJECT_SCORES'], $this->_aContentInfo[$CNF['FIELD_ID']], true, $this->_oModule->_oTemplate);
-        if(!$oVotes || !$oVotes->isEnabled())
-            return 'zxczx';
-
-        return $this->getUnitMetaItemCustom($oVotes->getElementInline());
-    }
-
-    protected function _getMenuItemReplyAuthor($aItem)
-    {
         $CNF = &$this->_oModule->_oConfig->CNF;
         if(empty($this->_aContentInfo[$CNF['FIELD_LR_COMMENT_ID']]))
             return '';
@@ -72,6 +36,9 @@ class BxForumMenuSnippetMeta extends BxBaseModTextMenuSnippetMeta
 
     protected function _getMenuItemReplyDate($aItem)
     {
+        if($this->_bIsApi) //--- API: Isn't supported
+            return false;
+
         $CNF = &$this->_oModule->_oConfig->CNF;
         if(empty($this->_aContentInfo[$CNF['FIELD_LR_COMMENT_ID']]))
             return '';
@@ -81,6 +48,9 @@ class BxForumMenuSnippetMeta extends BxBaseModTextMenuSnippetMeta
 
     protected function _getMenuItemReplyText($aItem)
     {
+        if($this->_bIsApi) //--- API: Isn't supported
+            return false;
+
         $CNF = &$this->_oModule->_oConfig->CNF;
         if(empty($this->_aContentInfo[$CNF['FIELD_LR_COMMENT_ID']]))
             return '';
@@ -95,6 +65,9 @@ class BxForumMenuSnippetMeta extends BxBaseModTextMenuSnippetMeta
     
     protected function _getMenuItemAuthor($aItem)
     {
+        if($this->_bIsApi) //--- API: Isn't supported
+            return false;
+
         $CNF = &$this->_oModule->_oConfig->CNF;
         $oProfile = BxDolProfile::getInstanceMagic($this->_aContentInfo[$CNF['FIELD_AUTHOR']]);
         return $this->getUnitMetaItemExtended($oProfile->getDisplayName(), $oProfile->getThumb(), $oProfile->getUrl());
@@ -112,13 +85,34 @@ class BxForumMenuSnippetMeta extends BxBaseModTextMenuSnippetMeta
             return false;
 
         $sTitle = $oCategory->getCategoryTitle($this->_aContentInfo[$CNF['FIELD_CATEGORY']]);
-        $aCategoryData = $this->_oModule->_oDb->getCategories(array('type' => 'by_category', 'category' => $this->_aContentInfo[$CNF['FIELD_CATEGORY']]));
-        
-        return $this->getUnitMetaItemExtended($sTitle, (isset($aCategoryData['icon']) ? $aCategoryData['icon'] : 'folder'), $oCategory->getCategoryUrl($this->_aContentInfo[$CNF['FIELD_CATEGORY']]));
+        $sLink = $oCategory->getCategoryUrl($this->_aContentInfo[$CNF['FIELD_CATEGORY']]);
+
+        if($this->_bIsApi)
+            return $this->_getMenuItemAPI($aItem, 'text', [
+                'title' => $sTitle,
+                'link' => $sLink
+            ]);
+
+        $aCategoryData = $this->_oModule->_oDb->getCategories([
+            'type' => 'by_category', 
+            'category' => $this->_aContentInfo[$CNF['FIELD_CATEGORY']]
+        ]);
+
+        return $this->getUnitMetaItemExtended($sTitle, (isset($aCategoryData['icon']) ? $aCategoryData['icon'] : 'folder'), $sLink);
     }
-    
-    protected function _getMenuItemComments($aItem)
+
+    protected function _getMenuItemScore($aItem, $aParams = [])
+    {
+        return parent::_getMenuItemScore($aItem, [
+            'show_as_object' => true
+        ]);
+    }
+
+    protected function _getMenuItemComments($aItem, $aParams = [])
     {
+        if($this->_bIsApi)  //--- API: Object base comments are used by default
+            return $this->_getMenuItemCommentsObject($aItem, $aParams);
+
         $CNF = &$this->_oModule->_oConfig->CNF;
 
         if(empty($CNF['OBJECT_COMMENTS']) || empty($CNF['FIELD_COMMENTS']) || (empty($this->_aContentInfo[$CNF['FIELD_COMMENTS']]) && !$this->_bShowZeros))
@@ -130,15 +124,21 @@ class BxForumMenuSnippetMeta extends BxBaseModTextMenuSnippetMeta
 
         return $this->getUnitMetaItemExtended(_t('_bx_forum_page_block_title_entry_comments', $oComments->getCommentsCountAll()), $aItem['icon'], '');
     }
-    
+
     protected function _getMenuItemBadges($aItem)
     {
+        if($this->_bIsApi) //--- API: Isn't supported
+            return false;
+
         $CNF = &$this->_oModule->_oConfig->CNF;
         return $this->getUnitMetaItemExtended($this->_oModule->serviceGetBadges($this->_aContentInfo[$CNF['FIELD_ID']], false, true), '', '', false, true); 
     }
     
     protected function _getMenuItemSticked($aItem)
     {
+        if($this->_bIsApi) //--- API: Isn't supported
+            return false;
+
         $CNF = &$this->_oModule->_oConfig->CNF;
 
         if((int)$this->_aContentInfo[$CNF['FIELD_STICK']] == 0)
@@ -149,6 +149,9 @@ class BxForumMenuSnippetMeta extends BxBaseModTextMenuSnippetMeta
 
     protected function _getMenuItemLocked($aItem)
     {
+        if($this->_bIsApi) //--- API: Isn't supported
+            return false;
+
         $CNF = &$this->_oModule->_oConfig->CNF;
 
         if((int)$this->_aContentInfo[$CNF['FIELD_LOCK']] == 0)
@@ -159,6 +162,9 @@ class BxForumMenuSnippetMeta extends BxBaseModTextMenuSnippetMeta
 
     protected function _getMenuItemStatus($aItem)
     {
+        if($this->_bIsApi) //--- API: Isn't supported
+            return false;
+
         $CNF = &$this->_oModule->_oConfig->CNF;
 
         $sStatus = '';

+ 1 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -3489,6 +3489,7 @@
     <string name="_sys_request_method_not_found_cnt"><![CDATA[Метод ({0}) не найден в модуле ({1})]]></string>
     <string name="_sys_score_counter"><![CDATA[{0}]]></string>
     <string name="_sys_score_counter_empty"><![CDATA[Проголосовать]]></string>
+    <string name="_sys_score_n_score"><![CDATA[{0} очков]]></string>
     <string name="_sys_score_do_up"><![CDATA[За]]></string>
     <string name="_sys_score_do_down"><![CDATA[Против]]></string>
     <string name="_sys_score_do_by"><![CDATA[Проголосовали]]></string>