Explorar o código

Ticket #4971 - Build-in API support: Forum categories.

AntonLV hai 5 meses
pai
achega
e0f5a9fa99

+ 16 - 0
modules/boonex/forum/classes/BxForumCategory.php

@@ -14,6 +14,8 @@ class BxForumCategory extends BxTemplCategory
     protected $_sModule;
     protected $_oModule;
 
+    protected $_aCategories;
+
     public function __construct($aObject, $oTemplate = null)
     {
     	$this->_sModule = 'bx_forum';
@@ -26,6 +28,8 @@ class BxForumCategory extends BxTemplCategory
         $this->_sBrowseUrl = bx_append_url_params(BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_CATEGORY_ENTRIES']), array(
             'category' => '{keyword}'
         ), true, ['{keyword}']);
+
+        $this->_aCategories = $this->_oModule->_oDb->getCategories(['type' => 'all_with_key']);
     }
 
     public function getCategoryIcon($sValue)
@@ -34,6 +38,18 @@ class BxForumCategory extends BxTemplCategory
 
         return isset($aCategoryData['icon']) ? $aCategoryData['icon'] : '';
     }
+
+    protected function _getCategoryData($aCategory)
+    {
+        $iCategory = (int)$aCategory['Value'];
+        if(!isset($this->_aCategories[$iCategory]))
+            return [];
+
+        return [
+            'use' => 'icon',
+            'icon' => $this->_aCategories[$iCategory]['icon']
+        ];
+    }
 }
 
 /** @} */

+ 26 - 21
modules/boonex/forum/classes/BxForumDb.php

@@ -87,40 +87,40 @@ class BxForumDb extends BxBaseModTextDb
 
     public function getUnrepliedDiscussionsNum ($iProfileId)
     {
-    	$CNF = &$this->_oConfig->CNF;
+        $CNF = &$this->_oConfig->CNF;
 
         $sQuery = $this->prepare("SELECT COUNT(`te`.`id`)
             FROM `" . $CNF['TABLE_ENTRIES'] . "` AS `te`
             WHERE `te`.`author`=? AND `te`.`lr_profile_id`<>?", $iProfileId, $iProfileId);
 
-		return $this->getOne($sQuery);
+        return $this->getOne($sQuery);
     }
 
-	public function updateStatus($sAction, $aContentInfo)
-	{
-		$CNF = &$this->_oConfig->CNF;
+    public function updateStatus($sAction, $aContentInfo)
+    {
+        $CNF = &$this->_oConfig->CNF;
 
-		$aActions = array(
-			'stick' => array($CNF['FIELD_STICK'] => 1),
-			'unstick' => array($CNF['FIELD_STICK'] => 0),
-			'lock' =>  array($CNF['FIELD_LOCK'] => 1),
-			'unlock' =>  array($CNF['FIELD_LOCK'] => 0),
+        $aActions = array(
+            'stick' => array($CNF['FIELD_STICK'] => 1),
+            'unstick' => array($CNF['FIELD_STICK'] => 0),
+            'lock' =>  array($CNF['FIELD_LOCK'] => 1),
+            'unlock' =>  array($CNF['FIELD_LOCK'] => 0),
             'resolve' =>  array($CNF['FIELD_RESOLVE'] => 1),
-			'unresolve' =>  array($CNF['FIELD_RESOLVE'] => 0),
-			'hide' =>  array($CNF['FIELD_STATUS_ADMIN'] => 'hidden'),
-			'unhide' =>  array($CNF['FIELD_STATUS_ADMIN'] => 'active')
-		);
+            'unresolve' =>  array($CNF['FIELD_RESOLVE'] => 0),
+            'hide' =>  array($CNF['FIELD_STATUS_ADMIN'] => 'hidden'),
+            'unhide' =>  array($CNF['FIELD_STATUS_ADMIN'] => 'active')
+        );
 
-		return $this->updateEntries($aActions[$sAction], array($CNF['FIELD_ID'] => $aContentInfo[$CNF['FIELD_ID']]));
-	}
+        return $this->updateEntries($aActions[$sAction], array($CNF['FIELD_ID'] => $aContentInfo[$CNF['FIELD_ID']]));
+    }
 
-	public function insertCategory($aSet)
+    public function insertCategory($aSet)
     {
         $sQuery = "INSERT INTO `" . $this->getPrefix() . "categories` SET " . $this->arrayToSQL($aSet);
         return (int)$this->query($sQuery) > 0;
     }
 
-	public function getCategories($aParams)
+    public function getCategories($aParams)
     {
         $aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
         $sSelectClause = $sJoinClause = $sWhereClause = $sGroupClause = $sOrderClause = $sLimitClause = "";
@@ -132,17 +132,22 @@ class BxForumDb extends BxBaseModTextDb
             case 'by_category':
                 $aMethod['name'] = 'getRow';
                 $aMethod['params'][1] = array(
-                	'category' => $aParams['category']
+                        'category' => $aParams['category']
                 );
 
                 $sWhereClause = " AND `tc`.`category`=:category ";
                 break;
 
             case 'all_pairs':
-            	$aMethod['name'] = 'getPairs';
+                $aMethod['name'] = 'getPairs';
                 $aMethod['params'][1] = 'category';
                 $aMethod['params'][2] = 'visible_for_levels';
-            	break;
+                break;
+
+            case 'all_with_key':
+                $aMethod['name'] = 'getAllWithKey';
+                $aMethod['params'][1] = 'category';
+                break;
         }
 
         $aMethod['params'][0] = "SELECT 

+ 20 - 19
modules/boonex/forum/classes/BxForumMenuCategories.php

@@ -30,29 +30,29 @@ class BxForumMenuCategories extends BxTemplMenu
     public function getMenuItems ()
     {
         $CNF = &$this->_oModule->_oConfig->CNF;
-        
-        $aItems = [];
-        
-        $aCategoriest = bx_srv('system', 'categories_list', ['bx_forum_cats', ['show_empty' => true]], 'TemplServiceCategory');
-        
-        if (!($o = BxDolCategory::getObjectInstance('bx_forum_cats')))
-            return $aItems;
 
-		$aCategories = $o->getCategoriesList(false, true);
-        
-		if(!isset($aCategories['bx_repeat:cats']))
-			return $aItems;
-        
+        $oCategory = BxDolCategory::getObjectInstance('bx_forum_cats');
+        if(!$oCategory)
+            return [];
+
+        $aCategories = $oCategory->getCategoriesList(false, true);
+        if($this->_bIsApi && $aCategories && is_array($aCategories))
+            return reset($aCategories)['data'];
+
+        if(!isset($aCategories['bx_repeat:cats']))
+            return [];
+
         $iCount = 0;
         foreach ($aCategories['bx_repeat:cats'] as $sKey => $aCategory) {
             $iCount +=  $aCategories['bx_repeat:cats'][$sKey]['num'];
         }
-        
-        $aItems[] =  [
+
+        $aItems = [[
             'class_add' => 'bx-psmi-show-0' .  (bx_get('category') == '' ? ' bx-menu-item-active' : ''),
             'name' => 'show-0',
             'title' => _t('_bx_forum_txt_all_categories'),
             'link' => BxDolPermalinks::getInstance()->permalink($CNF['URL_HOME']),
+            'icon' => '',
             'bx_if:onclick' => [
                 'condition' => false,
                 'content' => [
@@ -84,25 +84,26 @@ class BxForumMenuCategories extends BxTemplMenu
                 'condition' => true,
                 'content' => ['addon' => $iCount]
             ]
-        ];
+        ]];
 
         foreach ($aCategories['bx_repeat:cats'] as $sKey => $aCategory) {
             $aCategoryData = $this->_oModule->_oDb->getCategories(['type' => 'by_category', 'category' => $aCategory['value']]);
             if(empty($aCategoryData) || (!empty($aCategoryData['visible_for_levels']) && BxDolAcl::getInstance()->isMemberLevelInSet($aCategoryData['visible_for_levels']))) {
-                
+
                 $aCategories['bx_repeat:cats'][$sKey]['icon'] = $this->_oTemplate->getImage(isset($aCategoryData['icon']) ? $aCategoryData['icon'] : 'folder', array('class' => 'sys-icon sys-colored'));
-                
+
                 if (!isset($aCategoryData['icon']) || $aCategoryData['icon'] == '')
                     $aCategoryData['icon'] = 'folder';
-                
+
                 list($sIcon, $sIconUrl, $sIconA, $sIconHtml) = BxTemplFunctions::getInstance()->getIcon($aCategoryData['icon']);
-                
+
                 $aItems[] =  [
                     // TODO
                     'class_add' => 'bx-psmi-show-' . $aCategories['bx_repeat:cats'][$sKey]['value'] . (bx_get('category') == $aCategories['bx_repeat:cats'][$sKey]['value'] ? ' bx-menu-item-active' : ''),
                     'name' => 'show-' . $aCategories['bx_repeat:cats'][$sKey]['value'],
                     'title' => $aCategories['bx_repeat:cats'][$sKey]['name'],
                     'link' => $aCategories['bx_repeat:cats'][$sKey]['url'],
+                    'icon' => $aCategoryData['icon'],
                     'bx_if:onclick' => [
                         'condition' => false,
                         'content' => [

+ 9 - 1
template/scripts/BxBasePage.php

@@ -1342,8 +1342,16 @@ class BxBasePage extends BxDolPage
      */
     protected function _getBlockMenu ($aBlock)
     {
+        $bIsApi = bx_is_api();
+
         $oMenu = BxTemplMenu::getObjectInstance($aBlock['content']);
-        return $oMenu ? $oMenu->getCode () : '';
+        if(!$oMenu)
+            return $bIsApi ? [] : '';
+
+        if($bIsApi)
+            return [bx_api_get_block('menu', ['title' => _t($aBlock['title']), 'content' => $oMenu->getCodeAPI()])];
+
+        return $oMenu ? $oMenu->getCode() : '';
     }
 
     /**