Avancement sur gestion des antennes - Formulaire de modification

This commit is contained in:
nox 2020-01-25 01:35:00 +01:00
parent bd626f62e5
commit 5ebbf9d7d2
12 changed files with 302 additions and 16 deletions

View File

@ -5,7 +5,8 @@ namespace App\Admin;
use App\Account\Action\AccountUserAction;
use App\Account\Action\AccountUserEditAction;
use App\Account\Action\ActiveAction;
use App\Auth\Action\PasswordForgetAction;
use App\Antenne\Actions\AntenneEditAction;
use App\Antenne\Actions\AntenneCrudAction;
use Framework\Auth\LoggedInMiddleware;
use Framework\Module;
use Framework\Renderer\RendererInterface;
@ -23,13 +24,18 @@ class AdminModule extends Module
string $prefix
)
{
$chemin = str_replace('Admin','antenne',__DIR__);
//var_dump($chemin);
//die();
$renderer->addPath('antenne', $chemin . '/views');
$router->get('/dashboard/{user:[a-zA-Z\-0-9]+}', [LoggedInMiddleware::class, DashboardAction::class], 'dashboard');
$router->get('/dashboard/details/{user:[a-zA-Z\-0-9]+}', [LoggedInMiddleware::class, DashboardUserAction::class], 'dashboard.user');
$router->get('/activation', [LoggedInMiddleware::class, ActiveAction::class], 'account.active');
$router->post('/activation', ActiveAction::class);
$router->get('/profil-user', [LoggedInMiddleware::class, AccountUserEditAction::class], 'account.user');
$router->post('/profil-user', [LoggedInMiddleware::class, AccountUserEditAction::class]);
//$router->any('/password_reinit', PasswordForgetAction::class, 'auth.password');
$router->get('/antenne/create', [LoggedInMiddleware::class, AntenneCrudAction::class], 'antenne.create');
$router->get('/antenne/edit', [LoggedInMiddleware::class, AntenneEditAction::class], 'antenne.edit');
if ($renderer instanceof TwigRenderer) {
$renderer->getTwig()->addExtension($adminTwigExtension);
// $renderer->getTwig()->addExtension($variableExtension);

View File

@ -41,9 +41,19 @@
{% endif %}
<p></p>
{% if affiche_role()==0 or affiche_role()==1 or affiche_role()==2 %}
<h4>Gérer les antennes</h4>
<button class="btn btn-primary" style="max-width: 6rem;margin-top:0rem;margin-bottom:0.7rem;height:2rem;">
<a class="nav-link" href="{{ path('antenne.edit') }}" style="padding-left:0.2rem;margin-top:-0.4rem;color:white;font-size:14px;">MODIFIER</a>
</button>
<button class="btn btn-primary" style="margin-top:0rem;margin-bottom:0.7rem;height:2rem;padding-left:-1rem;">
<a class="nav-link" href="{{ path('antenne.create') }}" style="margin-top:-0.4rem;color:white;font-size:14px;">CREER</a>
</button>
<button class="btn btn-primary" style="max-width:6.4rem;margin-top:0rem;margin-bottom:0.7rem;height:2rem;">
<a class="nav-link" href="{{ path('antenne.edit') }}" style="padding-left:0rem;margin-top:-0.4rem;color:white;font-size:14px;">SUPPRIMER</a>
</button>
<h4>Liste des régions/antennes</h4>
<ul class="list-group list-group-flush">
{% set antenne = '' %}
{% set region = '' %}
{% for item in listeAntennes %}
{% if (item.regionName != region) %}
@ -63,7 +73,6 @@
</li>
</a>
{% endif %}
{% set antenne = item.antenneName %}
{% set region = item.regionName %}
{% endfor %}
</ul>

View File

@ -0,0 +1,61 @@
<?php
namespace App\Antenne\Actions;
if (!isset($_SESSION)) {
session_start();
}
use App\Gmarche\Table\AntenneTable;
use App\Gmarche\Table\RegionTable;
use Framework\Actions\RouterAwareAction;
use Framework\Renderer\RendererInterface;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ServerRequestInterface as Request;
class AntenneCrudAction
{
/**
* @var RendererInterface
*/
private $renderer;
/**
* @var RegionTable
*/
private $regionTable;
/**
* @var AntenneTable
*/
private $antenneTable;
use RouterAwareAction;
public function __construct(
RendererInterface $renderer,
RegionTable $regionTable,
AntenneTable $antenneTable,
ContainerInterface $container
) {
$this->renderer = $renderer;
$this->regionTable = $regionTable;
$this->antenneTable = $antenneTable;
$this->container = $container;
}
public function __invoke(Request $request)
{
$params = $request->getQueryParams();
// On récupère l'id de la région cliquée
$slug = $request->getAttribute('slug') ?: $_SESSION['connecte'];
$region_id = $this->regionTable->findBy('slug', $slug)->id ?: 1;
$page = $params['p'] ?? 1; // Si la page n'est pas définie, on l'initialise à 1
$antennes = $this->antenneTable->findAllbyRegion($region_id)->paginate(25, $page);
$region = $this->regionTable->findBy('slug', $slug);
$viewPath = '@antenne';
$sess = $_SESSION;
return $this->renderer->render('@antenne/create', compact('sess','page', 'region', 'viewPath', 'antennes'));
}
}

View File

@ -0,0 +1,67 @@
<?php
namespace App\Antenne\Actions;
if (!isset($_SESSION)) {
session_start();
}
use App\Gmarche\Table\AntenneTable;
use App\Gmarche\Table\RegionTable;
use Framework\Actions\RouterAwareAction;
use Framework\Renderer\RendererInterface;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ServerRequestInterface as Request;
class AntenneEditAction
{
/**
* @var RendererInterface
*/
private $renderer;
/**
* @var RegionTable
*/
private $regionTable;
/**
* @var AntenneTable
*/
private $antenneTable;
use RouterAwareAction;
public function __construct(
RendererInterface $renderer,
RegionTable $regionTable,
AntenneTable $antenneTable,
ContainerInterface $container
) {
$this->renderer = $renderer;
$this->regionTable = $regionTable;
$this->antenneTable = $antenneTable;
$this->container = $container;
}
public function __invoke(Request $request)
{
if ($request->getMethod() === 'GET') {
// $role = $this->session->get('role', []);
// $username = $this->session->get('username', []);
$listeAntennes = $this->antenneTable->findAllAntennes();
$listeRegions = $this->regionTable->findAll();
}
$params = $request->getQueryParams();
// On récupère l'id de la région cliquée
$slug = $request->getAttribute('slug') ?: $_SESSION['connecte'];
//$region_id = $this->regionTable->findBy('slug', $slug)->id ?: 1;
$page = $params['p'] ?? 1; // Si la page n'est pas définie, on l'initialise à 1
// $antennes = $this->antenneTable->findAllbyRegion($region_id)->paginate(25, $page);
//$region = $this->regionTable->findBy('slug', $slug);
$sess = $_SESSION;
return $this->renderer->render('@antenne/edit', compact('sess','page', 'listeRegions', 'listeAntennes'));
}
}

View File

@ -0,0 +1,16 @@
{% extends 'layout.twig' %}
{% block title "Ğ1-Marché - Créer une antenne" %}
{% block body %}
<div class="container" style="background-color: lightgray;opacity: 0.9;margin: 1rem;padding:1rem;">
<h4>Créer une antenne</h4>
<form action="" method="post" enctype="multipart/form-data">
<form action="{{ path('antenne.create', { id: item.id, region: explodeUrl()[2], slug: explodeUrl()[3], antenne: explodeUrl()[4]}) }}" method="post" enctype="multipart/form-data">
{% include viewPath ~ '/form.twig' %}
<!--input id="antenne_id" name="antenne_id" type="hidden" value=" explodeUrl()[4] }}"-->
<button class="btn btn-primary" type="submit">Ajouter</button>
</form>
</div>
{% endblock %}

View File

@ -0,0 +1,64 @@
{% extends 'layout.twig' %}
{% block title "Ğ1-Marché - Modifier Antennes" %}
{% block body %}
<div class="container_main">
<div id="la_page">
<span style="color:white;font-size:1.4rem;">
MODIFICATION D'UNE ANTENNE
</span>
<div class="container" style="padding:3rem; width:55rem;border:1px solid blue;margin:auto;">
<div style="width:15rem;color:white;float:left;text-align:left;">
<span style="margin-left:1rem;">ANTENNE</span>
<select id="antenne" class="form-control">
<option class="list-group-item list-group-item-action" value="0">
Sélectionnez l'antenne
</option>
{% for item in listeAntennes %}
<option class="list-group-item list-group-item-action" value="{{ item.regionName }}">
{{ item.antenneName }}
</option>
{% endfor %}
</select>
</div>
<div style="width:14rem;margin-left:5rem;border:1px solid green;color:white;float:right;">
REGION
<input class="form-control" id="region" />
</div>
<div style="clear:both;">
<form>
<!--{ csrf_input }}-->
<div class="row" style="color:white;">
<div class="col-md-4">
{{ field('name', item.name, "Nom du produit") }}
</div>
<div class="col-md-4">
{{ field('contenu', item.content, "Contenu", {type: 'textarea'}) }}
</div>
</div>
<div class="row">
<div class="col-md-4">
{{ field('prix', item.prix, "Prix") }}
</div>
</div>
<button class="btn btn-primary" type="submit">Enregistrer</button>
</form>
</div>
</div>
</div>
</div>
<script>
document.querySelector("#antenne").addEventListener("change", function() {
var x = document.querySelector("#antenne").selectedIndex
var y = document.querySelector("#antenne").options
document.querySelector("#region").value = y[x].value
});
/*textInput.onchange = function (e) {
alert('test')
};*/
</script>
{% endblock %}

View File

@ -0,0 +1,35 @@
{{ csrf_input }}
<div class="row">
<div class="col-md-4">
{{ field('name', item.name, "Nom du produit") }}
</div>
<div class="col-md-4">
{{ field('quantite', item.quantite, "Quantité") }}
</div>
<div class="col-md-4">
{{ field('prix', item.prix, "Prix") }}
</div>
</div>
<div class="row">
<div class="col-md-8">
{{ field('image', item.slug, "Image", {type: 'file'}) }}
</div>
<div class="col-md-4">
{% if item.image %}
<img src="{{ item.thumb }}" alt="" style="width:100%;">
{% endif %}
</div>
<!-- <div class="col-md-4">
field('slug', item.slug, "Lien")
</div>-->
</div>
{{ field('content', item.content, "Description", {type: 'textarea'}) }}
{{ field('updated_at', item.updatedAt, "", {type: 'hidden'}) }}
{{ field('created_at', date(), "", {type: 'hidden'}) }}
{{ field('antenne_id', explodeUrl()[4], "", {type: 'hidden'}) }}

View File

@ -0,0 +1,21 @@
{% extends 'layout.twig' %}
{% block title "Ğ1-Marché - Antennes" %}
{% block body %}
<div class="container_main">
<div id="la_page">
<span style="color:white;font-size:1.4rem;">
GESTION DES ANTENNES
</span>
<div class="container" style="margin:2rem 1rem;">
<a target="_blank" href="{{ path('antenne.create') }}" style="color:white;font-size: 1rem;"
class="btn btn-primary">Ajouter</a>
</div>
<div class="container" style="margin:1rem;">
<a target="_blank" href="{{ path('antenne.edit', {id: antenne.id}) }}" style="color:white;font-size: 1rem;"
class="btn btn-primary">Modifier</a>
</div>
</div>
</div>
{% endblock %}

View File

@ -46,10 +46,6 @@ class LogoutAction
public function __invoke(ServerRequestInterface $request)
{
/*echo "<pre>";
var_dump($request);
echo "</pre>";
die();*/
unset($_SESSION['user']);
$_SESSION['connecte']='---';
$_SESSION['logout']=true;

View File

@ -41,21 +41,33 @@ class LoggedInMiddleware implements MiddlewareInterface
public function process(ServerRequestInterface $request, DelegateInterface $delegate): ResponseInterface
{
// echo "<pre>";
// var_dump($request);
// var_dump($_SESSION);
// echo "</pre>";
// die();
$user = $request->getAttribute('user');
if ($user != '' && $user != '---') {
if ($user != '' && $user != '---' && $_SESSION['connecte'] != '---') {
$_SESSION['connecte']=$user;
} else {
$url_part = explode('/', $request->getServerParams()['HTTP_REFERER'] ?? '/');
$username = $url_part[5];
if ($_SESSION['connecte'] != '---') {
$username = $_SESSION['connecte'];
} else {
$url_part = explode('/', $request->getServerParams()['HTTP_REFERER'] ?? '/');
$username = $url_part[5];
}
if (!$_SESSION['logout']) {
if (is_null($username)) {
$user = $this->auth->getUser() ?: $this->userTable->findBy('username', $request->getAttribute('user'));
if (is_null($user)) {
$user = $this->auth->getUser();
} else {
$user = $this->userTable->findBy('username', $user);
}
} else {
$user = $this->auth->getUser() ?: $this->userTable->findBy('username', $username);
}
}
if (is_null($user) or $_SESSION['logout']) {
if (is_null($user) or $_SESSION['logout'] or $_SESSION['connecte'] == '---') {
(new FlashService($this->session))->error('Vous devez vous connecter pour accéder à cette page');
return new RedirectResponse($this->router->generateUri('auth.login'));
}

View File

@ -26,7 +26,7 @@ class AntenneTable extends Table
$region = new RegionTable($this->pdo);
return $this->makeQuery()
->join($region->getTable() . ' as r', 'a.region_id = r.id')
->select('a.id, r.name as regionName, a.name as antenneName')
->select('a.id, r.name as regionName, a.name as antenneName, r.slug as regionSlug, a.slug as antenneSlug')
->order('r.name, a.name ASC');
}
}

View File

@ -49,7 +49,6 @@ class ProductIndexAction
$gmarchePrefix = $this->container->get('gmarche.prefix');
$antenne_slug = $request->getAttribute('slug');
$region_slug = $request->getAttribute('region');
//$listeAntennes = $this->antenneTable->findAllAntennes();
$requete = $this->antenneTable->findBy('slug', $antenne_slug);
$antenne_name = $requete->name;
$antenne_id = $requete->id;