AntonLV 8 tahun lalu
induk
melakukan
30e42910be

+ 9 - 0
inc/classes/BxDolMenu.php

@@ -241,6 +241,15 @@ class BxDolMenu extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         $this->_bDynamicMode = $bDynamicMode;
     }
 
+    /**
+     * Get an arrey of replacable markers.
+     * @return an array with markers
+     */
+    public function getMarkers()
+    {
+        return $this->_aMarkers;
+    }
+    
     /**
      * Add replace markers.
      * @param $a array of markers as key => value

+ 1 - 16
modules/base/general/classes/BxBaseModGeneralMenuView.php

@@ -35,22 +35,7 @@ class BxBaseModGeneralMenuView extends BxTemplMenu
      */
     protected function _isVisible ($a)
     {
-        // default visible settings
-        if (!BxDolAcl::getInstance()->isMemberLevelInSet($a['visible_for_levels']))
-            return false;
-
-        $CNF = $this->_oModule->_oConfig->CNF;
-
-        // get custom function name to check menu item visibility
-        $sFuncCheckAccess = false;
-        if (isset($CNF['MENU_ITEM_TO_METHOD'][$this->_sObject][$a['name']]))
-            $sFuncCheckAccess = $CNF['MENU_ITEM_TO_METHOD'][$this->_sObject][$a['name']];
-
-        // check custom visibility settings defined in module config class
-        if ($sFuncCheckAccess && CHECK_ACTION_RESULT_ALLOWED !== call_user_func_array(array($this->_oModule, $sFuncCheckAccess), isset($this->_aContentInfo) ? array(&$this->_aContentInfo) : array()))
-            return false;
-
-        return true;
+        return $this->_oModule->isMenuItemVisible($this->_sObject, $a, $this->_aContentInfo);
     }
 
     protected function _getMenuItemsCombined ()

+ 30 - 0
modules/base/general/classes/BxBaseModGeneralMenuViewActions.php

@@ -44,6 +44,15 @@ class BxBaseModGeneralMenuViewActions extends BxTemplMenuCustom
         $this->_bShowTitle = false;
     }
 
+    public function addMarkers ($a)
+    {
+        $bResult = parent::addMarkers($a);
+        if($bResult && !empty($this->_oMenuSocialSharing))
+            $this->_oMenuSocialSharing->addMarkers($a);
+
+        return $bResult;
+    }
+
     public function setContentId($iContentId)
     {
         $this->_iContentId = (int)$iContentId;
@@ -53,6 +62,17 @@ class BxBaseModGeneralMenuViewActions extends BxTemplMenuCustom
             $this->addMarkers(array('content_id' => (int)$this->_iContentId));
     }
 
+    /**
+     * Check if menu items is visible with extended checking linked to "allow*" method of particular module
+     * Associated "allow*" method with particular menu item is stored in module config in MENU_ITEM_TO_METHOD array.
+     * @param $a menu item array
+     * @return boolean
+     */
+    protected function _isVisible ($a)
+    {
+        return $this->_oModule->isMenuItemVisible($this->_sObject, $a, $this->_aContentInfo);
+    }
+
     protected function _getMenuItemDefault ($aItem)
     {
         $aItem['class_wrp'] = 'bx-base-general-entity-action' . (!empty($aItem['class_wrp']) ? ' ' . $aItem['class_wrp'] : '');
@@ -281,7 +301,12 @@ class BxBaseModGeneralMenuViewActions extends BxTemplMenuCustom
                 return '';
 
             $this->_oMenuActions = BxDolMenu::getObjectInstance($sObjectMenu);
+            if(!$this->_oMenuActions)
+                return '';
+
             $this->_oMenuActions->setContentId($this->_iContentId);
+
+            $this->addMarkers($this->_oMenuActions->getMarkers());
         }
 
         $aItem = $this->_oMenuActions->getMenuItem($aItem['name']);
@@ -314,7 +339,12 @@ class BxBaseModGeneralMenuViewActions extends BxTemplMenuCustom
                 return '';
 
             $this->_oMenuActionsMore = BxDolMenu::getObjectInstance($CNF['OBJECT_MENU_ACTIONS_VIEW_ENTRY_MORE']);
+            if(!$this->_oMenuActionsMore)
+                return '';
+
             $this->_oMenuActionsMore->setContentId($this->_iContentId);
+            
+            $this->addMarkers($this->_oMenuActionsMore->getMarkers());
         }
 
         $aItem = $this->_oMenuActionsMore->getMenuItem($aItem['name']);

+ 21 - 1
modules/base/general/classes/BxBaseModGeneralModule.php

@@ -565,7 +565,7 @@ class BxBaseModGeneralModule extends BxDolModule
 
         if(!empty($mixedContent)) {
             if(!is_array($mixedContent))
-               $mixedContent = array((int)$mixedContent, array());
+                $mixedContent = array((int)$mixedContent, (method_exists($this->_oDb, 'getContentInfoById')) ? $this->_oDb->getContentInfoById((int)$mixedContent) : array());
         }
         else {
             $mixedContent = $this->_getContent();
@@ -1307,6 +1307,26 @@ class BxBaseModGeneralModule extends BxDolModule
         );
     }
 
+    public function isMenuItemVisible($sObject, &$aItem, &$aContentInfo)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        // default visible settings
+        if(!BxDolAcl::getInstance()->isMemberLevelInSet($aItem['visible_for_levels']))
+            return false;
+
+        // get custom function name to check menu item visibility
+        $sFuncCheckAccess = false;
+        if(isset($CNF['MENU_ITEM_TO_METHOD'][$sObject][$aItem['name']]))
+            $sFuncCheckAccess = $CNF['MENU_ITEM_TO_METHOD'][$sObject][$aItem['name']];
+
+        // check custom visibility settings defined in module config class
+        if($sFuncCheckAccess && CHECK_ACTION_RESULT_ALLOWED !== call_user_func_array(array($this, $sFuncCheckAccess), isset($aContentInfo) ? array(&$aContentInfo) : array()))
+            return false;
+
+        return true;
+    }
+
     public function _isModerator ($isPerformAction = false)
     {
         return CHECK_ACTION_RESULT_ALLOWED === $this->checkAllowedEditAnyEntry ($isPerformAction);

+ 27 - 0
modules/base/groups/classes/BxBaseModGroupsModule.php

@@ -118,6 +118,33 @@ class BxBaseModGroupsModule extends BxBaseModProfileModule
         return $this->_oDb->updateAuthorById($iContentId, $aAdmins ? array_pop($aAdmins) : 0);
     }
 
+    /**
+     * Entry actions and social sharing block
+     */
+    public function serviceEntityAllActions ($mixedContent = false, $aParams = array())
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        if(!empty($mixedContent)) {
+            if(!is_array($mixedContent))
+                $mixedContent = array((int)$mixedContent, (method_exists($this->_oDb, 'getContentInfoById')) ? $this->_oDb->getContentInfoById((int)$mixedContent) : array());
+        }
+        else {
+            $mixedContent = $this->_getContent();
+            if($mixedContent === false)
+                return false;
+        }
+
+        list($iContentId, $aContentInfo) = $mixedContent;
+
+        if(!empty($CNF['FIELD_PICTURE']) && !empty($aContentInfo[$CNF['FIELD_PICTURE']]))
+            $aParams = array_merge(array(
+                'entry_thumb' => (int)$aContentInfo[$CNF['FIELD_PICTURE']]
+            ), $aParams); 
+
+        return parent::serviceEntityAllActions ($mixedContent, $aParams);
+    }
+    
     /**
      * Reset group's author when author profile is deleted
      * @param $iProfileId profile id 

+ 9 - 6
modules/base/profile/classes/BxBaseModProfileTemplate.php

@@ -233,11 +233,14 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
             )), true, true);
         }
 
-        $sMenu = $CNF['OBJECT_MENU_ACTIONS_VIEW_ENTRY'];
-        if(!empty($CNF['OBJECT_MENU_ACTIONS_VIEW_ENTRY_ALL']))
-            $sMenu = $CNF['OBJECT_MENU_ACTIONS_VIEW_ENTRY_ALL'];
-
-        $oMenu = BxTemplMenu::getObjectInstance($sMenu);
+        $sActionsMenu = '';
+        if(empty($CNF['OBJECT_MENU_ACTIONS_VIEW_ENTRY_ALL'])) {
+            $oMenu = BxTemplMenu::getObjectInstance($CNF['OBJECT_MENU_ACTIONS_VIEW_ENTRY']);
+            if($oMenu)
+                $sActionsMenu = $oMenu->getCode();
+        }
+        else 
+            $sActionsMenu = $this->getModule()->serviceEntityAllActions();
 
         // generate html
         $aVars = array (
@@ -246,7 +249,7 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
             'title' => $sTitle,
             //'menu' => BxDolMenu::getObjectInstance($CNF['OBJECT_MENU_SUBMENU_VIEW_ENTRY_COVER'])->getCode(), // TODO: check if menu is used somewhere
 
-            'action_menu' => $oMenu ? $oMenu->getCode() : '',
+            'action_menu' => $sActionsMenu,
 
         	'bx_if:show_ava_image' => array(
                 'condition' => $bUrlAvatar,

+ 5 - 0
modules/base/profile/template/css/main.css

@@ -244,6 +244,11 @@ a.bx-base-pofile-cover-image:hover,
     max-width: 50%;
 }
 
+.bx-base-pofile-cover-actions div.bx-base-general-entity-actions {
+    position: relative;
+    width: 100%;
+}
+
 .bx-base-pofile-cover-actions ul.bx-menu-hor.bx-menu-more-auto {
     -webkit-flex-wrap: nowrap;
     flex-wrap: nowrap;

+ 1 - 0
modules/boonex/events/classes/BxEventsConfig.php

@@ -142,6 +142,7 @@ class BxEventsConfig extends BxBaseModProfileConfig
             'MENU_ITEM_TO_METHOD' => array (
                 'bx_events_view_actions' => $aMenuItems2Methods,
                 'bx_events_view_actions_more' => $aMenuItems2Methods,
+                'bx_events_view_actions_all' => $aMenuItems2Methods,
             ),
 
             // informer messages

+ 1 - 0
modules/boonex/groups/classes/BxGroupsConfig.php

@@ -139,6 +139,7 @@ class BxGroupsConfig extends BxBaseModProfileConfig
             'MENU_ITEM_TO_METHOD' => array (
                 'bx_groups_view_actions' => $aMenuItems2Methods,
                 'bx_groups_view_actions_more' => $aMenuItems2Methods,
+                'bx_groups_view_actions_all' => $aMenuItems2Methods,
             ),
 
             // informer messages

+ 2 - 1
modules/boonex/organizations/classes/BxOrgsConfig.php

@@ -151,9 +151,10 @@ class BxOrgsConfig extends BxBaseModProfileConfig
 
             // menu items which visibility depends on custom visibility checking
             'MENU_ITEM_TO_METHOD' => array (
-        		'bx_organizations_view_submenu' => $this->_aMenuItems2MethodsSubmenu,
+                'bx_organizations_view_submenu' => $this->_aMenuItems2MethodsSubmenu,
                 'bx_organizations_view_actions' => $this->_aMenuItems2MethodsActions,
                 'bx_organizations_view_actions_more' => $this->_aMenuItems2MethodsActions,
+                'bx_organizations_view_actions_all' => $this->_aMenuItems2MethodsActions,
             ),
 
             // informer messages

+ 1 - 0
modules/boonex/persons/classes/BxPersonsConfig.php

@@ -135,6 +135,7 @@ class BxPersonsConfig extends BxBaseModProfileConfig
                 'bx_persons_view_submenu' => $this->_aMenuItems2MethodsSubmenu,
                 'bx_persons_view_actions' => $this->_aMenuItems2MethodsActions,
                 'bx_persons_view_actions_more' => $this->_aMenuItems2MethodsActions,
+                'bx_persons_view_actions_all' => $this->_aMenuItems2MethodsActions,
             ),
 
             // informer messages

+ 1 - 0
modules/boonex/spaces/classes/BxSpacesConfig.php

@@ -141,6 +141,7 @@ class BxSpacesConfig extends BxBaseModProfileConfig
             'MENU_ITEM_TO_METHOD' => array (
                 'bx_spaces_view_actions' => $aMenuItems2Methods,
                 'bx_spaces_view_actions_more' => $aMenuItems2Methods,
+                'bx_spaces_view_actions_all' => $aMenuItems2Methods,
             ),
 
             // informer messages