diff --git a/apps/theming/appinfo/app.php b/apps/theming/appinfo/app.php index 152504c417..941df6f73d 100644 --- a/apps/theming/appinfo/app.php +++ b/apps/theming/appinfo/app.php @@ -23,33 +23,39 @@ * */ -$linkToCSS = \OC::$server->getURLGenerator()->linkToRoute( - 'theming.Theming.getStylesheet', - [ - 'v' => \OC::$server->getConfig()->getAppValue('theming', 'cachebuster', '0'), - ] -); -\OCP\Util::addHeader( - 'link', - [ - 'rel' => 'stylesheet', - 'href' => $linkToCSS, - ] -); - -$linkToJs = \OC::$server->getURLGenerator()->linkToRoute( - 'theming.Theming.getJavascript', - [ - 'v' => \OC::$server->getConfig()->getAppValue('theming', 'cachebuster', '0'), - ] -); -\OCP\Util::addHeader( - 'script', - [ - 'src' => $linkToJs, - 'nonce' => \OC::$server->getContentSecurityPolicyNonceManager()->getNonce() - ], '' -); - $app = new \OCP\AppFramework\App('theming'); -$app->getContainer()->registerCapability(\OCA\Theming\Capabilities::class); +/** @var \OCA\Theming\Util $util */ +$util = $app->getContainer()->query(\OCA\Theming\Util::class); +if(!$util->isAlreadyThemed()) { + + $app->getContainer()->registerCapability(\OCA\Theming\Capabilities::class); + + $linkToCSS = \OC::$server->getURLGenerator()->linkToRoute( + 'theming.Theming.getStylesheet', + [ + 'v' => \OC::$server->getConfig()->getAppValue('theming', 'cachebuster', '0'), + ] + ); + \OCP\Util::addHeader( + 'link', + [ + 'rel' => 'stylesheet', + 'href' => $linkToCSS, + ] + ); + + $linkToJs = \OC::$server->getURLGenerator()->linkToRoute( + 'theming.Theming.getJavascript', + [ + 'v' => \OC::$server->getConfig()->getAppValue('theming', 'cachebuster', '0'), + ] + ); + \OCP\Util::addHeader( + 'script', + [ + 'src' => $linkToJs, + 'nonce' => \OC::$server->getContentSecurityPolicyNonceManager()->getNonce() + ], '' + ); + +} \ No newline at end of file diff --git a/apps/theming/lib/Util.php b/apps/theming/lib/Util.php index 286756a484..1df16ea497 100644 --- a/apps/theming/lib/Util.php +++ b/apps/theming/lib/Util.php @@ -199,4 +199,17 @@ class Util { return $svg; } + /** + * Check if a custom theme is set in the server configuration + * + * @return bool + */ + public function isAlreadyThemed() { + $theme = $this->config->getSystemValue('theme', ''); + if ($theme !== '') { + return true; + } + return false; + } + } diff --git a/apps/theming/tests/UtilTest.php b/apps/theming/tests/UtilTest.php index de6690ffe0..d81c253f98 100644 --- a/apps/theming/tests/UtilTest.php +++ b/apps/theming/tests/UtilTest.php @@ -180,4 +180,24 @@ class UtilTest extends TestCase { $this->assertEquals($expected, $result); } + public function testIsAlreadyThemedFalse() { + $theme = $this->config->getSystemValue('theme', ''); + $this->config->expects($this->once()) + ->method('getSystemValue') + ->with('theme', '') + ->willReturn(''); + $actual = $this->util->isAlreadyThemed(); + $this->assertFalse($actual); + } + + public function testIsAlreadyThemedTrue() { + $theme = $this->config->getSystemValue('theme', ''); + $this->config->expects($this->once()) + ->method('getSystemValue') + ->with('theme', '') + ->willReturn('example'); + $actual = $this->util->isAlreadyThemed(); + $this->assertTrue($actual); + } + } diff --git a/core/js/mimetype.js b/core/js/mimetype.js index 8920fe09a7..ed4fedc7f8 100644 --- a/core/js/mimetype.js +++ b/core/js/mimetype.js @@ -91,7 +91,7 @@ OC.MimeType = { path += icon; } } - if(OCA.Theming) { + if(OCA.Theming && gotIcon === null) { path = OC.generateUrl('/apps/theming/img/core/filetypes/'); path += OC.MimeType._getFile(mimeType, OC.MimeTypeList.files); gotIcon = true; diff --git a/lib/private/URLGenerator.php b/lib/private/URLGenerator.php index 073d40b0de..9c73ba4cbc 100644 --- a/lib/private/URLGenerator.php +++ b/lib/private/URLGenerator.php @@ -166,19 +166,7 @@ class URLGenerator implements IURLGenerator { // Check if the app is in the app folder $path = ''; $themingEnabled = $this->config->getSystemValue('installed', false) && \OCP\App::isEnabled('theming') && \OC_App::isAppLoaded('theming'); - if($themingEnabled && $image === 'favicon.ico' && \OC::$server->getThemingDefaults()->shouldReplaceIcons()) { - $cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0'); - if($app === '') { $app = 'core'; } - $path = $this->linkToRoute('theming.Icon.getFavicon', [ 'app' => $app ]) . '?v='. $cacheBusterValue; - } elseif($themingEnabled && $image === 'favicon-touch.png' && \OC::$server->getThemingDefaults()->shouldReplaceIcons()) { - $cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0'); - if($app === '') { $app = 'core'; } - $path = $this->linkToRoute('theming.Icon.getTouchIcon', [ 'app' => $app ]) . '?v='. $cacheBusterValue; - } elseif($themingEnabled && $image === 'favicon-fb.png' && \OC::$server->getThemingDefaults()->shouldReplaceIcons()) { - $cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0'); - if($app === '') { $app = 'core'; } - $path = $this->linkToRoute('theming.Icon.getTouchIcon', [ 'app' => $app ]) . '?v='. $cacheBusterValue; - } elseif (file_exists(\OC::$SERVERROOT . "/themes/$theme/apps/$app/img/$image")) { + if (file_exists(\OC::$SERVERROOT . "/themes/$theme/apps/$app/img/$image")) { $path = \OC::$WEBROOT . "/themes/$theme/apps/$app/img/$image"; } elseif (!file_exists(\OC::$SERVERROOT . "/themes/$theme/apps/$app/img/$basename.svg") && file_exists(\OC::$SERVERROOT . "/themes/$theme/apps/$app/img/$basename.png")) { @@ -193,6 +181,14 @@ class URLGenerator implements IURLGenerator { } elseif (!file_exists(\OC::$SERVERROOT . "/themes/$theme/core/img/$basename.svg") && file_exists(\OC::$SERVERROOT . "/themes/$theme/core/img/$basename.png")) { $path = \OC::$WEBROOT . "/themes/$theme/core/img/$basename.png"; + } elseif($themingEnabled && $image === "favicon.ico" && \OC::$server->getThemingDefaults()->shouldReplaceIcons()) { + $cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0'); + if($app==="") { $app = "core"; } + $path = $this->linkToRoute('theming.Icon.getFavicon', [ 'app' => $app ]) . '?v='. $cacheBusterValue; + } elseif($themingEnabled && $image === "favicon-touch.png" && \OC::$server->getThemingDefaults()->shouldReplaceIcons()) { + $cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0'); + if($app==="") { $app = "core"; } + $path = $this->linkToRoute('theming.Icon.getTouchIcon', [ 'app' => $app ]) . '?v='. $cacheBusterValue; } elseif ($appPath && file_exists($appPath . "/img/$image")) { $path = \OC_App::getAppWebPath($app) . "/img/$image"; } elseif ($appPath && !file_exists($appPath . "/img/$basename.svg")