From c88347614ef5729b385c45a4ef191213a1120d13 Mon Sep 17 00:00:00 2001
From: Moreau Elise <moreau.elise13@gmail.com>
Date: Sun, 4 Oct 2020 19:02:43 +0200
Subject: [PATCH] add flash messages

---
 app/dependencies.php                          |  6 ++-
 app/routes.php                                | 20 ++++++--
 composer.json                                 |  1 +
 composer.lock                                 | 50 ++++++++++++++++++-
 .../Actions/User/CreateUserAction.php         |  8 +--
 src/Application/Actions/User/UserAction.php   |  4 +-
 .../Middleware/SessionMiddleware.php          |  6 +--
 templates/common/layout.twig                  |  5 ++
 8 files changed, 84 insertions(+), 16 deletions(-)

diff --git a/app/dependencies.php b/app/dependencies.php
index af8caff..70ef431 100644
--- a/app/dependencies.php
+++ b/app/dependencies.php
@@ -13,6 +13,7 @@ use Doctrine\ORM\EntityManager;
 use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
 use Doctrine\ORM\Tools\Setup;
 use Slim\Views\Twig;
+use Slim\Flash\Messages;
 
 
 return function (ContainerBuilder $containerBuilder) {
@@ -73,8 +74,9 @@ return function (ContainerBuilder $containerBuilder) {
 
             return $twig;
         },
-
-
+        Messages::class => function (ContainerInterface $container) {
+            return new Messages();
+        }
         ]
     );
 };
diff --git a/app/routes.php b/app/routes.php
index cf62c0d..3ebf2ca 100644
--- a/app/routes.php
+++ b/app/routes.php
@@ -23,6 +23,7 @@ use Slim\App;
 use Slim\Interfaces\RouteCollectorProxyInterface as Group;
 
 use Slim\Views\Twig;
+use Slim\Flash\Messages;
 
 
 return function (App $app) {
@@ -43,13 +44,24 @@ return function (App $app) {
         }
     );
 
-    $app->get('/login', function (Request $request, Response $response) {
-        return $this->get(Twig::class)->render($response, "/user/log_in.twig", []);
+    $app->get('/map', function (Request $request, Response $response) {
+        return $this->get(Twig::class)->render($response, "/map/map.twig", []);
         }
     );
 
-    $app->get('/map', function (Request $request, Response $response) {
-        return $this->get(Twig::class)->render($response, "/map/map.twig", []);
+    $app->group('/login', function (Group $group) {
+            $group->get('', function(Request $request, Response $response){
+                if (isset($_SESSION['userId'])) {
+                    return $response
+                        ->withHeader('Location', '/account')
+                        ->withStatus(302);
+                }
+                        
+                $message = $this->get(Messages::class)->getFirstMessage('creation');
+
+                return $this->get(Twig::class)->render($response, "/user/log_in.twig", ["message" => $message]);
+            });
+            $group->post('', LogInUserAction::class);    
         }
     );
 
diff --git a/composer.json b/composer.json
index ff1f2d0..c5e9a9c 100644
--- a/composer.json
+++ b/composer.json
@@ -27,6 +27,7 @@
         "doctrine/orm": "^2.7",
         "monolog/monolog": "^2.1",
         "php-di/php-di": "^6.2",
+        "slim/flash": "^0.4.0",
         "slim/psr7": "^1.1",
         "slim/slim": "^4.5",
         "slim/twig-view": "^3.1",
diff --git a/composer.lock b/composer.lock
index d6dcc8a..010db60 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "7387974bdd21dd35717da3f375d6af23",
+    "content-hash": "f987a2008db776ca427aaa7be93e9c2b",
     "packages": [
         {
             "name": "doctrine/annotations",
@@ -1849,6 +1849,54 @@
             "description": "A polyfill for getallheaders.",
             "time": "2019-03-08T08:55:37+00:00"
         },
+        {
+            "name": "slim/flash",
+            "version": "0.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/slimphp/Slim-Flash.git",
+                "reference": "9aaff5fded3b54f4e519ec3d4ac74d3d1f2cbbbc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/slimphp/Slim-Flash/zipball/9aaff5fded3b54f4e519ec3d4ac74d3d1f2cbbbc",
+                "reference": "9aaff5fded3b54f4e519ec3d4ac74d3d1f2cbbbc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Slim\\Flash\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Josh Lockhart",
+                    "email": "hello@joshlockhart.com",
+                    "homepage": "http://joshlockhart.com"
+                }
+            ],
+            "description": "Slim Framework Flash message service provider",
+            "homepage": "http://slimframework.com",
+            "keywords": [
+                "flash",
+                "framework",
+                "message",
+                "provider",
+                "slim"
+            ],
+            "time": "2017-10-22T10:35:05+00:00"
+        },
         {
             "name": "slim/psr7",
             "version": "1.2.0",
diff --git a/src/Application/Actions/User/CreateUserAction.php b/src/Application/Actions/User/CreateUserAction.php
index 62ec546..7320d26 100755
--- a/src/Application/Actions/User/CreateUserAction.php
+++ b/src/Application/Actions/User/CreateUserAction.php
@@ -52,10 +52,10 @@ class CreateUserAction extends UserAction
 
         $this->logger->info("User has been created.");
 
-        return $this->twig->render(
-            $this->response, "/user/user_profile.twig",
-            ["user" => $user, "id" => $user->getId()]
-        );
+        $this->flash->addMessage('creation', 'Your account has been created. Please log in.');
+        return $this->response
+            ->withHeader('Location', '/login')
+            ->withStatus(302);
     }
 
     /**
diff --git a/src/Application/Actions/User/UserAction.php b/src/Application/Actions/User/UserAction.php
index 153c815..ff9ba23 100755
--- a/src/Application/Actions/User/UserAction.php
+++ b/src/Application/Actions/User/UserAction.php
@@ -7,6 +7,7 @@ use App\Application\Actions\Action;
 use Psr\Log\LoggerInterface;
 use Doctrine\ORM\EntityManager;
 use Slim\Views\Twig;
+use Slim\Flash\Messages;
 
 abstract class UserAction extends Action
 {
@@ -19,11 +20,12 @@ abstract class UserAction extends Action
      * @param LoggerInterface $logger
      * @param UserRepository  $userRepository
      */
-    public function __construct(LoggerInterface $logger, EntityManager $em, Twig $twig)
+    public function __construct(LoggerInterface $logger, EntityManager $em, Twig $twig, Messages $flash)
     {
         parent::__construct($logger);
         $this->userRepository = $em->getRepository('App\Domain\User\User');
         $this->em = $em;
+        $this->flash = $flash;
 
         $this->twig = $twig;
 
diff --git a/src/Application/Middleware/SessionMiddleware.php b/src/Application/Middleware/SessionMiddleware.php
index cbfc1d6..4623d7f 100755
--- a/src/Application/Middleware/SessionMiddleware.php
+++ b/src/Application/Middleware/SessionMiddleware.php
@@ -15,10 +15,8 @@ class SessionMiddleware implements Middleware
      */
     public function process(Request $request, RequestHandler $handler): Response
     {
-        if (isset($_SERVER['HTTP_AUTHORIZATION'])) {
-            session_start();
-            $request = $request->withAttribute('session', $_SESSION);
-        }
+        session_start();
+        $request = $request->withAttribute('session', $_SESSION);
 
         return $handler->handle($request);
     }
diff --git a/templates/common/layout.twig b/templates/common/layout.twig
index caeec15..221c349 100644
--- a/templates/common/layout.twig
+++ b/templates/common/layout.twig
@@ -40,6 +40,11 @@
     </div>
     {% endblock %}
     <div class="content">
+    {% if message %}
+    <div class="ui message">
+        {{message}}
+    </div>
+    {% endif %}
     {% block content %} {% endblock %}
     </div>
     {% block footer %}
-- 
GitLab