fix(URLGenerator): Use NavigationManager to generate default page URL

Signed-off-by: provokateurin <kate@provokateurin.de>
This commit is contained in:
provokateurin 2024-08-27 13:12:21 +02:00
parent 70ed08daf1
commit 01ec6762a2
No known key found for this signature in database

View file

@ -14,6 +14,7 @@ use OCP\App\AppPathNotFoundException;
use OCP\App\IAppManager;
use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\INavigationManager;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUserSession;
@ -36,6 +37,7 @@ class URLGenerator implements IURLGenerator {
/** @var null|string */
private $baseUrl = null;
private ?IAppManager $appManager = null;
private ?INavigationManager $navigationManager = null;
public function __construct(IConfig $config,
IUserSession $userSession,
@ -58,6 +60,14 @@ class URLGenerator implements IURLGenerator {
return $this->appManager;
}
private function getNavigationManager(): INavigationManager {
if ($this->navigationManager !== null) {
return $this->navigationManager;
}
$this->navigationManager = \OCP\Server::get(INavigationManager::class);
return $this->navigationManager;
}
/**
* Creates an url using a defined route
*
@ -288,14 +298,17 @@ class URLGenerator implements IURLGenerator {
return $this->getAbsoluteURL($defaultPage);
}
$appId = $this->getAppManager()->getDefaultAppForUser();
if ($this->config->getSystemValueBool('htaccess.IgnoreFrontController', false)
|| getenv('front_controller_active') === 'true') {
return $this->getAbsoluteURL('/apps/' . $appId . '/');
$entryId = $this->getNavigationManager()->getDefaultEntryIdForUser();
$entry = $this->getNavigationManager()->get($entryId);
$href = (string)$entry['href'];
if ($href === '') {
throw new \InvalidArgumentException('Default navigation entry is missing href: ' . $entryId);
}
if (str_starts_with($href, '/index.php/') && ($this->config->getSystemValueBool('htaccess.IgnoreFrontController', false) || getenv('front_controller_active') === 'true')) {
$href = substr($href, 10);
}
return $this->getAbsoluteURL('/index.php/apps/' . $appId . '/');
return $this->getAbsoluteURL($href);
}
/**