aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private')
-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';