aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2023-11-08 14:15:25 +0100
committerFerdinand Thiessen <opensource@fthiessen.de>2023-11-14 20:03:28 +0100
commit8d0c7cc5fa903ca3d4bbfeea411fac71d81d1c01 (patch)
tree5d12f4538cc1717ba338119518973748fc2be05d /lib
parent8bd9858345cc4e39c024e8dcb5ae688701606b11 (diff)
downloadnextcloud-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.php5
-rw-r--r--lib/private/NavigationManager.php16
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';