From 58619b2a682a80d05d3d425e68b31a5cdff6bb40 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sun, 15 Mar 2026 15:31:40 +0100 Subject: [PATCH] fix(apporder): Load custom app order before resolving closures Signed-off-by: Joas Schilling --- lib/private/NavigationManager.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/private/NavigationManager.php b/lib/private/NavigationManager.php index 6b622bbb3ea20..5d3a04235eb84 100644 --- a/lib/private/NavigationManager.php +++ b/lib/private/NavigationManager.php @@ -36,7 +36,7 @@ class NavigationManager implements INavigationManager { protected array $unreadCounters = []; protected bool $init = false; /** User defined app order (cached for the `add` function) */ - private array $customAppOrder; + private ?array $customAppOrder = null; public function __construct( protected IAppManager $appManager, @@ -182,6 +182,15 @@ public function getActiveEntry(): ?string { } private function init(bool $resolveClosures = true): void { + if ($this->customAppOrder === null) { + if ($this->userSession->isLoggedIn()) { + $user = $this->userSession->getUser(); + $this->customAppOrder = json_decode($this->config->getUserValue($user->getUID(), 'core', 'apporder', '[]'), true, flags:JSON_THROW_ON_ERROR); + } else { + $this->customAppOrder = []; + } + } + if ($resolveClosures) { while ($c = array_pop($this->closureEntries)) { $this->add($c()); @@ -302,10 +311,8 @@ private function init(bool $resolveClosures = true): void { if ($this->userSession->isLoggedIn()) { $user = $this->userSession->getUser(); $apps = $this->appManager->getEnabledAppsForUser($user); - $this->customAppOrder = json_decode($this->config->getUserValue($user->getUID(), 'core', 'apporder', '[]'), true, flags:JSON_THROW_ON_ERROR); } else { $apps = $this->appManager->getEnabledApps(); - $this->customAppOrder = []; } foreach ($apps as $app) {