Finalisation de la modification d'une antenne - Ajout des lignes de présentation de l'antenne dans la page Produits

This commit is contained in:
nox 2020-02-04 23:35:27 +01:00
parent 5aec7c62ec
commit 034ceec279
9 changed files with 157 additions and 67 deletions

View File

@ -37,7 +37,7 @@ class ProfilAction
public function __invoke(ServerRequestInterface $request)
{
$listeAntennes = $this->antenneTable->findAllAntennes();
$listeAntennes = $this->antenneTable->findAllAntennes('');
$user_affiche = $request->getAttribute('user')->username;
$nom_avatar = $request->getAttribute('user')->avatar;
$email = $request->getAttribute('user')->email;

View File

@ -56,7 +56,7 @@ class DashboardAction
$liste_adminGeneral = $this->userTable->findAdminUsers('1');
$liste_adminAntenne = $this->userTable->findAdminUsers('2');
$liste_users_suivi = $this->userTable->findUsers('3');
$listeAntennes = $this->antenneTable->findAllAntennes();
$listeAntennes = $this->antenneTable->findAllAntennes('',false,'');
if ($this->session->get('username')) {
$this->session->delete('role');
$this->session->delete('username');

View File

@ -59,7 +59,7 @@ class DashboardUserAction
$user = $this->userTable->findBy('username', $user_affiche);
$id_affiche = $user->id;
$actif_affiche = $user->actif;
$listeAntennes = $this->antenneTable->findAllAntennes();
$listeAntennes = $this->antenneTable->findAllAntennes('');
$sess = $_SESSION;
return $this->renderer->render('@admin/dashboard_user',
compact('sess','user_affiche','id_affiche', 'actif_affiche', 'user','liste_users_suivi','listeAntennes'));

View File

@ -4,7 +4,6 @@ namespace App\Admin\Table;
use App\Admin\Entity\User;
use App\Gmarche\Table\AntenneTable;
use App\Gmarche\Table\RegionTable;
use Framework\Database\Query;
use Framework\Database\Table;

View File

@ -4,11 +4,14 @@ if (!isset($_SESSION)) {
session_start();
}
use App\Admin\Table\UserTable;
use App\Framework\Response\RedirectBackResponse;
use App\Gmarche\Table\AntenneTable;
use App\Gmarche\Table\RegionTable;
use Framework\Actions\RouterAwareAction;
use Framework\Renderer\RendererInterface;
use Framework\Response\RedirectResponse;
use Framework\Session\FlashService;
use Framework\Validator;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ServerRequestInterface as Request;
@ -31,60 +34,86 @@ class AntenneEditAction
*/
private $antenneTable;
/**
* @var FlashService
*/
private $flashService;
use RouterAwareAction;
public function __construct(
RendererInterface $renderer,
RegionTable $regionTable,
AntenneTable $antenneTable,
UserTable $userTable,
FlashService $flashService,
ContainerInterface $container
) {
$this->renderer = $renderer;
$this->regionTable = $regionTable;
$this->antenneTable = $antenneTable;
$this->userTable = $userTable;
$this->flashService = $flashService;
$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;
$role = $request->getAttribute('user')->role;
$user_id = $request->getAttribute('user')->id;
if ($role < 3) {
if ($request->getMethod() === 'GET') {
// $username = $this->session->get('username', []);
if ($role == 2) {
$antennes_suivies = $request->getAttribute('user')->suiviantenne;
$liste_ant_suiv = str_replace('|',',',$antennes_suivies);
$listeAntennes = $this->antenneTable->findAnyAntennes('tri_alpha',$liste_ant_suiv);
} else {
$listeAntennes = $this->antenneTable->findAllAntennes('tri_alpha');
}
$listeRegions = $this->regionTable->findAll();
}
if ($request->getMethod() === 'POST') {
//$user = $this->auth->getUser();
$params = $request->getParsedBody();
$antenne_id = $params['antenne'];
echo "antenne_id=/";
var_dump($params);
echo "/";
die();
$validator = (new Validator($params))
->required('antenne', 'region');
if ($validator->isValid()) {
$antenneParams = [
'id' => $params['antenne'],
'region_id' => $params['region']
];
$this->antenneTable->update($antenne_id, $antenneParams);
$this->flashService->success("L'antenne a bien été mise à jour");
return new RedirectResponse($request->getUri()->getPath());
$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
$sess = $_SESSION;
if ($request->getMethod() === 'POST') {
$params = $request->getParsedBody();
$antenne_id = strstr( $params['antenne'], '|', true);
$date = $params['datepicker'];
$time = '00:00:00';
$date_us = substr($date,6,4).'-'.substr($date,3,2).'-'.substr($date,0,2);
$date_us .= ' '.$time;
$madate = date("Y-m-d H:i:s", strtotime($date_us));
$validator = (new Validator($params))
->required('antenne', 'region');
if ($validator->isValid()) {
$antenneParams = [
'id' => $antenne_id,
'region_id' => $params['region'],
'gmarcheAt' => $madate,
'edito1' => $params['contenu1'],
'edito2' => $params['contenu2'],
'edito3' => $params['contenu3'],
'edito4' => $params['contenu4']
];
$this->antenneTable->update($antenne_id, $antenneParams);
$this->flashService->success("L'antenne a bien été mise à jour");
return new RedirectResponse($request->getUri()->getPath());
}
$errors = $validator->getErrors();
}
return $this->renderer->render('@antenne/edit', compact('sess', 'page', 'listeRegions',
'listeAntennes'));
} else {
$this->flashService->success("Vous n'avez pas accès à cette fonction");
return new RedirectBackResponse($request);
}
$errors = $validator->getErrors();
}
return $this->renderer->render('@antenne/edit', compact('sess','page', 'listeRegions', 'listeAntennes'));
}
}

View File

@ -33,7 +33,7 @@
<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 class="container" style="padding:3rem; width:55rem;border:1px solid white;margin:auto;">
<!--{ path('antenne.edit', { id: item.id, region: explodeUrl()[2]}) }}-->
<form action="" method="post">
<!--{ csrf_input }}-->
@ -45,19 +45,32 @@
Sélectionnez l'antenne
</option>
{% for item in listeAntennes %}
<option class="list-group-item list-group-item-action" value="{{ item.id }}">
<option class="list-group-item list-group-item-action" value="{{ item.id }}|{{ item.regionId }}">
{{ item.antenneName }}
</option>
{% endfor %}
</select>
</div>
{% set j=0 %}
{% for item in listeAntennes %}
{% set j=j+1 %}
{% set name = 'region_name'~j %}
<span style="width:0;height:0;">{{ field(name,item.regionName,"", {type:'hidden'}) }}</span>
<span style="width:0;height:0;">{{ field(name,item.regionName,"", {type:'hidden'}) }}</span>
{% endfor %}
{% set k=0 %}
{% for item in listeAntennes %}
{% set k=k+1 %}
{% set name = 'edito1_'~k %}
<span style="width:0;height:0;">{{ field(name,item.edito1,"", {type:'hidden'}) }}</span>
{% set name = 'edito2_'~k %}
<span style="width:0;height:0;">{{ field(name,item.edito2,"", {type:'hidden'}) }}</span>
{% set name = 'edito3_'~k %}
<span style="width:0;height:0;">{{ field(name,item.edito3,"", {type:'hidden'}) }}</span>
{% set name = 'edito4_'~k %}
<span style="width:0;height:0;">{{ field(name,item.edito4,"", {type:'hidden'}) }}</span>
{% set name = 'gmAt_'~k %}
<span style="width:0;height:0;">{{ field(name,item.gmarcheAt,"", {type:'hidden'}) }}</span>
{% endfor %}
<div class="col-md-4" style="min-width:15rem;">
<div style="float:left; text-align:left;margin-left:2rem;margin-bottom: 1rem;">
@ -75,11 +88,13 @@
</div>
<div style="clear:both;">
<div class="row" style="color:white;">
<div class="col-md-12" style="margin-top:1rem;height:14rem;border:1px solid white;">
<!--{ field('contenu', item.content, "Annonce de présentation de l'antenne", {type: 'textarea'},'',[rows]) }}-->
<div class="col-md-12" style="margin-top:1rem;height:auto;">
<div class="form-group">
<label for="comment">Annonce de présentation de l'antenne</label>
<textarea class="form-control" rows="7" id="contenu"></textarea>
<label for="comment">Annonce de présentation de l'antenne</label><p></p>
Ligne 1 <textarea id="edito1" class="form-control" rows="2" name="contenu1"></textarea>
Ligne 2 <textarea id="edito2" class="form-control" rows="2" name="contenu2"></textarea>
Ligne 3 <textarea id="edito3" class="form-control" rows="2" name="contenu3"></textarea>
Ligne 4 <textarea id="edito4" class="form-control" rows="2" name="contenu4"></textarea>
</div>
</div>
</div>
@ -91,8 +106,9 @@
</div>
</div>
<script>
/* Lorsqu'on sélectione une antenne */
document.querySelector("#antenne_select").addEventListener("change", function() {
/* On vide si besoin la zone select */
/* On vide si besoin la zone select des régions */
if (document.getElementById("region").hasChildNodes()) {
var child = document.getElementById("region");
while (child.hasChildNodes()) {
@ -101,22 +117,43 @@
}
/* if (document.querySelector("#antenne_select").options[0].text=="Sélectionnez l'antenne") {
// document.querySelector("#antenne_select").removeChild( document.querySelector("#antenne_select").firstChild);
// var diff = 1;
} else {
// var diff = 0;
}*/
var x = document.querySelector("#antenne_select").selectedIndex,
y = document.querySelector("#antenne_select").options,
select = document.getElementById('region'),
nom_zone = "region_name"+x,
region_nom = document.getElementById(nom_zone).value;
/* On supprime la valeur en double avec cleanArray */
//region_id = document.getElementById(nom_zone).text;
/* Affichage de la date du gmarché et des éditos en fonction de l'antenne sélectionnée */
var gmAt = document.getElementById('datepicker'),
nom_zone_gmAt = "gmAt_"+x,
valeur_gmAt = document.getElementById(nom_zone_gmAt).value;
gmAt.value = valeur_gmAt;
var edito1 = document.getElementById('edito1'),
nom_zone_edito1 = "edito1_"+x,
valeur_edito1 = document.getElementById(nom_zone_edito1).value;
edito1.value = valeur_edito1;
var edito2 = document.getElementById('edito2'),
nom_zone_edito2 = "edito2_"+x,
valeur_edito2 = document.getElementById(nom_zone_edito2).value;
edito2.value = valeur_edito2;
var edito3 = document.getElementById('edito3'),
nom_zone_edito3 = "edito3_"+x,
valeur_edito3 = document.getElementById(nom_zone_edito3).value;
edito3.value = valeur_edito3;
var edito4 = document.getElementById('edito4'),
nom_zone_edito4 = "edito4_"+x,
valeur_edito4 = document.getElementById(nom_zone_edito4).value;
edito4.value = valeur_edito4;
/* Affichage des régions */
var tableau = new Array("Auvergne-Rhône-Alpes", "Bourgogne-Franche-Comté", "Bretagne",
"Centre-Val de Loire", "Corse", "Grand Est", "Hauts-de-France", "Ile-de-France", "Normandie",
"Nouvelle-Aquitaine", "Occitanie", "Pays de la Loire", "Provence-Alpes-Côte d'Azur");
for (var i = 0; i<tableau.length; i++){
opt = document.createElement('option')
opt.value = tableau[i]
var valeurs_antenne = y[x].value.split("|")
var deuxieme_valeur = valeurs_antenne[1]
opt.value = deuxieme_valeur
opt.innerHTML = tableau[i]
if (region_nom == tableau[i]) {
opt.selected = "selected"

View File

@ -3,6 +3,7 @@
namespace App\Gmarche\Table;
use App\Gmarche\Entity\Antenne;
use App\Auth\UserTable;
use Framework\Database\Query;
use Framework\Database\Table;
@ -21,12 +22,35 @@ class AntenneTable extends Table
->where("a.region_id = $region_id")
->order('a.name ASC');
}
public function findAllAntennes(): Query
public function findAnyAntennes(string $tri, $antennes_select): Query
{
$region = new RegionTable($this->pdo);
if ($tri == 'tri_alpha') {
$order = 'a.name ASC';
} else {
$order = 'r.name, a.name ASC';
}
return $this->makeQuery()
->join($region->getTable() . ' as r', 'a.region_id = r.id')
->select('a.id, a.region_id, r.name as regionName, a.name as antenneName, r.slug as regionSlug, a.slug as antenneSlug')
->order('r.name, a.name ASC');
->join($region->getTable() . ' as r', 'region_id = r.id')
->select('a.id, region_id as regionId, r.name as regionName, a.name as antenneName,
r.slug as regionSlug, a.slug as antenneSlug, edito1, edito2, edito3, edito4, gmarcheAt')
->where("a.id IN ($antennes_select)")
->order($order);
}
public function findAllAntennes(string $tri): Query
{
$region = new RegionTable($this->pdo);
if ($tri == 'tri_alpha') {
$order = 'a.name ASC';
} else {
$order = 'r.name, a.name ASC';
}
return $this->makeQuery()
->join($region->getTable() . ' as r', 'region_id = r.id')
->select('a.id, region_id as regionId, r.name as regionName, a.name as antenneName,
r.slug as regionSlug, a.slug as antenneSlug, edito1, edito2, edito3, edito4, gmarcheAt')
->order($order);
}
}

View File

@ -52,6 +52,10 @@ class ProductIndexAction
$requete = $this->antenneTable->findBy('slug', $antenne_slug);
$antenne_name = $requete->name;
$antenne_id = $requete->id;
$edito1 = $requete->edito1;
$edito2 = $requete->edito2;
$edito3 = $requete->edito3;
$edito4 = $requete->edito4;
$requete_region = $this->regionTable->findBy('slug', $region_slug);
$region_name = $requete_region->name;
$page = $params['p'] ?? 1;
@ -72,6 +76,6 @@ class ProductIndexAction
$sess = $_SESSION;
return $this->renderer->render($viewPath.'/index', compact('sess','nom_user','user_id',
'antenne_slug','gmarchePrefix','region_name','region_slug','antenne_id','antenne_name','viewPath',
'items', 'suiviantenne' ));
'items', 'suiviantenne','edito1', 'edito2','edito3','edito4' ));
}
}

View File

@ -57,14 +57,11 @@
<div class="row">
<div class="col-md-12">
<div class="container" style="font-size:18px; color:white;line-height:1.4rem;">
<div>Tous les mois, la Toile Francilienne organise des rencontres entre utilisateurs de la Monnaie Libre.</div>
C'est l'occasion rêvée d'échanger avec d'autres membres !
{{ annonce_ligne1 }}
{{ annonce_ligne2 }}
{{ annonce_ligne3 }}
<p></p>
<div>Consultez, rajoutez, modifiez vos propositions dans la liste du mois.</div>
Mettez bien le pseudo, la clé publique, le bien ou service, et le prix en june.
<div>
{{ edito1 }}
<p>{{ edito2 }}</p>
{{ edito3 }}
<p>{{ edito4 }}</p>
</div>
<p>
{% if affiche_username() != '' or (sess.connecte != '' and sess.connecte != '---') %}