]> source.dussan.org Git - nextcloud-server.git/commitdiff
Provide "server.css" URL in ThemingController response
authorDaniel Calviño Sánchez <danxuliu@gmail.com>
Thu, 10 Aug 2017 09:33:12 +0000 (11:33 +0200)
committerDaniel Calviño Sánchez <danxuliu@gmail.com>
Thu, 10 Aug 2017 11:44:49 +0000 (13:44 +0200)
Pull request #5584 made cached SCSS files depend on a hash of the base
URL, so the "/css/core/server.css" file does no longer exist. The
"server.css" URL must be known by the Theming app in order to update the
stylesheets when previewing the changes to the theme, so the
DataResponse from the controller now provides the full URL to the
"server.css" file that has to be reloaded (if any).

The "server.css" URL provided by the response will be taken into account
by the JavaScript front-end in a following commit.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
apps/theming/lib/Controller/ThemingController.php
apps/theming/tests/Controller/ThemingControllerTest.php

index 225673079a3f6aa04b0d83c92a0dd3eff000a8fe..b409d309f4d4acb80a9a2b33395254a6af84f353 100644 (file)
@@ -73,6 +73,8 @@ class ThemingController extends Controller {
        private $appData;
        /** @var SCSSCacher */
        private $scssCacher;
+       /** @var IURLGenerator */
+       private $urlGenerator;
 
        /**
         * ThemingController constructor.
@@ -87,6 +89,7 @@ class ThemingController extends Controller {
         * @param ITempManager $tempManager
         * @param IAppData $appData
         * @param SCSSCacher $scssCacher
+        * @param IURLGenerator $urlGenerator
         */
        public function __construct(
                $appName,
@@ -98,7 +101,8 @@ class ThemingController extends Controller {
                IL10N $l,
                ITempManager $tempManager,
                IAppData $appData,
-               SCSSCacher $scssCacher
+               SCSSCacher $scssCacher,
+               IURLGenerator $urlGenerator
        ) {
                parent::__construct($appName, $request);
 
@@ -110,6 +114,7 @@ class ThemingController extends Controller {
                $this->tempManager = $tempManager;
                $this->appData = $appData;
                $this->scssCacher = $scssCacher;
+               $this->urlGenerator = $urlGenerator;
        }
 
        /**
@@ -172,7 +177,8 @@ class ThemingController extends Controller {
                        [
                                'data' =>
                                        [
-                                               'message' => $this->l10n->t('Saved')
+                                               'message' => $this->l10n->t('Saved'),
+                                               'serverCssUrl' => $this->urlGenerator->linkTo('', $this->scssCacher->getCachedSCSS('core', '/core/css/server.scss'))
                                        ],
                                'status' => 'success'
                        ]
@@ -303,7 +309,8 @@ class ThemingController extends Controller {
                                'data' =>
                                        [
                                                'value' => $value,
-                                               'message' => $this->l10n->t('Saved')
+                                               'message' => $this->l10n->t('Saved'),
+                                               'serverCssUrl' => $this->urlGenerator->linkTo('', $this->scssCacher->getCachedSCSS('core', '/core/css/server.scss'))
                                        ],
                                'status' => 'success'
                        ]
index 960ce03b139a5f422e10292b4e8fd15714682f68..5e6e43ca3cbeb13ae05d347baae8fbbb22670bf9 100644 (file)
@@ -70,6 +70,8 @@ class ThemingControllerTest extends TestCase {
        private $appData;
        /** @var SCSSCacher */
        private $scssCacher;
+       /** @var IURLGenerator */
+       private $urlGenerator;
 
        public function setUp() {
                $this->request = $this->createMock(IRequest::class);
@@ -85,6 +87,7 @@ class ThemingControllerTest extends TestCase {
                        ->willReturn(123);
                $this->tempManager = \OC::$server->getTempManager();
                $this->scssCacher = $this->createMock(SCSSCacher::class);
+               $this->urlGenerator = $this->createMock(IURLGenerator::class);
 
                $this->themingController = new ThemingController(
                        'theming',
@@ -96,7 +99,8 @@ class ThemingControllerTest extends TestCase {
                        $this->l10n,
                        $this->tempManager,
                        $this->appData,
-                       $this->scssCacher
+                       $this->scssCacher,
+                       $this->urlGenerator
                );
 
                return parent::setUp();
@@ -129,12 +133,23 @@ class ThemingControllerTest extends TestCase {
                        ->method('t')
                        ->with($message)
                        ->willReturn($message);
+               $this->scssCacher
+                       ->expects($this->once())
+                       ->method('getCachedSCSS')
+                       ->with('core', '/core/css/server.scss')
+                       ->willReturn('/core/css/someHash-server.scss');
+               $this->urlGenerator
+                       ->expects($this->once())
+                       ->method('linkTo')
+                       ->with('', '/core/css/someHash-server.scss')
+                       ->willReturn('/nextcloudWebroot/core/css/someHash-server.scss');
 
                $expected = new DataResponse(
                        [
                                'data' =>
                                        [
                                                'message' => $message,
+                                               'serverCssUrl' => '/nextcloudWebroot/core/css/someHash-server.scss',
                                        ],
                                'status' => 'success',
                        ]
@@ -448,6 +463,16 @@ class ThemingControllerTest extends TestCase {
                        ->method('undo')
                        ->with('MySetting')
                        ->willReturn('MyValue');
+               $this->scssCacher
+                       ->expects($this->once())
+                       ->method('getCachedSCSS')
+                       ->with('core', '/core/css/server.scss')
+                       ->willReturn('/core/css/someHash-server.scss');
+               $this->urlGenerator
+                       ->expects($this->once())
+                       ->method('linkTo')
+                       ->with('', '/core/css/someHash-server.scss')
+                       ->willReturn('/nextcloudWebroot/core/css/someHash-server.scss');
 
                $expected = new DataResponse(
                        [
@@ -455,6 +480,7 @@ class ThemingControllerTest extends TestCase {
                                        [
                                                'value' => 'MyValue',
                                                'message' => 'Saved',
+                                               'serverCssUrl' => '/nextcloudWebroot/core/css/someHash-server.scss',
                                        ],
                                'status' => 'success'
                        ]
@@ -481,6 +507,16 @@ class ThemingControllerTest extends TestCase {
                        ->method('undo')
                        ->with($value)
                        ->willReturn($value);
+               $this->scssCacher
+                       ->expects($this->once())
+                       ->method('getCachedSCSS')
+                       ->with('core', '/core/css/server.scss')
+                       ->willReturn('/core/css/someHash-server.scss');
+               $this->urlGenerator
+                       ->expects($this->once())
+                       ->method('linkTo')
+                       ->with('', '/core/css/someHash-server.scss')
+                       ->willReturn('/nextcloudWebroot/core/css/someHash-server.scss');
                $folder = $this->createMock(ISimpleFolder::class);
                $file = $this->createMock(ISimpleFile::class);
                $this->appData
@@ -503,6 +539,7 @@ class ThemingControllerTest extends TestCase {
                                        [
                                                'value' => $value,
                                                'message' => 'Saved',
+                                               'serverCssUrl' => '/nextcloudWebroot/core/css/someHash-server.scss',
                                        ],
                                'status' => 'success'
                        ]