Compare commits
45 Commits
dev-new-co
...
master
Author | SHA1 | Date |
---|---|---|
poka | 88072b2f8d | |
nox | 1d9249483a | |
nox | 034ceec279 | |
nox | 5aec7c62ec | |
nox | 600786d914 | |
nox | b9d7376869 | |
nox | 5ebbf9d7d2 | |
nox | bd626f62e5 | |
nox | 0ab166726c | |
nox | 2a01413fab | |
nox | 72fb941a18 | |
nox | 8c32377738 | |
nox | 025d0a2cad | |
nox | bf65d62297 | |
nox | 37468993f6 | |
nox | 502586ae49 | |
nox | e19b374ddd | |
nox | 9096865ecb | |
nox | 623b19631e | |
nox | af2257b796 | |
nox | 2b881fd7c5 | |
nox | 2f0b22e26e | |
nox | ef9e63d898 | |
nox | 2f38ff0776 | |
nox | 55c85b29b8 | |
nox | 85d55df6fe | |
nox | 473a16c5b0 | |
poka | d915fd4c64 | |
poka | b509f655f9 | |
poka | 449201652d | |
poka | 5b3332b798 | |
poka | f3728dd939 | |
poka | 65fa534743 | |
poka | 022cf49eea | |
poka | 1987ca71b3 | |
poka | 46a4b54118 | |
poka | b035d4022d | |
poka | f73d15220e | |
nox | e557174e96 | |
nox | a2121389bb | |
nox | e4e2ae854a | |
poka | 49ea6216d6 | |
nox | 8770a46caa | |
poka | 7da07e5b16 | |
poka | 48668e7433 |
|
@ -1,8 +1,11 @@
|
|||
config/config.php
|
||||
config/config-backup.php
|
||||
scripts/.loc_hash
|
||||
.idea
|
||||
/public/uploads
|
||||
/tmp
|
||||
public/uploads/*
|
||||
!public/uploads/default.png
|
||||
tmp
|
||||
vendor
|
||||
composer.json
|
||||
composer.lock
|
||||
/src/Framework/SwiftMailerFactory.php
|
||||
src/Framework/SwiftMailerFactory.php
|
|
@ -2,6 +2,7 @@
|
|||
include 'config.php';
|
||||
|
||||
use App\Framework\Twig\UrlExtension;
|
||||
use App\Framework\Twig\VariableExtension;
|
||||
use Framework\Middleware\CsrfMiddleware;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Renderer\TwigRendererFactory;
|
||||
|
@ -29,7 +30,8 @@ return [
|
|||
\DI\get(FlashExtension::class),
|
||||
\DI\get(FormExtension::class),
|
||||
\DI\get(CsrfExtension::class),
|
||||
\DI\get(UrlExtension::class)
|
||||
\DI\get(UrlExtension::class),
|
||||
\DI\get(VariableExtension::class)
|
||||
],
|
||||
SessionInterface::class => \DI\object(PHPSession::class),
|
||||
CsrfMiddleware::class => \DI\object()->constructor(\DI\get(SessionInterface::class)),
|
||||
|
@ -48,6 +50,6 @@ return [
|
|||
},
|
||||
// MAILER
|
||||
'mail.to' => 'admin@gmarche-testmail.com',
|
||||
'mail.from' => '$mail_from',
|
||||
'mail.from' => "$mail_from",
|
||||
Swift_Mailer::class => \DI\factory(\Framework\SwiftMailerFactory::class)
|
||||
];
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,62 @@
|
|||
.mapael .map {
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
padding: 15px;
|
||||
margin-bottom: 10px;
|
||||
position: relative;
|
||||
width: 60%;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
border-radius: 10%;
|
||||
}
|
||||
|
||||
.home_map {
|
||||
font-size:1.2rem;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
/* For all zoom buttons */
|
||||
.mapael .zoomButton {
|
||||
background-color: #fff;
|
||||
border: 1px solid #ccc;
|
||||
color: #000;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
line-height: 15px;
|
||||
text-align: center;
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
font-weight: bold;
|
||||
left: 10px;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select : none;
|
||||
-moz-user-select: none;
|
||||
-o-user-select : none;
|
||||
user-select: none;
|
||||
}
|
||||
/* Reset Zoom button first */
|
||||
.mapael .zoomReset {
|
||||
top: 10px;
|
||||
}
|
||||
/* Then Zoom In button */
|
||||
.mapael .zoomIn {
|
||||
top: 30px;
|
||||
}
|
||||
/* Then Zoom Out button */
|
||||
.mapael .zoomOut {
|
||||
top: 50px;
|
||||
}
|
||||
.mapael .mapTooltip {
|
||||
position: absolute;
|
||||
background-color: #1D1D1D;
|
||||
moz-opacity: 0.70;
|
||||
opacity: 0.70;
|
||||
filter: alpha(opacity=70);
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
z-index: 1000;
|
||||
max-width: 200px;
|
||||
display: none;
|
||||
color: #fff;
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
.container_main {
|
||||
background-color: #2E2E2E;
|
||||
}
|
||||
.tableau {
|
||||
width:100%;
|
||||
background-color: white;
|
||||
table-layout: fixed;
|
||||
border-collapse: collapse;
|
||||
/* border-spacing: 1px; // pour contrer les style de base */
|
||||
}
|
||||
/* Entête */
|
||||
.tableau th {
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
padding: 0rem;
|
||||
text-align: center;
|
||||
border-left: lightgray 1px solid;
|
||||
background-color:#999690;
|
||||
color:#fff;
|
||||
}
|
||||
.tableau .colonne_image {
|
||||
padding: 0; !important;
|
||||
}
|
||||
.tableau td {
|
||||
border-bottom: solid 1px black;
|
||||
border-left: lightgray 1px solid;
|
||||
padding-left: 0.7rem;
|
||||
}
|
||||
.align_droite {
|
||||
|
||||
text-align: right;
|
||||
padding-right: 2rem;
|
||||
}
|
||||
.breadcrumb {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.toggle_radio {
|
||||
position: relative;
|
||||
background: rgba(0,0,0,.1);
|
||||
margin: -3px auto 4px 10px;
|
||||
overflow: hidden;
|
||||
padding: 0 !important;
|
||||
border-radius: 50px;
|
||||
height: 28px;
|
||||
width: 215px;
|
||||
}
|
||||
.toggle_radio > * {
|
||||
float: left;
|
||||
}
|
||||
.toggle_radio input[type=radio]{
|
||||
display: none;
|
||||
}
|
||||
.toggle_radio label{
|
||||
color: rgba(0,0,0,.9);
|
||||
z-index: 0;
|
||||
display: block;
|
||||
width: 100px;
|
||||
height: 20px;
|
||||
margin: 3px 3px;
|
||||
border-radius: 50px;
|
||||
cursor: pointer;
|
||||
z-index: 1;
|
||||
text-align: center;
|
||||
}
|
||||
.toggle_option_slider{
|
||||
width: 100px;
|
||||
height: 20px;
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
border-radius: 50px;
|
||||
transition: all .4s ease;
|
||||
}
|
||||
|
||||
#first_toggle:checked ~ .toggle_option_slider{
|
||||
background: rgba(0,0,0,.3);
|
||||
left: 3px;
|
||||
}
|
||||
#second_toggle:checked ~ .toggle_option_slider{
|
||||
background: rgba(0,0,0,.3);
|
||||
left: 109px;
|
||||
}
|
|
@ -19,10 +19,19 @@ btn-custom {
|
|||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
#logo_home {
|
||||
width:30rem;
|
||||
margin: 0 auto;
|
||||
margin-top: -15px;
|
||||
margin-bottom: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
#la_page {
|
||||
text-align: center;
|
||||
width: 1174px;
|
||||
|
@ -30,6 +39,7 @@ img {
|
|||
height:auto;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
opacity:0.9;
|
||||
}
|
||||
|
||||
#la_page a {
|
||||
|
@ -58,7 +68,9 @@ li {
|
|||
background-size: 100% auto;
|
||||
font-family: Bree Serif, Arial, sans-serif;
|
||||
font-size: 14px;
|
||||
opacity:0.97;
|
||||
}
|
||||
|
||||
header.header {
|
||||
width: 389px;
|
||||
height: 259px;
|
||||
|
@ -86,25 +98,24 @@ header.header img {
|
|||
font-size: 26px;
|
||||
}
|
||||
|
||||
.article {
|
||||
width:auto;
|
||||
height:auto;
|
||||
font-size: 24px;
|
||||
}
|
||||
.article2 {
|
||||
.article .article2 {
|
||||
width:auto;
|
||||
height:auto;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.container {
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
.profil_user {
|
||||
height: 400px;
|
||||
width: 900px;
|
||||
background-color: lightgray;
|
||||
text-align: center;
|
||||
|
||||
.container.home {
|
||||
font-family: Arial, sans-serif;
|
||||
height:auto;
|
||||
width:60rem;
|
||||
text-align:center;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.records_content th, .records_content2 th {
|
||||
background-color: lightgray;
|
||||
color: rgba(0,0,0,0.85);
|
||||
|
@ -114,6 +125,17 @@ header.header img {
|
|||
margin: 5px auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/******************************************************************/
|
||||
/* profil.twig */
|
||||
/******************************************************************/
|
||||
.profil_user {
|
||||
background-color: lightgray;
|
||||
text-align: center;
|
||||
margin-top:5px;
|
||||
padding-bottom: 2rem;
|
||||
padding-right: 3rem;
|
||||
}
|
||||
/******************************************************************/
|
||||
/* signup.twig */
|
||||
/******************************************************************/
|
||||
|
@ -145,18 +167,24 @@ header.header img {
|
|||
display: block;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
/******************************************************************/
|
||||
/* dashboard.twig et dashboard-user.twig */
|
||||
/******************************************************************/
|
||||
.tab-de-bord {
|
||||
background-color: brown;
|
||||
padding: 1rem;
|
||||
min-width: 380px;
|
||||
}
|
||||
/******************************************************************/
|
||||
/* layout.twig */
|
||||
/******************************************************************/
|
||||
|
||||
.mdp_oublie:hover {
|
||||
background-color: deepskyblue;
|
||||
}
|
||||
|
||||
/******************************************************************/
|
||||
/* LOADING PUBKEY */
|
||||
/******************************************************************/
|
||||
|
||||
#cle_pub {
|
||||
display: none;
|
||||
}
|
||||
|
@ -178,7 +206,17 @@ body.loading .loadingPubkey {
|
|||
/* POUR MOBILES */
|
||||
/******************************************************************/
|
||||
@media only screen and (max-width:560px) {
|
||||
|
||||
/******************************************************************/
|
||||
/* dashboard.twig */
|
||||
/******************************************************************/
|
||||
.tab-de-bord {
|
||||
background-color: brown;
|
||||
padding: 1rem;
|
||||
min-width: 290px;
|
||||
}
|
||||
/******************************************************************/
|
||||
/* layout.twig */
|
||||
/******************************************************************/
|
||||
.fond {
|
||||
background-color: black;
|
||||
background-image: url("../images/bildreich_1275.jpg");
|
||||
|
|
|
@ -21,6 +21,7 @@ use Middlewares\Whoops;
|
|||
|
||||
chdir(dirname(__DIR__));
|
||||
require 'vendor/autoload.php';
|
||||
|
||||
$chemin = $_SERVER['DOCUMENT_ROOT'];
|
||||
$chemin_new = substr($chemin,0,-6);
|
||||
|
||||
|
@ -34,18 +35,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)
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
$(document).ready(function () {
|
||||
var nom_connecte = $("#nom_connecte").text();
|
||||
document.querySelector('#avatar').addEventListener('change', function() {
|
||||
//alert('ok');
|
||||
// alert(this.files[0].name);
|
||||
|
||||
});
|
||||
$('#avatar').change(function(){
|
||||
var fda = new FormData();
|
||||
//var input = $('#avatar').files[0];
|
||||
//var file = $('#avatar').files[0].name;
|
||||
//alert(file);
|
||||
|
||||
let files_avatar = $('#avatar')[0].files[0];
|
||||
fda.append('avatar',files_avatar);
|
||||
fda.append('nom_user',nom_connecte);
|
||||
// requête AJAX pour copier la photo et l'afficher
|
||||
$.ajax({
|
||||
url: '/models/upload_avatar.php',
|
||||
type: 'post',
|
||||
data: fda,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function(response){
|
||||
if(response != 0){
|
||||
// Show image preview
|
||||
$('#avatar_preview').html('');
|
||||
$('#avatar_preview').append("<img src='"+response+"' width='140' height='140' style='display: inline-block;'>");
|
||||
} else {
|
||||
alert('L\'image n\'a pu être uploadée');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
|
@ -8,14 +8,19 @@ function connexion(nom_connecte, mdp, chemin) {
|
|||
var result = JSON.parse(data);
|
||||
// Afficher l'avatar et le nom du connecté sur la barre d'état ou message d'erreur
|
||||
if (result.valide) {
|
||||
$("#bouton-connexion").html('');
|
||||
$("#bouton-connexion").append('<span><img src="/avatar_user.png" width="22" height="22" />');
|
||||
$("#bouton-connexion").append('</span>');
|
||||
$("#nom_connecte").css('display',"block");
|
||||
$("#bouton-connexion").css('display',"none");
|
||||
$("#avatar-user").css('display',"inline-block");
|
||||
$("#avatar-user").html('');
|
||||
$("#avatar-user").append('<span><img src="/avatar_user.png" width="22" height="22" />');
|
||||
$("#avatar-user").append('</span>');
|
||||
$("#user-connecte").css('display',"inline-block");
|
||||
$("#contenu_bouton").html('');
|
||||
$("#contenu_bouton").append(result.username);
|
||||
|
||||
$("#nom_connecte_bis").append(result.username);
|
||||
$('#formulaire').attr('action', '/profil/user/'+result.username);
|
||||
$("#deconnexion").css('display',"block");
|
||||
$("#inscription").css('display',"none");
|
||||
$("#nom_connecte").append(result.username);
|
||||
// On recharge la page pour tenir compte de la connexion de l'utilisateur
|
||||
window.location.reload(true);
|
||||
} else {
|
||||
$('.alert-danger').html('');
|
||||
|
|
|
@ -197,6 +197,21 @@ function UpdateProduitsDetails(nom_connecte) {
|
|||
}
|
||||
);
|
||||
}
|
||||
function UpdateSuiviAntenne(id_connecte, id_antenne, etat_suivi) {
|
||||
|
||||
|
||||
$.post("/models/updateSuiviAntenne.php", {
|
||||
id_connecte: id_connecte,
|
||||
id_antenne: id_antenne,
|
||||
etat_suivi: etat_suivi
|
||||
},
|
||||
function (data, status) {
|
||||
|
||||
// On recharge la page pour tenir compte de la connexion de l'utilisateur
|
||||
//window.location.reload(true);
|
||||
}
|
||||
);
|
||||
}
|
||||
function UpdateRecherchesDetails(nom_connecte) {
|
||||
|
||||
var produit = $("#update_produit").val();
|
||||
|
@ -227,17 +242,21 @@ function UpdateRecherchesDetails(nom_connecte) {
|
|||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
//$('input:checkbox[name=mybox]').attr('checked',false);
|
||||
// On récupère le nom de l'antenne dans l'url pour afficher les biens/services de celle-ci
|
||||
var url = document.location.href;
|
||||
var antenne_slug = url.split('/')[4];
|
||||
var affichage_slug = url.split('/')[5];
|
||||
var nom_connecte = $("#nom_connecte").text();
|
||||
|
||||
var antenne_slug = url.split('/')[5];
|
||||
var affichage_slug = url.split('/')[6];
|
||||
var nom_connecte = $("#contenu_bouton").text().trim();
|
||||
if (nom_connecte == '') {
|
||||
nom_connecte = $("#nom_connecte_bis").text();
|
||||
nom_connecte = nom_connecte.trim();
|
||||
}
|
||||
if (affichage_slug == 'produits') {
|
||||
$("#hidden_antenne_slug").val(antenne_slug);
|
||||
readRecords(antenne_slug, nom_connecte);
|
||||
var source = 'products';
|
||||
} else {
|
||||
} else if (affichage_slug == 'recherches') {
|
||||
$("#hidden_antenne_slug_r").val(antenne_slug);
|
||||
readRecords2(antenne_slug, nom_connecte);
|
||||
var source = 'recherches';
|
||||
|
@ -305,4 +324,47 @@ $(document).ready(function () {
|
|||
}
|
||||
});
|
||||
});
|
||||
/*function dump(obj) {
|
||||
var out = '';
|
||||
for (var i in obj) {
|
||||
out += i + ": " + obj[i] + "\n";
|
||||
}
|
||||
alert(out);
|
||||
// or, if you wanted to avoid alerts...
|
||||
var pre = document.createElement('pre');
|
||||
pre.innerHTML = out;
|
||||
document.body.appendChild(pre)
|
||||
}*/
|
||||
$('#avatar').change(function(){
|
||||
var fda = new FormData();
|
||||
var nom_connecte = $("#nom_connecte").text();
|
||||
//var file = $('#avatar').files[0].name;
|
||||
//alert(file);
|
||||
var test = document.getElementById('avatar');
|
||||
//dump(test);
|
||||
//var files_avatar = $('#avatar')[0].files[0];
|
||||
fda.append('avatar',$('#avatar')[0].files[0]);
|
||||
fda.append('nom_user',nom_connecte);
|
||||
// requête AJAX pour copier l'avatar et l'afficher
|
||||
$.ajax({
|
||||
url: '/models/upload_avatar.php',
|
||||
type: 'post',
|
||||
data: fda,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function(response){
|
||||
if(response != 0){
|
||||
// Show image preview
|
||||
alert('ok');
|
||||
$('#avatar_preview').html('');
|
||||
$('#avatar_preview').append("<img src='"+response+"' width='140' height='140' style='display: inline-block;'>");
|
||||
} else {
|
||||
alert('L\'image n\'a pu être uploadée');
|
||||
}
|
||||
},
|
||||
error: function(response) {
|
||||
alert('erreur');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
// cleanArray supprime les éléments dupliqués
|
||||
function cleanArray(array) {
|
||||
var i, j, len = array.length, out = [], obj = {};
|
||||
for (i = 0; i < len; i++) {
|
||||
obj[array[i]] = 0;
|
||||
}
|
||||
for (j in obj) {
|
||||
out.push(j);
|
||||
}
|
||||
return out;
|
||||
}
|
|
@ -1,22 +1,26 @@
|
|||
<?php
|
||||
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
include '../../config/config.php';
|
||||
|
||||
try {
|
||||
|
||||
$bdd = new \PDO("mysql:host=$db_server;dbname=$db_name", $db_username, $db_password);
|
||||
if (isset($_POST['nom_connecte']) && isset($_POST['mdp']) != "") {
|
||||
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);
|
||||
$query->execute($params);
|
||||
$row = $query->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if (password_verify($_POST['mdp'],$row['password'])) {
|
||||
session_start();
|
||||
$_SESSION['user']=$row['username'];
|
||||
$_SESSION['connecte'] = $row['username'];
|
||||
$_SESSION['role'] = $row['role'];
|
||||
$_SESSION['logout'] = false;
|
||||
echo '{"valide":true,"username":"'.$row['username'].'"}';
|
||||
} else {
|
||||
echo '{"valide":false}';
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<?php
|
||||
session_start();
|
||||
//session_start();
|
||||
ini_set('display_errors', 0);
|
||||
include '../../config/config.php';
|
||||
$antenne_slug = $_GET['antenne_slug'];
|
||||
$nom_connecte = $_SESSION['user'];
|
||||
$nom_connecte = $_GET['nom_connecte'];
|
||||
$bdd = new \PDO("mysql:host=$db_server;dbname=$db_name", $db_username, $db_password);
|
||||
|
||||
// Affichage des intitulés de colonnes
|
||||
|
@ -25,42 +25,54 @@
|
|||
LEFT JOIN users
|
||||
ON users.id = products.user_id
|
||||
WHERE antennes.slug = :antenne_slug";
|
||||
$stmt = $bdd->prepare($requete);
|
||||
$stmt2 = $bdd->prepare($requete);
|
||||
$stmt->execute($params);
|
||||
$stmt2->execute($params);
|
||||
$count = $stmt->rowCount();
|
||||
$affich_actions = false;
|
||||
while ($row2 = $stmt2->fetch(PDO::FETCH_ASSOC)) {
|
||||
$stmt = $bdd->prepare($requete);
|
||||
$stmt2 = $bdd->prepare($requete);
|
||||
$stmt->execute($params);
|
||||
$stmt2->execute($params);
|
||||
$count = $stmt->rowCount();
|
||||
$affich_actions = false;
|
||||
while ($row2 = $stmt2->fetch(PDO::FETCH_ASSOC)) {
|
||||
if ($row2['username'] == $nom_connecte) {
|
||||
$affich_actions = true;
|
||||
}
|
||||
}
|
||||
if ($affich_actions) {
|
||||
}
|
||||
if ($affich_actions) {
|
||||
$data .= '<th colspan="2" style="text-align: center;">Actions</th>';
|
||||
$data .= '</tr>';
|
||||
} else {
|
||||
} else {
|
||||
$data .= '</tr>';
|
||||
}
|
||||
if ($count > 0)
|
||||
{
|
||||
}
|
||||
if ($count > 0)
|
||||
{
|
||||
$number = 1;
|
||||
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
||||
|
||||
$data .= "<tr style='background:lightblue;color:black;'>
|
||||
<td>$number</td>";
|
||||
|
||||
$prix = $row['prix'];
|
||||
$vendeur = $row['username'];
|
||||
$produit = $row['name'];
|
||||
$quantite = $row['quantite'];
|
||||
if ($quantite == "0") {
|
||||
$produit = "[Vendu] ";
|
||||
} else {
|
||||
$produit = "";
|
||||
}
|
||||
$produit .= $row['name'];
|
||||
$pubkey = $row['pubkey'];
|
||||
$pubkeyShort = substr($pubkey, 0, 8);
|
||||
$vendeur_format = "<a target=\"_blank\" href=\"https://g1.duniter.fr/#/app/wot/$pubkey/\">$vendeur</a>";
|
||||
$cle_pub_format = "<a target=\"_blank\" href=\"https://g1.duniter.fr/api/#/v1/payment/$pubkey?amount=$prix&name=$vendeur&comment=[Achat GMarche] : $produit&preferred_node=https://g1.librelois.fr&redirect_url=https://gmarche.monnaie-libre.fr\" title=$pubkey> $pubkeyShort... </a>";
|
||||
$data .= '<td>'.$produit.'</td>';
|
||||
$imagep = '../uploads/products/'.$antenne_slug.'/'.$row['image'].'';
|
||||
if (file_exists($imagep) && $row['image']) {
|
||||
$data .= '<td><img src="/uploads/products/'.$antenne_slug.'/'.$row['image'].'" width="100" height="100" /></td>';
|
||||
} else {
|
||||
$data .= '<td><img src="/uploads/default.png" width="30" height="30" /></td>';
|
||||
}
|
||||
$data .= '<td>'.$vendeur_format.'</td>';
|
||||
$data .= '<td>'.$cle_pub_format.'</td>';
|
||||
$data .= '<td>'.$row['quantite'].'</td>';
|
||||
$data .= '<td>'.$quantite.'</td>';
|
||||
$data .= '<td>'.$prix.'</td>';
|
||||
if ($row['username'] == $nom_connecte ) {
|
||||
$data .= '<td>';
|
||||
|
@ -95,10 +107,10 @@
|
|||
$data .= '</tr>';
|
||||
$number++;
|
||||
}
|
||||
} else {
|
||||
} else {
|
||||
// Il n'y a pas encore de biens/services saisis
|
||||
$data .= "<tr style='background-color:lightblue;text-align:left;color:black;'><td colspan='10'>Aucun enregistrement saisi</td></tr>";
|
||||
}
|
||||
$data .= '</table>';
|
||||
echo $data;
|
||||
}
|
||||
$data .= '</table>';
|
||||
echo $data;
|
||||
?>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<?php
|
||||
session_start();
|
||||
//session_start();
|
||||
ini_set('display_errors', 0);
|
||||
include '../../config/config.php';
|
||||
$antenne_slug = $_GET['antenne_slug'];
|
||||
$nom_connecte = $_SESSION['user'];
|
||||
$nom_connecte = $_GET['nom_connecte'];
|
||||
$bdd = new \PDO("mysql:host=$db_server;dbname=$db_name", $db_username, $db_password);
|
||||
|
||||
// Affichage des intitulés de colonnes
|
||||
|
@ -55,7 +55,12 @@
|
|||
$vendeur_format = "<a target=\"_blank\" href=\"https://g1.duniter.fr/#/app/wot/$pubkey/\">$vendeur</a>";
|
||||
$pubkeyShort = substr($pubkey, 0, 8);
|
||||
$data .= '<td>'.$produit.'</td>';
|
||||
$imagep = '../uploads/recherches/'.$antenne_slug.'/'.$row['image'].'';
|
||||
if (file_exists($imagep) && $row['image']) {
|
||||
$data .= '<td><img src="/uploads/recherches/'.$antenne_slug.'/'.$row['image'].'" width="100" height="100" /></td>';
|
||||
} else {
|
||||
$data .= '<td><img src="/uploads/default.png" width="30" height="30" /></td>';
|
||||
}
|
||||
$data .= '<td>'.$vendeur_format.'</td>';
|
||||
$data .= '<td>'.$pubkeyShort.'...</td>';
|
||||
$data .= '<td>'.$row['quantite'].'</td>';
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
<?php
|
||||
error_reporting(E_ALL & ~E_NOTICE);
|
||||
include '../../config/config.php';
|
||||
|
||||
$bdd = new \PDO("mysql:host=$db_server;dbname=$db_name", $db_username, $db_password);
|
||||
|
||||
if(isset($_POST)) {
|
||||
$params["user_id"] = $_POST['id_connecte'];
|
||||
$antenne_id = $_POST['id_antenne'];
|
||||
$etat_suivi = $_POST['etat_suivi'];
|
||||
$maj = true;
|
||||
// On lit le champ SuiviAntenne
|
||||
$requete1 = "SELECT suiviantenne FROM users WHERE id = :user_id";
|
||||
$query1 = $bdd->prepare($requete1);
|
||||
$ancien_suivi = $query1->execute($params);
|
||||
$suivi = $ancien_suivi;
|
||||
//echo "ancien=".$ancien_suivi;
|
||||
/*if (strpos($ancien_suivi,'|')>0) {
|
||||
echo "strpos > 0";
|
||||
$tableau = explode('|', $ancien_suivi);
|
||||
$antennes_suivies = '';
|
||||
// On ajoute l'antenne suivie
|
||||
if ($etat_suivi == 'true') {
|
||||
if (count($tableau) > 0) {
|
||||
foreach ($valeur as $tableau) {
|
||||
$antennes_suivies .= $valeur.'|';
|
||||
}
|
||||
$antennes_suivies .= $antenne_id;
|
||||
}
|
||||
} else {
|
||||
// On retire l'antenne qui n'est plus suivie
|
||||
foreach($valeur2 as $tableau) {
|
||||
if ($valeur2 == $antenne_id) {
|
||||
$ajout = '';
|
||||
} else {
|
||||
$ajout = $valeur2.'|';
|
||||
}
|
||||
$antennes_suivies .= $ajout;
|
||||
}
|
||||
// On supprime le pipe inutile à la fin de la chaîne
|
||||
$antennes_suivies = substr($antennes_suivies,0,-1);
|
||||
}*/
|
||||
// On ajoute alors qu'il n'y a qu'une antenne dans le suivi ou aucune
|
||||
if ($etat_suivi == 'true') {
|
||||
if ($suivi == $antenne_id) {
|
||||
echo "suivi 1 =".$suivi;
|
||||
echo "<br />antenne_id =".$antenne_id;
|
||||
$antennes_suivies = $antenne_id;
|
||||
} elseif ($suivi != $antenne_id) {
|
||||
echo "suivi 2 =".$suivi;
|
||||
echo "<br />antenne_id =".$antenne_id;
|
||||
$antennes_suivies = $suivi . '|' . $antenne_id;
|
||||
}
|
||||
}
|
||||
if ($etat_suivi == 'true') {
|
||||
if ($suivi == '') {
|
||||
echo "suivi 0 =" . $suivi;
|
||||
echo "<br />antenne_id =" . $antenne_id;
|
||||
$antennes_suivies = $antenne_id;
|
||||
}
|
||||
}
|
||||
if ($etat_suivi == 'false') {
|
||||
if ($suivi != $antenne_id) {
|
||||
echo "ERREUR 4 =" . $suivi;
|
||||
echo "<br />antenne_id =" . $antenne_id;
|
||||
//$antennes_suivies = $suivi . '|' . $antenne_id;
|
||||
$maj = false;
|
||||
} elseif ($suivi == $antenne_id) {
|
||||
echo "suivi 3 =".$suivi;
|
||||
echo "<br />antenne_id =".$antenne_id;
|
||||
$antennes_suivies = '';
|
||||
} elseif ($suivi == '') {
|
||||
echo "suivi 5 =" . $suivi;
|
||||
echo "<br />antenne_id =" . $antenne_id;
|
||||
$antennes_suivies = '';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Mise à jour du champ SuiviAntenne
|
||||
if ($maj) {
|
||||
$requete2 = "UPDATE users SET suiviantenne = '$antennes_suivies' WHERE id = :user_id";
|
||||
$query2 = $bdd->prepare($requete2);
|
||||
$query2->execute($params);
|
||||
$query2->closeCursor();
|
||||
}
|
||||
$query1->closeCursor();
|
||||
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
// Nom du fichier image
|
||||
$filename = $_FILES['avatar']['name'];
|
||||
|
||||
// Emplacement
|
||||
$path = str_replace('\\', '/', dirname(realpath(__DIR__)));
|
||||
$location = $path.'/uploads/avatars/';
|
||||
|
||||
// Extension du fichier
|
||||
$file_extension = pathinfo($filename, PATHINFO_EXTENSION);
|
||||
$file_extension = strtolower($file_extension);
|
||||
|
||||
// Extensions valides d'image
|
||||
$image_ext = array("jpg","png","jpeg");
|
||||
$nom_user = $_POST['nom_user'];
|
||||
$response = 0;
|
||||
if(in_array($file_extension,$image_ext)){
|
||||
$directory = '/uploads/avatars';
|
||||
if (file_exists($directory) === false) {
|
||||
mkdir($directory, 0777, true);
|
||||
}
|
||||
$nom_fichier = $nom_user.'-'.uniqid("",true).'.'.$file_extension;
|
||||
$location2 = '/uploads/avatars/'.$nom_fichier;
|
||||
// Upload du fichier
|
||||
if(move_uploaded_file($_FILES['avatar']['tmp_name'],$directory.'/'.$nom_fichier)){
|
||||
$response = $location2;
|
||||
}
|
||||
}
|
||||
|
||||
echo $response;
|
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
|
@ -0,0 +1,63 @@
|
|||
#!/bin/bash
|
||||
|
||||
[ "$EUID" -ne 0 ] && sudo="sudo" || sudo=""
|
||||
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
|
||||
|
||||
start=`date +%s`
|
||||
date=$(date +'%d-%m-%y à %H:%M')
|
||||
echo "### $date ###"
|
||||
|
||||
## Initialisation
|
||||
DUNITER=$(grep g1_node $SCRIPTPATH/../config/config.php | awk '{ print $3}' | tr -d ';' | tr -d "'")
|
||||
TXBLOCKS=$(curl -s $DUNITER/blockchain/with/tx | jq '.result.blocks[]')
|
||||
TXBLOCKS=$(echo "$TXBLOCKS" | tail -n 2 | tr '\n' ' ')
|
||||
keyword="\[Achat GMarche] : "
|
||||
[ ! -e $SCRIPTPATH/.loc_hash ] && touch $SCRIPTPATH/.loc_hash
|
||||
|
||||
## Récupération des transactions avec commentaire GMarche
|
||||
|
||||
for i in $TXBLOCKS; do
|
||||
result=$(curl -s $DUNITER/blockchain/block/$i | jq '.transactions[].hash, .transactions[].comment' | grep -v '""' | tr -d '"' | grep -B1 "$keyword")
|
||||
rhash=$(echo "$result" | head -n1)
|
||||
rcom=$(echo "$result" | tail -n1)
|
||||
if [[ ! -z $result && -z $(grep $rhash $SCRIPTPATH/.loc_hash) ]]; then
|
||||
isSell+=$(echo -e "$rcom;")
|
||||
echo "$rhash" >> $SCRIPTPATH/.loc_hash
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
## Ajout des transactions en piscine pour les users GMarche
|
||||
|
||||
req="SELECT pubkey FROM users;"
|
||||
usersPubkeys=$($sudo mysql --database gmarche -e "$req" | grep .)
|
||||
|
||||
for i in $usersPubkeys; do
|
||||
result=$(curl -s $DUNITER/tx/history/$i/pending | jq '. | select(.history.sending == [])' | jq '.history.pending[].hash,.history.pending[].comment' | tr -d '"')
|
||||
rhash=$(echo "$result" | head -n1)
|
||||
rcom=$(echo "$result" | tail -n1)
|
||||
if [[ ! -z $result && -z $(grep $rhash $SCRIPTPATH/.loc_hash) ]]; then
|
||||
isSell+=$(echo -e "$rcom;")
|
||||
echo "$rhash" >> $SCRIPTPATH/.loc_hash
|
||||
fi
|
||||
done
|
||||
|
||||
## Retrait de l'identifiant gmarche des commentaires
|
||||
isSell=$(echo $isSell | sed "s/$keyword//g")
|
||||
|
||||
[[ ! -z $isSell ]] && echo "$isSell est vendu"
|
||||
|
||||
## Retrait d'un quantité pour les articles vendu
|
||||
IFS=';'; ADDR=($isSell); unset IFS;
|
||||
for i in "${ADDR[@]}"; do
|
||||
#req="UPDATE products SET status = 'solde' WHERE name = '$i';"
|
||||
req="UPDATE products SET quantite = CASE WHEN quantite = 0 THEN quantite ELSE quantite - 1 END WHERE name = '$i';"
|
||||
$sudo mysql --database gmarche -e "$req"
|
||||
done
|
||||
|
||||
#$sudo mysql --database gmarche -e "SELECT name,status FROM products;"
|
||||
|
||||
end=`date +%s`
|
||||
runtime=$((end-start))
|
||||
echo "Temps d'execution: ${runtime}s"
|
||||
exit 0
|
|
@ -6,6 +6,7 @@ use App\Account\Action\AccountEditAction;
|
|||
use App\Account\Action\ProfilAction;
|
||||
use App\Account\Action\SignupAction;
|
||||
use Framework\Auth\LoggedInMiddleware;
|
||||
use Framework\Auth\LoginModalMiddleware;
|
||||
use Framework\Module;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Router;
|
||||
|
@ -24,7 +25,7 @@ class AccountModule extends Module
|
|||
$router->post('/inscription', SignupAction::class);
|
||||
$router->get('/mon-profil', [LoggedInMiddleware::class, AccountAction::class], 'account');
|
||||
$router->post('/mon-profil', [LoggedInMiddleware::class, AccountEditAction::class]);
|
||||
$router->get('/profil-utilisateur', ProfilAction::class, 'account.profil');
|
||||
$router->post('/profil-utilisateur', ProfilAction::class);
|
||||
$router->get('/profil/user/{user:[a-zA-Z\-0-9]+}', [LoginModalMiddleware::class, ProfilAction::class], 'account.profil');
|
||||
$router->post('/profil/user/{user:[a-zA-Z\-0-9]+}', [LoginModalMiddleware::class, ProfilAction::class]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
namespace App\Account\Action;
|
||||
|
||||
use App\Auth\UserTable;
|
||||
use Framework\Auth;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Response\RedirectResponse;
|
||||
use Framework\Session\FlashService;
|
||||
use Framework\Validator;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class AccountUserEditAction
|
||||
{
|
||||
|
||||
/**
|
||||
* @var RendererInterface
|
||||
*/
|
||||
private $renderer;
|
||||
/**
|
||||
* @var Auth
|
||||
*/
|
||||
private $auth;
|
||||
/**
|
||||
* @var FlashService
|
||||
*/
|
||||
private $flashService;
|
||||
/**
|
||||
* @var UserTable
|
||||
*/
|
||||
private $userTable;
|
||||
|
||||
public function __construct(
|
||||
RendererInterface $renderer,
|
||||
Auth $auth,
|
||||
FlashService $flashService,
|
||||
UserTable $userTable
|
||||
) {
|
||||
|
||||
$this->renderer = $renderer;
|
||||
$this->auth = $auth;
|
||||
$this->flashService = $flashService;
|
||||
$this->userTable = $userTable;
|
||||
}
|
||||
|
||||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
//$user = $this->auth->getUser();
|
||||
$params = $request->getParsedBody();
|
||||
$url_part = explode('/',$_SERVER['HTTP_REFERER']);
|
||||
$chemin = $url_part[3].'/'.$url_part[4];
|
||||
$validator = (new Validator($params))
|
||||
->required('firstname', 'lastname');
|
||||
if ($validator->isValid()) {
|
||||
$userParams = [
|
||||
'firstname' => $params['firstname'],
|
||||
'lastname' => $params['lastname']
|
||||
];
|
||||
|
||||
$this->userTable->update($params['id_user'], $userParams);
|
||||
$this->flashService->success("Le compte ".$params['username']." a bien été mis à jour");
|
||||
return new RedirectResponse($chemin);
|
||||
//return new RedirectResponse($request->getUri()->getPath());
|
||||
}
|
||||
$errors = $validator->getErrors();
|
||||
return $this->renderer->render('@account/account', compact('user', 'errors'));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
<?php
|
||||
namespace App\Account\Action;
|
||||
|
||||
use App\Auth\UserTable;
|
||||
use Framework\Auth;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Response\RedirectResponse;
|
||||
use Framework\Router;
|
||||
use Framework\Session\FlashService;
|
||||
use Framework\Validator;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class ActiveAction
|
||||
{
|
||||
|
||||
/**
|
||||
* @var RendererInterface
|
||||
*/
|
||||
private $renderer;
|
||||
/**
|
||||
* @var Auth
|
||||
*/
|
||||
private $auth;
|
||||
/**
|
||||
* @var FlashService
|
||||
*/
|
||||
private $flashService;
|
||||
/**
|
||||
* @var UserTable
|
||||
*/
|
||||
private $userTable;
|
||||
|
||||
public function __construct(
|
||||
RendererInterface $renderer,
|
||||
Auth $auth,
|
||||
FlashService $flashService,
|
||||
Router $router,
|
||||
UserTable $userTable
|
||||
) {
|
||||
$this->renderer = $renderer;
|
||||
$this->auth = $auth;
|
||||
$this->flashService = $flashService;
|
||||
$this->router = $router;
|
||||
$this->userTable = $userTable;
|
||||
}
|
||||
|
||||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
$params = $request->getParsedBody();
|
||||
|
||||
$url_part = explode('/',$_SERVER['HTTP_REFERER']);
|
||||
$chemin = $url_part[3].'/'.$url_part[4];
|
||||
|
||||
$validator = (new Validator($params))
|
||||
->required('username', 'actif');
|
||||
if ($validator->isValid()) {
|
||||
if ($params['actif']) {
|
||||
$params['actif'] = '0';
|
||||
} else {
|
||||
$params['actif'] = '1';
|
||||
}
|
||||
$userParams = [
|
||||
'username' => $params['username'],
|
||||
'actif' => $params['actif']
|
||||
];
|
||||
|
||||
$this->userTable->update($params['id'], $userParams);
|
||||
if (!$params['actif']) {
|
||||
$this->flashService->success("L'utilisateur ".$params['username']." a bien été désactivé");
|
||||
} else {
|
||||
$this->flashService->success("L'utilisateur ".$params['username']." a bien été réactivé");
|
||||
}
|
||||
return new RedirectResponse($chemin);
|
||||
}
|
||||
$errors = $validator->getErrors();
|
||||
return $this->renderer->render('@account/account', compact('user', 'errors'));
|
||||
}
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
<?php
|
||||
namespace App\Account\Action;
|
||||
|
||||
use App\Auth\UserTable;
|
||||
use App\Gmarche\Table\AntenneTable;
|
||||
use Framework\Auth;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
@ -16,24 +18,31 @@ class ProfilAction
|
|||
* @var Auth
|
||||
*/
|
||||
private $auth;
|
||||
/**
|
||||
* @var UserTable
|
||||
*/
|
||||
private $userTable;
|
||||
|
||||
public function __construct(
|
||||
RendererInterface $renderer,
|
||||
Auth $auth
|
||||
AntenneTable $antenneTable,
|
||||
Auth $auth,
|
||||
UserTable $userTable
|
||||
) {
|
||||
$this->renderer = $renderer;
|
||||
$this->antenneTable = $antenneTable;
|
||||
$this->auth = $auth;
|
||||
$this->userTable = $userTable;
|
||||
}
|
||||
|
||||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
/* Transmission du nom de l'utilistateur connecté à la vue Twig */
|
||||
session_start();
|
||||
if (isset($_SESSION['user'])) {
|
||||
$nom_user = $_SESSION['user'];
|
||||
} else {
|
||||
$nom_user = '';
|
||||
}
|
||||
return $this->renderer->render('@account/profil', compact('nom_user'));
|
||||
$listeAntennes = $this->antenneTable->findAllAntennes('');
|
||||
$user_affiche = $request->getAttribute('user')->username;
|
||||
$nom_avatar = $request->getAttribute('user')->avatar;
|
||||
$email = $request->getAttribute('user')->email;
|
||||
$suiviantenne = $request->getAttribute('user')->suiviantenne;
|
||||
return $this->renderer->render('@account/profil',
|
||||
compact('user_affiche', 'nom_avatar', 'email', 'listeAntennes', 'suiviantenne'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,7 +60,6 @@ class SignupAction
|
|||
$validator = (new Validator($params))
|
||||
->required('username', 'pubkey', 'email', 'password', 'password_confirm', 'created_at')
|
||||
->length('username', 3)
|
||||
->length('pubkey', 43)
|
||||
->length('firstname', 0)
|
||||
->length('lastname', 0)
|
||||
->email('email')
|
||||
|
@ -77,7 +76,8 @@ class SignupAction
|
|||
'email' => $params['email'],
|
||||
'password' => password_hash($params['password'], PASSWORD_DEFAULT),
|
||||
'created_at' => $params['created_at'],
|
||||
'role' => 'user'
|
||||
'role' => '3',
|
||||
'suiviantenne' => ''
|
||||
];
|
||||
$this->userTable->insert($userParams);
|
||||
$user = Hydrator::hydrate($userParams, User::class);
|
||||
|
|
|
@ -17,7 +17,7 @@ class User extends \App\Auth\User
|
|||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $role;
|
||||
public $role;
|
||||
|
||||
public function getRoles(): array
|
||||
{
|
||||
|
|
|
@ -1,15 +1,83 @@
|
|||
{% extends 'layout.twig' %}
|
||||
|
||||
{% block body %}
|
||||
<script type="text/javascript" src="/js/script.js"></script>
|
||||
<div class="profil_user">
|
||||
<h4>Profil utilisateur - {{ user_affiche }}</h4>
|
||||
<div id="avatar" class="col-sm-10 card" style="text-align:left;margin-left: 1.7rem;">
|
||||
<div class="card-block" style="margin-left: 1rem;">
|
||||
<h5 class="card-title">Changement d'avatar</h5>
|
||||
<!--<div class="col-sm-5" style="float:left;">
|
||||
|
||||
<div class="profil_user" style="margin-top:5px;">
|
||||
<h4>Profil utilisateur {{ nom_user }}</h4>
|
||||
</div>-->
|
||||
<div class="col-sm-8" style="float:left;margin-left:0rem;">
|
||||
<div class="form-group">
|
||||
<form method='post' action='' enctype="multipart/form-data">
|
||||
Choisir la nouvelle image : <input type='file' name='file' id='avatar' class='form-control' ><br>
|
||||
</form>
|
||||
<div class="col-sm-8">
|
||||
<div id="avatar_preview" style="max-width:140px;max-height:140px;">
|
||||
<img src="/uploads/avatars/{{ nom_avatar }}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mot_de_passe" class="col-sm-10 card" style="text-align: left;margin-top:0.8rem; margin-left: 1.7rem;">
|
||||
<div class="card-block" style="margin-left: 1rem;margin-top:0.6rem;">
|
||||
<h5 class="card-title">Changement de mot de passe</h5>
|
||||
<h5 class="card-title">(via l'envoi d'un lien par mail)</h5>
|
||||
<div class="container" style="color:black;background-color: lightgray;opacity: 0.9;margin:0.5rem 0.2rem;padding:0.4rem;">
|
||||
<form action="{{ path('auth.password') }}" method="post">
|
||||
<button class="btn btn-primary">Renvoyer un mot de passe</button>
|
||||
<div style="width:0;height:0;">
|
||||
{{ field('username', user_affiche, "", {type: 'hidden'}) }}
|
||||
{{ field('email', email, "", {type: 'hidden'}) }}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="antennes_suivies" class="col-sm-10 card" style="text-align: left;margin-top:0.8rem;margin-left: 1.7rem;">
|
||||
<div class="card-block" style="margin-left: 1rem;">
|
||||
<h5 class="card-title">Antennes suivies</h5>
|
||||
<div>
|
||||
<h5>Biens achetés</h5>
|
||||
<div class="row" style="margin-left: 2rem;">
|
||||
<ul class="list-group list-group-flush">
|
||||
{% set antenne_suivie = suiviantenne|split('|') %}
|
||||
{% for antenn in antenne_suivie %}
|
||||
<li class="liste_antennes list-group-item" style="padding: .2rem 1.25rem;">
|
||||
{% for item in listeAntennes %}
|
||||
{% if (item.id == antenn) %}
|
||||
{{ item.antenneName }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="prochains_gmarches" class="col-sm-10 card" style="text-align: left;margin-top:0.8rem;margin-left: 1.7rem;">
|
||||
<div class="card-block" style="margin-left: 1rem;">
|
||||
<h5 class="card-title">Prochains Ğ-Marchés</h5>
|
||||
<div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-10 card" style="text-align: left;margin-left: 1.7rem;margin-top:0.8rem;">
|
||||
<div class="card-block" style="margin-left: 1rem;">
|
||||
<h5 class="card-title">Statistiques diverses</h5>
|
||||
<div>
|
||||
<h6 style="margin-left: 1rem;">Biens achetés</h6>
|
||||
</div>
|
||||
<div>
|
||||
<h5>Biens vendus</h5>
|
||||
<h6 style="margin-left: 1rem;">Biens vendus</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -2,8 +2,12 @@
|
|||
|
||||
namespace App\Admin;
|
||||
|
||||
use App\Product\Actions\ProductIndexAction;
|
||||
use App\Product\Actions\ProductCrudAction;
|
||||
use App\Account\Action\AccountUserAction;
|
||||
use App\Account\Action\AccountUserEditAction;
|
||||
use App\Account\Action\ActiveAction;
|
||||
use App\Antenne\Actions\AntenneEditAction;
|
||||
use App\Antenne\Actions\AntenneCrudAction;
|
||||
use Framework\Auth\LoggedInMiddleware;
|
||||
use Framework\Module;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Renderer\TwigRenderer;
|
||||
|
@ -11,7 +15,6 @@ use Framework\Router;
|
|||
|
||||
class AdminModule extends Module
|
||||
{
|
||||
|
||||
const DEFINITIONS = __DIR__ . '/config.php';
|
||||
|
||||
public function __construct(
|
||||
|
@ -19,13 +22,23 @@ class AdminModule extends Module
|
|||
Router $router,
|
||||
AdminTwigExtension $adminTwigExtension,
|
||||
string $prefix
|
||||
) {
|
||||
|
||||
$renderer->addPath('admin', __DIR__ . '/views');
|
||||
|
||||
//$router->get('/machin', ProductCrudAction::class, 'machin.bidule'); // ProductIndexAction
|
||||
/*if ($renderer instanceof TwigRenderer) {
|
||||
)
|
||||
{
|
||||
$chemin = str_replace('Admin','Antenne',__DIR__);
|
||||
$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->get('/antenne/new', [LoggedInMiddleware::class, AntenneCrudAction::class], 'antenne.create');
|
||||
$router->crud('/antenne', [LoggedInMiddleware::class, AntenneCrudAction::class],'antenne');
|
||||
$router->get('/antenne/edit', [LoggedInMiddleware::class, AntenneEditAction::class], 'antenne.edit');
|
||||
$router->post('/antenne/edit', [LoggedInMiddleware::class, AntenneEditAction::class]);
|
||||
if ($renderer instanceof TwigRenderer) {
|
||||
$renderer->getTwig()->addExtension($adminTwigExtension);
|
||||
}*/
|
||||
// $renderer->getTwig()->addExtension($variableExtension);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,75 @@
|
|||
<?php
|
||||
namespace App\Admin;
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
use App\Admin\Table\UserTable;
|
||||
use App\Gmarche\Table\AntenneTable;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Session\SessionInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class DashboardAction
|
||||
{
|
||||
|
||||
/**
|
||||
* @var RendererInterface
|
||||
*/
|
||||
private $renderer;
|
||||
/**
|
||||
* @var AntenneTable
|
||||
*/
|
||||
private $antenneTable;
|
||||
|
||||
/**
|
||||
* @var SessionInterface
|
||||
*/
|
||||
private $session;
|
||||
/**
|
||||
* @var UserTable
|
||||
*/
|
||||
private $userTable;
|
||||
|
||||
public function __construct(
|
||||
RendererInterface $renderer,
|
||||
AntenneTable $antenneTable,
|
||||
SessionInterface $session,
|
||||
UserTable $userTable)
|
||||
{
|
||||
$this->renderer = $renderer;
|
||||
$this->antenneTable = $antenneTable;
|
||||
$this->session = $session;
|
||||
$this->userTable = $userTable;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequestInterface $request
|
||||
* @return string
|
||||
*/
|
||||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
if ($request->getMethod() === 'GET') {
|
||||
$role = $this->session->get('role', []);
|
||||
$username = $this->session->get('username', []);
|
||||
$this->renderer->addPath('admin', __DIR__ . '/views');
|
||||
$page = $params['p'] ?? 1; // Si la page n'est pas définie, on l'initialise à 1
|
||||
$liste_adminGeneral = $this->userTable->findAdminUsers('1');
|
||||
$liste_adminAntenne = $this->userTable->findAdminUsers('2');
|
||||
$liste_users_suivi = $this->userTable->findUsers('3');
|
||||
$listeAntennes = $this->antenneTable->findAllAntennes('',false,'');
|
||||
if ($this->session->get('username')) {
|
||||
$this->session->delete('role');
|
||||
$this->session->delete('username');
|
||||
$this->session->set('role',$role);
|
||||
$this->session->set('username',$username);
|
||||
} else {
|
||||
$this->session->set('username',$username);
|
||||
$this->session->set('role',$role);
|
||||
}
|
||||
$sess = $_SESSION;
|
||||
return $this->renderer->render('@admin/dashboard',
|
||||
compact('sess','username','liste_adminGeneral', 'liste_users_suivi',
|
||||
'liste_adminAntenne', 'listeAntennes'));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
namespace App\Admin;
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
use App\Auth\UserTable;
|
||||
use App\Admin\Table\UserTable as UserTableAdmin;
|
||||
use App\Gmarche\Table\AntenneTable;
|
||||
use Framework\Auth;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class DashboardUserAction
|
||||
{
|
||||
|
||||
/**
|
||||
* @var RendererInterface
|
||||
*/
|
||||
private $renderer;
|
||||
/**
|
||||
* @var Auth
|
||||
*/
|
||||
private $auth;
|
||||
/**
|
||||
* @var AntenneTable
|
||||
*/
|
||||
private $antenneTable;
|
||||
/**
|
||||
* @var UserTable
|
||||
*/
|
||||
private $userTable;
|
||||
|
||||
public function __construct(
|
||||
RendererInterface $renderer,
|
||||
Auth $auth,
|
||||
AntenneTable $antenneTable,
|
||||
UserTable $userTable,
|
||||
UserTableAdmin $userTableAdmin)
|
||||
{
|
||||
$this->renderer = $renderer;
|
||||
$this->auth = $auth;
|
||||
$this->antenneTable = $antenneTable;
|
||||
$this->userTable = $userTable;
|
||||
$this->userTableAdmin = $userTableAdmin;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerRequestInterface $request
|
||||
* @return string
|
||||
*/
|
||||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
if ($request->getMethod() === 'GET') {
|
||||
$this->renderer->addPath('admin', __DIR__ . '/views');
|
||||
$liste_users_suivi = $this->userTableAdmin->findUsers('3');
|
||||
|
||||
$url_part = explode('/',$_SERVER['REQUEST_URI']);
|
||||
$user_affiche = $url_part[3];
|
||||
$user = $this->userTable->findBy('username', $user_affiche);
|
||||
$id_affiche = $user->id;
|
||||
$actif_affiche = $user->actif;
|
||||
$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'));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
namespace App\Admin\Entity;
|
||||
|
||||
class User
|
||||
{
|
||||
|
||||
public $id;
|
||||
|
||||
public $username;
|
||||
|
||||
public $email;
|
||||
|
||||
public $password;
|
||||
|
||||
public $firstname;
|
||||
|
||||
public $lastname;
|
||||
|
||||
public $created_at;
|
||||
|
||||
public $role;
|
||||
|
||||
public $password_reset;
|
||||
|
||||
public $password_reset_at;
|
||||
|
||||
public $pubkey;
|
||||
|
||||
public $avatar;
|
||||
|
||||
public $suiviantenne;
|
||||
|
||||
public $actif;
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
|
||||
namespace App\Admin\Table;
|
||||
|
||||
use App\Admin\Entity\User;
|
||||
use App\Gmarche\Table\AntenneTable;
|
||||
use Framework\Database\Query;
|
||||
use Framework\Database\Table;
|
||||
|
||||
class UserTable extends Table
|
||||
{
|
||||
protected $entity = User::class;
|
||||
|
||||
protected $table = 'users';
|
||||
|
||||
public function findList(): array
|
||||
{
|
||||
$results = $this->pdo
|
||||
->query("SELECT id, name FROM {$this->table}")
|
||||
->fetchAll(\PDO::FETCH_NUM);
|
||||
$list = [];
|
||||
foreach ($results as $result) {
|
||||
$list[$result[0]] = $result[1];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
public function findAntennebyId(int $id_antenne): Query
|
||||
{
|
||||
$antenne = new AntenneTable($this->pdo);
|
||||
return $this->makeQuery()
|
||||
->select('a.name as nameAntenne')
|
||||
->where("a.id = $id_antenne");
|
||||
}
|
||||
|
||||
public function findUsers($role): Query
|
||||
{
|
||||
return $this->makeQuery()
|
||||
->select('u.*')
|
||||
->where("u.role = '" . $role . "'")
|
||||
->order('u.username ASC');
|
||||
}
|
||||
|
||||
/*public function findUsersSuivi($role): Query
|
||||
{
|
||||
$antenne = new AntenneTable($this->pdo);
|
||||
return $this->makeQuery()
|
||||
->join($antenne->getTable() . ' as a', 'substring(u.suiviantenne,1,1) = a.id')
|
||||
->select('u.*,a.name as nameAntenne')
|
||||
->where("u.role = '".$role."'")
|
||||
->order('u.username, nameAntenne ASC');
|
||||
}*/
|
||||
public function findAdminUsers($role): Query
|
||||
{
|
||||
return $this->makeQuery()
|
||||
->select('u.*')
|
||||
->where("u.role = $role")
|
||||
->order('u.username ASC');
|
||||
}
|
||||
|
||||
public function findRole($username): Query
|
||||
{
|
||||
return $this->makeQuery()
|
||||
->select('u.role')
|
||||
->where("u.username = '" . $username . "'");
|
||||
}
|
||||
|
||||
public function findRole2($username)
|
||||
{
|
||||
return $this->pdo
|
||||
->query("SELECT role FROM {$this->table} WHERE username='".$username."'")
|
||||
->fetch();
|
||||
}
|
||||
}
|
|
@ -1,12 +1,10 @@
|
|||
<?php
|
||||
|
||||
use App\Admin\AdminModule;
|
||||
use App\Admin\DashboardAction;
|
||||
|
||||
return [
|
||||
'admin.prefix' => '/admin',
|
||||
'admin.widgets' => [],
|
||||
\App\Admin\AdminTwigExtension::class => \DI\object()->constructor(\DI\get('admin.widgets')),
|
||||
AdminModule::class => \DI\object()->constructorParameter('prefix', \DI\get('admin.prefix'))
|
||||
//DashboardAction::class => \DI\object()->constructorParameter('widgets', \DI\get('admin.widgets'))
|
||||
];
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
{% extends 'layout.twig' %}
|
||||
|
||||
{% block title "Ğ1-Marché - Tableau de bord" %}
|
||||
|
||||
{% block body %}
|
||||
<div class="container" style="color:floralwhite;background-color: #333333;padding: 1rem;">
|
||||
<div class="container tab-de-bord">
|
||||
<h3 style="display:inline-block;">Tableau de bord - </h3>
|
||||
<h4 style="display:inline-block;">
|
||||
{% if (sess.role == 0) %} Super Admin{% endif %}
|
||||
{% if (sess.role == 1) %} Admin général{% endif %}
|
||||
{% if (sess.role == 2) %} Admin Antenne{% endif %}
|
||||
</h4>
|
||||
</h3>
|
||||
</div>
|
||||
<p></p>
|
||||
{% if (sess.role == 0) %}
|
||||
<h4>Liste des admins généraux</h4>
|
||||
<ul class="list-group list-group-flush">
|
||||
{% for admin_gen in liste_adminGeneral %}
|
||||
<a style="color:black;" href="" title="{{ admin_gen.username }}">
|
||||
<li class="liste_antennes list-group-item" style="padding: .2rem 1.25rem;">
|
||||
{{ admin_gen.username }}
|
||||
</li>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
<p></p>
|
||||
{% if (sess.role==0 or sess.role==1) %}
|
||||
<h4>Liste des admins Antenne</h4>
|
||||
<ul class="list-group list-group-flush">
|
||||
{% for admin_ant in liste_adminAntenne %}
|
||||
<a style="color:black;" href="" title="{{ admin_ant.username }}">
|
||||
<li class="liste_antennes list-group-item" style="padding: .2rem 1.25rem;">
|
||||
{{ admin_ant.username }}
|
||||
</li>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
<p></p>
|
||||
{% if (sess.role==0 or sess.role==1 or sess.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>
|
||||
{% if (sess.role==0 or sess.role==1) %}
|
||||
<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>
|
||||
{% endif %}
|
||||
<h4>Liste des régions/antennes</h4>
|
||||
|
||||
<ul class="list-group list-group-flush">
|
||||
{% set region = '' %}
|
||||
{% for item in listeAntennes %}
|
||||
{% if (item.regionName != region) %}
|
||||
<li class="liste_antennes list-group-item" style="color:black;
|
||||
background-color:lightgoldenrodyellow;padding: .2rem 1.25rem;">
|
||||
{{ item.regionName }}
|
||||
</li>
|
||||
<a style="color:black;" href="" title="{{ item.regionName }}">
|
||||
<li class="liste_antennes list-group-item" style="background-color:#8fbc8f;padding: .2rem 1.25rem;">
|
||||
► {{ item.antenneName }}
|
||||
</li>
|
||||
</a>
|
||||
{% else %}
|
||||
<a style="color:black;" href="" title="{{ item.regionName }}">
|
||||
<li class="liste_antennes list-group-item" style="background-color:#8fbc8f;padding: .2rem 1.25rem;">
|
||||
► {{ item.antenneName }}
|
||||
</li>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% set region = item.regionName %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
<p></p>
|
||||
{% if (sess.role==0 or sess.role==1 or sess.role==2) %}
|
||||
<h4>Liste des utilisateurs</h4>
|
||||
|
||||
<ul class="list-group list-group-flush">
|
||||
{% for item2 in liste_users_suivi %}
|
||||
<a style="color:black;" href="{{ path('dashboard.user',{user:item2.username}) }}" title="{{ item2.username }}">
|
||||
<li class="liste_antennes list-group-item" style="padding: .2rem 1.25rem;">
|
||||
{{ item2.username }}
|
||||
{% set antenne_suivie = item2.suiviantenne|split('|') %}
|
||||
{% for antenn in antenne_suivie %}
|
||||
{% for item in listeAntennes %}
|
||||
{% if (item.id == antenn) %}
|
||||
- {{ item.antenneName }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% if not (item2.actif) %}
|
||||
<button class="btn btn-primary">DESACTIVE</button>
|
||||
{% endif %}
|
||||
</li>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
<p></p>
|
||||
<div class="row">
|
||||
{{ widgets | raw }}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -0,0 +1,78 @@
|
|||
{% extends 'layout.twig' %}
|
||||
|
||||
{% block title "Ğ1-Marché - Tableau bord User" %}
|
||||
|
||||
{% block body %}
|
||||
<div class="container" style="padding:1rem; margin:1rem;">
|
||||
<div class="container" style="color:floralwhite;background-color: #333333;padding: 0.8rem;">
|
||||
<div style="text-align:center;padding: 0.8rem 0.8rem 0.1rem 0.8rem;"" class="container tab-de-bord">
|
||||
<h3 style="display:inline-block;">Tableau de bord Utilisateur</h3>
|
||||
<h4>{{ user_affiche }}</h4>
|
||||
</div>
|
||||
<ul class="list-group list-group-flush">
|
||||
<div class="container" style="color:black;background-color: lightgray;opacity:0.9;margin-top:0.5rem;padding:0.7rem;">
|
||||
<form action="{{ path('account.active') }}" method="post">
|
||||
{% if actif_affiche %}
|
||||
<button class="btn btn-primary">Désactiver l'utilisateur</button>
|
||||
{% 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>
|
||||
</div>
|
||||
</ul>
|
||||
<p></p>
|
||||
<h4>Profil</h4>
|
||||
<ul class="list-group list-group-flush">
|
||||
<div class="container" style="color:black;background-color: lightgray;opacity: 0.9;padding:1rem;">
|
||||
<form action="{{ path('account.user') }}" method="post">
|
||||
<!-- csrf_input() -->
|
||||
{{ field('firstname', user.firstname, 'Prénom') }}
|
||||
{{ field('lastname', user.lastname, 'Nom') }}
|
||||
Adresse mail {{ user.email }}<p></p>
|
||||
Clé publique {{ user.pubkey }}
|
||||
<div style="width:0;height:0;">
|
||||
{{ field('id_user', id_affiche, "", {type: 'hidden'}) }}
|
||||
{{ field('username', user_affiche, "", {type: 'hidden'}) }}
|
||||
</div>
|
||||
<p></p>
|
||||
<button class="btn btn-primary">Modifier les informations</button>
|
||||
</form>
|
||||
</div>
|
||||
</ul>
|
||||
<ul class="list-group list-group-flush">
|
||||
<div class="container" style="color:black;background-color: lightgray;opacity: 0.9;margin-top:0.5rem;padding:1rem;">
|
||||
<form action="{{ path('auth.password') }}" method="post">
|
||||
<button class="btn btn-primary">Renvoyer un mot de passe</button>
|
||||
<div style="width:0;height:0;">
|
||||
{{ field('email', user.email, "", {type: 'hidden'}) }}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</ul>
|
||||
<p></p>
|
||||
<h4>Liste des antennes suivies</h4>
|
||||
|
||||
<ul class="list-group list-group-flush">
|
||||
<li class="liste_antennes list-group-item" style="color:black;padding: .2rem 1.25rem;">
|
||||
{% set antenne_suivie = user.suiviantenne|split('|') %}
|
||||
{% for antenne in antenne_suivie %}
|
||||
{% for item in listeAntennes %}
|
||||
{% if (item.id == antenne) %}
|
||||
<li class="liste_antennes list-group-item" style="padding: .2rem 1.25rem;">
|
||||
<a style="color:black;" href="" title="{{ item.antenneName }}">
|
||||
{{ item.antenneName }}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</li>
|
||||
</ul>
|
||||
<p></p>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>{% block title "Mon site " %}</title>
|
||||
<title>{% block title "Ğ1-Marché - Administration" %}</title>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flatpickr/3.0.7/flatpickr.css">
|
||||
<style>
|
||||
|
@ -13,16 +13,48 @@
|
|||
<body>
|
||||
|
||||
<nav class="navbar fixed-top navbar-expand-sm navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="{{ path(routePrefix) }}">Ğ1-Marché</a>
|
||||
<a class="navbar-brand" href="{{ path('gmarche.index') }}">Ğ1-Marché</a>
|
||||
|
||||
<ul class="navbar-nav mr-auto">
|
||||
{{ admin_menu() }}
|
||||
<ul class="navbar-nav mr-auto" style="color: white;">
|
||||
<!-- admin_menu() -->
|
||||
role = {{ role }}
|
||||
</ul>
|
||||
<div class="navbar-nav">
|
||||
<form class="nav-item active" method="post" action="{{ path('auth.logout') }}">
|
||||
{{ csrf_input() }}
|
||||
<button class="btn-primary btn-danger">Se déconnecter</button>
|
||||
<div class="navbar-text" style="color:lightgray;margin-right:15px; margin-top:3px;">
|
||||
{{ "now"|date('d/m/y') }}
|
||||
affiche_username = {{ affiche_username() }} /affiche_username
|
||||
</div>
|
||||
|
||||
{% if affiche_username()!= '' %}
|
||||
<form method="post" style="margin-top:5px;" action="{{ path('account.profil') }}">
|
||||
<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">user2 = {{ name_user2 }}</button>
|
||||
</form>
|
||||
<form method="post" action="{{ path('auth.logout') }}">
|
||||
<!-- csrf_input() }}-->
|
||||
<button class="btn btn-danger" style="margin-left: 7px; font-size:14px;">Se déconnecter</button>
|
||||
</form>
|
||||
{% else %}
|
||||
<span style="color:white;">
|
||||
name_user = {{ name_user }}
|
||||
name_user2 = {{ name_user2 }}</span>
|
||||
<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>
|
||||
</div>
|
||||
<div id="nom_connecte" style="display:none;margin-left:10px;margin-top:6px;margin-right:8px;">
|
||||
</div>
|
||||
<div id="deconnexion" style="display:none;">
|
||||
<form method="post" action="{{ path('auth.logout') }}">
|
||||
<!-- csrf_input() }}-->
|
||||
<button class="btn btn-danger" style="font-size:14px;">Se déconnecter</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="nav-item" id="inscription">
|
||||
<a class="nav-link" href="{{ path('account.signup') }}" style="font-size:14px;">S'inscrire</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
@ -56,5 +88,6 @@
|
|||
dateFormat: 'Y-m-d H:i:S'
|
||||
})
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,160 @@
|
|||
<?php
|
||||
namespace App\Antenne\Actions;
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
use App\Gmarche\Entity\Antenne;
|
||||
use App\Gmarche\Table\AntenneTable;
|
||||
use App\Gmarche\Table\RegionTable;
|
||||
use Framework\Actions\CrudAction;
|
||||
use Framework\Actions\RouterAwareAction;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Response\RedirectResponse;
|
||||
use Framework\Router;
|
||||
use Framework\Session\FlashService;
|
||||
use Framework\Validator;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
|
||||
class AntenneCrudAction extends CrudAction
|
||||
{
|
||||
protected $viewPath = "@antenne";
|
||||
protected $routePrefix = "antenne";
|
||||
/**
|
||||
* @var RendererInterface
|
||||
*/
|
||||
private $renderer;
|
||||
|
||||
/**
|
||||
* @var RegionTable
|
||||
*/
|
||||
protected $regionTable;
|
||||
|
||||
/**
|
||||
* @var AntenneTable
|
||||
*/
|
||||
protected $antenneTable;
|
||||
|
||||
/**
|
||||
* @var FlashService
|
||||
*/
|
||||
private $flashService;
|
||||
|
||||
use RouterAwareAction;
|
||||
|
||||
public function __construct(
|
||||
RendererInterface $renderer,
|
||||
Router $router,
|
||||
AntenneTable $antenneTable,
|
||||
RegionTable $regionTable,
|
||||
FlashService $flash
|
||||
) {
|
||||
parent::__construct($renderer, $router, $antenneTable, $regionTable, $flash);
|
||||
$this->renderer = $renderer;
|
||||
$this->regionTable = $regionTable;
|
||||
$this->antenneTable = $antenneTable;
|
||||
$this->flashService = $flash;
|
||||
}
|
||||
|
||||
public function delete(Request $request)
|
||||
{
|
||||
$antenne = $this->antenneTable->find($request->getAttribute('id'));
|
||||
// $this->postUpload->delete($post->image);
|
||||
return parent::delete($request);
|
||||
}
|
||||
|
||||
protected function formParams(array $params): array
|
||||
{
|
||||
return $params;
|
||||
}
|
||||
|
||||
protected function getNewEntity()
|
||||
{
|
||||
$antenne = new Antenne();
|
||||
$antenne->created_at = new \DateTime();
|
||||
return $antenne;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Antenne $antenne
|
||||
* @return array
|
||||
*/
|
||||
protected function prePersist(Request $request, $antenne): array
|
||||
{
|
||||
$params = $request->getParsedBody();
|
||||
$params = array_filter($params, function ($key) {
|
||||
return in_array($key, ['region_id', 'name', 'slug', 'created_at', 'listeRegions']);
|
||||
}, ARRAY_FILTER_USE_KEY);
|
||||
return array_merge($params, ['test' => $test, 'updated_at' => date('Y-m-d H:i:s')]);
|
||||
}
|
||||
protected function getValidator(Request $request)
|
||||
{
|
||||
$validator = parent::getValidator($request)
|
||||
->required('region_id', 'name', 'slug', 'created_at')
|
||||
->length('name', 2, 250)
|
||||
->dateTime('created_at')
|
||||
->slug('slug');
|
||||
/*if (is_null($request->getAttribute('id'))) {
|
||||
$validator->uploaded('image');
|
||||
}*/
|
||||
return $validator;
|
||||
}
|
||||
public function __invoke(Request $request)
|
||||
{
|
||||
if ($request->getMethod() === 'POST') {
|
||||
$params = $request->getParsedBody();
|
||||
$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));
|
||||
$text = $params['antenne'];
|
||||
// replace non letter or digits by -
|
||||
$text = preg_replace('~[^\pL\d]+~u', '-', $text);
|
||||
// transliterate
|
||||
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
|
||||
// remove unwanted characters
|
||||
$text = preg_replace('~[^-\w]+~', '', $text);
|
||||
// trim
|
||||
$text = trim($text, '-');
|
||||
// remove duplicate -
|
||||
$text = preg_replace('~-+~', '-', $text);
|
||||
// lowercase
|
||||
$slug = strtolower($text);
|
||||
$admin = '';
|
||||
$content = '';
|
||||
$image = '';
|
||||
$created_at = date("Y-m-d H:i:s");
|
||||
$validator = (new Validator($params))
|
||||
->required('antenne', 'region');
|
||||
if ($validator->isValid()) {
|
||||
$antenneParams = [
|
||||
'id' => $antenne_id,
|
||||
'name' => $params['antenne'],
|
||||
'slug' => $slug,
|
||||
'admin' => $admin,
|
||||
'content' => $content,
|
||||
'image' => $image,
|
||||
'created_at' => $created_at,
|
||||
'region_id' => $params['region'],
|
||||
'gmarcheAt' => $madate,
|
||||
'edito1' => $params['contenu1'],
|
||||
'edito2' => $params['contenu2'],
|
||||
'edito3' => $params['contenu3'],
|
||||
'edito4' => $params['contenu4']
|
||||
];
|
||||
$this->antenneTable->insert($antenneParams);
|
||||
$this->flashService->success("L'antenne ".$params['antenne']." a bien été créée.");
|
||||
|
||||
return new RedirectResponse($request->getUri()->getPath());
|
||||
}
|
||||
}
|
||||
//$errors = $validator->getErrors();
|
||||
$listeRegions = $this->regionTable->findAll();
|
||||
$role = $_SESSION['role'];
|
||||
|
||||
return $this->renderer->render('@antenne/create', compact('listeRegions','role'));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
<?php
|
||||
namespace App\Antenne\Actions;
|
||||
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;
|
||||
|
||||
class AntenneEditAction
|
||||
{
|
||||
|
||||
/**
|
||||
* @var RendererInterface
|
||||
*/
|
||||
private $renderer;
|
||||
|
||||
/**
|
||||
* @var RegionTable
|
||||
*/
|
||||
private $regionTable;
|
||||
|
||||
/**
|
||||
* @var AntenneTable
|
||||
*/
|
||||
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)
|
||||
{
|
||||
$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();
|
||||
}
|
||||
|
||||
$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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
{% extends 'layout.twig' %}
|
||||
{% block title "Ğ1-Marché - Créer Antennes" %}
|
||||
|
||||
{% block body %}
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/flatpickr/3.0.7/flatpickr.js"></script>
|
||||
<link rel="stylesheet" href="/css/jquery-ui.min.css">
|
||||
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
|
||||
<script type="text/javascript">
|
||||
$.datepicker.setDefaults(
|
||||
{
|
||||
altField: "#datepicker",
|
||||
closeText: 'Fermer',
|
||||
prevText: 'Précédent',
|
||||
nextText: 'Suivant',
|
||||
currentText: 'Aujourd\'hui',
|
||||
monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
|
||||
monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],
|
||||
dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
|
||||
dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'],
|
||||
dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
|
||||
weekHeader: 'Sem.',
|
||||
dateFormat: 'dd-mm-yy'
|
||||
}
|
||||
);
|
||||
</script>
|
||||
<script>
|
||||
$( function() {
|
||||
$( "#datepicker" ).datepicker();
|
||||
});
|
||||
</script>
|
||||
<div class="container_main">
|
||||
<div id="la_page">
|
||||
<span style="color:white;font-size:1.4rem;">
|
||||
CREATION D'UNE ANTENNE
|
||||
</span>
|
||||
<div class="container" style="color:white;padding:3rem; width:55rem;border:1px solid white;margin:auto;">
|
||||
<form action="" method="post">
|
||||
{{ csrf_input }}
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{{ field('antenne', item.name, "Nom de l'antenne") }}
|
||||
</div>
|
||||
<div class="col-md-4" style="max-width: 15rem;">
|
||||
<span style="margin-left:1rem;">REGION</span>
|
||||
<select id="region_select" name="region" class="form-control">
|
||||
<option class="list-group-item list-group-item-action" value="0">
|
||||
Sélectionnez une région
|
||||
</option>
|
||||
{% for item in listeRegions %}
|
||||
<option class="list-group-item list-group-item-action" value="{{ item.id }}">
|
||||
{{ item.name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
{{ field('updated_at', item.updatedAt, "", {type: 'hidden'}) }}
|
||||
{{ field('created_at', date(), "", {type: 'hidden'}) }}
|
||||
<div class="col-md-3">
|
||||
<div style="margin-top:-0.4rem;float:left;min-width: 13rem;">
|
||||
{{ field('datepicker', item.gmarcheAt, "Date Prochain G-marché", {class: 'datepicker'}) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="clear:both;">
|
||||
<div class="row" style="color:white;">
|
||||
<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><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>
|
||||
<button class="btn btn-primary" type="submit">Enregistrer</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -0,0 +1,173 @@
|
|||
{% extends 'layout.twig' %}
|
||||
{% block title "Ğ1-Marché - Modifier Antennes" %}
|
||||
|
||||
{% block body %}
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/flatpickr/3.0.7/flatpickr.js"></script>
|
||||
<link rel="stylesheet" href="/css/jquery-ui.min.css">
|
||||
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
|
||||
<script type="text/javascript">
|
||||
$.datepicker.setDefaults(
|
||||
{
|
||||
altField: "#datepicker",
|
||||
closeText: 'Fermer',
|
||||
prevText: 'Précédent',
|
||||
nextText: 'Suivant',
|
||||
currentText: 'Aujourd\'hui',
|
||||
monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
|
||||
monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],
|
||||
dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
|
||||
dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'],
|
||||
dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
|
||||
weekHeader: 'Sem.',
|
||||
dateFormat: 'dd-mm-yy'
|
||||
}
|
||||
);
|
||||
</script>
|
||||
<script>
|
||||
$( function() {
|
||||
$( "#datepicker" ).datepicker();
|
||||
});
|
||||
</script>
|
||||
<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 white;margin:auto;">
|
||||
<!--{ path('antenne.edit', { id: item.id, region: explodeUrl()[2]}) }}-->
|
||||
<form action="" method="post">
|
||||
<!--{ csrf_input }}-->
|
||||
<div class="row" style="color:white;">
|
||||
<div class="col-md-4" style="max-width: 15rem;">
|
||||
<span style="margin-left:1rem;">ANTENNE</span>
|
||||
<select id="antenne_select" name="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.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>
|
||||
|
||||
{% 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;">
|
||||
<span style="margin-left:1rem;">REGION</span>
|
||||
<select id="region" name="region" class="form-control">
|
||||
<option class="list-group-item list-group-item-action" value="0"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div style="margin-top:-0.4rem;float:left;" style="min-width: 13rem;">
|
||||
{{ field('datepicker', item.gmarcheAt, "Prochain G-marché", {class: 'datepicker'}) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="clear:both;">
|
||||
<div class="row" style="color:white;">
|
||||
<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><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>
|
||||
|
||||
<button class="btn btn-primary" type="submit">Enregistrer</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
/* Lorsqu'on sélectione une antenne */
|
||||
document.querySelector("#antenne_select").addEventListener("change", function() {
|
||||
/* On vide si besoin la zone select des régions */
|
||||
if (document.getElementById("region").hasChildNodes()) {
|
||||
var child = document.getElementById("region");
|
||||
while (child.hasChildNodes()) {
|
||||
child.removeChild(child.firstChild);
|
||||
}
|
||||
}
|
||||
/* if (document.querySelector("#antenne_select").options[0].text=="Sélectionnez l'antenne") {
|
||||
// document.querySelector("#antenne_select").removeChild( document.querySelector("#antenne_select").firstChild);
|
||||
}*/
|
||||
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;
|
||||
//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')
|
||||
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"
|
||||
}
|
||||
select.appendChild(opt)
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
document.getElementById("region").addEventListener("click", function() {
|
||||
$(document).ready(function () {
|
||||
//
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script src="/js/utils.js"></script>
|
||||
{% endblock %}
|
|
@ -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'}) }}
|
|
@ -0,0 +1,81 @@
|
|||
{% extends 'layout.twig' %}
|
||||
{% block title "Ğ1-Marché - Créer Antennes" %}
|
||||
|
||||
{% block body %}
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/flatpickr/3.0.7/flatpickr.js"></script>
|
||||
<link rel="stylesheet" href="/css/jquery-ui.min.css">
|
||||
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
|
||||
<script type="text/javascript">
|
||||
$.datepicker.setDefaults(
|
||||
{
|
||||
altField: "#datepicker",
|
||||
closeText: 'Fermer',
|
||||
prevText: 'Précédent',
|
||||
nextText: 'Suivant',
|
||||
currentText: 'Aujourd\'hui',
|
||||
monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
|
||||
monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],
|
||||
dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
|
||||
dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'],
|
||||
dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
|
||||
weekHeader: 'Sem.',
|
||||
dateFormat: 'dd-mm-yy'
|
||||
}
|
||||
);
|
||||
</script>
|
||||
<script>
|
||||
$( function() {
|
||||
$( "#datepicker" ).datepicker();
|
||||
});
|
||||
</script>
|
||||
<div class="container_main">
|
||||
<div id="la_page" style="color:white;">
|
||||
<span style="color:white;font-size:1.4rem;">
|
||||
CREATION D'UNE ANTENNE
|
||||
</span>
|
||||
<div class="container" style="padding:3rem; width:55rem;border:1px solid white;margin:auto;">
|
||||
<form action="" method="post">
|
||||
{{ csrf_input }}
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{{ field('antenne', item.name, "Nom de l'antenne") }}
|
||||
</div>
|
||||
<div class="col-md-4" style="max-width: 15rem;">
|
||||
<span style="margin-left:1rem;">REGION</span>
|
||||
<select id="region_select" name="region" class="form-control">
|
||||
<option class="list-group-item list-group-item-action" value="0">
|
||||
Sélectionnez une région
|
||||
</option>
|
||||
{% for item in listeRegions %}
|
||||
<option class="list-group-item list-group-item-action" value="{{ item.id }}">
|
||||
{{ item.name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div style="margin-top:-0.4rem;float:left;" style="min-width: 13rem;">
|
||||
{{ field('datepicker', item.gmarcheAt, "Prochain G-marché", {class: 'datepicker'}) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="clear:both;">
|
||||
<div class="row" style="color:white;">
|
||||
<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><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>
|
||||
<button class="btn btn-primary" type="submit">Enregistrer</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,6 +1,8 @@
|
|||
<?php
|
||||
namespace App\Auth\Action;
|
||||
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
|
@ -19,6 +21,14 @@ class LoginAction
|
|||
|
||||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
return $this->renderer->render('@auth/login');
|
||||
if ($_SESSION['connecte']) {
|
||||
$_SESSION['logout'] = false;
|
||||
//echo "session co = valeur";
|
||||
//die();
|
||||
} else {
|
||||
//echo "session co = vide";
|
||||
//die();
|
||||
}
|
||||
return $this->renderer->render('@auth/login', ['sess' => $_SESSION]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,21 @@
|
|||
<?php
|
||||
namespace App\Auth\Action;
|
||||
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
use App\Admin\Table\UserTable;
|
||||
use App\Auth\DatabaseAuth;
|
||||
use Framework\Actions\RouterAwareAction;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Response\RedirectResponse;
|
||||
use Framework\Router;
|
||||
use Framework\Session\ArraySession;
|
||||
use Framework\Session\FlashService;
|
||||
use Framework\Session\SessionInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Zend\Expressive\Router\RouterInterface;
|
||||
|
||||
|
||||
class LoginAttemptAction
|
||||
{
|
||||
|
||||
|
@ -37,29 +42,64 @@ class LoginAttemptAction
|
|||
RendererInterface $renderer,
|
||||
DatabaseAuth $auth,
|
||||
Router $router,
|
||||
SessionInterface $session
|
||||
SessionInterface $session,
|
||||
UserTable $userTable
|
||||
) {
|
||||
$this->renderer = $renderer;
|
||||
$this->auth = $auth;
|
||||
$this->router = $router;
|
||||
$this->session = $session;
|
||||
$this->userTable = $userTable;
|
||||
}
|
||||
|
||||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
$params = $request->getParsedBody();
|
||||
$user = $this->auth->login($params['username'], $params['password']);
|
||||
|
||||
if ($user) {
|
||||
if(!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
$nom_user = $_SESSION['user'] = $params['username'];
|
||||
$path = $this->session->get('auth.redirect') ?? $this->router->generateUri('gmarche.index');
|
||||
$this->session->delete('auth.redirect');
|
||||
return new RedirectResponse($path);
|
||||
$this->test_user($user, $params);
|
||||
$_SESSION['logout']= false;
|
||||
|
||||
return $this->renderer->render('@gmarche/index');
|
||||
} else {
|
||||
(new FlashService($this->session))->error('Identifiant ou mot de passe incorrect');
|
||||
return $this->redirect('auth.login');
|
||||
}
|
||||
}
|
||||
|
||||
public function test_user($user, $params) {
|
||||
|
||||
$role = $this->userTable->findBy('username', $params['username'])->role;
|
||||
echo "params_username=".$params['username'];
|
||||
echo "<br />role=".$role;
|
||||
// die();
|
||||
$path = $this->session->get('auth.redirect') ?: $this->router->generateUri('gmarche.index');
|
||||
$this->session->delete('auth.redirect');
|
||||
//$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);
|
||||
}
|
||||
$_SESSION['connecte'] = $params['username'];
|
||||
$_SESSION['role'] = $role;
|
||||
echo "<br />role2=".$role;
|
||||
// die();
|
||||
//$this->renderer->addGlobal('user', $user);
|
||||
//$this->renderer->addGlobal('role', $role);
|
||||
|
||||
}
|
||||
private function show($role)
|
||||
{
|
||||
// $path = $this->router->generateUri('gmarche.index');
|
||||
return $this->renderer->render('@gmarche/index');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
<?php
|
||||
namespace App\Auth\Action;
|
||||
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
use App\Auth\DatabaseAuth;
|
||||
use App\Framework\Response\RedirectBackResponse;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Response\RedirectResponse;
|
||||
use Framework\Session\FlashService;
|
||||
use Framework\Session\SessionInterface;
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
|
@ -31,21 +35,25 @@ class LogoutAction
|
|||
private $container;
|
||||
|
||||
public function __construct(RendererInterface $renderer, DatabaseAuth $auth, FlashService $flashService
|
||||
, ContainerInterface $container)
|
||||
, ContainerInterface $container, SessionInterface $session)
|
||||
{
|
||||
$this->renderer = $renderer;
|
||||
$this->auth = $auth;
|
||||
$this->flashService = $flashService;
|
||||
$this->container = $container;
|
||||
$this->session = $session;
|
||||
}
|
||||
|
||||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
$gmarchePrefix = $this->container->get('gmarche.prefix');
|
||||
session_start();
|
||||
unset($_SESSION['user']);
|
||||
$_SESSION['connecte']='---';
|
||||
$_SESSION['logout']=true;
|
||||
if ($this->session->get('username')) {
|
||||
$this->session->delete('username');
|
||||
}
|
||||
$this->auth->logout();
|
||||
$this->flashService->success('Vous êtes maintenant déconnecté');
|
||||
return new RedirectResponse("$gmarchePrefix");
|
||||
return new RedirectBackResponse($request);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,12 +3,16 @@ namespace App\Auth\Action;
|
|||
|
||||
use App\Auth\Mailer\PasswordResetMailer;
|
||||
use App\Auth\UserTable;
|
||||
use App\Framework\Response\RedirectBackResponse;
|
||||
use Framework\Actions\RouterAwareAction;
|
||||
use Framework\Database\NoRecordException;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Response\RedirectResponse;
|
||||
use Framework\Router;
|
||||
use Framework\Session\FlashService;
|
||||
use Framework\Validator;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Zend\Expressive\Router\RouterInterface;
|
||||
|
||||
class PasswordForgetAction
|
||||
{
|
||||
|
@ -17,6 +21,10 @@ class PasswordForgetAction
|
|||
* @var RendererInterface
|
||||
*/
|
||||
private $renderer;
|
||||
/**
|
||||
* @var RouterInterface
|
||||
*/
|
||||
private $router;
|
||||
/**
|
||||
* @var UserTable
|
||||
*/
|
||||
|
@ -30,14 +38,17 @@ class PasswordForgetAction
|
|||
*/
|
||||
private $flashService;
|
||||
|
||||
use RouterAwareAction;
|
||||
|
||||
public function __construct(
|
||||
RendererInterface $renderer,
|
||||
Router $router,
|
||||
UserTable $userTable,
|
||||
PasswordResetMailer $mailer,
|
||||
FlashService $flashService
|
||||
) {
|
||||
|
||||
$this->renderer = $renderer;
|
||||
$this->router = $router;
|
||||
$this->userTable = $userTable;
|
||||
$this->mailer = $mailer;
|
||||
$this->flashService = $flashService;
|
||||
|
@ -46,28 +57,36 @@ class PasswordForgetAction
|
|||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
if ($request->getMethod() === 'GET') {
|
||||
return $this->renderer->render('@auth/password');
|
||||
$affichage_div = true;
|
||||
return $this->renderer->render('@auth/password',compact('affichage_div'));
|
||||
}
|
||||
$params = $request->getParsedBody();
|
||||
//$url_part = explode('/',$request->getServerParams()['HTTP_REFERER'] ?? '/');
|
||||
//$chemin = $url_part[3].'/'.$url_part[4];
|
||||
|
||||
$validator = (new Validator($params))
|
||||
->notEmpty('email')
|
||||
->email('email');
|
||||
if ($validator->isValid()) {
|
||||
try {
|
||||
$user = $this->userTable->findBy('email', $params['email']);
|
||||
if ($user = $this->userTable->findBy('email', $params['email'])) {
|
||||
|
||||
$token = $this->userTable->resetPassword($user->id);
|
||||
$this->mailer->send($user->email, [
|
||||
'id' => $user->id,
|
||||
'token' => $token
|
||||
]);
|
||||
$this->flashService->success('Un email vous a été envoyé');
|
||||
return new RedirectResponse($request->getUri()->getPath());
|
||||
} catch (NoRecordException $e) {
|
||||
$errors = ['email' => 'Aucun utilisateur ne correspond à cet email'];
|
||||
$this->flashService->success("Un email a été envoyé à l'utilisateur");
|
||||
|
||||
$affichage_div = false;
|
||||
return new RedirectBackResponse($request);
|
||||
} else {
|
||||
$this->flashService->error('Aucun utilisateur ne correspond à cet email');
|
||||
}
|
||||
} else {
|
||||
$errors = $validator->getErrors();
|
||||
}
|
||||
return $this->renderer->render('@auth/password', compact('errors'));
|
||||
$affichage_div = true;
|
||||
$email = $params['email'];
|
||||
return $this->renderer->render('@auth/password', compact('email','errors','affichage_div'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ class ForbiddenMiddleware implements MiddlewareInterface
|
|||
public function redirectLogin(ServerRequestInterface $request): ResponseInterface
|
||||
{
|
||||
$this->session->set('auth.redirect', $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 posséder un compte pour accéder à cette page');
|
||||
return new RedirectResponse($this->loginPath);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ Site Ğ1-Marché
|
|||
<p>
|
||||
Vous avez demandé la réinitialisation de votre mot de passe.
|
||||
<br />
|
||||
Veuillez pour se faire, cliquer sur le lien ci-dessous :
|
||||
Veuillez pour ce faire, cliquer sur le lien ci-dessous :
|
||||
</p>
|
||||
<p>
|
||||
<a href="{{ domain }}{{ path('auth.reset', {id: id, token: token}) }}">{{ domain }}{{ path('auth.reset', {id: id, token: token}) }}</a>
|
||||
|
|
|
@ -2,6 +2,6 @@ Site Ğ1-Marché
|
|||
|
||||
Vous avez demandé la réinitialisation de votre mot de passe.
|
||||
|
||||
Veuillez pour se faire, cliquer sur le lien ci-dessous :
|
||||
Veuillez pour ce faire, cliquer sur le lien ci-dessous :
|
||||
|
||||
{{ domain }}{{ path('auth.reset', {id: id, token: token}) }}
|
|
@ -1,9 +1,7 @@
|
|||
{% extends 'layout.twig' %}
|
||||
|
||||
|
||||
{% block body %}
|
||||
|
||||
|
||||
{% if flash('error') %}
|
||||
<div class="alert alert-danger">
|
||||
{{ flash('error') }}
|
||||
|
@ -14,11 +12,14 @@
|
|||
flash('success')
|
||||
</div>
|
||||
endif -->
|
||||
<div class="container" style="background-color: lightgray;opacity: 0.9;margin: 1rem;padding:1rem;">
|
||||
|
||||
{% if affichage_div %}
|
||||
<div id="password" class="container" style="background-color: lightgray;opacity: 0.9;margin: 1rem;padding:1rem;">
|
||||
<form action="" method="post">
|
||||
{{ csrf_input() }}
|
||||
{{ field('email', null, 'Email', {type: 'email'}) }}
|
||||
<!-- csrf_input() -->
|
||||
{{ field('email', null, 'Votre Email', {type: 'email'}) }}
|
||||
<button class="btn btn-primary">Réinitialiser mon mot de passe</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
<?php
|
||||
namespace App\Contact;
|
||||
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Response\RedirectResponse;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
@ -26,13 +28,23 @@ class ContactAction
|
|||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
if ($request->getMethod() === 'GET') {
|
||||
session_start();
|
||||
if (isset($_SESSION['user'])) {
|
||||
$nom_user = $_SESSION['user'];
|
||||
if (isset($_SESSION['connecte'])) {
|
||||
$nom_user = $_SESSION['connecte'];
|
||||
$role = $_SESSION['role'];
|
||||
} else {
|
||||
$nom_user = '';
|
||||
$role = '3';
|
||||
}
|
||||
return $this->renderer->render('@contact/contact',compact('nom_user'));
|
||||
if ($_SESSION['logout']) {
|
||||
//echo "logout";
|
||||
//die();
|
||||
$sess = null;
|
||||
} else {
|
||||
//echo "non logout";
|
||||
//die();
|
||||
$sess = $_SESSION;
|
||||
}
|
||||
return $this->renderer->render('@contact/contact',compact('sess','nom_user','role'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,14 +3,6 @@
|
|||
{% block title "Ğ1-Marché - Contact" %}
|
||||
{% block body %}
|
||||
<style>
|
||||
/*body .fond {
|
||||
background-image: url("../../images/background_contacts.jpg");
|
||||
background-repeat: no-repeat;
|
||||
background-attachment:fixed;
|
||||
background-position: center;
|
||||
background-size: 100% auto;
|
||||
font-family: Bree serif,"Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
}*/
|
||||
.main {
|
||||
width: 900px;
|
||||
font-family: "Bree Serif", Arial;
|
||||
|
|
|
@ -2,13 +2,12 @@
|
|||
namespace Framework\Actions;
|
||||
|
||||
use App\Gmarche\Table\AntenneTable;
|
||||
use App\Gmarche\Table\RegionTable;
|
||||
use Framework\Database\Hydrator;
|
||||
use Framework\Database\Table;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Framework\Router;
|
||||
use Framework\Session\FlashService;
|
||||
use Framework\Validator;
|
||||
use App\Product\Entity\Product;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
|
||||
|
@ -25,15 +24,10 @@ class CrudAction
|
|||
*/
|
||||
private $router;
|
||||
|
||||
/**
|
||||
* @var Table
|
||||
*/
|
||||
protected $table;
|
||||
|
||||
/**
|
||||
* @var AntenneTable
|
||||
*/
|
||||
protected $table2;
|
||||
protected $antenneTable;
|
||||
|
||||
/**
|
||||
* @var FlashService
|
||||
|
@ -54,9 +48,9 @@ class CrudAction
|
|||
* @var string
|
||||
*/
|
||||
protected $messages = [
|
||||
'create' => "L'élément truc a bien été créé", /* truc sera remplacé par le vrai nom ensuite */
|
||||
'edit' => "L'élément truc a bien été modifié", /* truc sera remplacé par le vrai nom ensuite */
|
||||
'delete' => "L'élément truc a bien été supprimé" /* truc sera remplacé par le vrai nom ensuite */
|
||||
'create' => "L'antenne truc a bien été créée", /* truc sera remplacé par le vrai nom ensuite */
|
||||
'edit' => "L'antenne truc a bien été modifiée", /* truc sera remplacé par le vrai nom ensuite */
|
||||
'delete' => "L'antenne truc a bien été supprimée" /* truc sera remplacé par le vrai nom ensuite */
|
||||
];
|
||||
|
||||
/**
|
||||
|
@ -69,12 +63,14 @@ class CrudAction
|
|||
public function __construct(
|
||||
RendererInterface $renderer,
|
||||
Router $router,
|
||||
Table $table,
|
||||
AntenneTable $antenneTable,
|
||||
RegionTable $regionTable,
|
||||
FlashService $flash
|
||||
) {
|
||||
$this->renderer = $renderer;
|
||||
$this->router = $router;
|
||||
$this->table = $table;
|
||||
$this->antenneTable = $antenneTable;
|
||||
$this->regionTable = $regionTable;
|
||||
$this->flash = $flash;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,15 @@
|
|||
<?php
|
||||
namespace Framework\Auth;
|
||||
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
error_reporting(E_ALL & ~E_NOTICE);
|
||||
use App\Auth\UserTable;
|
||||
use Framework\Auth;
|
||||
use Framework\Response\RedirectResponse;
|
||||
use Framework\Router;
|
||||
use Framework\Session\FlashService;
|
||||
use Framework\Session\SessionInterface;
|
||||
use Interop\Http\ServerMiddleware\DelegateInterface;
|
||||
use Interop\Http\ServerMiddleware\MiddlewareInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
@ -14,17 +22,55 @@ class LoggedInMiddleware implements MiddlewareInterface
|
|||
* @var Auth
|
||||
*/
|
||||
private $auth;
|
||||
/**
|
||||
* @var Router
|
||||
*/
|
||||
private $router;
|
||||
/**
|
||||
* @var SessionInterface
|
||||
*/
|
||||
private $session;
|
||||
|
||||
public function __construct(Auth $auth)
|
||||
public function __construct(Auth $auth, Router $router, UserTable $userTable, SessionInterface $session)
|
||||
{
|
||||
$this->auth = $auth;
|
||||
$this->router = $router;
|
||||
$this->userTable = $userTable;
|
||||
$this->session = $session;
|
||||
}
|
||||
|
||||
public function process(ServerRequestInterface $request, DelegateInterface $delegate): ResponseInterface
|
||||
{
|
||||
$user = $this->auth->getUser();
|
||||
// echo "<pre>";
|
||||
// var_dump($request);
|
||||
// var_dump($_SESSION);
|
||||
// echo "</pre>";
|
||||
// die();
|
||||
$user = $request->getAttribute('user');
|
||||
if ($user != '' && $user != '---' && $_SESSION['connecte'] != '---') {
|
||||
$_SESSION['connecte']=$user;
|
||||
} else {
|
||||
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)) {
|
||||
if (is_null($user)) {
|
||||
throw new ForbiddenException();
|
||||
$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'] 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'));
|
||||
}
|
||||
}
|
||||
return $delegate->process($request->withAttribute('user', $user));
|
||||
}
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
namespace Framework\Auth;
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
error_reporting(E_ALL & ~E_NOTICE);
|
||||
|
||||
use App\Auth\UserTable;
|
||||
use Framework\Auth;
|
||||
use Framework\Response\RedirectResponse;
|
||||
use Framework\Router;
|
||||
use Framework\Session\FlashService;
|
||||
use Framework\Session\SessionInterface;
|
||||
use Interop\Http\ServerMiddleware\DelegateInterface;
|
||||
use Interop\Http\ServerMiddleware\MiddlewareInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class LoginModalMiddleware implements MiddlewareInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* @var Auth
|
||||
*/
|
||||
private $auth;
|
||||
/**
|
||||
* @var Router
|
||||
*/
|
||||
private $router;
|
||||
/**
|
||||
* @var SessionInterface
|
||||
*/
|
||||
private $session;
|
||||
|
||||
public function __construct(Auth $auth, Router $router, UserTable $userTable, SessionInterface $session)
|
||||
{
|
||||
$this->auth = $auth;
|
||||
$this->router = $router;
|
||||
$this->userTable = $userTable;
|
||||
$this->session = $session;
|
||||
}
|
||||
|
||||
public function process(ServerRequestInterface $request, DelegateInterface $delegate): ResponseInterface
|
||||
{
|
||||
$url_part = explode('/',$request->getServerParams()['PHP_SELF'] ?? '/');
|
||||
$username = $url_part[4];
|
||||
if (is_null($username)) {
|
||||
$user = $this->auth->getUser() ?: $this->userTable->findBy('username', $request->getAttribute('user'));
|
||||
} else {
|
||||
$user = $this->auth->getUser() ?: $this->userTable->findBy('username', $username);
|
||||
}
|
||||
|
||||
if (is_null($user)) {
|
||||
(new FlashService($this->session))->error('Vous devez vous connecter pour accéder à cette page');
|
||||
return new RedirectResponse($this->router->generateUri('auth.login'));
|
||||
} else {
|
||||
$this->session->set('username',$user->username);
|
||||
$this->session->set('role',$user->role);
|
||||
$_SESSION['connecte'] = $user->username;
|
||||
$_SESSION['role'] = $user->role;
|
||||
}
|
||||
return $delegate->process($request->withAttribute('user', $user));
|
||||
}
|
||||
}
|
|
@ -19,16 +19,26 @@ class RoleMiddleware implements MiddlewareInterface
|
|||
*/
|
||||
private $role;
|
||||
|
||||
public function __construct(Auth $auth, string $role)
|
||||
public function __construct(Auth $auth, string $role, string $role2)
|
||||
{
|
||||
$this->auth = $auth;
|
||||
$this->role = $role;
|
||||
$this->role2 = $role2;
|
||||
}
|
||||
|
||||
public function process(ServerRequestInterface $request, DelegateInterface $delegate): ResponseInterface
|
||||
{
|
||||
$user = $this->auth->getUser();
|
||||
if ($user === null || !in_array($this->role, $user->getRoles())) {
|
||||
//if (array_key_exists('premier', $search_array))
|
||||
$non_admin = true;
|
||||
if (!in_array($this->role, [$_SESSION['role']])) {
|
||||
$non_admin = false;
|
||||
}
|
||||
if (!in_array($this->role2, [$_SESSION['role']])) {
|
||||
$non_admin = false;
|
||||
}
|
||||
if ($user === null || $non_admin ) {
|
||||
//if ($user === null || !array_key_exists($chaine_user,$this->role)) {
|
||||
throw new ForbiddenException();
|
||||
}
|
||||
return $delegate->process($request);
|
||||
|
|
|
@ -17,8 +17,8 @@ class RoleMiddlewareFactory
|
|||
$this->auth = $auth;
|
||||
}
|
||||
|
||||
public function makeForRole($role): RoleMiddleware
|
||||
public function makeForRole($role, $role2): RoleMiddleware
|
||||
{
|
||||
return new RoleMiddleware($this->auth, $role);
|
||||
return new RoleMiddleware($this->auth, $role, $role2);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -172,7 +172,7 @@ class Query implements \IteratorAggregate
|
|||
{
|
||||
$record = $this->fetch();
|
||||
if ($record === false) {
|
||||
throw new NoRecordException();
|
||||
// throw new NoRecordException();
|
||||
}
|
||||
return $record;
|
||||
}
|
||||
|
|
|
@ -81,6 +81,7 @@ class Table
|
|||
public function findBy(string $field, string $value)
|
||||
{
|
||||
// echo "field = ".$field;
|
||||
// echo "<br />value = ".$value;
|
||||
// die();
|
||||
return $this->makeQuery()->where("$field = :field")->params(["field" => $value])->fetchOrFail();
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ class TwigRendererFactory
|
|||
'auto_reload' => $debug
|
||||
]);
|
||||
$twig->addExtension(new DebugExtension());
|
||||
//$twig->addGlobal('session', $_SESSION);
|
||||
if ($container->has('twig.extensions')) {
|
||||
foreach ($container->get('twig.extensions') as $extension) {
|
||||
$twig->addExtension($extension);
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Framework\Response;
|
||||
|
||||
use Framework\Response\RedirectResponse;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class RedirectBackResponse extends RedirectResponse
|
||||
{
|
||||
|
||||
public function __construct(ServerRequestInterface $request)
|
||||
{
|
||||
parent::__construct($request->getServerParams()['HTTP_REFERER'] ?? '/');
|
||||
}
|
||||
}
|
|
@ -72,27 +72,16 @@ class Router
|
|||
* @param $callable
|
||||
* @param string $prefixName
|
||||
*/
|
||||
/* public function crud(string $prefixPath, $callable, string $prefixName)
|
||||
public function crud(string $prefixPath, $callable, string $prefixName)
|
||||
{
|
||||
$this->get("$prefixPath", $callable, "$prefixName.index");
|
||||
$this->get("$prefixPath/new", $callable, "$prefixName.create");
|
||||
$this->post("$prefixPath/new", $callable);
|
||||
$this->get("$prefixPath/{id:\d+}", $callable, "$prefixName.edit");
|
||||
$this->post("$prefixPath/{id:\d+}", $callable);
|
||||
// $this->get("$prefixPath/{id:\d+}", $callable, "$prefixName.edit");
|
||||
// $this->post("$prefixPath/{id:\d+}", $callable);
|
||||
$this->delete("$prefixPath/{id:\d+}", $callable, "$prefixName.delete");
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* public function crud_product(string $prefixPath, $callable, string $prefixName)
|
||||
{
|
||||
$this->get("$prefixPath", $callable, "$prefixName.index");
|
||||
$this->get("$prefixPath/new", $callable, "$prefixName.create");
|
||||
$this->post("$prefixPath/new", $callable);
|
||||
$this->get("$prefixPath/{id:\d+}", $callable, "$prefixName.edit");
|
||||
$this->post("$prefixPath/{id:\d+}", $callable);
|
||||
$this->delete("$prefixPath/{id:\d+}", $callable, "$prefixName.delete");
|
||||
}*/
|
||||
/**
|
||||
* @param ServerRequestInterface $request
|
||||
* @return Route|null
|
||||
|
|
|
@ -9,6 +9,7 @@ class SwiftMailerFactory
|
|||
public function __invoke(ContainerInterface $container): \Swift_Mailer
|
||||
{
|
||||
if ($container->get('env') === 'production') {
|
||||
//$transport = new \Swift_SmtpTransport('localhost', 1025);
|
||||
$transport = new \Swift_SendmailTransport();
|
||||
} else {
|
||||
$transport = new \Swift_SmtpTransport('localhost', 1025);
|
||||
|
|
|
@ -1,98 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Framework\Twig;
|
||||
|
||||
use App\Gmarche\Table\AntenneTable;
|
||||
use App\Gmarche\Table\RegionTable;
|
||||
use App\Product\Table\ProductTable;
|
||||
use Framework\Actions\RouterAwareAction;
|
||||
use Framework\Database\Table;
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
|
||||
class AntenneExtension extends \Twig_Extension
|
||||
{
|
||||
|
||||
/**
|
||||
* @var table
|
||||
*/
|
||||
private $table;
|
||||
private $productTable;
|
||||
private $regionTable;
|
||||
private $antenneTable;
|
||||
private $container;
|
||||
|
||||
// use RouterAwareAction;
|
||||
// private $antenne_slug;
|
||||
|
||||
|
||||
public function __construct(AntenneTable $antenneTable = null)
|
||||
{
|
||||
// $this->antenne_slug = $antenne_slug;
|
||||
$this->table = $table;
|
||||
$this->productTable = $productTable;
|
||||
$this->regionTable = $regionTable;
|
||||
$this->antenneTable = $antenneTable;
|
||||
}
|
||||
|
||||
public function getFunctions()
|
||||
{
|
||||
return [
|
||||
new \Twig_SimpleFunction('current_antenne', [$this, 'currentAntenne'])
|
||||
];
|
||||
}
|
||||
|
||||
/* public function pathFor(string $path, array $params = []): string
|
||||
{
|
||||
return $this->router->generateUri($path, $params);
|
||||
}*/
|
||||
|
||||
|
||||
/**
|
||||
* @return \PDO
|
||||
*/
|
||||
public function getPdo(): \PDO
|
||||
{
|
||||
return $this->pdo;
|
||||
}
|
||||
|
||||
public function currentAntenne(?\PDO $pdo = null, string $antenne_slug): int
|
||||
{
|
||||
//echo "antenne_slug=".$antenne_slug;
|
||||
// die();
|
||||
//$params = $request->getQueryParams();
|
||||
echo "pdo";
|
||||
var_dump($pdo);
|
||||
die();
|
||||
if (self::getPdo()) {
|
||||
echo 'PDO true';
|
||||
die();
|
||||
} else {
|
||||
echo 'PDO false';
|
||||
die();
|
||||
}
|
||||
$region_id = $this->antenneTable->findBy('slug', 'paris')->id;
|
||||
echo 'region_id';
|
||||
var_dump($region_id);
|
||||
// $test = $this->antenneTable->findWithAntenne('paris');
|
||||
//$test2 = $this->table->findAllbyRegion(8);
|
||||
$test1 = $this->productTable;
|
||||
echo 'test1';
|
||||
var_dump($test1);
|
||||
$test2 = $this->table;
|
||||
echo 'test2';
|
||||
var_dump($test2);
|
||||
die();
|
||||
$test = $this->productTable->findBy('slug', 'badge');
|
||||
echo 'test = ';
|
||||
var_dump($test);
|
||||
die();
|
||||
echo 'test2 = '.var_dump($test2);
|
||||
die();
|
||||
//return $this->antenneTable->findBy('slug', 'paris')->id;
|
||||
// return(1);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -19,7 +19,7 @@ class UrlExtension extends \Twig_Extension
|
|||
{
|
||||
return [
|
||||
//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'] ?? '/';
|
||||
}*/
|
||||
public function explodeUrl(): array
|
||||
public function explodUrl(): array
|
||||
{
|
||||
$url = $_SERVER['REQUEST_URI'] ?? '/';
|
||||
$url_parts = explode('/', $url);
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
<?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']),
|
||||
new \Twig_SimpleFunction('affiche_mail', [$this, 'affich_mail'])
|
||||
];
|
||||
}
|
||||
public function affich_role(): ?string
|
||||
{
|
||||
$retour_aff = $this->session->get('role') ?: '';
|
||||
return $retour_aff;
|
||||
}
|
||||
public function affich_usrname(): ?string
|
||||
{
|
||||
$retour_aff = $this->session->get('username') ?: '';
|
||||
return $retour_aff;
|
||||
}
|
||||
public function affich_mail(): ?string
|
||||
{
|
||||
$retour_aff = $this->session->get('email') ?: '';
|
||||
return $retour_aff;
|
||||
}
|
||||
}
|
|
@ -1,14 +1,14 @@
|
|||
<?php
|
||||
namespace App\Gmarche\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 Framework\Router;
|
||||
use GuzzleHttp\Psr7\Response;
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
|
||||
class AntenneShowAction
|
||||
|
@ -45,27 +45,28 @@ class AntenneShowAction
|
|||
|
||||
public function __invoke(Request $request)
|
||||
{
|
||||
if ($request->getMethod() === 'GET') {
|
||||
$params = $request->getQueryParams();
|
||||
$gmarchePrefix = $this->container->get('gmarche.prefix');
|
||||
// On récupère l'id de la région cliquée
|
||||
$region_id = $this->regionTable->findBy('slug', $request->getAttribute('slug'))->id;
|
||||
$region_id = $this->regionTable->findBy('slug', $request->getAttribute('slug'))->id ?: 1;
|
||||
$slug = $request->getAttribute('slug');
|
||||
$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', $request->getAttribute('slug'));
|
||||
$region = $this->regionTable->findBy('slug', $request->getAttribute('slug'));
|
||||
$var_test = 'test';
|
||||
//var_dump($antennes);
|
||||
//die();
|
||||
/*if ($region->slug !== $slug) {
|
||||
return $this->redirect('gmarche.show', [
|
||||
'slug' => $region->slug,
|
||||
'id' => $region->id
|
||||
]);
|
||||
}*/
|
||||
session_start();
|
||||
if (isset($_SESSION['user'])) {
|
||||
$nom_user = $_SESSION['user'];
|
||||
} else {
|
||||
$nom_user = '';
|
||||
$sess = $_SESSION;
|
||||
|
||||
return $this->renderer->render('@gmarche/antenne', compact('sess','page', 'gmarchePrefix','region', 'antennes'));
|
||||
}
|
||||
return $this->renderer->render('@gmarche/antenne', compact('nom_user','slug', 'region', 'gmarchePrefix','antennes', 'page'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,44 +1,45 @@
|
|||
<?php
|
||||
namespace App\Gmarche\Actions;
|
||||
|
||||
use App\Gmarche\Table\RegionTable;
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
use App\Admin\Table\UserTable;
|
||||
use Framework\Actions\RouterAwareAction;
|
||||
use Framework\Renderer\RendererInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class RegionIndexAction
|
||||
{
|
||||
|
||||
/**
|
||||
* @var RendererInterface
|
||||
*/
|
||||
private $renderer;
|
||||
|
||||
/**
|
||||
* @var RegionTable
|
||||
*/
|
||||
private $regionTable;
|
||||
|
||||
use RouterAwareAction;
|
||||
|
||||
public function __construct(
|
||||
RendererInterface $renderer,
|
||||
RegionTable $regionTable
|
||||
UserTable $userTable
|
||||
) {
|
||||
$this->renderer = $renderer;
|
||||
$this->regionTable = $regionTable;
|
||||
$this->userTable = $userTable;
|
||||
}
|
||||
|
||||
public function __invoke(Request $request)
|
||||
public function __invoke(ServerRequestInterface $request)
|
||||
{
|
||||
$params = $request->getQueryParams();
|
||||
$regions = $this->regionTable->findAll()->paginate(15, $params['p'] ?? 1);
|
||||
session_start();
|
||||
if (isset($_SESSION['user'])) {
|
||||
$nom_user = $_SESSION['user'];
|
||||
/*$userId = $this->session->get('auth.user');*/
|
||||
|
||||
if ($request->getMethod() === 'GET') {
|
||||
$accueil = true;
|
||||
|
||||
if (isset($_SESSION['connecte'])) {
|
||||
$nom_user = $_SESSION['connecte'];
|
||||
$role = $_SESSION['role'];
|
||||
} else {
|
||||
$nom_user = '';
|
||||
$role = '3';
|
||||
}
|
||||
$sess = $_SESSION;
|
||||
return $this->renderer->render('@gmarche/index', compact('sess','nom_user', 'accueil', 'role'));
|
||||
}
|
||||
return $this->renderer->render('@gmarche/index', compact('nom_user','regions'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,10 @@ class Antenne
|
|||
public $createdAt;
|
||||
|
||||
public $regionId;
|
||||
public $edito1;
|
||||
public $edito2;
|
||||
public $edito3;
|
||||
public $edito4;
|
||||
|
||||
public function setCreatedAt($datetime)
|
||||
{
|
||||
|
|
|
@ -21,6 +21,6 @@ class GmarcheModule extends Module
|
|||
$container->get(RendererInterface::class)->addPath('gmarche', __DIR__ . '/views');
|
||||
$router = $container->get(Router::class);
|
||||
$router->get("$gmarchePrefix", RegionIndexAction::class, 'gmarche.index');
|
||||
$router->get("$gmarchePrefix{slug:[a-z\-0-9]+}", AntenneShowAction::class, 'gmarche.antenne');
|
||||
$router->get("$gmarchePrefix{france}/{slug:[a-z\-0-9]+}", AntenneShowAction::class, 'gmarche.antenne');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ class AntenneTable extends Table
|
|||
|
||||
protected $table = 'antennes';
|
||||
|
||||
|
||||
public function findAllbyRegion(int $region_id): Query
|
||||
{
|
||||
$region = new RegionTable($this->pdo);
|
||||
|
@ -22,22 +21,45 @@ class AntenneTable extends Table
|
|||
->where("a.region_id = $region_id")
|
||||
->order('a.name ASC');
|
||||
}
|
||||
/* public function getAntenne(string $antenne_slug): Query
|
||||
|
||||
public function findAllRegions(): Query
|
||||
{
|
||||
//$antenne = new AntenneTable($this->pdo);
|
||||
//$region = new RegionTable($this->pdo);
|
||||
$table = 'regions';
|
||||
return $this->makeQuery()
|
||||
->select('a.*')
|
||||
->where("a.slug = $antenne_slug")
|
||||
->order('a.name ASC');
|
||||
}
|
||||
public function findPublic(): Query
|
||||
{
|
||||
return $this->findAll();
|
||||
->select('r.*')
|
||||
->order('r.name ASC');
|
||||
}
|
||||
|
||||
|
||||
public function findWithAntenne(int $antenne_slug): Antenne
|
||||
public function findAnyAntennes(string $tri, $antennes_select): Query
|
||||
{
|
||||
return $this->findPublic()->where("a.slug = $antenne_slug")->fetch();
|
||||
}*/
|
||||
$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')
|
||||
->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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
}
|
||||
.main {
|
||||
grid-area: main;
|
||||
/*justify-self: start;
|
||||
align-self: start;*/
|
||||
grid-column: 1 / 2;
|
||||
}
|
||||
.sidebar {
|
||||
|
@ -67,9 +65,6 @@
|
|||
</ul>
|
||||
</div>
|
||||
<footer class="footer">
|
||||
<!-- if antennes
|
||||
paginate(antennes, 'gmarche.antenne', {slug: slug})
|
||||
endif -->
|
||||
</footer>
|
||||
</article>
|
||||
|
||||
|
|
|
@ -4,19 +4,112 @@
|
|||
Ğ1-Marché : Régions {% if page > 1 %}, page {{ page }} {% endif %}
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<div class="container" style="height:auto; width:24rem; text-align:center;border: 0px">
|
||||
<img src="\images\logo_home.jpg" style="width:24rem;margin-left: 0px;"/>
|
||||
<div class="row card" style="width: 22rem;margin-left: 0.1rem;">
|
||||
{% if flash('error') %}
|
||||
<div class="alert alert-danger">
|
||||
{{ flash('error') }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="container home">
|
||||
<img id="logo_home" src="\images\logo_home.jpg"/>
|
||||
<ul class="list-group list-group-flush">
|
||||
{% for region in regions %}
|
||||
<a style="color:black;" href="{{ path('gmarche.antenne', {slug: region.slug, id: region.id} ) }}" title="{{ region.name }}">
|
||||
<li class="liste_regions list-group-item" style="padding: .2rem 1.25rem;">
|
||||
{{ region.name }}
|
||||
</li>
|
||||
</a>
|
||||
{% endfor %}
|
||||
<div class="mapcontainer">
|
||||
<div class="map">
|
||||
<span>Alternative content for the map</span>
|
||||
</div>
|
||||
<div class="areaLegend"></div>
|
||||
<div class="plotLegend"></div>
|
||||
</div>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- paginate(regions, 'gmarche.index') -->
|
||||
|
||||
<script type="text/javascript">
|
||||
$(".container").mapael({
|
||||
map: {
|
||||
name: 'france_regions_2016',
|
||||
zoom: {
|
||||
//enabled: true
|
||||
},
|
||||
defaultArea: {
|
||||
attrs: {
|
||||
'fill': '#517C2D',
|
||||
'stroke': '#F5D6C6',
|
||||
'stroke-width': 0.6,
|
||||
'cursor': 'pointer'
|
||||
},
|
||||
attrsHover: {
|
||||
'stroke-width': 2.5,
|
||||
'fill': '#3b7dd8',
|
||||
'animDuration' : 100
|
||||
}
|
||||
}
|
||||
},
|
||||
areas: {
|
||||
'region-84': {
|
||||
value: "Auvergne-Rhône-Alpes",
|
||||
href: "france/auvergne-rhone-alpes",
|
||||
tooltip: {content: "<span class='home_map'> Auvergne-Rhône-Alpes</span>"}
|
||||
},
|
||||
'region-53': {
|
||||
value: "Bretagne",
|
||||
href: "france/bretagne",
|
||||
tooltip: {content: "<span class='home_map'>Bretagne</span>"}
|
||||
},
|
||||
'region-27': {
|
||||
value: "Bourgogne-Franche-Comté",
|
||||
href: "france/bourgogne-franche-comte",
|
||||
tooltip: {content: "<span class='home_map'>Bourgogne-Franche-Comté</span>"}
|
||||
},
|
||||
'region-24': {
|
||||
value: "Centre-Val de Loire",
|
||||
href: "france/centre-val-de-loire",
|
||||
tooltip: {content: "<span class='home_map'>Centre-Val de Loire</span>"}
|
||||
},
|
||||
'region-94': {
|
||||
value: "Corse",
|
||||
href: "france/corse",
|
||||
tooltip: {content: "<span class='home_map'>Corse</span>"}
|
||||
},
|
||||
'region-44': {
|
||||
value: "Grand-Est",
|
||||
href: "france/grand-est",
|
||||
tooltip: {content: "<span class='home_map'>Grand-Est</span>"}
|
||||
},
|
||||
'region-32': {
|
||||
value: "Hauts-de-France",
|
||||
href: "france/hauts-de-france",
|
||||
tooltip: {content: "<span class='home_map'>Hauts-de-France</span>"}
|
||||
},
|
||||
'region-11': {
|
||||
value: "Ile-de-France",
|
||||
href: "france/ile-de-france",
|
||||
tooltip: {content: "<span class='home_map'>Ile-de-France</span>"}
|
||||
},
|
||||
'region-28': {
|
||||
value: "Normandie",
|
||||
href: "france/normandie",
|
||||
tooltip: {content: "<span class='home_map'>Normandie</span>"}
|
||||
},
|
||||
'region-75': {
|
||||
value: "Nouvelle-Aquitaine",
|
||||
href: "france/nouvelle-aquitaine",
|
||||
tooltip: {content: "<span class='home_map'>Nouvelle-Aquitaine</span>"}
|
||||
},
|
||||
'region-76': {
|
||||
value: "Occitanie",
|
||||
href: "france/occitanie",
|
||||
tooltip: {content: "<span class='home_map'>Occitanie</span>"}
|
||||
},
|
||||
'region-52': {
|
||||
value: "Pays de la Loire",
|
||||
href: "france/pays-de-la-loire",
|
||||
tooltip: {content: "<span class='home_map'>Pays de la Loire</span>"}
|
||||
},
|
||||
'region-93': {
|
||||
value: "Provence-Alpes-Côte d'Azur",
|
||||
href: "france/provence-alpes-cote-d-azur",
|
||||
tooltip: {content: "<span class='home_map'>Provence-Alpes-Côte d'Azur</span>"}
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
<?php
|
||||
namespace App\Product\Actions;
|
||||
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
use App\Auth\UserTable;
|
||||
use App\Gmarche\Table\AntenneTable;
|
||||
use App\Gmarche\Table\RegionTable;
|
||||
|
@ -45,26 +47,35 @@ class ProductIndexAction
|
|||
{
|
||||
$params = $request->getQueryParams();
|
||||
$gmarchePrefix = $this->container->get('gmarche.prefix');
|
||||
$antenne_slug =$request->getAttribute('slug');
|
||||
$region_slug =$request->getAttribute('region');
|
||||
|
||||
$antenne_slug = $request->getAttribute('slug');
|
||||
$region_slug = $request->getAttribute('region');
|
||||
$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;
|
||||
$viewPath = '@product/admin/products';
|
||||
$items = $this->productTable->findByAntenneId('antenne_id', $antenne_id)->paginate(20, $page);
|
||||
session_start();
|
||||
if (isset($_SESSION['user'])) {
|
||||
$nom_user = $_SESSION['user'];
|
||||
|
||||
if (isset($_SESSION['connecte']) && $_SESSION['connecte'] != '---') {
|
||||
$nom_user = $_SESSION['connecte'];
|
||||
$requete_user = $this->userTable->findBy('username', $nom_user);
|
||||
$user_id = $requete_user->id;
|
||||
$suiviantenne = $requete_user->suiviantenne;
|
||||
} else {
|
||||
$nom_user = '';
|
||||
$user_id = '';
|
||||
$suiviantenne = '';
|
||||
}
|
||||
return $this->renderer->render($viewPath.'/index', compact('nom_user','user_id', 'antenne_slug','gmarchePrefix','region_name','region_slug','antenne_id','antenne_name','viewPath', 'items' ));
|
||||
|
||||
$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','edito1', 'edito2','edito3','edito4' ));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
<?php
|
||||
namespace App\Product\Actions;
|
||||
|
||||
if (!isset($_SESSION)) {
|
||||
session_start();
|
||||
}
|
||||
use App\Auth\UserTable;
|
||||
use App\Gmarche\Table\AntenneTable;
|
||||
use App\Gmarche\Table\RegionTable;
|
||||
|
@ -51,22 +53,27 @@ class RechIndexAction
|
|||
$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;
|
||||
//$routePrefix = 'product.admin';
|
||||
//$routePrefix = 'product.index';
|
||||
$viewPath = '@product/admin/recherches';
|
||||
$items = $this->rechTable->findByAntenneId('antenne_id', $antenne_id)->paginate(20, $page);
|
||||
session_start();
|
||||
if (isset($_SESSION['user'])) {
|
||||
$nom_user = $_SESSION['user'];
|
||||
|
||||
if (isset($_SESSION['connecte']) && $_SESSION['connecte'] != '---') {
|
||||
$nom_user = $_SESSION['connecte'];
|
||||
$requete_user = $this->userTable->findBy('username', $nom_user);
|
||||
$user_id = $requete_user->id;
|
||||
} else {
|
||||
$nom_user = '';
|
||||
$user_id = '';
|
||||
}
|
||||
return $this->renderer->render($viewPath.'/index', compact('nom_user','user_id','antenne_slug','gmarchePrefix','region_name','region_slug','antenne_id','antenne_name','viewPath', 'items' ));
|
||||
$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', 'edito1', 'edito2','edito3','edito4' ));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,14 +16,11 @@ class ProductModule extends Module
|
|||
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
$gmarchePrefix = $container->get('gmarche.prefix');
|
||||
$gmarchePrefix = $container->get('gmarche.prefix').'france/';
|
||||
|
||||
$container->get(RendererInterface::class)->addPath('product', __DIR__ . '/views');
|
||||
$router = $container->get(Router::class);
|
||||
$router->get("$gmarchePrefix{region:[a-z\-0-9]+}/{slug:[a-z\-0-9]+}/produits", ProductIndexAction::class, 'product.ville');
|
||||
$router->get("$gmarchePrefix{region:[a-z\-0-9]+}/{slug:[a-z\-0-9]+}/recherches", RechIndexAction::class, 'product.recherches');
|
||||
|
||||
// $router->crud("$gmarchePrefix/{region:[a-z\-]+}/{slug:[a-z\-0-9]+}/{antenne:[0-9]{1,}}",[LoggedInMiddleware::class, ProductCrudAction::class],'product.admin');
|
||||
}
|
||||
}
|
||||
// $router->get("$gmarchePrefix/{region:[a-z\-0-9]+}/{slug:[a-z\-0-9]+}/{antenne:[0-9]{1,}}", ProductIndexAction::class, 'product.index');
|
||||
|
|
|
@ -3,136 +3,68 @@
|
|||
{% block title "Ğ1-Marché - Produits" %}
|
||||
|
||||
{% block body %}
|
||||
<style>
|
||||
.tableau {
|
||||
width:100%;
|
||||
background-color: white;
|
||||
table-layout: fixed;
|
||||
border-collapse: collapse;
|
||||
/* border-spacing: 1px; // pour contrer les style de base */
|
||||
}
|
||||
/* Entête */
|
||||
.tableau th {
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
padding: 0rem;
|
||||
text-align: center;
|
||||
border-left: lightgray 1px solid;
|
||||
background-color:#999690;
|
||||
color:#fff;
|
||||
}
|
||||
.tableau .colonne_image {
|
||||
padding: 0; !important;
|
||||
}
|
||||
.tableau td {
|
||||
border-bottom: solid 1px black;
|
||||
border-left: lightgray 1px solid;
|
||||
padding-left: 0.7rem;
|
||||
}
|
||||
.align_droite {
|
||||
|
||||
text-align: right;
|
||||
padding-right: 2rem;
|
||||
}
|
||||
.breadcrumb {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.toggle_radio {
|
||||
position: relative;
|
||||
background: rgba(0,0,0,.1);
|
||||
margin: -3px auto 4px 10px;
|
||||
overflow: hidden;
|
||||
padding: 0 !important;
|
||||
border-radius: 50px;
|
||||
height: 28px;
|
||||
width: 215px;
|
||||
}
|
||||
.toggle_radio > * {
|
||||
float: left;
|
||||
}
|
||||
.toggle_radio input[type=radio]{
|
||||
display: none;
|
||||
}
|
||||
.toggle_radio label{
|
||||
/* font: 90%/1.618 "Source Sans Pro";*/
|
||||
color: rgba(0,0,0,.9);
|
||||
z-index: 0;
|
||||
display: block;
|
||||
width: 100px;
|
||||
height: 20px;
|
||||
margin: 3px 3px;
|
||||
border-radius: 50px;
|
||||
cursor: pointer;
|
||||
z-index: 1;
|
||||
text-align: center;
|
||||
}
|
||||
.toggle_option_slider{
|
||||
width: 100px;
|
||||
height: 20px;
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
border-radius: 50px;
|
||||
transition: all .4s ease;
|
||||
}
|
||||
|
||||
#first_toggle:checked ~ .toggle_option_slider{
|
||||
background: rgba(0,0,0,.3);
|
||||
left: 3px;
|
||||
}
|
||||
#second_toggle:checked ~ .toggle_option_slider{
|
||||
background: rgba(0,0,0,.3);
|
||||
left: 109px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" src="/js/script.js"></script>
|
||||
<div class="container_main" style="background-color: black;">
|
||||
<div class="container_main">
|
||||
<!-- Fil d'Ariane -->
|
||||
<div class="breadcrumbs" >
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="{{ gmarchePrefix }}">France</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ gmarchePrefix }}{{ region_slug }}">{{ region_name }}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ gmarchePrefix }}france/{{ region_slug }}">{{ region_name }}</a></li>
|
||||
<li class="breadcrumb-item active">G-Marché de {{ antenne_name }}</li>
|
||||
|
||||
<div class="toggle_radio">
|
||||
<input type="radio" checked class="toggle_option" id="first_toggle" name="toggle_option">
|
||||
<input style="color:black;" type="radio" class="toggle_option" id="second_toggle" name="toggle_option">
|
||||
<label for="first_toggle"><p>PRODUITS</p></label>
|
||||
<label for="second_toggle">
|
||||
<p>
|
||||
<a style="color:black;" href="{{ gmarchePrefix }}{{ region_slug }}/{{ antenne_slug }}/recherches">RECHERCHES</a>
|
||||
<a style="color:black;" href="{{ gmarchePrefix }}france/{{ region_slug }}/{{ antenne_slug }}/recherches">RECHERCHES</a>
|
||||
</p>
|
||||
</label>
|
||||
<div class="toggle_option_slider">
|
||||
</div>
|
||||
</div>
|
||||
ant={{ antenne_id }}
|
||||
<li class="breadcrumb-item">
|
||||
<div class="custom-control custom-checkbox">
|
||||
{% set checked = '' %}
|
||||
{% set antenne_suivie = suiviantenne|split('|') %}
|
||||
{% for antenn in antenne_suivie %}
|
||||
{% if (antenn == antenne_id) %}
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
$('input:checkbox[id=suivi]').attr('checked',true);
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<input type="checkbox" class="custom-control-input pull-right" id="suivi"
|
||||
onclick="UpdateSuiviAntenne('{{ user_id }}','{{ antenne_id }}',
|
||||
document.getElementById('suivi').checked)">
|
||||
<label class="custom-control-label" for="suivi">SUIVI</label>
|
||||
</div>
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
<div id="la_page">
|
||||
{% if antenne_name == 'Paris' %}
|
||||
<script type="text/javascript">
|
||||
$('.fond').css('background-image', "url('/images/toureiffel.jpeg')");
|
||||
$(".fond").css("background-image", "url('/images/toureiffel.jpeg')");
|
||||
</script>
|
||||
{% endif %}
|
||||
<div class="container">
|
||||
|
||||
<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 nom_user != '' %}
|
||||
{% if affiche_username() != '' or (sess.connecte != '' and sess.connecte != '---') %}
|
||||
<button style="color:white; font-size: 14px;" class="btn btn-primary" data-toggle="modal" data-target="#add_new_record_modal">Ajouter un bien ou service
|
||||
{% else %}
|
||||
<p>
|
||||
|
@ -203,6 +135,9 @@
|
|||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form method='post' action='' enctype="multipart/form-data">
|
||||
Choisir la nouvelle image : <input type='file' name='file' id='avatar' class='form-control' ><br>
|
||||
</form>
|
||||
<div class="form-group">
|
||||
<label for="update_vendeur">Vendeur</label>
|
||||
<input type="input" disabled="disabled" id="update_vendeur" placeholder="Vendeur" class="form-control"/>
|
||||
|
@ -241,10 +176,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<!--
|
||||
crochet% set token_input = csrf_input %crochet
|
||||
|
||||
paginate(items, routePrefix ~ '.index', {id: item.id, region: explodeUrl()[2],
|
||||
slug: explodeUrl()[3], antenne: explodeUrl()[4]}) -->
|
||||
crochet% set token_input = csrf_input %crochet-->
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -3,104 +3,21 @@
|
|||
{% block title "Ğ1-Marché - Recherches" %}
|
||||
|
||||
{% block body %}
|
||||
<style>
|
||||
.tableau {
|
||||
width:100%;
|
||||
background-color: white;
|
||||
table-layout: fixed;
|
||||
border-collapse: collapse;
|
||||
/* border-spacing: 1px; // pour contrer les style de base */
|
||||
}
|
||||
/* Entête */
|
||||
.tableau th {
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
padding: 0rem;
|
||||
text-align: center;
|
||||
border-left: lightgray 1px solid;
|
||||
background-color:#999690;
|
||||
color:#fff;
|
||||
}
|
||||
.tableau .colonne_image {
|
||||
padding: 0; !important;
|
||||
}
|
||||
.tableau td {
|
||||
border-bottom: solid 1px black;
|
||||
border-left: lightgray 1px solid;
|
||||
padding-left: 0.7rem;
|
||||
}
|
||||
.align_droite {
|
||||
|
||||
text-align: right;
|
||||
padding-right: 2rem;
|
||||
}
|
||||
.breadcrumb {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.toggle_radio {
|
||||
position: relative;
|
||||
background: rgba(0,0,0,.1);
|
||||
margin: -3px auto 4px 10px;
|
||||
overflow: hidden;
|
||||
padding: 0 !important;
|
||||
border-radius: 50px;
|
||||
height: 28px;
|
||||
width: 215px;
|
||||
}
|
||||
.toggle_radio > * {
|
||||
float: left;
|
||||
}
|
||||
.toggle_radio input[type=radio]{
|
||||
display: none;
|
||||
}
|
||||
.toggle_radio label{
|
||||
/* font: 90%/1.618 "Source Sans Pro";*/
|
||||
color: rgba(0,0,0,.9);
|
||||
z-index: 0;
|
||||
display: block;
|
||||
width: 100px;
|
||||
height: 20px;
|
||||
margin: 3px 3px;
|
||||
border-radius: 50px;
|
||||
cursor: pointer;
|
||||
z-index: 1;
|
||||
text-align: center;
|
||||
}
|
||||
.toggle_option_slider{
|
||||
width: 100px;
|
||||
height: 20px;
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
border-radius: 50px;
|
||||
transition: all .4s ease;
|
||||
}
|
||||
|
||||
#first_toggle:checked ~ .toggle_option_slider{
|
||||
background: rgba(0,0,0,.3);
|
||||
left: 3px;
|
||||
}
|
||||
#second_toggle:checked ~ .toggle_option_slider{
|
||||
background: rgba(0,0,0,.3);
|
||||
left: 109px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" src="/js/script.js"></script>
|
||||
<div class="container_main" style="background-color: black;">
|
||||
<div class="container_main">
|
||||
<!-- Fil d'Ariane -->
|
||||
<div class="breadcrumbs" >
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="{{ gmarchePrefix }}">France</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ gmarchePrefix }}{{ region_slug }}">{{ region_name }}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ gmarchePrefix }}france/{{ region_slug }}">{{ region_name }}</a></li>
|
||||
<li class="breadcrumb-item active">G-Marché de {{ antenne_name }}</li>
|
||||
|
||||
<div class="toggle_radio">
|
||||
<input type="radio" class="toggle_option" id="first_toggle" name="toggle_option">
|
||||
<input style="color:black;" type="radio" checked class="toggle_option" id="second_toggle" name="toggle_option">
|
||||
<label for="first_toggle">
|
||||
<a style="color:black;" href="{{ gmarchePrefix }}{{ region_slug }}/{{ antenne_slug }}/produits">PRODUITS</a>
|
||||
<a style="color:black;" href="{{ gmarchePrefix }}france/{{ region_slug }}/{{ antenne_slug }}/produits">PRODUITS</a>
|
||||
</label>
|
||||
<label for="second_toggle">
|
||||
<p>RECHERCHES</p>
|
||||
|
@ -122,17 +39,14 @@
|
|||
<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 nom_user != '' %}
|
||||
{% if affiche_username() != '' or (sess.connecte != '' and sess.connecte != '---') %}
|
||||
<button style="color:white; font-size: 14px;" class="btn btn-primary" data-toggle="modal" data-target="#add_new_record_modal">Ajouter un bien ou service
|
||||
{% else %}
|
||||
<p>
|
||||
|
|
|
@ -7,7 +7,12 @@
|
|||
<link rel="shortcut icon" type="image/x-icon" href="\images\favicon.ico">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Bree+Serif&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Kalam&display=swap">
|
||||
<link rel="stylesheet" href="\css\style.css">
|
||||
<link rel="stylesheet" href="/css/mapael.css">
|
||||
<link rel="stylesheet" href="/css/style.css">
|
||||
<link rel="stylesheet" href="/css/products.css">
|
||||
<!-- <link rel="stylesheet" href="/css/jquery-ui.css">-->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flatpickr/3.0.7/flatpickr.css">
|
||||
|
||||
<style>
|
||||
body {
|
||||
padding-top: 5rem;
|
||||
|
@ -27,10 +32,15 @@
|
|||
grid-column: 2 / 3;
|
||||
}
|
||||
</style>
|
||||
<!--<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>-->
|
||||
|
||||
<script type="text/javascript" src="/js/jquery-3.4.1.min.js"></script>
|
||||
<!-- <script type="text/javascript" src="/js/jquery-ui.js"></script>-->
|
||||
<script type="text/javascript" src="/js/connex.js"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js" charset="utf-8"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/raphael/2.2.7/raphael.min.js" charset="utf-8"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mapael/2.1.0/js/jquery.mapael.min.js" charset="utf-8"></script>
|
||||
<script type="text/javascript" src="https://rawgit.com/neveldo/mapael-maps/master/france/france_regions_2016.js" charset="utf-8"></script>
|
||||
<!--<script type="text/javascript" src="/js/datepicker-fr.js"></script>-->
|
||||
|
||||
</head>
|
||||
<body class="fond page">
|
||||
<div class="site">
|
||||
|
@ -38,40 +48,67 @@
|
|||
<a class="navbar-brand" href="#">Ğ1-Marché</a>
|
||||
<ul class="navbar-nav mr-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if regions %} active{% endif %}" style="font-size:14px;"
|
||||
<a class="nav-link {% if accueil %} active{% endif %}" style="font-size:14px;"
|
||||
href="{{ path('gmarche.index') }}">Accueil</a>
|
||||
</li>
|
||||
{% if (affiche_role()==0 or affiche_role()==1 or affiche_role()==2) and (affiche_username() !=''
|
||||
or (sess.connecte != '' and sess.connecte != '---')) %}
|
||||
<li class="nav-item">
|
||||
{% if affiche_username() !='' %}
|
||||
<a class="nav-link {% if explodeUrl()[1]=='dashboard' %} active{% endif %}" style="font-size:14px;"
|
||||
href="{{ path('dashboard',{user:affiche_username()}) }}">Administration</a>
|
||||
{% else %}
|
||||
{% if (sess.connecte != '' and sess.connecte != '---') %}
|
||||
<a class="nav-link {% if explodeUrl()[1]=='dashboard' %} active{% endif %}" style="font-size:14px;"
|
||||
href="{{ path('dashboard',{user:sess.connecte}) }}">Administration</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if explodeUrl()[1]=='contact' %} active{% endif %}" style="font-size:14px;"
|
||||
href="{{ path('contact') }}">Qui sommes-nous ?</a>
|
||||
href="{{ path('contact') }}">Qui sommes-nous ?
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="navbar-nav">
|
||||
<div class="navbar-text" style="color:lightgray;margin-right:15px; margin-top:3px;">
|
||||
{{ "now"|date('d/m/y') }}
|
||||
</div>
|
||||
<!--{pourcent if current_user() pourcent}-->
|
||||
{% if nom_user != '' %}
|
||||
<!-- <button style="background-color: transparent;padding:0;border:0;" -->
|
||||
<form method="post" style="margin-top:5px;" action="{{ path('account.profil') }}">
|
||||
{% if affiche_username() != '' or (sess.connecte != '' and sess.connecte != '---') %}
|
||||
<form method="post" style="margin-top:5px;" action="{{ path('account.profil',{user:affiche_username()}) }}">
|
||||
<span><img src="\avatar_user.png" width="22" height="22" /></span>
|
||||
<!--<span id="nom_connecte"> nom_user </span>-->
|
||||
<button style="color:white;font-size: 14px;" class="btn-primary">{{ nom_user }}</button>
|
||||
<button id="nom_connecte_bis" style="color:white;font-size: 14px;" class="btn-primary">
|
||||
{% if affiche_username() != '' %}
|
||||
{{ affiche_username() }}
|
||||
{% else %}
|
||||
{{ sess.connecte }}
|
||||
{% endif %}
|
||||
</button>
|
||||
<div style="width:0;height:0;">
|
||||
{{ field('email', affiche_mail(), "", {type: 'hidden'}) }}
|
||||
</div>
|
||||
</form>
|
||||
<form method="post" action="{{ path('auth.logout') }}">
|
||||
<!-- csrf_input() }}-->
|
||||
<button class="btn btn-danger" style="margin-left: 7px; font-size:14px;">Se déconnecter</button>
|
||||
</form>
|
||||
{% else %}
|
||||
<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>
|
||||
<form id="formulaire" method="post" style="margin-top:5px;" action="{{ path('account.profil',{user:''}) }}">
|
||||
<div class="nav-item" id="avatar-user" style="display:none;padding-top:0.1rem;margin-right:0.4rem;">
|
||||
</div>
|
||||
<div id="nom_connecte" style="display:none;margin-left:10px;margin-top:6px;margin-right:8px;">
|
||||
<div class="nav-item" id="user-connecte" style="display:none;padding-top:0.1rem;">
|
||||
<button id="contenu_bouton" style="color:white; font-size: 14px;" class="btn-primary">
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
<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>
|
||||
</div>
|
||||
<div id="deconnexion" style="display:none;">
|
||||
<form method="post" action="{{ path('auth.logout') }}">
|
||||
<!-- csrf_input() }}-->
|
||||
<button class="btn btn-danger" style="font-size:14px;">Se déconnecter</button>
|
||||
<button class="btn btn-danger" style="font-size:14px;margin-left:0.5rem;">Se déconnecter</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="nav-item" id="inscription">
|
||||
|
@ -100,7 +137,7 @@
|
|||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="pseudo">Pseudo</label>
|
||||
<input type="text" id="pseudo" placeholder="{{ nom_user }}" class="form-control"/>
|
||||
<input type="text" id="pseudo" placeholder="Saisir votre pseudo SVP" class="form-control"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="mdp">Mot de passe</label>
|
||||
|
@ -114,7 +151,7 @@
|
|||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Annuler</button>
|
||||
<button type="button" class="btn btn-primary"
|
||||
<button type="submit" value="submit" class="btn btn-primary"
|
||||
onclick="connexion(document.getElementById('pseudo').value,document.getElementById('mdp').value)">Valider</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue