Skip to content

Commit

Permalink
Ticket unacms#3787 - Menus: Save collapsed state selected by user.
Browse files Browse the repository at this point in the history
  • Loading branch information
AntonLV committed May 3, 2022
1 parent d511934 commit 621dcfb
Show file tree
Hide file tree
Showing 16 changed files with 151 additions and 56 deletions.
82 changes: 72 additions & 10 deletions inc/classes/BxDolMenu.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ class BxDolMenu extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
protected $_aMarkers = array();
protected $_bMultilevel = false;

protected $_sSessionKeyCollapsed;

/**
* Constructor
* @param $aObject array of menu options
Expand All @@ -112,16 +114,19 @@ protected function __construct($aObject)

$this->_bMultilevel = !empty($this->_aObject['set_name']) && $this->_oQuery->isSetMultilevel($this->_aObject['set_name']);

if (isLogged()) {
$oProfile = BxDolProfile::getInstance();
if ($oProfile) {
$this->addMarkers(array(
'member_id' => $oProfile->id(),
'member_display_name' => $oProfile->getDisplayName(),
'member_url' => $oProfile->getUrl(),
'content_id' => $oProfile->getContentId()
));
}
$this->_sSessionKeyCollapsed = 'bx_menu_collapsed_';

$this->addMarkers([
'object' => $this->_sObject
]);

if(isLogged() && ($oProfile = BxDolProfile::getInstance()) !== false) {
$this->addMarkers([
'member_id' => $oProfile->id(),
'member_display_name' => $oProfile->getDisplayName(),
'member_url' => $oProfile->getUrl(),
'content_id' => $oProfile->getContentId()
]);
}
}

Expand Down Expand Up @@ -314,6 +319,63 @@ public function removeMarker ($s)
unset($this->_aMarkers[$s]);
}

public function performActionSetCollapsed($mixedValue)
{
$this->_setCollapsed($this->_sObject, (int)$mixedValue);
}

public function performActionSetCollapsedSubmenu($sMenuItem, $mixedValue)
{
$this->_setCollapsed($this->_sObject . '_' . $sMenuItem, (int)$mixedValue);
}

public function getUserChoiceCollapsed($sObject = '')
{
$iProfile = bx_get_logged_profile_id();
if(!$iProfile)
return false;

if(!$sObject)
$sObject = $this->_sObject;

$sSessionKey = $this->_sSessionKeyCollapsed . $iProfile;
$aCollapsed = BxDolSession::getInstance()->getValue($sSessionKey);
if(!isset($aCollapsed[$sObject]))
return false;

return (int)$aCollapsed[$sObject];
}

public function getUserChoiceCollapsedSubmenu($mixedItem, $sObject = '')
{
if(!$sObject)
$sObject = $this->_sObject;

if(is_array($mixedItem) && isset($mixedItem['name']))
$sObject .= '_' . $mixedItem['name'];
else if(is_string($mixedItem))
$sObject .= '_' . $mixedItem;

return $this->getUserChoiceCollapsed($sObject);
}

protected function _setCollapsed($sName, $mixedValue)
{
$iProfile = bx_get_logged_profile_id();
if(!$iProfile)
return;

$oSession = BxDolSession::getInstance();
$sSessionKey = $this->_sSessionKeyCollapsed . $iProfile;

$aCollapsed = $oSession->getValue($sSessionKey);
if(!is_array($aCollapsed))
$aCollapsed = [];

$aCollapsed[$sName] = $mixedValue;
$oSession->setValue($sSessionKey, $aCollapsed);
}

/**
* Check if menu items is selected.
* @param $a menu item array
Expand Down
28 changes: 26 additions & 2 deletions inc/js/functions.js
Original file line number Diff line number Diff line change
Expand Up @@ -688,11 +688,35 @@ function bx_menu_show_live_update(oData) {
}
}

function bx_menu_show_more_less(oLink, sSelectorParent) {
function bx_menu_show_more_less(oLink, sMenu, sSelectorParent) {
if(!sSelectorParent)
sSelectorParent = 'ul';

$(oLink).parents(sSelectorParent + ':first').find('.bx-mi-aux, .bx-psmi-show-more, .bx-psmi-show-less').toggle('bx-mi-hidden');
var sClass = 'bx-mi-hidden';
$(oLink).parents(sSelectorParent + ':first').find('.bx-mi-aux, .bx-psmi-show-more, .bx-psmi-show-less').toggleClass(sClass);

$.get(sUrlRoot + 'menu.php', {
o: sMenu,
a: 'set_collapsed',
v: $(oLink).parents(sSelectorParent + ':first').find('.bx-mi-aux').hasClass(sClass) ? 1 : 0
});
}

function bx_menu_toggle(oLink, sMenu, sMenuItem, sSelectorParent) {
if(!sSelectorParent)
sSelectorParent = 'li';

var sClass = 'bx-mi-collapsed';
var oParent = $(oLink).parents(sSelectorParent + ':first');

oParent.toggleClass(sClass);

$.get(sUrlRoot + 'menu.php', {
o: sMenu,
a: 'set_collapsed_submenu',
i: sMenuItem,
v: oParent.hasClass(sClass) ? 1 : 0
});
}

/**
Expand Down
12 changes: 12 additions & 0 deletions menu.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,18 @@
if (!$oMenu)
exit;

$sAction = 'performAction' . bx_gen_method_name(bx_process_input(bx_get('a')));
if (method_exists($oMenu, $sAction)) {
$aParams = [];
if(($mixedValue = bx_get('i')) !== false)
$aParams[] = bx_process_input(bx_get('i')); //--- item name
if(($mixedValue = bx_get('v')) !== false)
$aParams[] = bx_process_input(bx_get('v')); //--- some value

call_user_func_array([$oMenu, $sAction], $aParams);
exit;
}

header('Content-type: text/html; charset=utf-8');
echo $oMenu->getCode ();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ import url(../../../../../timeline/template/css/view.css);
.bx-tl-menu-feeds.bx-menu-ver li .bx-menu-hide {
display: inline;
}
.bx-tl-menu-feeds.bx-menu-ver li.bx-menu-item-collapsed .bx-menu-show {
.bx-tl-menu-feeds.bx-menu-ver li.bx-mi-collapsed .bx-menu-show {
display: inline;
}
.bx-tl-menu-feeds.bx-menu-ver li.bx-menu-item-collapsed .bx-menu-hide {
.bx-tl-menu-feeds.bx-menu-ver li.bx-mi-collapsed .bx-menu-hide {
display: none;
}
.bx-tl-menu-feeds.bx-menu-ver li.bx-menu-item-collapsed .bx-menu-item-subitems {
.bx-tl-menu-feeds.bx-menu-ver li.bx-mi-collapsed .bx-menu-item-subitems {
display: none;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
<bx_repeat:menu_items>
<li class="bx-menu-item bx-menu-item-__name__ __class_add__ text-sm font-medium">
<div class="bx-menu-item-cnt">
<div class="bx-menu-item-link flex items-center justify-between p-2 text-gray-600 dark:text-gray-300 hover:bg-gray-200 dark:hover:text-gray-100 dark:hover:bg-gray-700 hover:text-gray-900 rounded-md">
<div class="bx-menu-item-link bx-stl-mil group">
<a class="flex items-center w-full truncate" href="__link__" onclick="__onclick__"__attrs__>
<bx_include_auto:menu_icon.html />
<span class="bx-menu-item-title ml-2 truncate">__title__</span>
<span class="bx-menu-item-title bx-stl-mit">__title__</span>
</a>
<bx_if:addon>
<div class="bx-menu-addon pl-2">
<div class="bx-menu-addon bx-stl-mia flex-none group-hover:text-gray-800 dark:group-hover:text-gray-100">
<div class="bx-menu-addon-cnt bx-def-label menu">__addon__</div>
</div>
</bx_if:addon>
Expand Down
6 changes: 3 additions & 3 deletions modules/boonex/artificer/data/template/system/css/menu.css
Original file line number Diff line number Diff line change
Expand Up @@ -177,13 +177,13 @@ div.bx-popup-menu-main.sys-add-content ul {
.bx-menu-ver.bx-menu-object-sys_profile_followings li .bx-menu-hide {
display: inline;
}
.bx-menu-ver.bx-menu-object-sys_profile_followings li.bx-menu-item-collapsed .bx-menu-show {
.bx-menu-ver.bx-menu-object-sys_profile_followings li.bx-mi-collapsed .bx-menu-show {
display: inline;
}
.bx-menu-ver.bx-menu-object-sys_profile_followings li.bx-menu-item-collapsed .bx-menu-hide {
.bx-menu-ver.bx-menu-object-sys_profile_followings li.bx-mi-collapsed .bx-menu-hide {
display: none;
}
.bx-menu-ver.bx-menu-object-sys_profile_followings li.bx-menu-item-collapsed .bx-menu-item-subitems {
.bx-menu-ver.bx-menu-object-sys_profile_followings li.bx-mi-collapsed .bx-menu-item-subitems {
display: none;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<span class="bx-menu-item-title bx-stl-mit" sidebar-toggle-item>__title__</span>
</a>
<span class="bx-menu-collapse pl-2" sidebar-toggle-item>
<a href="javascript:void(0)" onclick="javascript:bx_toggle_pf(this)">
<a href="javascript:void(0)" onclick="javascript:bx_menu_toggle(this, '__object__', '__name__')">
<i class="sys-icon chevron-up bx-menu-hide"></i>
<i class="sys-icon chevron-down bx-menu-show"></i>
</a>
Expand All @@ -22,9 +22,4 @@
</div>
</li>
</bx_repeat:menu_items>
</ul>
<script language="javascript">
function bx_toggle_pf(oLink) {
$(oLink).parents('li:first').toggleClass('bx-menu-item-collapsed');
}
</script>
</ul>
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<bx_repeat:menu_items>
<li class="bx-menu-subitem bx-menu-subitem-__name__ __class_add__">
<div class="bx-menu-item-cnt bx-stl-mil">
<a class="flex items-center truncate" href="__link__" onclick="__onclick__"__attrs__>
<a class="flex items-center pl-2 truncate" href="__link__" onclick="__onclick__"__attrs__>
<span class="bx-menu-item-icon bx-stl-mii group-hover:text-gray-700 dark:group-hover:text-gray-300">
<bx_include_auto:menu_icon.html />
</span>
Expand Down
5 changes: 3 additions & 2 deletions modules/boonex/timeline/classes/BxTimelineTemplate.php
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,11 @@ public function getAddedJs($sType = '', $bDynamic = false)

public function getJsCodeView($aParams = array(), $bWrap = true, $bDynamic = false)
{
$aParams = array_merge(array(
$aParams = array_merge([
'sObjNameMenuFeeds' => $this->_oConfig->getObject('menu_feeds'),
'bInfScroll' => $this->_oConfig->isInfiniteScroll(),
'iInfScrollAutoPreloads' => $this->_oConfig->getAutoPreloads(),
), $aParams);
], $aParams);

return parent::getJsCode('view', $aParams, $bWrap, $bDynamic);
}
Expand Down
3 changes: 2 additions & 1 deletion modules/boonex/timeline/js/view.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ function BxTimelineView(oOptions) {
this._sActionsUri = oOptions.sActionUri;
this._sActionsUrl = oOptions.sActionUrl;
this._sObjName = oOptions.sObjName == undefined ? 'oTimelineView' : oOptions.sObjName;
this._sObjNameMenuFeeds = oOptions.sObjNameMenuFeeds == undefined ? 'bx_timeline_menu_feeds' : oOptions.sObjNameMenuFeeds;
this._sName = oOptions.sName == undefined ? '' : oOptions.sName;
this._sView = oOptions.sView == undefined ? 'timeline' : oOptions.sView;
this._sType = oOptions.sType == undefined ? 'public' : oOptions.sType;
Expand Down Expand Up @@ -448,7 +449,7 @@ BxTimelineView.prototype.changeFeedFilters = function(oLink, oRequestParams)

BxTimelineView.prototype.toggleMenuItemFeeds = function(oSource)
{
$(oSource).parents('li:first').toggleClass('bx-menu-item-collapsed');
bx_menu_toggle(oSource, this._sObjNameMenuFeeds);
};

BxTimelineView.prototype.onFilterByModuleChange = function(oSource)
Expand Down
6 changes: 3 additions & 3 deletions modules/boonex/timeline/template/css/view.css
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@
.bx-tl-menu-feeds.bx-menu-ver li .bx-menu-hide {
display: inline;
}
.bx-tl-menu-feeds.bx-menu-ver li.bx-menu-item-collapsed .bx-menu-show {
.bx-tl-menu-feeds.bx-menu-ver li.bx-mi-collapsed .bx-menu-show {
display: inline;
}
.bx-tl-menu-feeds.bx-menu-ver li.bx-menu-item-collapsed .bx-menu-hide {
.bx-tl-menu-feeds.bx-menu-ver li.bx-mi-collapsed .bx-menu-hide {
display: none;
}
.bx-tl-menu-feeds.bx-menu-ver li.bx-menu-item-collapsed .bx-menu-item-subitems {
.bx-tl-menu-feeds.bx-menu-ver li.bx-mi-collapsed .bx-menu-item-subitems {
display: none;
}
.bx-tl-menu-feeds.bx-menu-ver li .bx-menu-subitem .bx-menu-item-cnt {
Expand Down
6 changes: 3 additions & 3 deletions template/css/menu.css
Original file line number Diff line number Diff line change
Expand Up @@ -959,13 +959,13 @@ ul.bx-menu-btns-icon-hor li:last-child .bx-btn {
.bx-menu-ver.bx-menu-object-sys_profile_followings li .bx-menu-hide {
display: inline;
}
.bx-menu-ver.bx-menu-object-sys_profile_followings li.bx-menu-item-collapsed .bx-menu-show {
.bx-menu-ver.bx-menu-object-sys_profile_followings li.bx-mi-collapsed .bx-menu-show {
display: inline;
}
.bx-menu-ver.bx-menu-object-sys_profile_followings li.bx-menu-item-collapsed .bx-menu-hide {
.bx-menu-ver.bx-menu-object-sys_profile_followings li.bx-mi-collapsed .bx-menu-hide {
display: none;
}
.bx-menu-ver.bx-menu-object-sys_profile_followings li.bx-menu-item-collapsed .bx-menu-item-subitems {
.bx-menu-ver.bx-menu-object-sys_profile_followings li.bx-mi-collapsed .bx-menu-item-subitems {
display: none;
}

Expand Down
9 changes: 2 additions & 7 deletions template/menu_profile_followings.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<span class="bx-def-margin-sec-left-auto">__title__</span>
</a>
<span class="bx-menu-collapse bx-def-padding-sec-left">
<a href="javascript:void(0)" onclick="bx_toggle_pf(this)">
<a href="javascript:void(0)" onclick="javascript:bx_menu_toggle(this, '__object__', '__name__')">
<i class="sys-icon chevron-up bx-menu-hide"></i>
<i class="sys-icon chevron-down bx-menu-show"></i>
</a>
Expand All @@ -20,9 +20,4 @@
</div>
</li>
</bx_repeat:menu_items>
</ul>
<script language="javascript">
function bx_toggle_pf(oLink) {
$(oLink).parents('li:first').toggleClass('bx-menu-item-collapsed');
}
</script>
</ul>
14 changes: 8 additions & 6 deletions template/scripts/BxBaseMenu.php
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,8 @@ protected function _getMenuItem ($a)
if (!$this->_isVisible($a))
return false;

$a['object'] = $this->_sObject;

$a['title'] = _t($a['title']);
$a['bx_if:title'] = array(
'condition' => !empty($a['title']),
Expand Down Expand Up @@ -185,9 +187,6 @@ protected function _getMenuItem ($a)
list ($sIcon, $sIconUrl, $sIconA, $sIconHtml) = $this->_getMenuIcon($a);

$a['class_add'] = $this->_isSelected($a) ? 'bx-menu-tab-active' : '';



$a['class_add'] .= $this->_getVisibilityClass($a);

$a['link'] = isset($a['link']) ? $this->_oPermalinks->permalink($a['link']) : 'javascript:void(0);';
Expand All @@ -207,7 +206,7 @@ protected function _getMenuItem ($a)
'condition' => (bool)$sIcon,
'content' => array('icon' => $sIcon),
);
$a['bx_if:icon-html'] = array (
$a['bx_if:icon-html'] = array (
'condition' => (bool)$sIconHtml,
'content' => array('icon' => $sIconHtml),
);
Expand All @@ -232,8 +231,11 @@ protected function _getMenuItem ($a)
$aTmplVarsSubitems = array('subitems' => '');
$bTmplVarsSubitems = $this->_bMultilevel && !empty($a['subitems']);
if($bTmplVarsSubitems) {
if(isset($a['collapsed']) && $a['collapsed'])
$a['class_add'] .= ' bx-menu-item-collapsed';
$sClassCollpsed = 'bx-mi-collapsed';
if(($iCollapsed = $this->getUserChoiceCollapsedSubmenu($a)) !== false)
$a['class_add'] .= $iCollapsed ? ' ' . $sClassCollpsed : '';
else if(isset($a['collapsed']) && $a['collapsed'])
$a['class_add'] .= ' ' . $sClassCollpsed;

$aSubitems = array();
foreach($a['subitems'] as $aSubitem) {
Expand Down
2 changes: 1 addition & 1 deletion template/scripts/BxBaseMenuProfileFollowings.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ protected function getMenuItemsRaw ()
$aIds = $oConnection->getConnectedContentByType($iProfile, array($aItem['module']));

if(empty($aItem['onclick']))
$aMenuItems[$iIndex]['onclick'] = 'bx_toggle_pf(this)';
$aMenuItems[$iIndex]['onclick'] = "javascript:bx_menu_toggle(this, '" . $this->_sObject . "', '" . $aItem['name'] . "')";

$aSubmenu = array();
foreach($aIds as $iId) {
Expand Down
Loading

0 comments on commit 621dcfb

Please sign in to comment.