diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php index 7b846919db..0314b06b84 100644 --- a/apps/theming/lib/ThemingDefaults.php +++ b/apps/theming/lib/ThemingDefaults.php @@ -28,6 +28,7 @@ namespace OCA\Theming; use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; +use OCP\Files\IRootFolder; class ThemingDefaults extends \OC_Defaults { @@ -38,6 +39,8 @@ class ThemingDefaults extends \OC_Defaults { private $l; /** @var IURLGenerator */ private $urlGenerator; + /** @var IRootFolder */ + private $rootFolder; /** @var string */ private $name; /** @var string */ @@ -58,12 +61,14 @@ class ThemingDefaults extends \OC_Defaults { public function __construct(IConfig $config, IL10N $l, IURLGenerator $urlGenerator, - \OC_Defaults $defaults + \OC_Defaults $defaults, + IRootFolder $rootFolder ) { parent::__construct(); $this->config = $config; $this->l = $l; $this->urlGenerator = $urlGenerator; + $this->rootFolder = $rootFolder; $this->name = $defaults->getName(); $this->url = $defaults->getBaseUrl(); @@ -113,6 +118,34 @@ class ThemingDefaults extends \OC_Defaults { return $this->config->getAppValue('theming', 'color', $this->color); } + /** + * Themed logo url + * + * @return string + */ + public function getLogo() { + $logo = $this->config->getAppValue('theming', 'logoMime'); + if(!$logo || !$this->rootFolder->nodeExists('/themedinstancelogo')) { + return $this->urlGenerator->imagePath('core','logo.svg'); + } else { + return $this->urlGenerator->linkToRoute('theming.Theming.getLogo'); + } + } + + /** + * Themed background image url + * + * @return string + */ + public function getBackground() { + $backgroundLogo = $this->config->getAppValue('theming', 'backgroundMime'); + if(!$backgroundLogo || !$this->rootFolder->nodeExists('/themedbackgroundlogo')) { + return $this->urlGenerator->imagePath('core','background.jpg'); + } else { + return $this->urlGenerator->linkToRoute('theming.Theming.getLoginBackground'); + } + } + /** * Increases the cache buster key */ diff --git a/apps/theming/tests/ThemingDefaultsTest.php b/apps/theming/tests/ThemingDefaultsTest.php index 6ef7deea15..0aa88c3115 100644 --- a/apps/theming/tests/ThemingDefaultsTest.php +++ b/apps/theming/tests/ThemingDefaultsTest.php @@ -27,6 +27,7 @@ use OCA\Theming\ThemingDefaults; use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; +use OCP\Files\IRootFolder; use Test\TestCase; class ThemingDefaultsTest extends TestCase { @@ -40,11 +41,17 @@ class ThemingDefaultsTest extends TestCase { private $defaults; /** @var ThemingDefaults */ private $template; + /** @var IRootFolder */ + private $rootFolder; public function setUp() { + parent::setUp(); $this->config = $this->getMock('\\OCP\\IConfig'); $this->l10n = $this->getMock('\\OCP\\IL10N'); $this->urlGenerator = $this->getMock('\\OCP\\IURLGenerator'); + $this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder') + ->disableOriginalConstructor() + ->getMock(); $this->defaults = $this->getMockBuilder('\\OC_Defaults') ->disableOriginalConstructor() ->getMock(); @@ -68,10 +75,11 @@ class ThemingDefaultsTest extends TestCase { $this->config, $this->l10n, $this->urlGenerator, - $this->defaults + $this->defaults, + $this->rootFolder ); - return parent::setUp(); + //return parent::setUp(); } public function testGetNameWithDefault() { @@ -368,4 +376,44 @@ class ThemingDefaultsTest extends TestCase { $this->assertSame('', $this->template->undo('defaultitem')); } + + public function testGetBackgroundDefault() { + $this->config + ->expects($this->once()) + ->method('getAppValue') + ->with('theming', 'backgroundMime') + ->willReturn(''); + $expected = $this->urlGenerator->imagePath('core','background.jpg'); + $this->assertEquals($expected, $this->template->getBackground()); + } + + public function testGetBackgroundCustom() { + $this->config + ->expects($this->once()) + ->method('getAppValue') + ->with('theming', 'backgroundMime') + ->willReturn('image/svg+xml'); + $expected = $this->urlGenerator->linkToRoute('theming.Theming.getLoginBackground'); + $this->assertEquals($expected, $this->template->getBackground()); + } + + public function testGetLogoDefault() { + $this->config + ->expects($this->once()) + ->method('getAppValue') + ->with('theming', 'logoMime') + ->willReturn(''); + $expected = $this->urlGenerator->imagePath('core','logo.svg'); + $this->assertEquals($expected, $this->template->getLogo()); + } + + public function testGetLogoCustom() { + $this->config + ->expects($this->once()) + ->method('getAppValue') + ->with('theming', 'logoMime') + ->willReturn('image/svg+xml'); + $expected = $this->urlGenerator->linkToRoute('theming.Theming.getLogo'); + $this->assertEquals($expected, $this->template->getLogo()); + } } diff --git a/lib/private/Server.php b/lib/private/Server.php index 86eee54be7..02419e9a5e 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -650,12 +650,13 @@ class Server extends ServerContainer implements IServerContainer { $classExists = false; } - if ($classExists && $this->getConfig()->getSystemValue('installed', false) && $this->getAppManager()->isInstalled('theming')) { + if ($classExists && $c->getConfig()->getSystemValue('installed', false) && $c->getAppManager()->isInstalled('theming')) { return new ThemingDefaults( - $this->getConfig(), - $this->getL10N('theming'), - $this->getURLGenerator(), - new \OC_Defaults() + $c->getConfig(), + $c->getL10N('theming'), + $c->getURLGenerator(), + new \OC_Defaults(), + $c->getRootFolder() ); } return new \OC_Defaults();