aboutsummaryrefslogtreecommitdiffstats
path: root/apps/theming
diff options
context:
space:
mode:
Diffstat (limited to 'apps/theming')
-rw-r--r--apps/theming/lib/Service/ThemesService.php30
-rw-r--r--apps/theming/tests/Service/ThemesServiceTest.php42
2 files changed, 64 insertions, 8 deletions
diff --git a/apps/theming/lib/Service/ThemesService.php b/apps/theming/lib/Service/ThemesService.php
index d6e14b6ffcb..653b895be2c 100644
--- a/apps/theming/lib/Service/ThemesService.php
+++ b/apps/theming/lib/Service/ThemesService.php
@@ -16,24 +16,22 @@ use OCA\Theming\Themes\LightTheme;
use OCP\IConfig;
use OCP\IUser;
use OCP\IUserSession;
+use Psr\Log\LoggerInterface;
class ThemesService {
- private IUserSession $userSession;
- private IConfig $config;
-
/** @var ITheme[] */
private array $themesProviders;
- public function __construct(IUserSession $userSession,
- IConfig $config,
- DefaultTheme $defaultTheme,
+ public function __construct(
+ private IUserSession $userSession,
+ private IConfig $config,
+ private LoggerInterface $logger,
+ private DefaultTheme $defaultTheme,
LightTheme $lightTheme,
DarkTheme $darkTheme,
HighContrastTheme $highContrastTheme,
DarkHighContrastTheme $darkHighContrastTheme,
DyslexiaFont $dyslexiaFont) {
- $this->userSession = $userSession;
- $this->config = $config;
// Register themes
$this->themesProviders = [
@@ -52,6 +50,22 @@ class ThemesService {
* @return ITheme[]
*/
public function getThemes(): array {
+ // Enforced theme if configured
+ $enforcedTheme = $this->config->getSystemValueString('enforce_theme', '');
+ if ($enforcedTheme !== '') {
+ if (!isset($this->themesProviders[$enforcedTheme])) {
+ $this->logger->error('Enforced theme not found', ['theme' => $enforcedTheme]);
+ return $this->themesProviders;
+ }
+
+ $defaultTheme = $this->themesProviders[$this->defaultTheme->getId()];
+ $theme = $this->themesProviders[$enforcedTheme];
+ return [
+ $defaultTheme->getId() => $defaultTheme,
+ $theme->getId() => $theme,
+ ];
+ }
+
return $this->themesProviders;
}
diff --git a/apps/theming/tests/Service/ThemesServiceTest.php b/apps/theming/tests/Service/ThemesServiceTest.php
index 29bc026820a..a670ab3a583 100644
--- a/apps/theming/tests/Service/ThemesServiceTest.php
+++ b/apps/theming/tests/Service/ThemesServiceTest.php
@@ -24,6 +24,7 @@ use OCP\IURLGenerator;
use OCP\IUser;
use OCP\IUserSession;
use PHPUnit\Framework\MockObject\MockObject;
+use Psr\Log\LoggerInterface;
use Test\TestCase;
class ThemesServiceTest extends TestCase {
@@ -34,6 +35,9 @@ class ThemesServiceTest extends TestCase {
private $userSession;
/** @var IConfig|MockObject */
private $config;
+ /** @var LoggerInterface|MockObject */
+ private $logger;
+
/** @var ThemingDefaults|MockObject */
private $themingDefaults;
@@ -43,6 +47,7 @@ class ThemesServiceTest extends TestCase {
protected function setUp(): void {
$this->userSession = $this->createMock(IUserSession::class);
$this->config = $this->createMock(IConfig::class);
+ $this->logger = $this->createMock(LoggerInterface::class);
$this->themingDefaults = $this->createMock(ThemingDefaults::class);
$this->themingDefaults->expects($this->any())
@@ -58,6 +63,7 @@ class ThemesServiceTest extends TestCase {
$this->themesService = new ThemesService(
$this->userSession,
$this->config,
+ $this->logger,
...array_values($this->themes)
);
@@ -76,6 +82,42 @@ class ThemesServiceTest extends TestCase {
$this->assertEquals($expected, array_keys($this->themesService->getThemes()));
}
+ public function testGetThemesEnforced() {
+ $this->config->expects($this->once())
+ ->method('getSystemValueString')
+ ->with('enforce_theme', '')
+ ->willReturn('dark');
+ $this->logger->expects($this->never())
+ ->method('error');
+
+ $expected = [
+ 'default',
+ 'dark',
+ ];
+
+ $this->assertEquals($expected, array_keys($this->themesService->getThemes()));
+ }
+
+ public function testGetThemesEnforcedInvalid() {
+ $this->config->expects($this->once())
+ ->method('getSystemValueString')
+ ->with('enforce_theme', '')
+ ->willReturn('invalid');
+ $this->logger->expects($this->once())
+ ->method('error')
+ ->with('Enforced theme not found', ['theme' => 'invalid']);
+
+ $expected = [
+ 'default',
+ 'light',
+ 'dark',
+ 'light-highcontrast',
+ 'dark-highcontrast',
+ 'opendyslexic',
+ ];
+
+ $this->assertEquals($expected, array_keys($this->themesService->getThemes()));
+ }
public function dataTestEnableTheme() {
return [