Gestion du statut actif/inactif des users - Ajout des sessions pour twig

This commit is contained in:
nox 2019-12-23 02:09:54 +01:00
parent 37468993f6
commit bf65d62297
30 changed files with 250 additions and 118 deletions

View File

@ -2,6 +2,7 @@
include 'config.php'; include 'config.php';
use App\Framework\Twig\UrlExtension; use App\Framework\Twig\UrlExtension;
use App\Framework\Twig\VariableExtension;
use Framework\Middleware\CsrfMiddleware; use Framework\Middleware\CsrfMiddleware;
use Framework\Renderer\RendererInterface; use Framework\Renderer\RendererInterface;
use Framework\Renderer\TwigRendererFactory; use Framework\Renderer\TwigRendererFactory;
@ -29,7 +30,8 @@ return [
\DI\get(FlashExtension::class), \DI\get(FlashExtension::class),
\DI\get(FormExtension::class), \DI\get(FormExtension::class),
\DI\get(CsrfExtension::class), \DI\get(CsrfExtension::class),
\DI\get(UrlExtension::class) \DI\get(UrlExtension::class),
\DI\get(VariableExtension::class)
], ],
SessionInterface::class => \DI\object(PHPSession::class), SessionInterface::class => \DI\object(PHPSession::class),
CsrfMiddleware::class => \DI\object()->constructor(\DI\get(SessionInterface::class)), CsrfMiddleware::class => \DI\object()->constructor(\DI\get(SessionInterface::class)),

View File

@ -15,7 +15,7 @@ try {
$query->execute($params); $query->execute($params);
$row = $query->fetch(PDO::FETCH_ASSOC); $row = $query->fetch(PDO::FETCH_ASSOC);
if (password_verify($_POST['mdp'],$row['password'])) { if (password_verify($_POST['mdp'],$row['password'])) {
session_start(); //session_start();
$_SESSION['user']=$row['username']; $_SESSION['user']=$row['username'];
$_SESSION['role']=$row['role']; $_SESSION['role']=$row['role'];
echo '{"valide":true,"username":"'.$row['username'].'"}'; echo '{"valide":true,"username":"'.$row['username'].'"}';

View File

@ -1,5 +1,5 @@
<?php <?php
session_start(); //session_start();
ini_set('display_errors', 0); ini_set('display_errors', 0);
include '../../config/config.php'; include '../../config/config.php';
$antenne_slug = $_GET['antenne_slug']; $antenne_slug = $_GET['antenne_slug'];

View File

@ -1,5 +1,5 @@
<?php <?php
session_start(); //session_start();
ini_set('display_errors', 0); ini_set('display_errors', 0);
include '../../config/config.php'; include '../../config/config.php';
$antenne_slug = $_GET['antenne_slug']; $antenne_slug = $_GET['antenne_slug'];

View File

@ -5,6 +5,7 @@ use App\Auth\UserTable;
use Framework\Auth; use Framework\Auth;
use Framework\Renderer\RendererInterface; use Framework\Renderer\RendererInterface;
use Framework\Response\RedirectResponse; use Framework\Response\RedirectResponse;
use Framework\Router;
use Framework\Session\FlashService; use Framework\Session\FlashService;
use Framework\Validator; use Framework\Validator;
use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ServerRequestInterface;
@ -33,36 +34,53 @@ class ActiveAction
RendererInterface $renderer, RendererInterface $renderer,
Auth $auth, Auth $auth,
FlashService $flashService, FlashService $flashService,
Router $router,
UserTable $userTable UserTable $userTable
) { ) {
$this->renderer = $renderer; $this->renderer = $renderer;
$this->auth = $auth; $this->auth = $auth;
$this->flashService = $flashService; $this->flashService = $flashService;
$this->router = $router;
$this->userTable = $userTable; $this->userTable = $userTable;
} }
public function __invoke(ServerRequestInterface $request) public function __invoke(ServerRequestInterface $request)
{ {
$user = $this->auth->getUser(); // $user = $this->auth->getUser();
var_dump($user);
die();
$params = $request->getParsedBody(); $params = $request->getParsedBody();
$url_part = explode('/',$_SERVER['HTTP_REFERER']);
//var_dump($url_part);
//var_dump($_SERVER['HTTP_REFERER']);
$chemin = $url_part[3].'/'.$url_part[4];
//echo "<br /><br />";
//echo "chemin=".$chemin;
//die();
//echo "user_id2=".$params['id'];
//die();
$validator = (new Validator($params)) $validator = (new Validator($params))
->required('username', 'actif'); ->required('username', 'actif');
if ($validator->isValid()) { if ($validator->isValid()) {
if ($params['actif']) {
$params['actif'] = '0';
} else {
$params['actif'] = '1';
}
$userParams = [ $userParams = [
'username' => $params['username'], 'username' => $params['username'],
'actif' => $params['actif'] 'actif' => $params['actif']
]; ];
$this->userTable->update($user->id, $userParams); $this->userTable->update($params['id'], $userParams);
if (!$params['actif']) { if (!$params['actif']) {
$this->flashService->success("L'utilisateur ".$params['username']." a bien été désactivé"); $this->flashService->success("L'utilisateur ".$params['username']." a bien été désactivé");
} else { } else {
$this->flashService->success("L'utilisateur ".$params['username']." a bien été réactivé"); $this->flashService->success("L'utilisateur ".$params['username']." a bien été réactivé");
} }
return new RedirectResponse($request->getUri()->getPath()); return new RedirectResponse($chemin);
} }
$errors = $validator->getErrors(); $errors = $validator->getErrors();
return $this->renderer->render('@account/account', compact('user', 'errors')); return $this->renderer->render('@account/account', compact('user', 'errors'));

View File

@ -36,7 +36,7 @@ class ProfilAction
{ {
/* Transmission du nom et de l'avatar de l'utilisateur connecté à la vue Twig */ /* Transmission du nom et de l'avatar de l'utilisateur connecté à la vue Twig */
if(!isset($_SESSION)) { if(!isset($_SESSION)) {
session_start(); //session_start();
} }
if (isset($_SESSION['user'])) { if (isset($_SESSION['user'])) {
$nom_user = $_SESSION['user']; $nom_user = $_SESSION['user'];

View File

@ -2,7 +2,6 @@
namespace App\Admin; namespace App\Admin;
use App\Account\Action\AccountAction;
use App\Account\Action\ActiveAction; use App\Account\Action\ActiveAction;
use App\Auth\Action\PasswordForgetAction; use App\Auth\Action\PasswordForgetAction;
use Framework\Auth\LoggedInMiddleware; use Framework\Auth\LoggedInMiddleware;
@ -22,13 +21,14 @@ class AdminModule extends Module
string $prefix string $prefix
) )
{ {
$router->get('/dashboard', DashboardAction::class, 'dashboard'); $router->get('/dashboard', [LoggedInMiddleware::class, DashboardAction::class], 'dashboard');
$router->get('/dashboard/{user:[a-zA-Z\-0-9]+}', [LoggedInMiddleware::class, DashboardUserAction::class], 'dashboard.user'); $router->get('/dashboard/{user:[a-zA-Z\-0-9]+}', [LoggedInMiddleware::class, DashboardUserAction::class], 'dashboard.user');
$router->get('/activation', ActiveAction::class, 'account.active'); $router->get('/activation', ActiveAction::class, 'account.active');
$router->post('/activation', ActiveAction::class); $router->post('/activation', ActiveAction::class);
$router->any('/password_reinit', PasswordForgetAction::class, 'auth.password'); $router->any('/password_reinit', PasswordForgetAction::class, 'auth.password');
if ($renderer instanceof TwigRenderer) { if ($renderer instanceof TwigRenderer) {
$renderer->getTwig()->addExtension($adminTwigExtension); $renderer->getTwig()->addExtension($adminTwigExtension);
// $renderer->getTwig()->addExtension($variableExtension);
} }
} }
} }

View File

@ -4,6 +4,7 @@ namespace App\Admin;
use App\Admin\Table\UserTable; use App\Admin\Table\UserTable;
use App\Gmarche\Table\AntenneTable; use App\Gmarche\Table\AntenneTable;
use Framework\Renderer\RendererInterface; use Framework\Renderer\RendererInterface;
use Framework\Session\SessionInterface;
use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ServerRequestInterface;
class DashboardAction class DashboardAction
@ -18,7 +19,10 @@ class DashboardAction
*/ */
private $antenneTable; private $antenneTable;
/**
* @var SessionInterface
*/
private $session;
/** /**
* @var UserTable * @var UserTable
*/ */
@ -27,10 +31,12 @@ class DashboardAction
public function __construct( public function __construct(
RendererInterface $renderer, RendererInterface $renderer,
AntenneTable $antenneTable, AntenneTable $antenneTable,
SessionInterface $session,
UserTable $userTable) UserTable $userTable)
{ {
$this->renderer = $renderer; $this->renderer = $renderer;
$this->antenneTable = $antenneTable; $this->antenneTable = $antenneTable;
$this->session = $session;
$this->userTable = $userTable; $this->userTable = $userTable;
} }
@ -41,25 +47,26 @@ class DashboardAction
public function __invoke(ServerRequestInterface $request) public function __invoke(ServerRequestInterface $request)
{ {
if ($request->getMethod() === 'GET') { if ($request->getMethod() === 'GET') {
$role = $this->session->get('role', []);
$username = $this->session->get('username', []);
$this->renderer->addPath('admin', __DIR__ . '/views'); $this->renderer->addPath('admin', __DIR__ . '/views');
$page = $params['p'] ?? 1; // Si la page n'est pas définie, on l'initialise à 1 $page = $params['p'] ?? 1; // Si la page n'est pas définie, on l'initialise à 1
$liste_adminGeneral = $this->userTable->findAdminUsers('1'); $liste_adminGeneral = $this->userTable->findAdminUsers('1');
$liste_adminAntenne = $this->userTable->findAdminUsers('2'); $liste_adminAntenne = $this->userTable->findAdminUsers('2');
$liste_users_suivi = $this->userTable->findUsers('3'); $liste_users_suivi = $this->userTable->findUsers('3');
$listeAntennes = $this->antenneTable->findAllAntennes(); $listeAntennes = $this->antenneTable->findAllAntennes();
if (!isset($_SESSION)) { if ($this->session->get('username')) {
session_start(); $this->session->delete('role');
} $this->session->delete('username');
if (isset($_SESSION['user'])) { $this->session->set('role',$role);
$nom_user = $_SESSION['user']; $this->session->set('username',$username);
$role = $_SESSION['role'];
} else { } else {
$nom_user = ''; $this->session->set('username',$username);
$role = '3'; $this->session->set('role',$role);
} }
return $this->renderer->render('@admin/dashboard', return $this->renderer->render('@admin/dashboard',
compact('nom_user','role', 'liste_adminGeneral', 'liste_users_suivi', compact('username','liste_adminGeneral', 'liste_users_suivi',
'liste_adminAntenne', 'listeAntennes')); 'liste_adminAntenne', 'listeAntennes'));
} }
} }

View File

@ -52,25 +52,16 @@ class DashboardUserAction
$this->renderer->addPath('admin', __DIR__ . '/views'); $this->renderer->addPath('admin', __DIR__ . '/views');
$liste_users_suivi = $this->userTableAdmin->findUsers('3'); $liste_users_suivi = $this->userTableAdmin->findUsers('3');
$username = $request->getAttribute('user'); $url_part = explode('/',$_SERVER['REQUEST_URI']);
$user_affiche = $url_part[2];
$profil_user = $this->userTable->findBy('username', $username); $user = $this->userTable->findBy('username', $user_affiche);
// var_dump($profil_user); $id_affiche = $user->id;
// die(); $actif_affiche = $user->actif;
$listeAntennes = $this->antenneTable->findAllAntennes(); $listeAntennes = $this->antenneTable->findAllAntennes();
if (!isset($_SESSION)) {
session_start();
}
if (isset($_SESSION['user'])) {
$nom_user = $_SESSION['user'];
$role = $_SESSION['role'];
} else {
$nom_user = '';
$role = '3';
}
return $this->renderer->render('@admin/dashboard_user', return $this->renderer->render('@admin/dashboard_user',
compact('nom_user','role','username','profil_user','liste_users_suivi','listeAntennes')); compact('user_affiche','id_affiche', 'actif_affiche', 'user','liste_users_suivi','listeAntennes'));
} }
} }
} }

View File

@ -25,6 +25,7 @@ class UserTable extends Table
} }
return $list; return $list;
} }
public function findAntennebyId(int $id_antenne): Query public function findAntennebyId(int $id_antenne): Query
{ {
$antenne = new AntenneTable($this->pdo); $antenne = new AntenneTable($this->pdo);
@ -32,13 +33,15 @@ class UserTable extends Table
->select('a.name as nameAntenne') ->select('a.name as nameAntenne')
->where("a.id = $id_antenne"); ->where("a.id = $id_antenne");
} }
public function findUsers($role): Query public function findUsers($role): Query
{ {
return $this->makeQuery() return $this->makeQuery()
->select('u.*') ->select('u.*')
->where("u.role = '".$role."'") ->where("u.role = '" . $role . "'")
->order('u.username ASC'); ->order('u.username ASC');
} }
/*public function findUsersSuivi($role): Query /*public function findUsersSuivi($role): Query
{ {
$antenne = new AntenneTable($this->pdo); $antenne = new AntenneTable($this->pdo);
@ -55,11 +58,18 @@ class UserTable extends Table
->where("u.role = $role") ->where("u.role = $role")
->order('u.username ASC'); ->order('u.username ASC');
} }
public function findRole($username): Query public function findRole($username): Query
{ {
return $this->makeQuery() return $this->makeQuery()
->select('u.role') ->select('u.role')
->where("u.username = $username"); ->where("u.username = '" . $username . "'");
} }
public function findRole2($username)
{
return $this->pdo
->query("SELECT role FROM {$this->table} WHERE username='".$username."'")
->fetch();
}
} }

View File

@ -1,12 +1,10 @@
<?php <?php
use App\Admin\AdminModule; use App\Admin\AdminModule;
use App\Admin\DashboardAction;
return [ return [
'admin.prefix' => '/admin', 'admin.prefix' => '/admin',
'admin.widgets' => [], 'admin.widgets' => [],
\App\Admin\AdminTwigExtension::class => \DI\object()->constructor(\DI\get('admin.widgets')), \App\Admin\AdminTwigExtension::class => \DI\object()->constructor(\DI\get('admin.widgets')),
AdminModule::class => \DI\object()->constructorParameter('prefix', \DI\get('admin.prefix')) AdminModule::class => \DI\object()->constructorParameter('prefix', \DI\get('admin.prefix'))
//DashboardAction::class => \DI\object()->constructorParameter('widgets', \DI\get('admin.widgets'))
]; ];

View File

@ -7,14 +7,14 @@
<div class="container tab-de-bord"> <div class="container tab-de-bord">
<h3 style="display:inline-block;">Tableau de bord - </h3> <h3 style="display:inline-block;">Tableau de bord - </h3>
<h4 style="display:inline-block;"> <h4 style="display:inline-block;">
{% if role == '0' %} Super Admin{% endif %} {% if affiche_role() == 0 %} Super Admin{% endif %}
{% if role == '1' %} Admin général{% endif %} {% if affiche_role() == 1 %} Admin général{% endif %}
{% if role == '2' %} Admin Antenne{% endif %} {% if affiche_role() == 2 %} Admin Antenne{% endif %}
</h4> </h4>
</h3> </h3>
</div> </div>
<p></p> <p></p>
{% if role == '0' %} {% if affiche_role() == 0 %}
<h4>Liste des admins généraux</h4> <h4>Liste des admins généraux</h4>
<ul class="list-group list-group-flush"> <ul class="list-group list-group-flush">
{% for admin_gen in liste_adminGeneral %} {% for admin_gen in liste_adminGeneral %}
@ -27,7 +27,7 @@
</ul> </ul>
{% endif %} {% endif %}
<p></p> <p></p>
{% if (role == '0' or role == '1') %} {% if (affiche_role() == 0 or affiche_role() == 1) %}
<h4>Liste des admins Antenne</h4> <h4>Liste des admins Antenne</h4>
<ul class="list-group list-group-flush"> <ul class="list-group list-group-flush">
{% for admin_ant in liste_adminAntenne %} {% for admin_ant in liste_adminAntenne %}
@ -40,7 +40,7 @@
</ul> </ul>
{% endif %} {% endif %}
<p></p> <p></p>
{% if (role == '0' or role == '1' or role == '2') %} {% if affiche_role()==0 or affiche_role()==1 or affiche_role()==2 %}
<h4>Liste des régions/antennes</h4> <h4>Liste des régions/antennes</h4>
<ul class="list-group list-group-flush"> <ul class="list-group list-group-flush">
{% set antenne = '' %} {% set antenne = '' %}
@ -69,7 +69,7 @@
</ul> </ul>
{% endif %} {% endif %}
<p></p> <p></p>
{% if (role == '0' or role == '1' or role == '2') %} {% if affiche_role()==0 or affiche_role()==1 or affiche_role()==2 %}
<h4>Liste des utilisateurs</h4> <h4>Liste des utilisateurs</h4>
<ul class="list-group list-group-flush"> <ul class="list-group list-group-flush">
@ -85,17 +85,20 @@
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% endfor %} {% endfor %}
{% if not (item2.actif) %}
<button class="btn btn-primary">DESACTIVE</button>
{% endif %}
</li> </li>
</a> </a>
{% endfor %} {% endfor %}
</ul> </ul>
{% endif %} {% endif %}
<p></p> <p></p>
{% if (role == '0' or role == '1') %} {% if (affiche_role()== 0 or affiche_role()== 1) %}
<h4>Gestion d'une antenne</h4> <h4>Gestion d'une antenne</h4>
{% endif %} {% endif %}
<p></p> <p></p>
{% if (role == '0' or role == '1' or role == '2') %} {% if affiche_role()==0 or affiche_role()==1 or affiche_role()==2 %}
<h4>Gestion d'un G-Marché</h4> <h4>Gestion d'un G-Marché</h4>
{% endif %} {% endif %}
<div class="row"> <div class="row">

View File

@ -5,14 +5,20 @@
{% block body %} {% block body %}
<div class="container" style="color:floralwhite;background-color: #333333;padding: 1rem;"> <div class="container" style="color:floralwhite;background-color: #333333;padding: 1rem;">
<div class="container tab-de-bord"> <div class="container tab-de-bord">
<h3 style="display:inline-block;">Tableau de bord User - {{ username }}</h3> <h3 style="display:inline-block;">Tableau de bord User - {{ user_affiche }}</h3>
</div> </div>
<ul class="list-group list-group-flush"> <ul class="list-group list-group-flush">
<div class="container" style="color:black;background-color: lightgray;opacity: 0.9;margin: 1rem;padding:1rem;"> <div class="container" style="color:black;background-color: lightgray;opacity: 0.9;margin: 1rem;padding:1rem;">
<form action="{{ path('account.active') }}" method="post"> <form action="{{ path('account.active') }}" method="post">
<button class="btn btn-primary">Désactiver l'utilisateur</button> {% if actif_affiche %}
<div style="width:0;height:0;"> {{ field('actif', false, "", {type: 'hidden'}) }} <button class="btn btn-primary">Désactiver l'utilisateur</button>
{{ field('username', username, "", {type: 'hidden'}) }}</div> {% else %}
<button class="btn btn-primary">Activer l'utilisateur</button>
{% endif %}
<div style="width:0;height:0;"> {{ field('actif', actif_affiche, "", {type: 'hidden'}) }}
{{ field('username', user_affiche, "", {type: 'hidden'}) }}
{{ field('id', id_affiche, "", {type: 'hidden'}) }}
</div>
</form> </form>
</div> </div>
</ul> </ul>
@ -22,10 +28,10 @@
<div class="container" style="color:black;background-color: lightgray;opacity: 0.9;margin: 1rem;padding:1rem;"> <div class="container" style="color:black;background-color: lightgray;opacity: 0.9;margin: 1rem;padding:1rem;">
<form action="" method="post"> <form action="" method="post">
<!-- csrf_input() --> <!-- csrf_input() -->
{{ field('firstname', profil_user.firstname, 'Prénom') }} {{ field('firstname', user.firstname, 'Prénom') }}
{{ field('lastname', profil_user.lastname, 'Nom') }} {{ field('lastname', user.lastname, 'Nom') }}
Adresse mail {{ profil_user.email }}<p></p> Adresse mail {{ user.email }}<p></p>
Clé publique {{ profil_user.pubkey }} Clé publique {{ user.pubkey }}
<p></p> <p></p>
<button class="btn btn-primary">Modifier les informations</button> <button class="btn btn-primary">Modifier les informations</button>
</form> </form>
@ -43,7 +49,7 @@
<ul class="list-group list-group-flush"> <ul class="list-group list-group-flush">
<li class="liste_antennes list-group-item" style="color:black;padding: .2rem 1.25rem;"> <li class="liste_antennes list-group-item" style="color:black;padding: .2rem 1.25rem;">
{% set antenne_suivie = profil_user.suiviantenne|split('|') %} {% set antenne_suivie = user.suiviantenne|split('|') %}
{% for antenne in antenne_suivie %} {% for antenne in antenne_suivie %}
{% for item in listeAntennes %} {% for item in listeAntennes %}
{% if (item.id == antenne) %} {% if (item.id == antenne) %}

View File

@ -22,10 +22,13 @@
<div class="navbar-nav"> <div class="navbar-nav">
<div class="navbar-text" style="color:lightgray;margin-right:15px; margin-top:3px;"> <div class="navbar-text" style="color:lightgray;margin-right:15px; margin-top:3px;">
{{ "now"|date('d/m/y') }} {{ "now"|date('d/m/y') }}
affiche_username = {{ affiche_username() }} /affiche_username
</div> </div>
{% if name_user != '' %}
{% if affiche_username()!= '' %}
<form method="post" style="margin-top:5px;" action="{{ path('account.profil') }}"> <form method="post" style="margin-top:5px;" action="{{ path('account.profil') }}">
<span><img src="\avatar_user.png" width="22" height="22" /></span> <span><img src="\avatar_user.png" width="22" height="22" />
affiche_username = {{ affiche_username() }} /affiche_username</span>
<button style="color:white;font-size: 14px;" class="btn-primary">user = {{ name_user }}</button> <button style="color:white;font-size: 14px;" class="btn-primary">user = {{ name_user }}</button>
<button style="color:white;font-size: 14px;" class="btn-primary">user2 = {{ name_user2 }}</button> <button style="color:white;font-size: 14px;" class="btn-primary">user2 = {{ name_user2 }}</button>
</form> </form>

View File

@ -7,11 +7,13 @@ use Framework\Actions\RouterAwareAction;
use Framework\Renderer\RendererInterface; use Framework\Renderer\RendererInterface;
use Framework\Response\RedirectResponse; use Framework\Response\RedirectResponse;
use Framework\Router; use Framework\Router;
use Framework\Session\ArraySession;
use Framework\Session\FlashService; use Framework\Session\FlashService;
use Framework\Session\SessionInterface; use Framework\Session\SessionInterface;
use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ServerRequestInterface;
use Zend\Expressive\Router\RouterInterface; use Zend\Expressive\Router\RouterInterface;
class LoginAttemptAction class LoginAttemptAction
{ {
@ -53,17 +55,33 @@ class LoginAttemptAction
$params = $request->getParsedBody(); $params = $request->getParsedBody();
$user = $this->auth->login($params['username'], $params['password']); $user = $this->auth->login($params['username'], $params['password']);
if ($user) { if ($user) {
if(!isset($_SESSION)) { $role = $this->userTable->findBy('username', $params['username'])->role;
session_start();
}
$_SESSION['role'] = $this->userTable->findRole($params['username']);
$_SESSION['user'] = $params['username'];
$path = $this->session->get('auth.redirect') ?: $this->router->generateUri('gmarche.index'); $path = $this->session->get('auth.redirect') ?: $this->router->generateUri('gmarche.index');
$this->session->delete('auth.redirect'); $this->session->delete('auth.redirect');
return new RedirectResponse($path); //$path = $this->router->generateUri('gmarche.index');
//return new RedirectResponse('/');
if ($this->session->get('username')) {
$this->session->delete('role');
$this->session->delete('username');
$this->session->set('username',$params['username']);
$this->session->set('role',$role);
} else {
$this->session->set('username',$params['username']);
$this->session->set('role',$role);
}
//$this->renderer->addGlobal('user', $user);
//$this->renderer->addGlobal('role', $role);
return $this->renderer->render('@gmarche/index');
} else { } else {
(new FlashService($this->session))->error('Identifiant ou mot de passe incorrect'); (new FlashService($this->session))->error('Identifiant ou mot de passe incorrect');
return $this->redirect('auth.login'); return $this->redirect('auth.login');
} }
} }
private function show($role)
{
// $path = $this->router->generateUri('gmarche.index');
return $this->renderer->render('@gmarche/index');
}
} }

View File

@ -5,6 +5,7 @@ use App\Auth\DatabaseAuth;
use Framework\Renderer\RendererInterface; use Framework\Renderer\RendererInterface;
use Framework\Response\RedirectResponse; use Framework\Response\RedirectResponse;
use Framework\Session\FlashService; use Framework\Session\FlashService;
use Framework\Session\SessionInterface;
use Psr\Container\ContainerInterface; use Psr\Container\ContainerInterface;
use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ServerRequestInterface;
@ -31,21 +32,25 @@ class LogoutAction
private $container; private $container;
public function __construct(RendererInterface $renderer, DatabaseAuth $auth, FlashService $flashService public function __construct(RendererInterface $renderer, DatabaseAuth $auth, FlashService $flashService
, ContainerInterface $container) , ContainerInterface $container, SessionInterface $session)
{ {
$this->renderer = $renderer; $this->renderer = $renderer;
$this->auth = $auth; $this->auth = $auth;
$this->flashService = $flashService; $this->flashService = $flashService;
$this->container = $container; $this->container = $container;
$this->session = $session;
} }
public function __invoke(ServerRequestInterface $request) public function __invoke(ServerRequestInterface $request)
{ {
$gmarchePrefix = $this->container->get('gmarche.prefix'); $gmarchePrefix = $this->container->get('gmarche.prefix');
if(!isset($_SESSION)) { if(!isset($_SESSION)) {
session_start(); //session_start();
} }
unset($_SESSION['user']); unset($_SESSION['user']);
if ($this->session->get('username')) {
$this->session->delete('username');
}
$this->auth->logout(); $this->auth->logout();
$this->flashService->success('Vous êtes maintenant déconnecté'); $this->flashService->success('Vous êtes maintenant déconnecté');
return new RedirectResponse("$gmarchePrefix"); return new RedirectResponse("$gmarchePrefix");

View File

@ -27,7 +27,7 @@ class ContactAction
{ {
if ($request->getMethod() === 'GET') { if ($request->getMethod() === 'GET') {
if (!isset($_SESSION)) { if (!isset($_SESSION)) {
session_start(); //session_start();
} }
if (isset($_SESSION['user'])) { if (isset($_SESSION['user'])) {
$nom_user = $_SESSION['user']; $nom_user = $_SESSION['user'];

View File

@ -83,7 +83,6 @@
</script> </script>
{% endif %} {% endif %}
<div class="main" style="background:none;"> <div class="main" style="background:none;">
nom_user = {{ nom_user }}
<div class="header"> <div class="header">
<img class="img_header" src="/images/logo_contacts.jpg" style="width: 294px;height: 294px;" alt="Ğ1-Marché" title="Logo Contact" /> <img class="img_header" src="/images/logo_contacts.jpg" style="width: 294px;height: 294px;" alt="Ğ1-Marché" title="Logo Contact" />
</div> </div>

View File

@ -1,8 +1,7 @@
<?php <?php
namespace Framework\Auth; namespace Framework\Auth;
error_reporting(E_ALL & ~E_NOTICE);
use Framework\Auth; use Framework\Auth;
use Framework\Actions\RouterAwareAction;
use Framework\Response\RedirectResponse; use Framework\Response\RedirectResponse;
use Framework\Router; use Framework\Router;
use Framework\Session\FlashService; use Framework\Session\FlashService;
@ -19,23 +18,31 @@ class LoggedInMiddleware implements MiddlewareInterface
* @var Auth * @var Auth
*/ */
private $auth; private $auth;
/**
* @var Router
*/
private $router;
/**
* @var SessionInterface
*/
private $session;
public function __construct(Auth $auth, Router $router) public function __construct(Auth $auth, Router $router, SessionInterface $session)
{ {
$this->auth = $auth; $this->auth = $auth;
$this->router = $router; $this->router = $router;
$this->session = $session;
} }
public function process(ServerRequestInterface $request, DelegateInterface $delegate): ResponseInterface public function process(ServerRequestInterface $request, DelegateInterface $delegate): ResponseInterface
{ {
$user = $this->auth->getUser(); $user = $this->auth->getUser();
if (is_null($user)) {
//echo "is null"; if (is_null($user) and (!$_SESSION['user'])) {
//die();
//throw new ForbiddenException(); //throw new ForbiddenException();
//return $this->redirect('auth.login'); //return $this->redirect('auth.login');
//$this->session->set('auth.login', $request->getUri()->getPath()); //$this->session->set('auth.login', $request->getUri()->getPath());
//(new FlashService($this->session))->error('Vous devez posséder un compte pour accéder à cette page'); (new FlashService($this->session))->error('Vous devez vous connecter pour accéder à cette page');
return new RedirectResponse($this->router->generateUri('auth.login')); return new RedirectResponse($this->router->generateUri('auth.login'));
} }
return $delegate->process($request->withAttribute('user', $user)); return $delegate->process($request->withAttribute('user', $user));

View File

@ -172,7 +172,7 @@ class Query implements \IteratorAggregate
{ {
$record = $this->fetch(); $record = $this->fetch();
if ($record === false) { if ($record === false) {
throw new NoRecordException(); // throw new NoRecordException();
} }
return $record; return $record;
} }

View File

@ -81,6 +81,7 @@ class Table
public function findBy(string $field, string $value) public function findBy(string $field, string $value)
{ {
// echo "field = ".$field; // echo "field = ".$field;
// echo "<br />value = ".$value;
// die(); // die();
return $this->makeQuery()->where("$field = :field")->params(["field" => $value])->fetchOrFail(); return $this->makeQuery()->where("$field = :field")->params(["field" => $value])->fetchOrFail();
} }

View File

@ -19,7 +19,7 @@ class UrlExtension extends \Twig_Extension
{ {
return [ return [
//new \Twig_SimpleFunction('url', [$this, 'getUrl']), //new \Twig_SimpleFunction('url', [$this, 'getUrl']),
new \Twig_SimpleFunction('explodeUrl', [$this, 'explodeUrl']) new \Twig_SimpleFunction('explodeUrl', [$this, 'explodUrl'])
]; ];
} }
@ -27,7 +27,7 @@ class UrlExtension extends \Twig_Extension
{ {
return $_SERVER['REQUEST_URI'] ?? '/'; return $_SERVER['REQUEST_URI'] ?? '/';
}*/ }*/
public function explodeUrl(): array public function explodUrl(): array
{ {
$url = $_SERVER['REQUEST_URI'] ?? '/'; $url = $_SERVER['REQUEST_URI'] ?? '/';
$url_parts = explode('/', $url); $url_parts = explode('/', $url);

View File

@ -0,0 +1,46 @@
<?php
namespace App\Framework\Twig;
use Framework\Session\SessionInterface;
class VariableExtension extends \Twig_Extension
{
/**
* @var SessionInterface
*/
private $session;
/**
* @var string
*/
//private $url;
public function __construct(SessionInterface $session)
{
$this->session = $session;
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('affiche_username', [$this, 'affich_usrname']),
new \Twig_SimpleFunction('affiche_role', [$this, 'affich_role'])
];
}
public function affich_role(): ?string
{
//echo "session=".$_SESSION['user'];
//die();
$retour_aff = $this->session->get('role') ?: '';
return $retour_aff;
}
public function affich_usrname(): ?string
{
//echo "session=".$_SESSION['user'];
//die();
$retour_aff = $this->session->get('username') ?: '';
return $retour_aff;
}
}

View File

@ -61,7 +61,7 @@ class AntenneShowAction
]); ]);
}*/ }*/
if (!isset($_SESSION)) { if (!isset($_SESSION)) {
session_start(); //session_start();
} }
if (isset($_SESSION['user'])) { if (isset($_SESSION['user'])) {
$nom_user = $_SESSION['user']; $nom_user = $_SESSION['user'];

View File

@ -1,8 +1,10 @@
<?php <?php
namespace App\Gmarche\Actions; namespace App\Gmarche\Actions;
use App\Admin\Table\UserTable;
use Framework\Actions\RouterAwareAction; use Framework\Actions\RouterAwareAction;
use Framework\Renderer\RendererInterface; use Framework\Renderer\RendererInterface;
use Psr\Http\Message\ServerRequestInterface;
class RegionIndexAction class RegionIndexAction
{ {
@ -14,23 +16,36 @@ class RegionIndexAction
use RouterAwareAction; use RouterAwareAction;
public function __construct( public function __construct(
RendererInterface $renderer RendererInterface $renderer,
UserTable $userTable
) { ) {
$this->renderer = $renderer; $this->renderer = $renderer;
$this->userTable = $userTable;
} }
public function __invoke() public function __invoke(ServerRequestInterface $request)
{ {
if (!isset($_SESSION)) { /*$userId = $this->session->get('auth.user');
session_start(); echo "userid = ";
var_dump($userId);*/
if ($request->getMethod() === 'GET') {
//$params = $request->getParsedBody();
//var_dump($params);
//die();
//$role = $this->userTable->findBy('username', $params['username'])->role;
//var_dump($role);
//die();
if (!isset($_SESSION)) {
//session_start();
}
$accueil = true;
if (isset($_SESSION['user'])) {
$nom_user = $_SESSION['user'];
$role = $_SESSION['role'];
} else {
$nom_user = '';
$role = '3';
}
return $this->renderer->render('@gmarche/index', compact('nom_user', 'accueil', 'role'));
} }
$accueil = true;
if (isset($_SESSION['user'])) {
$nom_user = $_SESSION['user'];
$role = $_SESSION['role'];
} else {
$nom_user = '';
$role = '3';
}
return $this->renderer->render('@gmarche/index', compact('nom_user','accueil','role'));
} }
} }

View File

@ -3,6 +3,7 @@ namespace App\Gmarche;
use App\Gmarche\Actions\AntenneShowAction; use App\Gmarche\Actions\AntenneShowAction;
use App\Gmarche\Actions\RegionIndexAction; use App\Gmarche\Actions\RegionIndexAction;
use Framework\Auth;
use Framework\Module; use Framework\Module;
use Framework\Renderer\RendererInterface; use Framework\Renderer\RendererInterface;
use Framework\Router; use Framework\Router;
@ -15,8 +16,9 @@ class GmarcheModule extends Module
const MIGRATIONS = __DIR__ . '/db/migrations'; const MIGRATIONS = __DIR__ . '/db/migrations';
const SEEDS = __DIR__ . '/db/seeds'; const SEEDS = __DIR__ . '/db/seeds';
public function __construct(ContainerInterface $container) public function __construct(ContainerInterface $container, Auth $auth)
{ {
$this->auth = $auth;
$gmarchePrefix = $container->get('gmarche.prefix'); $gmarchePrefix = $container->get('gmarche.prefix');
$container->get(RendererInterface::class)->addPath('gmarche', __DIR__ . '/views'); $container->get(RendererInterface::class)->addPath('gmarche', __DIR__ . '/views');
$router = $container->get(Router::class); $router = $container->get(Router::class);

View File

@ -4,19 +4,23 @@
Ğ1-Marché : Régions {% if page > 1 %}, page {{ page }} {% endif %} Ğ1-Marché : Régions {% if page > 1 %}, page {{ page }} {% endif %}
{% endblock %} {% endblock %}
{% block body %} {% block body %}
{% if flash('error') %}
<div class="alert alert-danger">
{{ flash('error') }}
</div>
{% endif %}
<div class="container home"> <div class="container home">
<img id="logo_home" src="\images\logo_home.jpg"/> <img id="logo_home" src="\images\logo_home.jpg"/>
<ul class="list-group list-group-flush">
<ul class="list-group list-group-flush"> <div class="mapcontainer">
<div class="mapcontainer"> <div class="map">
<div class="map"> <span>Alternative content for the map</span>
<span>Alternative content for the map</span>
</div>
<div class="areaLegend"></div>
<div class="plotLegend"></div>
</div> </div>
</ul> <div class="areaLegend"></div>
</div> <div class="plotLegend"></div>
</div>
</ul>
</div>
<script type="text/javascript"> <script type="text/javascript">
$(".container").mapael({ $(".container").mapael({

View File

@ -57,7 +57,7 @@ class ProductIndexAction
$viewPath = '@product/admin/products'; $viewPath = '@product/admin/products';
$items = $this->productTable->findByAntenneId('antenne_id', $antenne_id)->paginate(20, $page); $items = $this->productTable->findByAntenneId('antenne_id', $antenne_id)->paginate(20, $page);
if (!isset($_SESSION)) { if (!isset($_SESSION)) {
session_start(); //session_start();
} }
if (isset($_SESSION['user'])) { if (isset($_SESSION['user'])) {
$nom_user = $_SESSION['user']; $nom_user = $_SESSION['user'];

View File

@ -59,7 +59,7 @@ class RechIndexAction
$viewPath = '@product/admin/recherches'; $viewPath = '@product/admin/recherches';
$items = $this->rechTable->findByAntenneId('antenne_id', $antenne_id)->paginate(20, $page); $items = $this->rechTable->findByAntenneId('antenne_id', $antenne_id)->paginate(20, $page);
if (!isset($_SESSION)) { if (!isset($_SESSION)) {
session_start(); //session_start();
} }
if (isset($_SESSION['user'])) { if (isset($_SESSION['user'])) {
$nom_user = $_SESSION['user']; $nom_user = $_SESSION['user'];

View File

@ -45,7 +45,7 @@
<a class="nav-link {% if accueil %} active{% endif %}" style="font-size:14px;" <a class="nav-link {% if accueil %} active{% endif %}" style="font-size:14px;"
href="{{ path('gmarche.index') }}">Accueil</a> href="{{ path('gmarche.index') }}">Accueil</a>
</li> </li>
{% if role=='0' or role=='1' or role=='2' %} {% if (affiche_role()==0 or affiche_role()==1 or affiche_role()==2) and affiche_username()!='' %}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link {% if explodeUrl()[1]=='dashboard' %} active{% endif %}" style="font-size:14px;" <a class="nav-link {% if explodeUrl()[1]=='dashboard' %} active{% endif %}" style="font-size:14px;"
href="{{ path('dashboard') }}">Administration</a> href="{{ path('dashboard') }}">Administration</a>
@ -61,10 +61,10 @@
<div class="navbar-text" style="color:lightgray;margin-right:15px; margin-top:3px;"> <div class="navbar-text" style="color:lightgray;margin-right:15px; margin-top:3px;">
{{ "now"|date('d/m/y') }} {{ "now"|date('d/m/y') }}
</div> </div>
{% if nom_user != '' %} {% if affiche_username() != '' %}
<form method="post" style="margin-top:5px;" action="{{ path('account.profil') }}"> <form method="post" style="margin-top:5px;" action="{{ path('account.profil') }}">
<span><img src="\avatar_user.png" width="22" height="22" /></span> <span><img src="\avatar_user.png" width="22" height="22" /></span>
<button id="nom_connecte" style="color:white;font-size: 14px;" class="btn-primary">{{ nom_user }}</button> <button id="nom_connecte" style="color:white;font-size: 14px;" class="btn-primary">{{ affiche_username() }}</button>
</form> </form>
<form method="post" action="{{ path('auth.logout') }}"> <form method="post" action="{{ path('auth.logout') }}">
<!-- csrf_input() }}--> <!-- csrf_input() }}-->
@ -74,8 +74,6 @@
<div class="nav-item" id="bouton-connexion"> <div class="nav-item" id="bouton-connexion">
<button style="color:white; font-size: 14px;" class="btn btn-primary" data-toggle="modal" data-target="#connexion_modal">Se connecter</button> <button style="color:white; font-size: 14px;" class="btn btn-primary" data-toggle="modal" data-target="#connexion_modal">Se connecter</button>
</div> </div>
<!-- <div id="nom_connecte" style="display:none;margin-left:10px;margin-top:6px;margin-right:8px;">
</div>-->
<div id="deconnexion" style="display:none;"> <div id="deconnexion" style="display:none;">
<form method="post" action="{{ path('auth.logout') }}"> <form method="post" action="{{ path('auth.logout') }}">
<!-- csrf_input() }}--> <!-- csrf_input() }}-->
@ -108,7 +106,7 @@
<div class="modal-body"> <div class="modal-body">
<div class="form-group"> <div class="form-group">
<label for="pseudo">Pseudo</label> <label for="pseudo">Pseudo</label>
<input type="text" id="pseudo" placeholder="{{ nom_user }}" class="form-control"/> <input type="text" id="pseudo" placeholder="{{ user.username }}" class="form-control"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="mdp">Mot de passe</label> <label for="mdp">Mot de passe</label>
@ -129,7 +127,6 @@
</div> </div>
</div> </div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js"></script>
</div> </div>