Changed menu/base stack max/default sort order; Make sure space ;5CAbout is on last position

This commit is contained in:
Lucas Bartholemy 2020-10-08 13:29:57 +02:00
parent 03531aa61d
commit e6aa7cb9e9
5 changed files with 29 additions and 28 deletions

View File

@ -10,11 +10,11 @@ namespace humhub\libs;
class Sort
{
public static function sort(&$arr, $field = 'sortOrder')
public static function sort(&$arr, $field = 'sortOrder', $default = PHP_INT_MAX)
{
usort($arr, function($a, $b) use ($field) {
$sortA = static::getSortValue($a, $field);
$sortB = static::getSortValue($b, $field);
usort($arr, function ($a, $b) use ($field, $default) {
$sortA = static::getSortValue($a, $field, $default);
$sortB = static::getSortValue($b, $field, $default);
if ($sortA == $sortB) {
return 0;
@ -28,14 +28,14 @@ class Sort
return $arr;
}
private static function getSortValue($obj, $field)
private static function getSortValue($obj, $field, $default)
{
if(is_array($obj) && isset($obj[$field])) {
return $obj[$field] === null ? PHP_INT_MAX : $obj[$field];
if (is_array($obj) && isset($obj[$field])) {
return $obj[$field] === null ? $default : $obj[$field];
}
if(property_exists($obj, $field)) {
return $obj->$field === null ? PHP_INT_MAX : $obj->$field;
if (property_exists($obj, $field)) {
return $obj->$field === null ? $default : $obj->$field;
}
return PHP_INT_MAX;

View File

@ -68,7 +68,7 @@ class Menu extends LeftNavigation
'label' => Yii::t('SpaceModule.base', 'About'),
'url' => $this->space->createUrl('/space/space/about'),
'icon' => 'info-circle',
'sortOrder' => 100,
'sortOrder' => 10000,
'isActive' => MenuLink::isActiveState('space', 'space', ['about']),
]));
}

View File

@ -29,7 +29,7 @@ abstract class MenuEntry extends BaseObject
protected $id;
/**
* @var int the sort order
* @var int the sort order. a value between 0 and 10000
*/
protected $sortOrder;

View File

@ -87,7 +87,6 @@ abstract class Menu extends JsWidget
}
return $this->render($this->template, $this->getViewParams());
}
@ -115,7 +114,7 @@ abstract class Menu extends JsWidget
*/
public function getSortedEntries()
{
return Sort::sort($this->entries);
return Sort::sort($this->entries, 'sortOrder', 9000);
}
/**
@ -141,7 +140,7 @@ abstract class Menu extends JsWidget
}
foreach ($this->entries as $entry) {
if(!$entry instanceof MenuLink) {
if (!$entry instanceof MenuLink) {
continue;
}
@ -162,7 +161,7 @@ abstract class Menu extends JsWidget
public function getEntryById($id)
{
foreach ($this->entries as $entry) {
if(!$entry instanceof MenuEntry) {
if (!$entry instanceof MenuEntry) {
continue;
}
@ -207,8 +206,8 @@ abstract class Menu extends JsWidget
*/
/**
* @deprecated since 1.4
* @param array $entryArray
* @deprecated since 1.4
*/
public function addItem($entryArray)
{
@ -217,8 +216,8 @@ abstract class Menu extends JsWidget
}
/**
* @deprecated since 1.4 not longer supported!
* @return array item group
* @deprecated since 1.4 not longer supported!
*/
public function addItemGroup($itemGroup)
{
@ -226,8 +225,8 @@ abstract class Menu extends JsWidget
}
/**
* @deprecated since 1.4
* @return array the item group
* @deprecated since 1.4
*/
public function getItemGroups()
{
@ -237,14 +236,14 @@ abstract class Menu extends JsWidget
}
/**
* @deprecated since 1.4
* @return array the menu items as array list
* @deprecated since 1.4
*/
public function getItems($group = '')
{
$items = [];
foreach ($this->entries as $entry) {
if($entry instanceof MenuLink) {
if ($entry instanceof MenuLink) {
$items[] = $entry->toArray();
}
}
@ -265,7 +264,7 @@ abstract class Menu extends JsWidget
{
$result = [];
foreach ($this->getSortedEntries() as $entry) {
if((!$filterVisible || $entry->isVisible()) && (!$type || get_class($entry) === $type || is_subclass_of($entry, $type))) {
if ((!$filterVisible || $entry->isVisible()) && (!$type || get_class($entry) === $type || is_subclass_of($entry, $type))) {
$result[] = $entry;
}
}
@ -281,7 +280,7 @@ abstract class Menu extends JsWidget
public function getFirstEntry($type = null, $filterVisible = false)
{
$entries = $this->getEntries($type, $filterVisible);
if(count($entries)) {
if (count($entries)) {
return $entries[0];
}
@ -354,8 +353,8 @@ abstract class Menu extends JsWidget
}
/**
* @deprecated since 1.4
* @return array the menu entry as array
* @deprecated since 1.4
*/
public function getActive()
{
@ -368,8 +367,8 @@ abstract class Menu extends JsWidget
}
/**
* @deprecated since 1.4
* @param $url string the URL or route
* @deprecated since 1.4
*/
public function deleteItemByUrl($url)
{

View File

@ -27,13 +27,15 @@ class BaseStack extends Widget
const EVENT_INIT = 'init';
const EVENT_RUN = 'run';
const DEFAULT_SORT_ORDER = 9000;
/**
* Holds all added widgets
*
* Array
* [0] Classname
* [1] Params Arrays
* [2] Additional Options
* [2] Additional Options e.g. sortOrder (0-10000)
*
* @var array
*/
@ -118,8 +120,8 @@ class BaseStack extends Widget
{
usort($this->widgets, function($a, $b) {
$sortA = (isset($a[2]['sortOrder'])) ? $a[2]['sortOrder'] : 100;
$sortB = (isset($b[2]['sortOrder'])) ? $b[2]['sortOrder'] : 100;
$sortA = (isset($a[2]['sortOrder'])) ? $a[2]['sortOrder'] : static::DEFAULT_SORT_ORDER;
$sortB = (isset($b[2]['sortOrder'])) ? $b[2]['sortOrder'] : static::DEFAULT_SORT_ORDER;
if ($sortA == $sortB) {
return 0;
@ -143,7 +145,7 @@ class BaseStack extends Widget
public function addWidget($className, $params = [], $options = [])
{
if (!isset($options['sortOrder'])) {
$options['sortOrder'] = 100;
$options['sortOrder'] = static::DEFAULT_SORT_ORDER;
}
$this->widgets[] = [