From 2f38ff07761ba14181a82a2610ac678a603cc0c2 Mon Sep 17 00:00:00 2001 From: nox Date: Mon, 2 Dec 2019 22:49:12 +0100 Subject: [PATCH] Mise en place du tableau de bord Admin - Etape 1 --- .gitignore | 6 +- config/config-backup.php | 55 +++++++++++ public/index.php | 12 +-- public/models/connexion.php | 3 +- src/Account/Action/ProfilAction.php | 4 +- src/Admin/AdminModule.php | 36 +++++-- src/Admin/DashboardAction.php | 31 +++++++ src/Admin/Entity/User.php | 32 +++++++ src/Admin/Table/UserTable.php | 32 +++++++ src/Admin/views/dashboard.twig | 59 ++++++++++++ src/Admin/views/layout.twig | 57 ++++++++---- src/Auth/Action/LoginAttemptAction.php | 10 +- src/Auth/Action/LogoutAction.php | 4 +- src/Contact/ContactAction.php | 4 +- src/Framework/Auth/RoleMiddleware.php | 14 ++- src/Framework/Auth/RoleMiddlewareFactory.php | 4 +- src/Framework/SwiftMailerFactory.php | 3 +- src/Framework/Twig/AntenneExtension.php | 98 -------------------- src/Gmarche/Actions/AntenneShowAction.php | 4 +- src/Gmarche/Actions/RegionIndexAction.php | 9 +- src/Product/Actions/ProductIndexAction.php | 4 +- src/Product/Actions/RechIndexAction.php | 4 +- views/layout.twig | 10 +- 23 files changed, 340 insertions(+), 155 deletions(-) create mode 100644 config/config-backup.php create mode 100644 src/Admin/DashboardAction.php create mode 100644 src/Admin/Entity/User.php create mode 100644 src/Admin/Table/UserTable.php create mode 100644 src/Admin/views/dashboard.twig delete mode 100644 src/Framework/Twig/AntenneExtension.php diff --git a/.gitignore b/.gitignore index 4df4448..63eb14d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,8 @@ config/config.php .idea -/public/uploads -/tmp +public/uploads +tmp vendor composer.json composer.lock -/src/Framework/SwiftMailerFactory.php \ No newline at end of file +src/Framework/SwiftMailerFactory.php \ No newline at end of file diff --git a/config/config-backup.php b/config/config-backup.php new file mode 100644 index 0000000..d4a789c --- /dev/null +++ b/config/config-backup.php @@ -0,0 +1,55 @@ + \DI\env('ENV', 'production'), + /*'env' => \DI\env('ENV', 'development'),*/ + 'database.host' => $host, + //'database.username' => 'guser', + 'database.username' => $username, + //'database.password' => 'kptgT81U7nzYWHBdQ9', + 'database.password' => $password, + 'database.name' => $database_name, + 'views.path' => dirname(__DIR__) . '/views', + 'twig.extensions' => [ + \DI\get(RouterTwigExtension::class), + \DI\get(PagerFantaExtension::class), + \DI\get(TextExtension::class), + \DI\get(TimeExtension::class), + \DI\get(FlashExtension::class), + \DI\get(FormExtension::class), + \DI\get(CsrfExtension::class), + \DI\get(UrlExtension::class) + ], + SessionInterface::class => \DI\object(PHPSession::class), + CsrfMiddleware::class => \DI\object()->constructor(\DI\get(SessionInterface::class)), + Router::class => \DI\factory(RouterFactory::class), + RendererInterface::class => \DI\factory(TwigRendererFactory::class), + \PDO::class => function (\Psr\Container\ContainerInterface $c) { + return new PDO( + 'mysql:host='. $c->get('database.host') . ';dbname=' . $c->get('database.name'), + $c->get('database.username'), + $c->get('database.password'), + [ + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION + ] + ); + }, + // MAILER + 'mail.to' => 'mailto@admin.fr', + 'mail.from' => 'no-reply@admin.fr', + Swift_Mailer::class => \DI\factory(\Framework\SwiftMailerFactory::class) +]; \ No newline at end of file diff --git a/public/index.php b/public/index.php index 8c8159b..8756a1f 100644 --- a/public/index.php +++ b/public/index.php @@ -34,18 +34,14 @@ $app = (new \Framework\App( $chemin_new .'config/apply.php')) $container = $app->getContainer(); -// Pose un problème -//$container->get(\Framework\Router::class)->get('/', \App\Gmarche\Actions\RegionIndexAction::class, 'home'); - $app->pipe(Whoops::class); $app->pipe(TrailingSlashMiddleware::class); $app->pipe(\App\Auth\ForbiddenMiddleware::class); -// admin pose problème -//$app->pipe( -// $container->get('admin.prefix'), -// $container->get(RoleMiddlewareFactory::class)->makeForRole('admin') -// ); +$app->pipe( + $container->get('admin.prefix'), + $container->get(RoleMiddlewareFactory::class)->makeForRole('0','1') + ); $app->pipe(MethodMiddleware::class) ->pipe(RendererRequestMiddleware::class) diff --git a/public/models/connexion.php b/public/models/connexion.php index 951db35..1c7c725 100644 --- a/public/models/connexion.php +++ b/public/models/connexion.php @@ -8,7 +8,7 @@ try { if (isset($_POST['nom_connecte']) && isset($_POST['mdp']) != "") { $params["username"] = $_POST['nom_connecte']; - $requete = "SELECT username, password + $requete = "SELECT username, password, role FROM users WHERE username = :username"; $query = $bdd->prepare($requete); @@ -17,6 +17,7 @@ try { if (password_verify($_POST['mdp'],$row['password'])) { session_start(); $_SESSION['user']=$row['username']; + $_SESSION['role']=$row['role']; echo '{"valide":true,"username":"'.$row['username'].'"}'; } else { echo '{"valide":false}'; diff --git a/src/Account/Action/ProfilAction.php b/src/Account/Action/ProfilAction.php index 7ab019e..805c4e6 100644 --- a/src/Account/Action/ProfilAction.php +++ b/src/Account/Action/ProfilAction.php @@ -28,7 +28,9 @@ class ProfilAction public function __invoke(ServerRequestInterface $request) { /* Transmission du nom de l'utilistateur connecté à la vue Twig */ - session_start(); + if (!isset($_SESSION)) { + session_start(); + } if (isset($_SESSION['user'])) { $nom_user = $_SESSION['user']; } else { diff --git a/src/Admin/AdminModule.php b/src/Admin/AdminModule.php index 8f28a30..8e582e8 100644 --- a/src/Admin/AdminModule.php +++ b/src/Admin/AdminModule.php @@ -2,8 +2,8 @@ namespace App\Admin; -use App\Product\Actions\ProductIndexAction; -use App\Product\Actions\ProductCrudAction; +use App\Admin\Table\UserTable; +use Framework\Auth; use Framework\Module; use Framework\Renderer\RendererInterface; use Framework\Renderer\TwigRenderer; @@ -13,19 +13,41 @@ class AdminModule extends Module { const DEFINITIONS = __DIR__ . '/config.php'; + /** + * @var Auth + */ + private $auth; public function __construct( RendererInterface $renderer, Router $router, AdminTwigExtension $adminTwigExtension, + UserTable $userTable, + Auth $auth, string $prefix - ) { - + ) + { + $this->userTable = $userTable; + $this->auth = $auth; $renderer->addPath('admin', __DIR__ . '/views'); + $name_user = $this->auth->getUser()->username; + //$role = $user->getRoles(); + $role = $_SESSION['role']; + $page = $params['p'] ?? 1; // Si la page n'est pas définie, on l'initialise à 1 + //$liste_users = $this->userTable->findAll()->paginate(25, $page); + $liste_adminGeneral = $this->userTable->findAdminUsers('1'); + $liste_adminAntenne = $this->userTable->findAdminUsers('2'); + $liste_users = $this->userTable->findAdminUsers('3'); - //$router->get('/machin', ProductCrudAction::class, 'machin.bidule'); // ProductIndexAction - /*if ($renderer instanceof TwigRenderer) { + $router->get($prefix, DashboardAction::class, 'admin'); + $router->post($prefix, DashboardAction::class); + if ($renderer instanceof TwigRenderer) { $renderer->getTwig()->addExtension($adminTwigExtension); - }*/ + $renderer->getTwig()->addGlobal('role',$role); + $renderer->getTwig()->addGlobal('name_user',$name_user); + $renderer->getTwig()->addGlobal('liste_adminGeneral',$liste_adminGeneral); + $renderer->getTwig()->addGlobal('liste_adminAntenne',$liste_adminAntenne); + $renderer->getTwig()->addGlobal('liste_users',$liste_users); + } } } diff --git a/src/Admin/DashboardAction.php b/src/Admin/DashboardAction.php new file mode 100644 index 0000000..0052620 --- /dev/null +++ b/src/Admin/DashboardAction.php @@ -0,0 +1,31 @@ +renderer = $renderer; + // $this->widgets = $widgets; + } + + public function __invoke() + { + if ($request->getMethod() === 'GET') { + /*$widgets = array_reduce($this->widgets, function (string $html, AdminWidgetInterface $widget) { + return $html . $widget->render(); + }, '');*/ + return $this->renderer->render('@admin/dashboard'); + } + } +} diff --git a/src/Admin/Entity/User.php b/src/Admin/Entity/User.php new file mode 100644 index 0000000..ae35b84 --- /dev/null +++ b/src/Admin/Entity/User.php @@ -0,0 +1,32 @@ +pdo); + return $this->makeQuery() + ->select('u.*') + ->where("u.role = $role") + ->order('u.username ASC'); + } + + public function findRole($username): Query + { + //$region = new RegionTable($this->pdo); + return $this->makeQuery() + ->select('u.role') + ->where("u.username = $username"); + } + +} diff --git a/src/Admin/views/dashboard.twig b/src/Admin/views/dashboard.twig new file mode 100644 index 0000000..b4788d6 --- /dev/null +++ b/src/Admin/views/dashboard.twig @@ -0,0 +1,59 @@ +{% extends '@admin/layout.twig' %} + +{% block body %} +

Tableau de bord -

+

+ {% if role == '0' %} Super Admin{% endif %} + {% if role == '1' %} Admin général{% endif %} + {% if role == '2' %} Admin Antenne{% endif %} +

+ +

+ {% if role == '0' %} +

Liste des admins généraux

+ + {% endif %} + {% if (role == '0' or role == '1') %} +

Liste des admins Antenne

+ + {% endif %} + {% if (role == '0' or role == '1' or role == '2') %} +

Liste des utilisateurs

+ + {% endif %} +

+ {% if (role == '0' or role == '1') %} +

Gestion d'une antenne

+ {% endif %} +

+ {% if (role == '0' or role == '1' or role == '2') %} +

Gestion d'un G-Marché

+ {% endif %} +
+ {{ widgets | raw }} +
+{% endblock %} \ No newline at end of file diff --git a/src/Admin/views/layout.twig b/src/Admin/views/layout.twig index 93024c9..27072cc 100644 --- a/src/Admin/views/layout.twig +++ b/src/Admin/views/layout.twig @@ -1,7 +1,7 @@ - {% block title "Mon site " %} + {% block title "Ğ1-Marché - Administration" %}