Explorar el Código

Ticket #4971 - Build-in API support: Allow to rewrite menu item from 3d party module.

AntonLV hace 1 año
padre
commit
2f23fd223a

+ 17 - 39
modules/base/general/classes/BxBaseModGeneralMenuSnippetMeta.php

@@ -369,49 +369,27 @@ class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
 
     protected function _getMenuItemDefault($aItem)
     {
-        $sResult = false;
+        if(($mixedResult = $this->_rewriteMenuItem($aItem)) !== false)
+            return $mixedResult;
 
-        $a = [
-            'res' => &$sResult, 
-            'menu' => $this->_sObject, 
-            'menu_object' => $this, 
-            'item' => $aItem,
+        return parent::_getMenuItemDefault($aItem);
+    }
+
+    protected function _getMenuItemDefaultApi($aItem)
+    {
+        if(($mixedResult = $this->_rewriteMenuItem($aItem)) !== false)
+            return $mixedResult;
+
+        return parent::_getMenuItemDefaultApi($aItem);
+    }
+
+    protected function _rewriteMenuItem($aItem, $aExtrasAddon = [])
+    {
+        return parent::_rewriteMenuItem($aItem, [
             'module' => $this->_sModule,
             'content_id' => $this->_iContentId,
             'content_data' => $this->_aContentInfo,
-        ];
-        
-        /**
-         * @hooks
-         * @hookdef hook-bx_base_general-menu_custom_item '{module_name}', 'menu_custom_item' - hook to override menu item
-         * - $unit_name - module name
-         * - $action - equals `menu_custom_item`
-         * - $object_id - not used
-         * - $sender_id - not used
-         * - $extra_params - array of additional params with the following array keys:
-         *      - `res` - [string] by ref, menu item code, can be overridden in hook processing
-         *      - `menu` - [string] menu name
-         *      - `menu_object` - [object] an instance of menu, @see BxDolMenu
-         *      - `item` - [array] menu item array as key&value pairs
-         *      - `module` - [string] module name
-         *      - `content_id` - [int] content id
-         *      - `content_data` - [array] content info array as key&value pairs
-         * @hook @ref hook-bx_base_general-menu_custom_item
-         */
-        bx_alert($this->_sModule, 'menu_custom_item', 0, 0, $a);
-        
-        /**
-         * @hooks
-         * @hookdef hook-menu-menu_custom_item 'menu', 'menu_custom_item' - hook to override menu item
-         * It's equivalent to @ref hook-bx_base_general-menu_custom_item
-         * @hook @ref hook-menu-menu_custom_item
-         */
-        bx_alert('menu', 'menu_custom_item', 0, 0, $a);
-
-        if (false !== $sResult)
-            return $sResult;
-
-        return parent::_getMenuItemDefault($aItem);
+        ]);
     }
 }
 

+ 24 - 4
modules/base/general/classes/BxBaseModGeneralMenuViewActions.php

@@ -138,6 +138,12 @@ class BxBaseModGeneralMenuViewActions extends BxTemplMenuCustom
         if(empty($this->_oMenuSocialSharing)) 
             $this->_initMenuSocialSharing();
 
+        if(($mixedResult = $this->_rewriteMenuItem($aItem)) !== false)
+            return $mixedResult;
+
+        if($this->_bIsApi)
+            return $aItem;
+
         $aItem['class_wrp'] = 'bx-base-general-entity-action' . (!empty($aItem['class_wrp']) ? ' ' . $aItem['class_wrp'] : '');
 
         if($this->_bShowAsButton)
@@ -146,10 +152,15 @@ class BxBaseModGeneralMenuViewActions extends BxTemplMenuCustom
         if(!$this->_bShowTitle)
             $aItem['bx_if:title']['condition'] = false;
 
-        if($this->_bIsApi)
-            return $aItem;
-        else
-            return parent::_getMenuItemDefault ($aItem);
+        return parent::_getMenuItemDefault ($aItem);
+    }
+
+    protected function _getMenuItemDefaultApi($aItem)
+    {
+        if(($mixedResult = $this->_rewriteMenuItem($aItem)) !== false)
+            return $mixedResult;
+
+        return parent::_getMenuItemDefaultApi($aItem);
     }
 
     protected function _getMenuItemView($aItem, $aParams = array())
@@ -656,6 +667,15 @@ class BxBaseModGeneralMenuViewActions extends BxTemplMenuCustom
         else
             return $this->_getMenuItemDefault($aItem);
     }
+
+    protected function _rewriteMenuItem($aItem, $aExtrasAddon = [])
+    {
+        return parent::_rewriteMenuItem($aItem, [
+            'module' => $this->_sModule,
+            'content_id' => $this->_iContentId,
+            'content_data' => $this->_aContentInfo,
+        ]);
+    }
 }
 
 /** @} */

+ 41 - 0
template/scripts/BxBaseMenuCustom.php

@@ -144,6 +144,47 @@ class BxBaseMenuCustom extends BxTemplMenuMoreAuto
     {
         return $aItem;
     }
+    
+    protected function _rewriteMenuItem ($aItem, $aExtrasAddon = [])
+    {
+        $mixedResult = false;
+
+        $aExtras = array_merge([
+            'menu' => $this->_sObject, 
+            'menu_object' => $this, 
+            'item' => $aItem,
+            'res' => &$mixedResult,
+        ], $aExtrasAddon);
+
+        /**
+         * @hooks
+         * @hookdef hook-bx_base_general-menu_custom_item '{module_name}', 'menu_custom_item' - hook to override menu item
+         * - $unit_name - module name
+         * - $action - equals `menu_custom_item`
+         * - $object_id - not used
+         * - $sender_id - not used
+         * - $extra_params - array of additional params with the following array keys:
+         *      - `menu` - [string] menu name
+         *      - `menu_object` - [object] an instance of menu, @see BxDolMenu
+         *      - `item` - [array] menu item array as key&value pairs
+         *      - `module` - [string] module name
+         *      - `content_id` - [int] content id
+         *      - `content_data` - [array] content info array as key&value pairs
+         *      - `res` - [string] by ref, menu item code, can be overridden in hook processing
+         * @hook @ref hook-bx_base_general-menu_custom_item
+         */
+        bx_alert($this->_sModule, 'menu_custom_item', 0, 0, $aExtras);
+        
+        /**
+         * @hooks
+         * @hookdef hook-menu-menu_custom_item 'menu', 'menu_custom_item' - hook to override menu item
+         * It's equivalent to @ref hook-bx_base_general-menu_custom_item
+         * @hook @ref hook-menu-menu_custom_item
+         */
+        bx_alert('menu', 'menu_custom_item', 0, 0, $aExtras);
+
+        return $mixedResult;
+    }
 
     protected function _getTmplContentItem()
     {