From a5757497e5f83fa6e17b43b92aa09ad9a316bdbf Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Sat, 10 Apr 2021 17:02:34 +0200 Subject: [PATCH] Add theme change to /design page --- resources/views/layouts/app.twig | 2 +- resources/views/pages/design.twig | 62 ++++++++++++++++--- src/Controllers/DesignController.php | 35 ++++++++--- .../Unit/Controllers/DesignControllerTest.php | 31 +++++++++- 4 files changed, 112 insertions(+), 18 deletions(-) diff --git a/resources/views/layouts/app.twig b/resources/views/layouts/app.twig index e0ccb246..12e81ac0 100644 --- a/resources/views/layouts/app.twig +++ b/resources/views/layouts/app.twig @@ -1,4 +1,4 @@ -{% set theme = user.settings.theme|default(config('theme')) %} +{% set theme = theme|default(user.settings.theme|default(config('theme'))) %} diff --git a/resources/views/pages/design.twig b/resources/views/pages/design.twig index ed4c9fa4..f9ec6b5a 100644 --- a/resources/views/pages/design.twig +++ b/resources/views/pages/design.twig @@ -8,21 +8,53 @@ {% set types=['default', 'primary', 'success', 'info', 'warning', 'danger'] %} {% set types_buttons=types|merge(['link']) %} {% set lipsum='Lorem ipsum dolor sit amet, consectetur adipisici elit…' %} -{% set linksum='Lorem ipsum dolor link amet, consectetur adipisici elit!' %} +{% set linksum='Lorem ipsum! Dolor link amet, consectetur adipisici elit!' %} {% block content %}
-

{{ block('title') }}

+

{{ block('title') }} {{ themes[theme] }}

-

Elements

+

Elements small

+
+

Headings small

+

H4 small

+
H5 small
+
H6 small
+
-

Headings

-

H4

-
H5
-
H6
+

Lists

+

+ This page should be used when creating and testing new designs to find usability and/or design issues. + {{ lipsum|replace({'…': '.'}) }} +

+
    +
  • Unordered
  • +
  • List
  • +
  • Items
  • +
+
    +
  1. Ordered
  2. +
  3. List
  4. +
  5. Items
  6. +
+

{{ linksum|raw }} {{ lipsum }}

+
+
+

Themes

+
+
+

Tables

@@ -43,6 +75,22 @@
+
+

Navigation Tabs

+ +
+
+

Navigation Pills

+ +
diff --git a/src/Controllers/DesignController.php b/src/Controllers/DesignController.php index 55c064f8..89bced59 100644 --- a/src/Controllers/DesignController.php +++ b/src/Controllers/DesignController.php @@ -2,6 +2,8 @@ namespace Engelsystem\Controllers; +use Engelsystem\Config\Config; +use Engelsystem\Http\Request; use Engelsystem\Http\Response; use Engelsystem\Models\User\State; use Engelsystem\Models\User\User; @@ -11,23 +13,30 @@ class DesignController extends BaseController /** @var Response */ protected $response; + /** @var Config */ + protected $config; + /** * @param Response $response + * @param Config $config */ - public function __construct(Response $response) + public function __construct(Response $response, Config $config) { + $this->config = $config; $this->response = $response; } /** * Show the design overview page * + * @param Request $request + * * @return Response */ - public function index() + public function index(Request $request) { $demoUser = (new User())->forceFill([ - 'id' => 42, + 'id' => 42, 'name' => 'test', ]); $demoUser->__set('state', (new State())->forceFill([ @@ -35,7 +44,7 @@ class DesignController extends BaseController 'arrived' => true, ])); $demoUser2 = (new User())->forceFill([ - 'id' => 1337, + 'id' => 1337, 'name' => 'test2', ]); $demoUser2->__set('state', (new State())->forceFill([ @@ -43,12 +52,22 @@ class DesignController extends BaseController 'arrived' => false, ])); + $themes = $this->config->get('available_themes'); + + $data = [ + 'demo_user' => $demoUser, + 'demo_user_2' => $demoUser2, + 'themes' => $themes, + ]; + + $theme = $request->get('theme'); + if (isset($themes[$theme])) { + $data['theme'] = $theme; + } + return $this->response->withView( 'pages/design', - [ - 'demo_user' => $demoUser, - 'demo_user_2' => $demoUser2, - ] + $data ); } } diff --git a/tests/Unit/Controllers/DesignControllerTest.php b/tests/Unit/Controllers/DesignControllerTest.php index f1b26d07..4f93eed6 100644 --- a/tests/Unit/Controllers/DesignControllerTest.php +++ b/tests/Unit/Controllers/DesignControllerTest.php @@ -2,7 +2,9 @@ namespace Engelsystem\Test\Unit\Controllers; +use Engelsystem\Config\Config; use Engelsystem\Controllers\DesignController; +use Engelsystem\Http\Request; use Engelsystem\Http\Response; use Engelsystem\Test\Unit\TestCase; use PHPUnit\Framework\MockObject\MockObject; @@ -21,10 +23,35 @@ class DesignControllerTest extends TestCase ->method('withView') ->with('pages/design') ->willReturn($response); + $request = new Request(['theme' => 42]); + $config = new Config(); - $controller = new DesignController($response); - $return = $controller->index(); + $controller = new DesignController($response, $config); + $return = $controller->index($request); $this->assertEquals($response, $return); } + + /** + * @covers \Engelsystem\Controllers\DesignController::index + */ + public function testIndexSetTheme() + { + /** @var Response|MockObject $response */ + $response = $this->createMock(Response::class); + $response->expects($this->once()) + ->method('withView') + ->willReturnCallback(function (string $view, array $data) use ($response) { + $this->assertTrue(isset($data['theme'])); + $this->assertEquals('42', $data['theme']); + + return $response; + }); + $request = new Request(); + $request->attributes->set('theme', '42'); + $config = new Config(['available_themes' => ['42' => 'Meaning of Live']]); + + $controller = new DesignController($response, $config); + $controller->index($request); + } }