diff options
author | Ferdinand Thiessen <opensource@fthiessen.de> | 2023-11-08 14:15:25 +0100 |
---|---|---|
committer | Ferdinand Thiessen <opensource@fthiessen.de> | 2023-11-14 20:03:28 +0100 |
commit | 8d0c7cc5fa903ca3d4bbfeea411fac71d81d1c01 (patch) | |
tree | 5d12f4538cc1717ba338119518973748fc2be05d /lib | |
parent | 8bd9858345cc4e39c024e8dcb5ae688701606b11 (diff) | |
download | nextcloud-server-8d0c7cc5fa903ca3d4bbfeea411fac71d81d1c01.tar.gz nextcloud-server-8d0c7cc5fa903ca3d4bbfeea411fac71d81d1c01.zip |
fix: Allow to set custom app order on navigation entries added by closures to NavigationManager
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/App/AppManager.php | 5 | ||||
-rw-r--r-- | lib/private/NavigationManager.php | 16 |
2 files changed, 14 insertions, 7 deletions
diff --git a/lib/private/App/AppManager.php b/lib/private/App/AppManager.php index ab7b470bb8d..a7ab22dfc66 100644 --- a/lib/private/App/AppManager.php +++ b/lib/private/App/AppManager.php @@ -838,8 +838,9 @@ class AppManager implements IAppManager { /* Fallback on user defined apporder */ $customOrders = json_decode($this->config->getUserValue($user->getUID(), 'core', 'apporder', '[]'), true, flags:JSON_THROW_ON_ERROR); if (!empty($customOrders)) { - $customOrders = array_map('min', $customOrders); - asort($customOrders); + uasort($customOrders, function ($a, $b) { + return $a['order'] - $b['order']; + }); $defaultApps = array_keys($customOrders); } } diff --git a/lib/private/NavigationManager.php b/lib/private/NavigationManager.php index fe778920158..d323b7c1e43 100644 --- a/lib/private/NavigationManager.php +++ b/lib/private/NavigationManager.php @@ -67,6 +67,8 @@ class NavigationManager implements INavigationManager { private $config; /** The default app for the current user (cached for the `add` function) */ private ?string $defaultApp; + /** User defined app order (cached for the `add` function) */ + private array $customAppOrder; public function __construct(IAppManager $appManager, IURLGenerator $urlGenerator, @@ -106,8 +108,12 @@ class NavigationManager implements INavigationManager { $id = $entry['id']; $entry['unread'] = $this->unreadCounters[$id] ?? 0; - // This is the default app that will always be shown first - $entry['default'] = ($entry['app'] ?? false) === $this->defaultApp; + if ($entry['type'] === 'link') { + // This is the default app that will always be shown first + $entry['default'] = ($entry['app'] ?? false) === $this->defaultApp; + // Set order from user defined app order + $entry['order'] = $this->customAppOrder[$id]['order'] ?? $entry['order'] ?? 100; + } $this->entries[$id] = $entry; } @@ -326,10 +332,10 @@ class NavigationManager implements INavigationManager { if ($this->userSession->isLoggedIn()) { $user = $this->userSession->getUser(); $apps = $this->appManager->getEnabledAppsForUser($user); - $customOrders = json_decode($this->config->getUserValue($user->getUID(), 'core', 'apporder', '[]'), true, flags:JSON_THROW_ON_ERROR); + $this->customAppOrder = json_decode($this->config->getUserValue($user->getUID(), 'core', 'apporder', '[]'), true, flags:JSON_THROW_ON_ERROR); } else { $apps = $this->appManager->getInstalledApps(); - $customOrders = []; + $this->customAppOrder = []; } foreach ($apps as $app) { @@ -357,7 +363,7 @@ class NavigationManager implements INavigationManager { } $l = $this->l10nFac->get($app); $id = $nav['id'] ?? $app . ($key === 0 ? '' : $key); - $order = $customOrders[$app][$key] ?? $nav['order'] ?? 100; + $order = $nav['order'] ?? 100; $type = $nav['type']; $route = !empty($nav['route']) ? $this->urlGenerator->linkToRoute($nav['route']) : ''; $icon = $nav['icon'] ?? 'app.svg'; |