aboutsummaryrefslogtreecommitdiffstats
path: root/apps/theming
diff options
context:
space:
mode:
authorjld3103 <jld3103yt@gmail.com>2023-10-11 19:01:59 +0200
committerjld3103 <jld3103yt@gmail.com>2023-11-03 09:36:08 +0100
commite69e201af81c777aa75c739d55f0c2fe3d53236f (patch)
tree1070cbfc0ea081b0a9bdba4bd840f1187f7796b0 /apps/theming
parentba93afbddd4930408129e863957fd7b631582ae2 (diff)
downloadnextcloud-server-e69e201af81c777aa75c739d55f0c2fe3d53236f.tar.gz
nextcloud-server-e69e201af81c777aa75c739d55f0c2fe3d53236f.zip
fix(theming): Correctly expose user and admin theming
Signed-off-by: jld3103 <jld3103yt@gmail.com>
Diffstat (limited to 'apps/theming')
-rw-r--r--apps/theming/lib/Capabilities.php48
-rw-r--r--apps/theming/tests/CapabilitiesTest.php10
2 files changed, 48 insertions, 10 deletions
diff --git a/apps/theming/lib/Capabilities.php b/apps/theming/lib/Capabilities.php
index fbb287aa410..9a1a224ed78 100644
--- a/apps/theming/lib/Capabilities.php
+++ b/apps/theming/lib/Capabilities.php
@@ -27,9 +27,14 @@
*/
namespace OCA\Theming;
+use Exception;
+use OCA\Theming\AppInfo\Application;
+use OCA\Theming\Service\BackgroundService;
use OCP\Capabilities\IPublicCapability;
use OCP\IConfig;
use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserSession;
/**
* Class Capabilities
@@ -50,17 +55,20 @@ class Capabilities implements IPublicCapability {
/** @var IConfig */
protected $config;
+ protected IUserSession $userSession;
+
/**
* @param ThemingDefaults $theming
* @param Util $util
* @param IURLGenerator $url
* @param IConfig $config
*/
- public function __construct(ThemingDefaults $theming, Util $util, IURLGenerator $url, IConfig $config) {
+ public function __construct(ThemingDefaults $theming, Util $util, IURLGenerator $url, IConfig $config, IUserSession $userSession) {
$this->theming = $theming;
$this->util = $util;
$this->url = $url;
$this->config = $config;
+ $this->userSession = $userSession;
}
/**
@@ -86,23 +94,49 @@ class Capabilities implements IPublicCapability {
* }
*/
public function getCapabilities() {
+ $color = $this->theming->getDefaultColorPrimary();
+ $colorText = $this->theming->getDefaultTextColorPrimary();
+
$backgroundLogo = $this->config->getAppValue('theming', 'backgroundMime', '');
- $color = $this->theming->getColorPrimary();
+ $backgroundPlain = $backgroundLogo === 'backgroundColor' || ($backgroundLogo === '' && $color !== '#0082c9');
+ $background = $backgroundPlain ? $color : $this->url->getAbsoluteURL($this->theming->getBackground());
+
+ $user = $this->userSession->getUser();
+ if ($user instanceof IUser) {
+ /**
+ * Mimics the logic of generateUserBackgroundVariables() that generates the CSS variables.
+ * Also needs to be updated if the logic changes.
+ * @see \OCA\Theming\Themes\CommonThemeTrait::generateUserBackgroundVariables()
+ */
+ $color = $this->theming->getColorPrimary();
+ $colorText = $this->theming->getTextColorPrimary();
+
+ $backgroundImage = $this->config->getUserValue($user->getUID(), Application::APP_ID, 'background_image', BackgroundService::BACKGROUND_DEFAULT);
+ if ($backgroundImage === BackgroundService::BACKGROUND_CUSTOM) {
+ $backgroundPlain = false;
+ $background = $this->url->linkToRouteAbsolute('theming.userTheme.getBackground');
+ } else if (isset(BackgroundService::SHIPPED_BACKGROUNDS[$backgroundImage])) {
+ $backgroundPlain = false;
+ $background = $this->url->linkTo(Application::APP_ID, "img/background/$backgroundImage");
+ } else if ($backgroundImage !== BackgroundService::BACKGROUND_DEFAULT) {
+ $backgroundPlain = true;
+ $background = $color;
+ }
+ }
+
return [
'theming' => [
'name' => $this->theming->getName(),
'url' => $this->theming->getBaseUrl(),
'slogan' => $this->theming->getSlogan(),
'color' => $color,
- 'color-text' => $this->theming->getTextColorPrimary(),
+ 'color-text' => $colorText,
'color-element' => $this->util->elementColor($color),
'color-element-bright' => $this->util->elementColor($color),
'color-element-dark' => $this->util->elementColor($color, false),
'logo' => $this->url->getAbsoluteURL($this->theming->getLogo()),
- 'background' => $backgroundLogo === 'backgroundColor' || ($backgroundLogo === '' && $this->theming->getColorPrimary() !== '#0082c9') ?
- $this->theming->getColorPrimary() :
- $this->url->getAbsoluteURL($this->theming->getBackground()),
- 'background-plain' => $backgroundLogo === 'backgroundColor' || ($backgroundLogo === '' && $this->theming->getColorPrimary() !== '#0082c9'),
+ 'background' => $background,
+ 'background-plain' => $backgroundPlain,
'background-default' => !$this->util->isBackgroundThemed(),
'logoheader' => $this->url->getAbsoluteURL($this->theming->getLogo()),
'favicon' => $this->url->getAbsoluteURL($this->theming->getLogo()),
diff --git a/apps/theming/tests/CapabilitiesTest.php b/apps/theming/tests/CapabilitiesTest.php
index 1a2d01d69d1..932cbe4a111 100644
--- a/apps/theming/tests/CapabilitiesTest.php
+++ b/apps/theming/tests/CapabilitiesTest.php
@@ -36,6 +36,7 @@ use OCP\App\IAppManager;
use OCP\Files\IAppData;
use OCP\IConfig;
use OCP\IURLGenerator;
+use OCP\IUserSession;
use Test\TestCase;
/**
@@ -56,6 +57,8 @@ class CapabilitiesTest extends TestCase {
/** @var Util|\PHPUnit\Framework\MockObject\MockObject */
protected $util;
+ protected IUserSession $userSession;
+
/** @var Capabilities */
protected $capabilities;
@@ -66,7 +69,8 @@ class CapabilitiesTest extends TestCase {
$this->url = $this->getMockBuilder(IURLGenerator::class)->getMock();
$this->config = $this->createMock(IConfig::class);
$this->util = $this->createMock(Util::class);
- $this->capabilities = new Capabilities($this->theming, $this->util, $this->url, $this->config);
+ $this->userSession = $this->createMock(IUserSession::class);
+ $this->capabilities = new Capabilities($this->theming, $this->util, $this->url, $this->config, $this->userSession);
}
public function dataGetCapabilities() {
@@ -165,13 +169,13 @@ class CapabilitiesTest extends TestCase {
->method('getSlogan')
->willReturn($slogan);
$this->theming->expects($this->atLeast(1))
- ->method('getColorPrimary')
+ ->method('getDefaultColorPrimary')
->willReturn($color);
$this->theming->expects($this->exactly(3))
->method('getLogo')
->willReturn($logo);
$this->theming->expects($this->once())
- ->method('getTextColorPrimary')
+ ->method('getDefaultTextColorPrimary')
->willReturn($textColor);
$util = new Util($this->config, $this->createMock(IAppManager::class), $this->createMock(IAppData::class), $this->createMock(ImageManager::class));