diff --git a/apps/theming/composer/composer/autoload_classmap.php b/apps/theming/composer/composer/autoload_classmap.php
index 9b53c0f9fea27..931bc2a9c7d9c 100644
--- a/apps/theming/composer/composer/autoload_classmap.php
+++ b/apps/theming/composer/composer/autoload_classmap.php
@@ -10,6 +10,7 @@
'OCA\\Theming\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
'OCA\\Theming\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
'OCA\\Theming\\Command\\UpdateConfig' => $baseDir . '/../lib/Command/UpdateConfig.php',
+ 'OCA\\Theming\\ConfigLexicon' => $baseDir . '/../lib/ConfigLexicon.php',
'OCA\\Theming\\Controller\\IconController' => $baseDir . '/../lib/Controller/IconController.php',
'OCA\\Theming\\Controller\\ThemingController' => $baseDir . '/../lib/Controller/ThemingController.php',
'OCA\\Theming\\Controller\\UserThemeController' => $baseDir . '/../lib/Controller/UserThemeController.php',
diff --git a/apps/theming/composer/composer/autoload_static.php b/apps/theming/composer/composer/autoload_static.php
index 184d9ed07615b..67f80c7aff03a 100644
--- a/apps/theming/composer/composer/autoload_static.php
+++ b/apps/theming/composer/composer/autoload_static.php
@@ -25,6 +25,7 @@ class ComposerStaticInitTheming
'OCA\\Theming\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
'OCA\\Theming\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
'OCA\\Theming\\Command\\UpdateConfig' => __DIR__ . '/..' . '/../lib/Command/UpdateConfig.php',
+ 'OCA\\Theming\\ConfigLexicon' => __DIR__ . '/..' . '/../lib/ConfigLexicon.php',
'OCA\\Theming\\Controller\\IconController' => __DIR__ . '/..' . '/../lib/Controller/IconController.php',
'OCA\\Theming\\Controller\\ThemingController' => __DIR__ . '/..' . '/../lib/Controller/ThemingController.php',
'OCA\\Theming\\Controller\\UserThemeController' => __DIR__ . '/..' . '/../lib/Controller/UserThemeController.php',
diff --git a/apps/theming/lib/ConfigLexicon.php b/apps/theming/lib/ConfigLexicon.php
new file mode 100644
index 0000000000000..e71d80f68015e
--- /dev/null
+++ b/apps/theming/lib/ConfigLexicon.php
@@ -0,0 +1,116 @@
+config->getAppValue('theming', 'name', $this->name));
+ return strip_tags($this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_NAME, $this->name));
}
public function getHTMLName() {
- return $this->config->getAppValue('theming', 'name', $this->name);
+ return $this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_NAME, $this->name);
}
public function getTitle() {
- return strip_tags($this->config->getAppValue('theming', 'name', $this->title));
+ return strip_tags($this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_NAME, $this->title));
}
public function getEntity() {
- return strip_tags($this->config->getAppValue('theming', 'name', $this->entity));
+ return strip_tags($this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_NAME, $this->entity));
}
public function getProductName() {
- return strip_tags($this->config->getAppValue('theming', 'productName', $this->productName));
+ return strip_tags($this->appConfig->getAppValueString(ConfigLexicon::PRODUCT_NAME, $this->productName));
}
public function getBaseUrl() {
- return $this->config->getAppValue('theming', 'url', $this->url);
+ return $this->appConfig->getAppValueString(ConfigLexicon::BASE_URL, $this->url);
}
/**
@@ -97,20 +97,20 @@ public function getBaseUrl() {
* @psalm-suppress InvalidReturnStatement
* @psalm-suppress InvalidReturnType
*/
- public function getSlogan(?string $lang = null) {
- return \OCP\Util::sanitizeHTML($this->config->getAppValue('theming', 'slogan', parent::getSlogan($lang)));
+ public function getSlogan(?string $lang = null): string {
+ return \OCP\Util::sanitizeHTML($this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_SLOGAN, parent::getSlogan($lang)));
}
- public function getImprintUrl() {
- return (string)$this->config->getAppValue('theming', 'imprintUrl', '');
+ public function getImprintUrl(): string {
+ return $this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_IMPRINT_URL, '');
}
- public function getPrivacyUrl() {
- return (string)$this->config->getAppValue('theming', 'privacyUrl', '');
+ public function getPrivacyUrl(): string {
+ return $this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_PRIVACY_URL, '');
}
- public function getDocBaseUrl() {
- return (string)$this->config->getAppValue('theming', 'docBaseUrl', $this->docBaseUrl);
+ public function getDocBaseUrl(): string {
+ return $this->appConfig->getAppValueString(ConfigLexicon::DOC_BASE_URL, $this->docBaseUrl);
}
public function getShortFooter() {
@@ -132,11 +132,11 @@ public function getShortFooter() {
$links = [
[
'text' => $this->l->t('Legal notice'),
- 'url' => (string)$this->getImprintUrl()
+ 'url' => $this->getImprintUrl()
],
[
'text' => $this->l->t('Privacy policy'),
- 'url' => (string)$this->getPrivacyUrl()
+ 'url' => $this->getPrivacyUrl()
],
];
@@ -224,7 +224,7 @@ public function getColorBackground(): string {
*/
public function getDefaultColorPrimary(): string {
// try admin color
- $defaultColor = $this->appConfig->getValueString(Application::APP_ID, 'primary_color', '');
+ $defaultColor = $this->appConfig->getAppValueString('primary_color', '');
if (preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', $defaultColor)) {
return $defaultColor;
}
@@ -237,7 +237,7 @@ public function getDefaultColorPrimary(): string {
* Default background color only taking admin setting into account
*/
public function getDefaultColorBackground(): string {
- $defaultColor = $this->appConfig->getValueString(Application::APP_ID, 'background_color');
+ $defaultColor = $this->appConfig->getAppValueString('background_color');
if (preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', $defaultColor)) {
return $defaultColor;
}
@@ -252,14 +252,14 @@ public function getDefaultColorBackground(): string {
* @return string
*/
public function getLogo($useSvg = true): string {
- $logo = $this->config->getAppValue('theming', 'logoMime', '');
+ $logo = $this->appConfig->getAppValueString('logoMime', '');
// short cut to avoid setting up the filesystem just to check if the logo is there
//
// explanation: if an SVG is requested and the app config value for logoMime is set then the logo is there.
// otherwise we need to check it and maybe also generate a PNG from the SVG (that's done in getImage() which
// needs to be called then)
- if ($useSvg === true && $logo !== false) {
+ if ($useSvg === true && $logo !== '') {
$logoExists = true;
} else {
try {
@@ -270,8 +270,7 @@ public function getLogo($useSvg = true): string {
}
}
- $cacheBusterCounter = $this->config->getAppValue('theming', 'cachebuster', '0');
-
+ $cacheBusterCounter = (string)$this->appConfig->getAppValueInt(ConfigLexicon::CACHE_BUSTER);
if (!$logo || !$logoExists) {
if ($useSvg) {
$logo = $this->urlGenerator->imagePath('core', 'logo/logo.svg');
@@ -298,28 +297,28 @@ public function getBackground(bool $darkVariant = false): string {
* @return string
*/
public function getiTunesAppId() {
- return $this->config->getAppValue('theming', 'iTunesAppId', $this->iTunesAppId);
+ return $this->appConfig->getAppValueString('iTunesAppId', $this->iTunesAppId);
}
/**
* @return string
*/
public function getiOSClientUrl() {
- return $this->config->getAppValue('theming', 'iOSClientUrl', $this->iOSClientUrl);
+ return $this->appConfig->getAppValueString('iOSClientUrl', $this->iOSClientUrl);
}
/**
* @return string
*/
public function getAndroidClientUrl() {
- return $this->config->getAppValue('theming', 'AndroidClientUrl', $this->AndroidClientUrl);
+ return $this->appConfig->getAppValueString('AndroidClientUrl', $this->AndroidClientUrl);
}
/**
* @return string
*/
public function getFDroidClientUrl() {
- return $this->config->getAppValue('theming', 'FDroidClientUrl', $this->FDroidClientUrl);
+ return $this->appConfig->getAppValueString('FDroidClientUrl', $this->FDroidClientUrl);
}
/**
@@ -327,18 +326,18 @@ public function getFDroidClientUrl() {
* @deprecated since Nextcloud 22 - https://github.com/nextcloud/server/issues/9940
*/
public function getScssVariables() {
- $cacheBuster = $this->config->getAppValue('theming', 'cachebuster', '0');
- $cache = $this->cacheFactory->createDistributed('theming-' . $cacheBuster . '-' . $this->urlGenerator->getBaseUrl());
+ $cacheBuster = $this->appConfig->getAppValueInt(ConfigLexicon::CACHE_BUSTER);
+ $cache = $this->cacheFactory->createDistributed('theming-' . (string)$cacheBuster . '-' . $this->urlGenerator->getBaseUrl());
if ($value = $cache->get('getScssVariables')) {
return $value;
}
$variables = [
'theming-cachebuster' => "'" . $cacheBuster . "'",
- 'theming-logo-mime' => "'" . $this->config->getAppValue('theming', 'logoMime') . "'",
- 'theming-background-mime' => "'" . $this->config->getAppValue('theming', 'backgroundMime') . "'",
- 'theming-logoheader-mime' => "'" . $this->config->getAppValue('theming', 'logoheaderMime') . "'",
- 'theming-favicon-mime' => "'" . $this->config->getAppValue('theming', 'faviconMime') . "'"
+ 'theming-logo-mime' => "'" . $this->appConfig->getAppValueString('logoMime') . "'",
+ 'theming-background-mime' => "'" . $this->appConfig->getAppValueString('backgroundMime') . "'",
+ 'theming-logoheader-mime' => "'" . $this->appConfig->getAppValueString('logoheaderMime') . "'",
+ 'theming-favicon-mime' => "'" . $this->appConfig->getAppValueString('faviconMime') . "'"
];
$variables['image-logo'] = "url('" . $this->imageManager->getImageUrl('logo') . "')";
@@ -347,13 +346,13 @@ public function getScssVariables() {
$variables['image-login-background'] = "url('" . $this->imageManager->getImageUrl('background') . "')";
$variables['image-login-plain'] = 'false';
- if ($this->appConfig->getValueString(Application::APP_ID, 'primary_color', '') !== '') {
+ if ($this->appConfig->getAppValueString('primary_color', '') !== '') {
$variables['color-primary'] = $this->getColorPrimary();
$variables['color-primary-text'] = $this->getTextColorPrimary();
$variables['color-primary-element'] = $this->util->elementColor($this->getColorPrimary());
}
- if ($this->config->getAppValue('theming', 'backgroundMime', '') === 'backgroundColor') {
+ if ($this->appConfig->getAppValueString('backgroundMime', '') === 'backgroundColor') {
$variables['image-login-plain'] = 'true';
}
@@ -378,7 +377,6 @@ public function replaceImagePath($app, $image) {
if ($app === '' || $app === 'files_sharing') {
$app = 'core';
}
- $cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0');
$route = false;
if ($image === 'favicon.ico' && ($this->imageManager->shouldReplaceIcons() || $this->getCustomFavicon() !== null)) {
@@ -420,8 +418,8 @@ protected function getCustomFavicon(): ?ISimpleFile {
* Increases the cache buster key
*/
public function increaseCacheBuster(): void {
- $cacheBusterKey = (int)$this->config->getAppValue('theming', 'cachebuster', '0');
- $this->config->setAppValue('theming', 'cachebuster', (string)($cacheBusterKey + 1));
+ $cacheBusterKey = $this->appConfig->getAppValueInt(ConfigLexicon::CACHE_BUSTER);
+ $this->appConfig->setAppValueInt(ConfigLexicon::CACHE_BUSTER, $cacheBusterKey + 1);
$this->cacheFactory->createDistributed('theming-')->clear();
$this->cacheFactory->createDistributed('imagePath')->clear();
}
@@ -433,7 +431,18 @@ public function increaseCacheBuster(): void {
* @param string $value
*/
public function set($setting, $value): void {
- $this->appConfig->setValueString('theming', $setting, $value);
+ switch ($value) {
+ case ConfigLexicon::CACHE_BUSTER:
+ $this->appConfig->setAppValueInt(ConfigLexicon::CACHE_BUSTER, (int)$value);
+ break;
+ case ConfigLexicon::USER_THEMING_DISABLED:
+ $value = $value === 'true' || $value === 'yes' || $value === '1';
+ $this->appConfig->setAppValueBool(ConfigLexicon::USER_THEMING_DISABLED, $value);
+ break;
+ default:
+ $this->appConfig->setAppValueString($setting, $value);
+ break;
+ }
$this->increaseCacheBuster();
}
@@ -443,9 +452,9 @@ public function set($setting, $value): void {
public function undoAll(): void {
// Remember the current cachebuster value, as we do not want to reset this value
// Otherwise this can lead to caching issues as the value might be known to a browser already
- $cacheBusterKey = $this->config->getAppValue('theming', 'cachebuster', '0');
- $this->config->deleteAppValues('theming');
- $this->config->setAppValue('theming', 'cachebuster', $cacheBusterKey);
+ $cacheBusterKey = $this->appConfig->getAppValueInt(ConfigLexicon::CACHE_BUSTER);
+ $this->appConfig->deleteAppValues();
+ $this->appConfig->setAppValueInt(ConfigLexicon::CACHE_BUSTER, $cacheBusterKey);
$this->increaseCacheBuster();
}
@@ -456,7 +465,7 @@ public function undoAll(): void {
* @return string default value
*/
public function undo($setting): string {
- $this->config->deleteAppValue('theming', $setting);
+ $this->appConfig->deleteAppValue($setting);
$this->increaseCacheBuster();
$returnValue = '';
@@ -485,7 +494,7 @@ public function undo($setting): string {
case 'background':
case 'favicon':
$this->imageManager->delete($setting);
- $this->config->deleteAppValue('theming', $setting . 'Mime');
+ $this->appConfig->deleteAppValue($setting . 'Mime');
break;
}
@@ -523,6 +532,6 @@ public function getDefaultTextColorPrimary() {
* Has the admin disabled user customization
*/
public function isUserThemingDisabled(): bool {
- return $this->appConfig->getValueBool(Application::APP_ID, 'disable-user-theming');
+ return $this->appConfig->getAppValueBool(ConfigLexicon::USER_THEMING_DISABLED, false);
}
}
diff --git a/apps/theming/tests/ThemingDefaultsTest.php b/apps/theming/tests/ThemingDefaultsTest.php
index 917ab960318a0..5682798f3f180 100644
--- a/apps/theming/tests/ThemingDefaultsTest.php
+++ b/apps/theming/tests/ThemingDefaultsTest.php
@@ -12,8 +12,8 @@
use OCA\Theming\ThemingDefaults;
use OCA\Theming\Util;
use OCP\App\IAppManager;
+use OCP\AppFramework\Services\IAppConfig;
use OCP\Files\NotFoundException;
-use OCP\IAppConfig;
use OCP\ICache;
use OCP\ICacheFactory;
use OCP\IConfig;
@@ -28,8 +28,7 @@
class ThemingDefaultsTest extends TestCase {
private IAppConfig&MockObject $appConfig;
private IConfig&MockObject $config;
- private \OC_Defaults $defaults;
- private IL10N|MockObject $l10n;
+ private IL10N&MockObject $l10n;
private IUserSession&MockObject $userSession;
private IURLGenerator&MockObject $urlGenerator;
private ICacheFactory&MockObject $cacheFactory;
@@ -39,6 +38,8 @@ class ThemingDefaultsTest extends TestCase {
private ImageManager&MockObject $imageManager;
private INavigationManager&MockObject $navigationManager;
private BackgroundService&MockObject $backgroundService;
+
+ private \OC_Defaults $defaults;
private ThemingDefaults $template;
protected function setUp(): void {
@@ -76,60 +77,60 @@ protected function setUp(): void {
}
public function testGetNameWithDefault(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'name', 'Nextcloud')
+ ->method('getAppValueString')
+ ->with('name', 'Nextcloud')
->willReturn('Nextcloud');
$this->assertEquals('Nextcloud', $this->template->getName());
}
public function testGetNameWithCustom(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'name', 'Nextcloud')
+ ->method('getAppValueString')
+ ->with('name', 'Nextcloud')
->willReturn('MyCustomCloud');
$this->assertEquals('MyCustomCloud', $this->template->getName());
}
public function testGetHTMLNameWithDefault(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'name', 'Nextcloud')
+ ->method('getAppValueString')
+ ->with('name', 'Nextcloud')
->willReturn('Nextcloud');
$this->assertEquals('Nextcloud', $this->template->getHTMLName());
}
public function testGetHTMLNameWithCustom(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'name', 'Nextcloud')
+ ->method('getAppValueString')
+ ->with('name', 'Nextcloud')
->willReturn('MyCustomCloud');
$this->assertEquals('MyCustomCloud', $this->template->getHTMLName());
}
public function testGetTitleWithDefault(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'name', 'Nextcloud')
+ ->method('getAppValueString')
+ ->with('name', 'Nextcloud')
->willReturn('Nextcloud');
$this->assertEquals('Nextcloud', $this->template->getTitle());
}
public function testGetTitleWithCustom(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'name', 'Nextcloud')
+ ->method('getAppValueString')
+ ->with('name', 'Nextcloud')
->willReturn('MyCustomCloud');
$this->assertEquals('MyCustomCloud', $this->template->getTitle());
@@ -137,40 +138,40 @@ public function testGetTitleWithCustom(): void {
public function testGetEntityWithDefault(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'name', 'Nextcloud')
+ ->method('getAppValueString')
+ ->with('name', 'Nextcloud')
->willReturn('Nextcloud');
$this->assertEquals('Nextcloud', $this->template->getEntity());
}
public function testGetEntityWithCustom(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'name', 'Nextcloud')
+ ->method('getAppValueString')
+ ->with('name', 'Nextcloud')
->willReturn('MyCustomCloud');
$this->assertEquals('MyCustomCloud', $this->template->getEntity());
}
public function testGetBaseUrlWithDefault(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'url', $this->defaults->getBaseUrl())
+ ->method('getAppValueString')
+ ->with('url', $this->defaults->getBaseUrl())
->willReturn($this->defaults->getBaseUrl());
$this->assertEquals($this->defaults->getBaseUrl(), $this->template->getBaseUrl());
}
public function testGetBaseUrlWithCustom(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'url', $this->defaults->getBaseUrl())
+ ->method('getAppValueString')
+ ->with('url', $this->defaults->getBaseUrl())
->willReturn('https://example.com/');
$this->assertEquals('https://example.com/', $this->template->getBaseUrl());
@@ -185,10 +186,10 @@ public static function legalUrlProvider(): array {
#[\PHPUnit\Framework\Attributes\DataProvider('legalUrlProvider')]
public function testGetImprintURL(string $imprintUrl): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'imprintUrl', '')
+ ->method('getAppValueString')
+ ->with('imprintUrl', '')
->willReturn($imprintUrl);
$this->assertEquals($imprintUrl, $this->template->getImprintUrl());
@@ -196,45 +197,45 @@ public function testGetImprintURL(string $imprintUrl): void {
#[\PHPUnit\Framework\Attributes\DataProvider('legalUrlProvider')]
public function testGetPrivacyURL(string $privacyUrl): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'privacyUrl', '')
+ ->method('getAppValueString')
+ ->with('privacyUrl', '')
->willReturn($privacyUrl);
$this->assertEquals($privacyUrl, $this->template->getPrivacyUrl());
}
public function testGetSloganWithDefault(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'slogan', $this->defaults->getSlogan())
+ ->method('getAppValueString')
+ ->with('slogan', $this->defaults->getSlogan())
->willReturn($this->defaults->getSlogan());
$this->assertEquals($this->defaults->getSlogan(), $this->template->getSlogan());
}
public function testGetSloganWithCustom(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'slogan', $this->defaults->getSlogan())
+ ->method('getAppValueString')
+ ->with('slogan', $this->defaults->getSlogan())
->willReturn('My custom Slogan');
$this->assertEquals('My custom Slogan', $this->template->getSlogan());
}
public function testGetShortFooter(): void {
- $this->config
+ $this->appConfig
->expects($this->exactly(5))
- ->method('getAppValue')
+ ->method('getAppValueString')
->willReturnMap([
- ['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
- ['theming', 'name', 'Nextcloud', 'Name'],
- ['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
- ['theming', 'imprintUrl', '', ''],
- ['theming', 'privacyUrl', '', ''],
+ ['url', $this->defaults->getBaseUrl(), 'url'],
+ ['name', 'Nextcloud', 'Name'],
+ ['slogan', $this->defaults->getSlogan(), 'Slogan'],
+ ['imprintUrl', '', ''],
+ ['privacyUrl', '', ''],
]);
$this->assertEquals('Name – Slogan', $this->template->getShortFooter());
@@ -242,15 +243,15 @@ public function testGetShortFooter(): void {
public function testGetShortFooterEmptyUrl(): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
- $this->config
+ $this->appConfig
->expects($this->exactly(5))
- ->method('getAppValue')
+ ->method('getAppValueString')
->willReturnMap([
- ['theming', 'url', $this->defaults->getBaseUrl(), ''],
- ['theming', 'name', 'Nextcloud', 'Name'],
- ['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
- ['theming', 'imprintUrl', '', ''],
- ['theming', 'privacyUrl', '', ''],
+ ['url', $this->defaults->getBaseUrl(), ''],
+ ['name', 'Nextcloud', 'Name'],
+ ['slogan', $this->defaults->getSlogan(), 'Slogan'],
+ ['imprintUrl', '', ''],
+ ['privacyUrl', '', ''],
]);
$this->assertEquals('Name – Slogan', $this->template->getShortFooter());
@@ -258,15 +259,15 @@ public function testGetShortFooterEmptyUrl(): void {
public function testGetShortFooterEmptySlogan(): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
- $this->config
+ $this->appConfig
->expects($this->exactly(5))
- ->method('getAppValue')
+ ->method('getAppValueString')
->willReturnMap([
- ['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
- ['theming', 'name', 'Nextcloud', 'Name'],
- ['theming', 'slogan', $this->defaults->getSlogan(), ''],
- ['theming', 'imprintUrl', '', ''],
- ['theming', 'privacyUrl', '', ''],
+ ['url', $this->defaults->getBaseUrl(), 'url'],
+ ['name', 'Nextcloud', 'Name'],
+ ['slogan', $this->defaults->getSlogan(), ''],
+ ['imprintUrl', '', ''],
+ ['privacyUrl', '', ''],
]);
$this->assertEquals('Name', $this->template->getShortFooter());
@@ -274,15 +275,15 @@ public function testGetShortFooterEmptySlogan(): void {
public function testGetShortFooterImprint(): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
- $this->config
+ $this->appConfig
->expects($this->exactly(5))
- ->method('getAppValue')
+ ->method('getAppValueString')
->willReturnMap([
- ['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
- ['theming', 'name', 'Nextcloud', 'Name'],
- ['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
- ['theming', 'imprintUrl', '', 'https://example.com/imprint'],
- ['theming', 'privacyUrl', '', ''],
+ ['url', $this->defaults->getBaseUrl(), 'url'],
+ ['name', 'Nextcloud', 'Name'],
+ ['slogan', $this->defaults->getSlogan(), 'Slogan'],
+ ['imprintUrl', '', 'https://example.com/imprint'],
+ ['privacyUrl', '', ''],
]);
$this->l10n
@@ -295,15 +296,15 @@ public function testGetShortFooterImprint(): void {
public function testGetShortFooterPrivacy(): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
- $this->config
+ $this->appConfig
->expects($this->exactly(5))
- ->method('getAppValue')
+ ->method('getAppValueString')
->willReturnMap([
- ['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
- ['theming', 'name', 'Nextcloud', 'Name'],
- ['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
- ['theming', 'imprintUrl', '', ''],
- ['theming', 'privacyUrl', '', 'https://example.com/privacy'],
+ ['url', $this->defaults->getBaseUrl(), 'url'],
+ ['name', 'Nextcloud', 'Name'],
+ ['slogan', $this->defaults->getSlogan(), 'Slogan'],
+ ['imprintUrl', '', ''],
+ ['privacyUrl', '', 'https://example.com/privacy'],
]);
$this->l10n
@@ -316,15 +317,15 @@ public function testGetShortFooterPrivacy(): void {
public function testGetShortFooterAllLegalLinks(): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
- $this->config
+ $this->appConfig
->expects($this->exactly(5))
- ->method('getAppValue')
+ ->method('getAppValueString')
->willReturnMap([
- ['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
- ['theming', 'name', 'Nextcloud', 'Name'],
- ['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
- ['theming', 'imprintUrl', '', 'https://example.com/imprint'],
- ['theming', 'privacyUrl', '', 'https://example.com/privacy'],
+ ['url', $this->defaults->getBaseUrl(), 'url'],
+ ['name', 'Nextcloud', 'Name'],
+ ['slogan', $this->defaults->getSlogan(), 'Slogan'],
+ ['imprintUrl', '', 'https://example.com/imprint'],
+ ['privacyUrl', '', 'https://example.com/privacy'],
]);
$this->l10n
@@ -345,15 +346,15 @@ public static function invalidLegalUrlProvider(): array {
#[\PHPUnit\Framework\Attributes\DataProvider('invalidLegalUrlProvider')]
public function testGetShortFooterInvalidImprint(string $invalidImprintUrl): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
- $this->config
+ $this->appConfig
->expects($this->exactly(5))
- ->method('getAppValue')
+ ->method('getAppValueString')
->willReturnMap([
- ['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
- ['theming', 'name', 'Nextcloud', 'Name'],
- ['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
- ['theming', 'imprintUrl', '', $invalidImprintUrl],
- ['theming', 'privacyUrl', '', ''],
+ ['url', $this->defaults->getBaseUrl(), 'url'],
+ ['name', 'Nextcloud', 'Name'],
+ ['slogan', $this->defaults->getSlogan(), 'Slogan'],
+ ['imprintUrl', '', $invalidImprintUrl],
+ ['privacyUrl', '', ''],
]);
$this->assertEquals('Name – Slogan', $this->template->getShortFooter());
@@ -362,15 +363,15 @@ public function testGetShortFooterInvalidImprint(string $invalidImprintUrl): voi
#[\PHPUnit\Framework\Attributes\DataProvider('invalidLegalUrlProvider')]
public function testGetShortFooterInvalidPrivacy(string $invalidPrivacyUrl): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
- $this->config
+ $this->appConfig
->expects($this->exactly(5))
- ->method('getAppValue')
+ ->method('getAppValueString')
->willReturnMap([
- ['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
- ['theming', 'name', 'Nextcloud', 'Name'],
- ['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
- ['theming', 'imprintUrl', '', ''],
- ['theming', 'privacyUrl', '', $invalidPrivacyUrl],
+ ['url', $this->defaults->getBaseUrl(), 'url'],
+ ['name', 'Nextcloud', 'Name'],
+ ['slogan', $this->defaults->getSlogan(), 'Slogan'],
+ ['imprintUrl', '', ''],
+ ['privacyUrl', '', $invalidPrivacyUrl],
]);
$this->assertEquals('Name – Slogan', $this->template->getShortFooter());
@@ -379,13 +380,13 @@ public function testGetShortFooterInvalidPrivacy(string $invalidPrivacyUrl): voi
public function testGetColorPrimaryWithDefault(): void {
$this->appConfig
->expects(self::once())
- ->method('getValueBool')
- ->with('theming', 'disable-user-theming')
+ ->method('getAppValueBool')
+ ->with('disable-user-theming')
->willReturn(false);
$this->appConfig
->expects(self::once())
- ->method('getValueString')
- ->with('theming', 'primary_color', '')
+ ->method('getAppValueString')
+ ->with('primary_color', '')
->willReturn($this->defaults->getColorPrimary());
$this->assertEquals($this->defaults->getColorPrimary(), $this->template->getColorPrimary());
@@ -394,13 +395,13 @@ public function testGetColorPrimaryWithDefault(): void {
public function testGetColorPrimaryWithCustom(): void {
$this->appConfig
->expects(self::once())
- ->method('getValueBool')
- ->with('theming', 'disable-user-theming')
+ ->method('getAppValueBool')
+ ->with('disable-user-theming')
->willReturn(false);
$this->appConfig
->expects(self::once())
- ->method('getValueString')
- ->with('theming', 'primary_color', '')
+ ->method('getAppValueString')
+ ->with('primary_color', '')
->willReturn('#fff');
$this->assertEquals('#fff', $this->template->getColorPrimary());
@@ -458,13 +459,13 @@ public function testGetColorPrimary(bool $disableTheming, string $primaryColor,
->willReturn('user');
$this->appConfig
->expects(self::any())
- ->method('getValueBool')
- ->with('theming', 'disable-user-theming')
+ ->method('getAppValueBool')
+ ->with('disable-user-theming')
->willReturn($disableTheming);
$this->appConfig
->expects(self::any())
- ->method('getValueString')
- ->with('theming', 'primary_color', '')
+ ->method('getAppValueString')
+ ->with('primary_color', '')
->willReturn($primaryColor);
$this->config
->expects($this->any())
@@ -476,19 +477,19 @@ public function testGetColorPrimary(bool $disableTheming, string $primaryColor,
}
public function testSet(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('setAppValue')
- ->with('theming', 'cachebuster', 16);
+ ->method('setAppValueInt')
+ ->with('cachebuster', 16);
$this->appConfig
->expects($this->once())
- ->method('setValueString')
- ->with('theming', 'MySetting', 'MyValue');
- $this->config
+ ->method('setAppValueString')
+ ->with('MySetting', 'MyValue');
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'cachebuster', '0')
- ->willReturn('15');
+ ->method('getAppValueInt')
+ ->with('cachebuster')
+ ->willReturn(15);
$this->cacheFactory
->expects($this->exactly(2))
->method('createDistributed')
@@ -504,97 +505,106 @@ public function testSet(): void {
}
public function testUndoName(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
->method('deleteAppValue')
- ->with('theming', 'name');
- $this->config
- ->expects($this->exactly(2))
- ->method('getAppValue')
- ->willReturnMap([
- ['theming', 'cachebuster', '0', '15'],
- ['theming', 'name', 'Nextcloud', 'Nextcloud'],
- ]);
- $this->config
+ ->with('name');
+ $this->appConfig
+ ->expects($this->once())
+ ->method('getAppValueInt')
+ ->with('cachebuster')
+ ->willReturn(15);
+ $this->appConfig
->expects($this->once())
- ->method('setAppValue')
- ->with('theming', 'cachebuster', 16);
+ ->method('getAppValueString')
+ ->with('name', 'Nextcloud')
+ ->willReturn('Nextcloud');
+ $this->appConfig
+ ->expects($this->once())
+ ->method('setAppValueInt')
+ ->with('cachebuster', 16);
$this->assertSame('Nextcloud', $this->template->undo('name'));
}
public function testUndoBaseUrl(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
->method('deleteAppValue')
- ->with('theming', 'url');
- $this->config
- ->expects($this->exactly(2))
- ->method('getAppValue')
- ->willReturnMap([
- ['theming', 'cachebuster', '0', '15'],
- ['theming', 'url', $this->defaults->getBaseUrl(), $this->defaults->getBaseUrl()],
- ]);
- $this->config
+ ->with('url');
+ $this->appConfig
->expects($this->once())
- ->method('setAppValue')
- ->with('theming', 'cachebuster', 16);
+ ->method('getAppValueInt')
+ ->with('cachebuster')
+ ->willReturn(15);
+ $this->appConfig
+ ->expects($this->once())
+ ->method('getAppValueString')
+ ->with('url', $this->defaults->getBaseUrl())
+ ->willReturn($this->defaults->getBaseUrl());
+ $this->appConfig
+ ->expects($this->once())
+ ->method('setAppValueInt')
+ ->with('cachebuster', 16);
$this->assertSame($this->defaults->getBaseUrl(), $this->template->undo('url'));
}
public function testUndoSlogan(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
->method('deleteAppValue')
- ->with('theming', 'slogan');
- $this->config
- ->expects($this->exactly(2))
- ->method('getAppValue')
- ->willReturnMap([
- ['theming', 'cachebuster', '0', '15'],
- ['theming', 'slogan', $this->defaults->getSlogan(), $this->defaults->getSlogan()],
- ]);
- $this->config
+ ->with('slogan');
+ $this->appConfig
+ ->expects($this->once())
+ ->method('getAppValueInt')
+ ->with('cachebuster')
+ ->willReturn(15);
+ $this->appConfig
->expects($this->once())
- ->method('setAppValue')
- ->with('theming', 'cachebuster', 16);
+ ->method('getAppValueString')
+ ->with('slogan', $this->defaults->getSlogan())
+ ->willReturn($this->defaults->getSlogan());
+ $this->appConfig
+ ->expects($this->once())
+ ->method('setAppValueInt')
+ ->with('cachebuster', 16);
$this->assertSame($this->defaults->getSlogan(), $this->template->undo('slogan'));
}
public function testUndoPrimaryColor(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
->method('deleteAppValue')
- ->with('theming', 'primary_color');
- $this->config
+ ->with('primary_color');
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'cachebuster', '0')
- ->willReturn('15');
- $this->config
+ ->method('getAppValueInt')
+ ->with('cachebuster')
+ ->willReturn(15);
+ $this->appConfig
->expects($this->once())
- ->method('setAppValue')
- ->with('theming', 'cachebuster', 16);
+ ->method('setAppValueInt')
+ ->with('cachebuster', 16);
$this->assertSame($this->defaults->getColorPrimary(), $this->template->undo('primary_color'));
}
public function testUndoDefaultAction(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
->method('deleteAppValue')
- ->with('theming', 'defaultitem');
- $this->config
+ ->with('defaultitem');
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'cachebuster', '0')
- ->willReturn('15');
- $this->config
+ ->method('getAppValueInt')
+ ->with('cachebuster', '0')
+ ->willReturn(15);
+ $this->appConfig
->expects($this->once())
- ->method('setAppValue')
- ->with('theming', 'cachebuster', 16);
+ ->method('setAppValueInt')
+ ->with('cachebuster', 16);
$this->assertSame('', $this->template->undo('defaultitem'));
}
@@ -613,13 +623,16 @@ private function getLogoHelper($withName, $useSvg) {
->method('getImage')
->with('logo')
->willThrowException(new NotFoundException());
- $this->config
- ->expects($this->exactly(2))
- ->method('getAppValue')
- ->willReturnMap([
- ['theming', 'logoMime', '', ''],
- ['theming', 'cachebuster', '0', '0'],
- ]);
+ $this->appConfig
+ ->expects($this->once())
+ ->method('getAppValueString')
+ ->with('logoMime', '')
+ ->willReturn('');
+ $this->appConfig
+ ->expects($this->once())
+ ->method('getAppValueInt')
+ ->with('cachebuster')
+ ->willReturn(0);
$this->urlGenerator->expects($this->once())
->method('imagePath')
->with('core', $withName)
@@ -636,13 +649,16 @@ public function testGetLogoDefaultWithoutSvg(): void {
}
public function testGetLogoCustom(): void {
- $this->config
- ->expects($this->exactly(2))
- ->method('getAppValue')
- ->willReturnMap([
- ['theming', 'logoMime', '', 'image/svg+xml'],
- ['theming', 'cachebuster', '0', '0'],
- ]);
+ $this->appConfig
+ ->expects($this->once())
+ ->method('getAppValueString')
+ ->with('logoMime', '')
+ ->willReturn('image/svg+xml');
+ $this->appConfig
+ ->expects($this->once())
+ ->method('getAppValueInt')
+ ->with('cachebuster')
+ ->willReturn(0);
$this->urlGenerator->expects($this->once())
->method('linkToRoute')
->with('theming.Theming.getImage')
@@ -651,7 +667,10 @@ public function testGetLogoCustom(): void {
}
public function testGetScssVariablesCached(): void {
- $this->config->expects($this->any())->method('getAppValue')->with('theming', 'cachebuster', '0')->willReturn('1');
+ $this->appConfig->expects($this->any())
+ ->method('getAppValueInt')
+ ->with('cachebuster')
+ ->willReturn(1);
$this->cacheFactory->expects($this->once())
->method('createDistributed')
->with('theming-1-')
@@ -661,23 +680,22 @@ public function testGetScssVariablesCached(): void {
}
public function testGetScssVariables(): void {
- $this->config
- ->expects($this->any())
- ->method('getAppValue')
- ->willReturnMap([
- ['theming', 'cachebuster', '0', '0'],
- ['theming', 'logoMime', '', 'jpeg'],
- ['theming', 'backgroundMime', '', 'jpeg'],
- ['theming', 'logoheaderMime', '', 'jpeg'],
- ['theming', 'faviconMime', '', 'jpeg'],
- ]);
-
+ $this->appConfig->expects($this->any())
+ ->method('getAppValueInt')
+ ->with('cachebuster')
+ ->willReturn(0);
$this->appConfig
- ->expects(self::atLeastOnce())
- ->method('getValueString')
+ ->expects($this->any())
+ ->method('getAppValueString')
->willReturnMap([
- ['theming', 'primary_color', '', false, $this->defaults->getColorPrimary()],
- ['theming', 'primary_color', $this->defaults->getColorPrimary(), false, $this->defaults->getColorPrimary()],
+ ['imprintUrl', '', ''],
+ ['privacyUrl', '', ''],
+ ['logoMime', '', 'jpeg'],
+ ['backgroundMime', '', 'jpeg'],
+ ['logoheaderMime', '', 'jpeg'],
+ ['faviconMime', '', 'jpeg'],
+ ['primary_color', '', false, $this->defaults->getColorPrimary()],
+ ['primary_color', $this->defaults->getColorPrimary(), false, $this->defaults->getColorPrimary()],
]);
$this->util->expects($this->any())->method('invertTextColor')->with($this->defaults->getColorPrimary())->willReturn(false);
@@ -716,60 +734,60 @@ public function testGetScssVariables(): void {
}
public function testGetDefaultAndroidURL(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'AndroidClientUrl', 'https://play.google.com/store/apps/details?id=com.nextcloud.client')
+ ->method('getAppValueString')
+ ->with('AndroidClientUrl', 'https://play.google.com/store/apps/details?id=com.nextcloud.client')
->willReturn('https://play.google.com/store/apps/details?id=com.nextcloud.client');
$this->assertEquals('https://play.google.com/store/apps/details?id=com.nextcloud.client', $this->template->getAndroidClientUrl());
}
public function testGetCustomAndroidURL(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'AndroidClientUrl', 'https://play.google.com/store/apps/details?id=com.nextcloud.client')
+ ->method('getAppValueString')
+ ->with('AndroidClientUrl', 'https://play.google.com/store/apps/details?id=com.nextcloud.client')
->willReturn('https://play.google.com/store/apps/details?id=com.mycloud.client');
$this->assertEquals('https://play.google.com/store/apps/details?id=com.mycloud.client', $this->template->getAndroidClientUrl());
}
public function testGetDefaultiOSURL(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'iOSClientUrl', 'https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8')
+ ->method('getAppValueString')
+ ->with('iOSClientUrl', 'https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8')
->willReturn('https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8');
$this->assertEquals('https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8', $this->template->getiOSClientUrl());
}
public function testGetCustomiOSURL(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'iOSClientUrl', 'https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8')
+ ->method('getAppValueString')
+ ->with('iOSClientUrl', 'https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8')
->willReturn('https://geo.itunes.apple.com/us/app/nextcloud/id1234567890?mt=8');
$this->assertEquals('https://geo.itunes.apple.com/us/app/nextcloud/id1234567890?mt=8', $this->template->getiOSClientUrl());
}
public function testGetDefaultiTunesAppId(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'iTunesAppId', '1125420102')
+ ->method('getAppValueString')
+ ->with('iTunesAppId', '1125420102')
->willReturn('1125420102');
$this->assertEquals('1125420102', $this->template->getiTunesAppId());
}
public function testGetCustomiTunesAppId(): void {
- $this->config
+ $this->appConfig
->expects($this->once())
- ->method('getAppValue')
- ->with('theming', 'iTunesAppId', '1125420102')
+ ->method('getAppValueString')
+ ->with('iTunesAppId', '1125420102')
->willReturn('1234567890');
$this->assertEquals('1234567890', $this->template->getiTunesAppId());
@@ -790,11 +808,11 @@ public function testReplaceImagePath(string $app, string $image, string|bool $re
->method('get')
->with('shouldReplaceIcons')
->willReturn(true);
- $this->config
+ $this->appConfig
->expects($this->any())
- ->method('getAppValue')
- ->with('theming', 'cachebuster', '0')
- ->willReturn('0');
+ ->method('getAppValueInt')
+ ->with('cachebuster')
+ ->willReturn(0);
$this->urlGenerator
->expects($this->any())
->method('linkToRoute')
diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml
index 7e3f9ab604ce3..a739d12529e63 100644
--- a/build/psalm-baseline.xml
+++ b/build/psalm-baseline.xml
@@ -2584,40 +2584,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/private/Server.php b/lib/private/Server.php
index 927d2ce322422..5b92d0f9a09a2 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -15,6 +15,7 @@
use OC\AppFramework\Bootstrap\Coordinator;
use OC\AppFramework\Http\Request;
use OC\AppFramework\Http\RequestId;
+use OC\AppFramework\Services\AppConfig;
use OC\AppFramework\Utility\TimeFactory;
use OC\Authentication\Events\LoginFailed;
use OC\Authentication\Listeners\LoginFailedListener;
@@ -150,6 +151,7 @@
use OCP\Federation\ICloudFederationFactory;
use OCP\Federation\ICloudFederationProviderManager;
use OCP\Federation\ICloudIdManager;
+use OCP\Files\AppData\IAppDataFactory;
use OCP\Files\Cache\IFileAccess;
use OCP\Files\Config\IMountProviderCollection;
use OCP\Files\Config\IUserMountCache;
@@ -1009,14 +1011,14 @@ public function __construct($webRoot, \OC\Config $config) {
if ($classExists && $c->get(\OCP\IConfig::class)->getSystemValueBool('installed', false) && $c->get(IAppManager::class)->isEnabledForAnyone('theming') && $c->get(TrustedDomainHelper::class)->isTrustedDomain($c->getRequest()->getInsecureServerHost())) {
$backgroundService = new BackgroundService(
$c->get(IRootFolder::class),
- $c->getAppDataDir('theming'),
+ $c->get(IAppDataFactory::class)->get('theming'),
$c->get(IAppConfig::class),
$c->get(\OCP\IConfig::class),
$c->get(ISession::class)->get('user_id'),
);
$imageManager = new ImageManager(
$c->get(\OCP\IConfig::class),
- $c->getAppDataDir('theming'),
+ $c->get(IAppDataFactory::class)->get('theming'),
$c->get(IURLGenerator::class),
$c->get(ICacheFactory::class),
$c->get(LoggerInterface::class),
@@ -1025,12 +1027,22 @@ public function __construct($webRoot, \OC\Config $config) {
);
return new ThemingDefaults(
$c->get(\OCP\IConfig::class),
- $c->get(\OCP\IAppConfig::class),
- $c->getL10N('theming'),
+ new AppConfig(
+ $c->get(\OCP\IConfig::class),
+ $c->get(\OCP\IAppConfig::class),
+ 'theming',
+ ),
+ $c->get(IFactory::class)->get('theming'),
$c->get(IUserSession::class),
$c->get(IURLGenerator::class),
$c->get(ICacheFactory::class),
- new Util($c->get(ServerVersion::class), $c->get(\OCP\IConfig::class), $this->get(IAppManager::class), $c->getAppDataDir('theming'), $imageManager),
+ new Util(
+ $c->get(ServerVersion::class),
+ $c->get(\OCP\IConfig::class),
+ $this->get(IAppManager::class),
+ $c->get(IAppDataFactory::class)->get('theming'),
+ $imageManager,
+ ),
$imageManager,
$c->get(IAppManager::class),
$c->get(INavigationManager::class),