</h1>
<div class="header-left">
<a href="<?php print_unescaped($_['logoUrl'] ?: link_to('', 'index.php')); ?>"
+ aria-label="<?php p($l->t('Go to %s', [$_['logoUrl'] ?: $_['defaultAppName']])); ?>"
id="nextcloud">
- <div class="logo logo-icon">
- <span class="hidden-visually">
- <?php p($l->t('%s homepage', [$theme->getName()])); ?>
- </span>
- </div>
+ <div class="logo logo-icon"></div>
</a>
<nav id="header-left__appmenu"></nav>
return $this->defaultEnabled;
}
+
+ public function getDefaultAppForUser(?IUser $user = null): string {
+ // Set fallback to always-enabled files app
+ $appId = 'files';
+ $defaultApps = explode(',', $this->config->getSystemValueString('defaultapp', 'dashboard,files'));
+
+ $user ??= $this->userSession->getUser();
+
+ if ($user !== null) {
+ $userDefaultApps = explode(',', $this->config->getUserValue($user->getUID(), 'core', 'defaultapp'));
+ $defaultApps = array_filter(array_merge($userDefaultApps, $defaultApps));
+ }
+
+ // Find the first app that is enabled for the current user
+ foreach ($defaultApps as $defaultApp) {
+ $defaultApp = \OC_App::cleanAppId(strip_tags($defaultApp));
+ if ($this->isEnabledForUser($defaultApp, $user)) {
+ $appId = $defaultApp;
+ break;
+ }
+ }
+
+ return $appId;
+ }
}
$this->assign('enabledThemes', $themesService->getEnabledThemes());
}
- // set logo link target
+ // Set logo link target
$logoUrl = $this->config->getSystemValueString('logo_url', '');
$this->assign('logoUrl', $logoUrl);
+ // Set default app name
+ $defaultApp = \OC::$server->getAppManager()->getDefaultAppForUser();
+ $defaultAppInfo = \OC::$server->getAppManager()->getAppInfo($defaultApp);
+ $l10n = \OC::$server->getL10NFactory()->get($defaultApp);
+ $this->assign('defaultAppName', $l10n->t($defaultAppInfo['name']));
+
// Add navigation entry
$this->assign('application', '');
$this->assign('appid', $appId);
return $this->getAbsoluteURL($defaultPage);
}
- $appId = 'files';
- $defaultApps = explode(',', $this->config->getSystemValue('defaultapp', 'dashboard,files'));
-
- $userId = $this->userSession->isLoggedIn() ? $this->userSession->getUser()->getUID() : null;
- if ($userId !== null) {
- $userDefaultApps = explode(',', $this->config->getUserValue($userId, 'core', 'defaultapp'));
- $defaultApps = array_filter(array_merge($userDefaultApps, $defaultApps));
- }
-
- // find the first app that is enabled for the current user
- foreach ($defaultApps as $defaultApp) {
- $defaultApp = \OC_App::cleanAppId(strip_tags($defaultApp));
- if (\OC::$server->getAppManager()->isEnabledForUser($defaultApp)) {
- $appId = $defaultApp;
- break;
- }
- }
+ $appId = $this->getAppManager()->getDefaultAppForUser();
if ($this->config->getSystemValue('htaccess.IgnoreFrontController', false) === true
|| getenv('front_controller_active') === 'true') {
* @since 17.0.0
*/
public function getAppRestriction(string $appId): array;
+
+ /**
+ * Returns the id of the user's default app
+ *
+ * If `user` is not passed, the currently logged in user will be used
+ *
+ * @since 25.0.6
+ */
+ public function getDefaultAppForUser(?IUser $user = null): string;
}
$this->assertEquals([], $this->manager->getAppRestriction('test2'));
$this->assertEquals(['foo'], $this->manager->getAppRestriction('test3'));
}
+
+ public function provideDefaultApps(): array {
+ return [
+ // none specified, default to files
+ [
+ '',
+ 'files',
+ ],
+ // unexisting or inaccessible app specified, default to files
+ [
+ 'unexist',
+ 'files',
+ ],
+ // non-standard app
+ [
+ 'settings',
+ 'settings',
+ ],
+ // non-standard app with fallback
+ [
+ 'unexist,settings',
+ 'settings',
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideDefaultApps
+ */
+ public function testGetDefaultAppForUser($defaultApps, $expectedApp) {
+ $user = $this->newUser('user1');
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->willReturn($user);
+
+ $this->config->expects($this->once())
+ ->method('getSystemValueString')
+ ->with('defaultapp', $this->anything())
+ ->willReturn($defaultApps);
+
+ $this->assertEquals($expectedApp, $this->manager->getDefaultAppForUser());
+ }
}
use OCP\IConfig;
use OCP\IRequest;
use OCP\IURLGenerator;
-use OCP\IUser;
use OCP\IUserSession;
/**
];
}
- private function mockLinkToDefaultPageUrl(string $defaultAppConfig = '', bool $ignoreFrontControllerConfig = false) {
- $this->config->expects($this->exactly(2))
- ->method('getSystemValue')
- ->withConsecutive(
- ['defaultapp', $this->anything()],
- ['htaccess.IgnoreFrontController', $this->anything()],
- )
- ->will($this->onConsecutiveCalls(
- $defaultAppConfig,
- $ignoreFrontControllerConfig
- ));
+ private function mockLinkToDefaultPageUrl(bool $ignoreFrontControllerConfig = false) {
$this->config->expects($this->once())
->method('getAppValue')
->with('core', 'defaultpage')
->willReturn('');
+
+ $this->config->expects($this->once())
+ ->method('getSystemValue')
+ ->with('htaccess.IgnoreFrontController', $this->anything())
+ ->willReturn($ignoreFrontControllerConfig);
}
public function testLinkToDefaultPageUrlWithRedirectUrlWithoutFrontController() {
putenv('front_controller_active=false');
$_REQUEST['redirect_url'] = 'myRedirectUrl.com@foo.com:a';
- $this->assertSame('http://localhost' . \OC::$WEBROOT . '/index.php/apps/files/', $this->urlGenerator->linkToDefaultPageUrl());
+ $this->assertSame('http://localhost' . \OC::$WEBROOT . '/index.php/apps/dashboard/', $this->urlGenerator->linkToDefaultPageUrl());
}
public function testLinkToDefaultPageUrlWithRedirectUrlRedirectBypassWithFrontController() {
putenv('front_controller_active=true');
$_REQUEST['redirect_url'] = 'myRedirectUrl.com@foo.com:a';
- $this->assertSame('http://localhost' . \OC::$WEBROOT . '/apps/files/', $this->urlGenerator->linkToDefaultPageUrl());
+ $this->assertSame('http://localhost' . \OC::$WEBROOT . '/apps/dashboard/', $this->urlGenerator->linkToDefaultPageUrl());
}
public function testLinkToDefaultPageUrlWithRedirectUrlWithIgnoreFrontController() {
$this->mockBaseUrl();
- $this->mockLinkToDefaultPageUrl('', true);
+ $this->mockLinkToDefaultPageUrl(true);
putenv('front_controller_active=false');
$_REQUEST['redirect_url'] = 'myRedirectUrl.com@foo.com:a';
- $this->assertSame('http://localhost' . \OC::$WEBROOT . '/apps/files/', $this->urlGenerator->linkToDefaultPageUrl());
- }
-
- /**
- * @dataProvider provideDefaultApps
- */
- public function testLinkToDefaultPageUrlWithDefaultApps($defaultAppConfig, $expectedPath) {
- $userId = $this->getUniqueID();
-
- /** @var \PHPUnit\Framework\MockObject\MockObject|IUser $userMock */
- $userMock = $this->createMock(IUser::class);
- $userMock->expects($this->once())
- ->method('getUID')
- ->willReturn($userId);
-
- $this->mockBaseUrl();
- $this->mockLinkToDefaultPageUrl($defaultAppConfig);
-
- $this->config->expects($this->once())
- ->method('getUserValue')
- ->with($userId, 'core', 'defaultapp')
- ->willReturn('');
- $this->userSession->expects($this->once())
- ->method('isLoggedIn')
- ->willReturn(true);
- $this->userSession->expects($this->once())
- ->method('getUser')
- ->willReturn($userMock);
-
- $this->assertEquals('http://localhost' . \OC::$WEBROOT . $expectedPath, $this->urlGenerator->linkToDefaultPageUrl());
- }
-
- public function provideDefaultApps(): array {
- return [
- // none specified, default to files
- [
- '',
- '/index.php/apps/files/',
- ],
- // unexisting or inaccessible app specified, default to files
- [
- 'unexist',
- '/index.php/apps/files/',
- ],
- // non-standard app
- [
- 'settings',
- '/index.php/apps/settings/',
- ],
- // non-standard app with fallback
- [
- 'unexist,settings',
- '/index.php/apps/settings/',
- ],
- ];
+ $this->assertSame('http://localhost' . \OC::$WEBROOT . '/apps/dashboard/', $this->urlGenerator->linkToDefaultPageUrl());
}
public function imagePathProvider(): array {