Browse Source

Ticket #2123 - Core changes.

AntonLV 7 years ago
parent
commit
d33ca789e7

+ 0 - 32
modules/base/groups/classes/BxBaseModGroupsMenuView.php

@@ -14,42 +14,10 @@
  */
 class BxBaseModGroupsMenuView extends BxBaseModProfileMenuView
 {
-
     public function __construct($aObject, $oTemplate = false)
     {
         parent::__construct($aObject, $oTemplate);
     }
-    
-    public function setContentId($iContentId)
-    {
-        parent::setContentId($iContentId);
-
-        if(!$this->_oProfile || !isLogged())
-            return;
-
-        $CNF = &$this->_oModule->_oConfig->CNF;
-
-        $oConn = isset($CNF['OBJECT_CONNECTIONS']) ? BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTIONS']) : false;
-        if ($oConn && $oConn->isConnectedNotMutual(bx_get_logged_profile_id(), $this->_oProfile->id())) {
-            $this->addMarkers(array(
-                'title_add_fan' => _t($CNF['T']['menu_item_title_become_fan_sent']),
-                'title_remove_fan' => _t($CNF['T']['menu_item_title_leave_group_cancel_request']),
-            ));
-        } 
-        else {
-            if (isset($CNF['T']['menu_item_title_become_fan']) && isset($CNF['T']['menu_item_title_leave_group'])){
-                $this->addMarkers(array(
-                    'title_add_fan' => _t($CNF['T']['menu_item_title_become_fan']),
-                    'title_remove_fan' => _t($CNF['T']['menu_item_title_leave_group']),
-                ));
-            }
-        }
-
-        if ($oConn && $this->_oModule->isFan($this->_aContentInfo[$CNF['FIELD_ID']])) {
-            $a = $oConn->getConnectedInitiators($this->_oProfile->id());
-            $this->addMarkers(array('recipients' => implode(',', $a)));
-        }
-    }
 }
 
 /** @} */

+ 55 - 0
modules/base/groups/classes/BxBaseModGroupsMenuViewActions.php

@@ -0,0 +1,55 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    BaseGroups Base classes for groups modules
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * 'View group' actions menu.
+ */
+class BxBaseModGroupsMenuViewActions extends BxBaseModProfileMenuViewActions
+{
+
+    public function __construct($aObject, $oTemplate = false)
+    {
+        parent::__construct($aObject, $oTemplate);
+    }
+    
+    public function setContentId($iContentId)
+    {
+        parent::setContentId($iContentId);
+
+        if(!$this->_oProfile || !isLogged())
+            return;
+
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $oConn = isset($CNF['OBJECT_CONNECTIONS']) ? BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTIONS']) : false;
+        if ($oConn && $oConn->isConnectedNotMutual(bx_get_logged_profile_id(), $this->_oProfile->id())) {
+            $this->addMarkers(array(
+                'title_add_fan' => _t($CNF['T']['menu_item_title_become_fan_sent']),
+                'title_remove_fan' => _t($CNF['T']['menu_item_title_leave_group_cancel_request']),
+            ));
+        } 
+        else {
+            if (isset($CNF['T']['menu_item_title_become_fan']) && isset($CNF['T']['menu_item_title_leave_group'])){
+                $this->addMarkers(array(
+                    'title_add_fan' => _t($CNF['T']['menu_item_title_become_fan']),
+                    'title_remove_fan' => _t($CNF['T']['menu_item_title_leave_group']),
+                ));
+            }
+        }
+
+        if ($oConn && $this->_oModule->isFan($this->_aContentInfo[$CNF['FIELD_ID']])) {
+            $a = $oConn->getConnectedInitiators($this->_oProfile->id());
+            $this->addMarkers(array('recipients' => implode(',', $a)));
+        }
+    }
+}
+
+/** @} */

+ 1 - 0
modules/base/groups/template/menu_main_submenu.html

@@ -0,0 +1 @@
+<bx_include_base:../modules/base/profile/template/menu_main_submenu.html />

+ 22 - 9
modules/base/profile/classes/BxBaseModProfileMenuView.php

@@ -12,13 +12,23 @@
 /**
  * View profile entry menu
  */
-class BxBaseModProfileMenuView extends BxBaseModGeneralMenuView
+class BxBaseModProfileMenuView extends BxTemplMenuMoreAuto
 {
+    protected $_sModule;
+    protected $_oModule;
+
+    protected $_iContentId;
+    protected $_aContentInfo;
+
     protected $_oProfile;
     protected $_aProfileInfo;
 
     public function __construct($aObject, $oTemplate = false)
     {
+        $this->_oModule = BxDolModule::getInstance($this->_sModule);
+        if(!$oTemplate)
+            $oTemplate = $this->_oModule->_oTemplate;
+
         parent::__construct($aObject, $oTemplate);
 
         $CNF = $this->_oModule->_oConfig->CNF;
@@ -34,8 +44,8 @@ class BxBaseModProfileMenuView extends BxBaseModGeneralMenuView
     public function setContentId($iContentId)
     {
         $this->_iContentId = (int)$iContentId;
-        $this->_oProfile = BxDolProfile::getInstanceByContentAndType($this->_iContentId, $this->MODULE);
 
+        $this->_oProfile = BxDolProfile::getInstanceByContentAndType($this->_iContentId, $this->_sModule);
         if(!$this->_oProfile) 
             return;
 
@@ -46,14 +56,17 @@ class BxBaseModProfileMenuView extends BxBaseModGeneralMenuView
         $this->addMarkers(array(
             'profile_id' => $this->_oProfile->id()
         ));
+    }
 
-        $aTitles = $this->_oModule->serviceGetConnectionButtonsTitles($this->_oProfile->id());
-        if($aTitles) {
-            $this->addMarkers(array(
-                'title_add_friend' => $aTitles['add'],
-                'title_remove_friend' => $aTitles['remove'],
-            ));
-        }
+    /**
+     * 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);
     }
 }
 

+ 60 - 0
modules/base/profile/classes/BxBaseModProfileMenuViewActions.php

@@ -0,0 +1,60 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    BaseProfile Base classes for profile modules
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+/**
+ * View profile entry actions menu
+ */
+class BxBaseModProfileMenuViewActions extends BxBaseModGeneralMenuView
+{
+    protected $_oProfile;
+    protected $_aProfileInfo;
+
+    public function __construct($aObject, $oTemplate = false)
+    {
+        parent::__construct($aObject, $oTemplate);
+
+        $CNF = $this->_oModule->_oConfig->CNF;
+
+        $iContentId = bx_process_input(bx_get('id'), BX_DATA_INT);
+        if(empty($iContentId) && bx_get('profile_id') !== false)
+            $iContentId = BxDolProfile::getInstance(bx_process_input(bx_get('profile_id'), BX_DATA_INT))->getContentId();
+
+        if(!empty($iContentId))
+            $this->setContentId($iContentId);
+    }
+
+    public function setContentId($iContentId)
+    {
+        $this->_iContentId = (int)$iContentId;
+        $this->_oProfile = BxDolProfile::getInstanceByContentAndType($this->_iContentId, $this->MODULE);
+
+        if(!$this->_oProfile) 
+            return;
+
+        $this->_aContentInfo = $this->_oModule->_oDb->getContentInfoById($this->_iContentId);
+        $this->_aProfileInfo = $this->_oProfile->getInfo();     
+
+        $this->addMarkers($this->_aProfileInfo);
+        $this->addMarkers(array(
+            'profile_id' => $this->_oProfile->id()
+        ));
+
+        $aTitles = $this->_oModule->serviceGetConnectionButtonsTitles($this->_oProfile->id());
+        if($aTitles) {
+            $this->addMarkers(array(
+                'title_add_friend' => $aTitles['add'],
+                'title_remove_friend' => $aTitles['remove'],
+            ));
+        }
+    }
+}
+
+/** @} */

+ 2 - 0
modules/base/profile/classes/BxBaseModProfilePageEntry.php

@@ -58,6 +58,8 @@ class BxBaseModProfilePageEntry extends BxBaseModGeneralPageEntry
             return;
         }
 
+        BxDolTemplate::getInstance()->addInjection('injection_main_class', 'text', 'bx-base-profile-view');
+
         // select view profile submenu
         $oMenuSubmenu = BxDolMenu::getObjectInstance('sys_site_submenu');
         if($oMenuSubmenu)

+ 9 - 1
modules/base/profile/template/css/main.css

@@ -293,6 +293,11 @@ a.bx-base-pofile-cover-thumb p.bx-base-pofile-unit-thumb.bx-def-ava-big-size {
     width: 100%;
 }
 
+.bx-base-profile-view .bx-menu-main-bar {
+    overflow: visible;
+}
+
+.bx-menu-main-bar ul.bx-menu-main-submenu.bx-menu-more-auto,
 .bx-base-pofile-cover-actions ul.bx-menu-hor.bx-menu-more-auto {
     display: -webkit-flex;
     display: flex;
@@ -301,7 +306,10 @@ a.bx-base-pofile-cover-thumb p.bx-base-pofile-unit-thumb.bx-def-ava-big-size {
     -webkit-justify-content: flex-start;
     justify-content: flex-start;
 }
-
+.bx-menu-main-bar ul.bx-menu-main-submenu.bx-menu-more-auto {
+    -webkit-justify-content: center;
+    justify-content: center;
+}
 .bx-base-pofile-cover-actions .bx-menu-hor li.bx-menu-item {
     white-space: nowrap;
 }

+ 6 - 0
modules/base/profile/template/menu_main_submenu.html

@@ -0,0 +1,6 @@
+<ul id="bx-menu-main-submenu" class="bx-menu-main-submenu<bx_if:show_more_auto_class> bx-menu-more-auto</bx_if:show_more_auto_class> bx-menu-object-__object__ bx-clearfix">
+    <bx_repeat:menu_items>
+        <li class="bx-menu-item bx-menu-item-__name__ bx-def-padding-sec-leftright bx-def-color-bg-hl-hover bx-def-box-sizing __class_add__"><a href="__link__" target="__target__" onclick="__onclick__">__title__</a>__popup__</li>
+    </bx_repeat:menu_items>
+</ul>
+__js_code__

+ 1 - 1
template/_sub_header.html

@@ -1,6 +1,6 @@
 <bx_include_auto:_header.html />
 
-<div class="bx-main">
+<div class="bx-main <bx_injection:injection_main_class />">
 
 	<bx_injection:top />
 

+ 12 - 1
template/css/menu.css

@@ -167,7 +167,6 @@ ul.bx-menu-custom-ver {
 }
 
 #bx-menu-main-submenu {
-    display:inline-block;
     line-height:2.5rem;
     vertical-align:top;
 }
@@ -634,6 +633,7 @@ ul.bx-menu-btns-icon-hor li:last-child .bx-btn {
 
 
 /*--- Custom Menu with More Auto ---*/
+.bx-menu-main-submenu.bx-menu-more-auto,
 .bx-menu-custom.bx-menu-hor.bx-menu-more-auto,
 .bx-menu-custom.bx-menu-hor.bx-menu-submenu-more-auto {
     position: relative;
@@ -644,6 +644,7 @@ ul.bx-menu-btns-icon-hor li:last-child .bx-btn {
     -webkit-justify-content: flex-start;
     justify-content: flex-start;
 }
+.bx-menu-main-submenu.bx-menu-more-auto,
 .bx-menu-custom.bx-menu-hor.bx-menu-more-auto {
     -webkit-flex-wrap: nowrap;
     flex-wrap: nowrap;
@@ -656,6 +657,7 @@ ul.bx-menu-btns-icon-hor li:last-child .bx-btn {
 
     min-width: 18rem;
 }
+.bx-menu-main-submenu.bx-menu-more-auto .bx-menu-item,
 .bx-menu-custom.bx-menu-hor.bx-menu-more-auto .bx-menu-item {
     position: relative;
     display: block;
@@ -663,10 +665,17 @@ ul.bx-menu-btns-icon-hor li:last-child .bx-btn {
     padding: 8px;
     padding: 0.5rem;
 }
+.bx-menu-main-submenu.bx-menu-more-auto .bx-menu-item.bx-menu-item-more-auto > span,
 .bx-menu-custom.bx-menu-hor.bx-menu-more-auto .bx-menu-item.bx-menu-item-more-auto > span {
     display: block;
     margin: 0;
 }
+.bx-menu-main-submenu.bx-menu-more-auto .bx-menu-item > a:last-child,
+.bx-menu-main-submenu.bx-menu-more-auto .bx-menu-item > a.bx-btn:last-child,
+.bx-menu-main-submenu.bx-menu-more-auto .bx-menu-item > span:last-child,
+.bx-menu-main-submenu.bx-menu-more-auto .bx-menu-item:last-child > a,
+.bx-menu-main-submenu.bx-menu-more-auto .bx-menu-item:last-child > a.bx-btn,
+.bx-menu-main-submenu.bx-menu-more-auto .bx-menu-item:last-child > span,
 .bx-menu-custom.bx-menu-hor.bx-menu-more-auto .bx-menu-item > a:last-child,
 .bx-menu-custom.bx-menu-hor.bx-menu-more-auto .bx-menu-item > a.bx-btn:last-child,
 .bx-menu-custom.bx-menu-hor.bx-menu-more-auto .bx-menu-item > span:last-child,
@@ -675,9 +684,11 @@ ul.bx-menu-btns-icon-hor li:last-child .bx-btn {
 .bx-menu-custom.bx-menu-hor.bx-menu-more-auto .bx-menu-item:last-child > span {
     margin-right: 0;
 }
+.bx-menu-main-submenu.bx-menu-more-auto .bx-menu-item.bx-menu-item-more-auto,
 .bx-menu-custom.bx-menu-hor.bx-menu-more-auto .bx-menu-item.bx-menu-item-more-auto {
     display: none;
 }
+.bx-menu-main-submenu.bx-menu-more-auto .bx-menu-submenu-more-auto .bx-menu-item .bx-btn,
 .bx-menu-custom.bx-menu-hor.bx-menu-more-auto .bx-menu-submenu-more-auto .bx-menu-item .bx-btn {
     position: relative;
     display: -webkit-flex;

+ 2 - 0
template/menu_item_more.html

@@ -0,0 +1,2 @@
+__item__
+__popup__

+ 0 - 0
template/menu_custom_item_more_popup.html → template/menu_item_more_popup.html


+ 2 - 77
template/scripts/BxBaseMenuCustom.php

@@ -8,21 +8,10 @@
  * @{
  */
 
-define('BX_DEF_MENU_CUSTOM_ITEM_MORE_AUTO', 'more-auto');
-
-class BxBaseMenuCustom extends BxTemplMenu
+class BxBaseMenuCustom extends BxTemplMenuMoreAuto
 {
     protected static $_sTmplContentItem;
 
-    protected $_sTmplNameCustomItemMore;
-    protected $_sTmplNameCustomItemMorePopup;
-
-    protected $_bMoreAuto;
-    protected $_iMoreAutoItemsStatic;
-    protected $_sJsObjectMoreAuto;
-
-    protected $_aHtmlIds;
-
     public function __construct($aObject, $oTemplate = false)
     {
         parent::__construct($aObject, $oTemplate);
@@ -30,61 +19,7 @@ class BxBaseMenuCustom extends BxTemplMenu
         if(empty(self::$_sTmplContentItem))
             self::$_sTmplContentItem = $this->_oTemplate->getHtml('menu_custom_item.html');
 
-        $this->_sTmplNameCustomItemMore = 'menu_custom_item_more.html';
-        $this->_sTmplNameCustomItemMorePopup = 'menu_custom_item_more_popup.html';
-
-        $this->_bMoreAuto = false;
-        $this->_iMoreAutoItemsStatic = 1;
-        $this->_sJsObjectMoreAuto = 'oMenuMoreAuto' . bx_gen_method_name($this->_sObject);
-
-        $sPrefix = str_replace('_', '-', $this->_sObject);
-        $this->_aHtmlIds = array(
-            'more_auto_popup' => $sPrefix . '-ma-popup',
-        );
-    }
-
-    public function getCode ()
-    {
-        $sResult = parent::getCode();
-
-        if($this->_bMoreAuto)
-            $this->_oTemplate->addJs(array('BxDolMenuMoreAuto.js'));
-
-        return $sResult;
-    }
-
-    public function getMenuItems()
-    {
-        $aResult = parent::getMenuItems();
-
-        $sItem = BX_DEF_MENU_CUSTOM_ITEM_MORE_AUTO;
-        if(!empty($this->_aObject['menu_items'][$sItem]) && is_array($this->_aObject['menu_items'][$sItem]) && (int)$this->_aObject['menu_items'][$sItem]['active'] == 1)
-            $this->_bMoreAuto = true;
-
-        return $aResult;
-    }
-
-    protected function _getTemplateVars()
-    {
-        $aResult = array_merge(parent::_getTemplateVars(), array(
-            'bx_if:show_more_auto_class' => array(
-                'condition' => $this->_bMoreAuto,
-                'content' => array()
-            ),
-            'js_code' => $this->_bMoreAuto ? $this->_getJsCodeMoreAuto() : ''
-        ));
-
-        return $aResult;
-    }
-
-    protected function _getJsCodeMoreAuto()
-    {
-        $aParams = array(
-            'sObject' => $this->_sObject,
-            'iItemsStatic' => $this->_iMoreAutoItemsStatic,
-            'aHtmlIds' => $this->_aHtmlIds
-        );
-        return $this->_oTemplate->_wrapInTagJsCode("if(!" . $this->_sJsObjectMoreAuto . ") var " . $this->_sJsObjectMoreAuto . " = new BxDolMenuMoreAuto(" . json_encode($aParams) . "); " . $this->_sJsObjectMoreAuto . ".init();");
+        $this->_sTmplNameItemMore = 'menu_custom_item_more.html';
     }
 
     protected function _getMenuItem ($aItem)
@@ -155,16 +90,6 @@ class BxBaseMenuCustom extends BxTemplMenu
         return $this->_oTemplate->parseHtmlByContent($this->_getTmplContentItem(), $aItem);
     }
 
-    protected function _getTmplNameItemMore()
-    {
-        return $this->_sTmplNameCustomItemMore;
-    }
-
-    protected function _getTmplNameItemMorePopup()
-    {
-        return $this->_sTmplNameCustomItemMorePopup;
-    }
-
     protected function _getTmplContentItem()
     {
         return self::$_sTmplContentItem;

+ 118 - 0
template/scripts/BxBaseMenuMoreAuto.php

@@ -0,0 +1,118 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaBaseView UNA Base Representation Classes
+ *
+ * @{
+ */
+
+define('BX_DEF_MENU_ITEM_MORE_AUTO', 'more-auto');
+
+class BxBaseMenuMoreAuto extends BxTemplMenu
+{
+    protected $_sTmplNameItemMore;
+    protected $_sTmplNameItemMorePopup;
+
+    protected $_bMoreAuto;
+    protected $_iMoreAutoItemsStatic;
+    protected $_sJsObjectMoreAuto;
+
+    protected $_aHtmlIds;
+
+    public function __construct($aObject, $oTemplate = false)
+    {
+        parent::__construct($aObject, $oTemplate);
+
+        $this->_sTmplNameItemMore = 'menu_item_more.html';
+        $this->_sTmplNameItemMorePopup = 'menu_item_more_popup.html';
+
+        $this->_bMoreAuto = null;
+        $this->_iMoreAutoItemsStatic = 1;
+        $this->_sJsObjectMoreAuto = 'oMenuMoreAuto' . bx_gen_method_name($this->_sObject);
+
+        $sPrefix = str_replace('_', '-', $this->_sObject);
+        $this->_aHtmlIds = array(
+            'more_auto_popup' => $sPrefix . '-ma-popup',
+        );
+    }
+
+    public function getCode()
+    {
+        $sResult = parent::getCode();
+
+        if($this->_isMoreAuto())
+            $this->_oTemplate->addJs(array('BxDolMenuMoreAuto.js'));
+
+        return $sResult;
+    }
+
+    protected function _isMoreAuto()
+    {
+        if(is_bool($this->_bMoreAuto))
+            return $this->_bMoreAuto;
+
+        $aResult = $this->getMenuItems();
+
+        $sItem = BX_DEF_MENU_ITEM_MORE_AUTO;
+        if(!empty($this->_aObject['menu_items'][$sItem]) && is_array($this->_aObject['menu_items'][$sItem]) && (int)$this->_aObject['menu_items'][$sItem]['active'] == 1)
+            $this->_bMoreAuto = true;
+        else
+            $this->_bMoreAuto = false;
+
+        return $this->_bMoreAuto;
+    }
+
+    protected function _getTemplateVars()
+    {
+        $bMoreAuto = $this->_isMoreAuto();
+
+        $aResult = array_merge(parent::_getTemplateVars(), array(
+            'bx_if:show_more_auto_class' => array(
+                'condition' => $bMoreAuto,
+                'content' => array()
+            ),
+            'js_code' => $bMoreAuto ? $this->_getJsCodeMoreAuto() : ''
+        ));
+
+        return $aResult;
+    }
+
+    protected function _getJsCodeMoreAuto()
+    {
+        $aParams = array(
+            'sObject' => $this->_sObject,
+            'iItemsStatic' => $this->_iMoreAutoItemsStatic,
+            'aHtmlIds' => $this->_aHtmlIds
+        );
+        return $this->_oTemplate->_wrapInTagJsCode("if(!" . $this->_sJsObjectMoreAuto . ") var " . $this->_sJsObjectMoreAuto . " = new BxDolMenuMoreAuto(" . json_encode($aParams) . "); " . $this->_sJsObjectMoreAuto . ".init();");
+    }
+    
+    protected function _getMenuItem ($aItem)
+    {
+        $aItem['popup'] = '';
+
+        if($aItem['name'] != BX_DEF_MENU_ITEM_MORE_AUTO)
+            return parent::_getMenuItem($aItem);
+
+        $aItem['onclick'] = $this->_sJsObjectMoreAuto . '.more(this);';
+        $aItem['popup'] = BxTemplFunctions::getInstance()->transBox($this->_aHtmlIds['more_auto_popup'], $this->_oTemplate->parseHtmlByName($this->_getTmplNameItemMorePopup(), array(
+            'content' => ''
+        )), true);
+
+        return parent::_getMenuItem($aItem);
+    }
+
+    protected function _getTmplNameItemMore()
+    {
+        return $this->_sTmplNameItemMore;
+    }
+
+    protected function _getTmplNameItemMorePopup()
+    {
+        return $this->_sTmplNameItemMorePopup;
+    }
+}
+
+/** @} */