From e6954b6ce37f02afe204d348eb92e79097b62df6 Mon Sep 17 00:00:00 2001
From: jleroy2023
Date: Wed, 20 Nov 2024 14:55:04 +0100
Subject: [PATCH 1/5] set V1
---
src/Controller/SortieController.php | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/Controller/SortieController.php b/src/Controller/SortieController.php
index 33f0aa1..6b97eb5 100644
--- a/src/Controller/SortieController.php
+++ b/src/Controller/SortieController.php
@@ -11,12 +11,13 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
+use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
#[Route('/sortie', name: 'sortie_')]
class SortieController extends AbstractController
{
#[Route('/creates', name: 'create', methods: ['GET', 'POST'])]
- public function create(Request $request, EntityManagerInterface $entityManager): Response
+ public function create(Request $request, EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage): Response
{
$sortie = new Sortie();
@@ -33,8 +34,10 @@ class SortieController extends AbstractController
return $this->redirectToRoute('sortie_create');
}
-
+ $token = $tokenStorage->getToken();
+ $userConnect = $token?->getUser();
return $this->render('sortie/create.html.twig', [
+ 'profile' => $userConnect,
'form' => $form->createView(),
]);
}
From f25295ae5c175f10982ec55eeffc3626bc78dc05 Mon Sep 17 00:00:00 2001
From: marvin
Date: Wed, 20 Nov 2024 15:48:32 +0100
Subject: [PATCH 2/5] =?UTF-8?q?forme=20cr=C3=A9ation=20sortie?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
assets/js/lieu.js | 16 +++++--
src/Controller/SortieController.php | 65 +++++++++++++++++++++++++----
src/Entity/Sortie.php | 4 +-
src/Form/SortieType.php | 4 +-
templates/main/index.html.twig | 2 +-
5 files changed, 74 insertions(+), 17 deletions(-)
diff --git a/assets/js/lieu.js b/assets/js/lieu.js
index 27721b9..8c87c81 100644
--- a/assets/js/lieu.js
+++ b/assets/js/lieu.js
@@ -8,9 +8,11 @@ document.addEventListener('DOMContentLoaded', function () {
const longitudeLabel = document.getElementById('longitude-value');
if (villeSelect && lieuSelect) {
+ // Listener pour la ville
villeSelect.addEventListener('change', function () {
const villeId = villeSelect.value;
+ // Réinitialisation des options de lieu
lieuSelect.innerHTML = '';
lieuSelect.disabled = true;
@@ -23,12 +25,13 @@ document.addEventListener('DOMContentLoaded', function () {
return response.json();
})
.then(data => {
+ // Mise à jour des options dans le menu déroulant
lieuSelect.innerHTML = '';
data.forEach(lieu => {
const option = document.createElement('option');
- option.value = lieu.id;
- option.textContent = lieu.nom;
- option.dataset.details = JSON.stringify(lieu);
+ option.value = lieu.id; // ID pour soumettre au backend
+ option.textContent = lieu.nom; // Nom affiché
+ option.dataset.details = JSON.stringify(lieu); // Stocker les détails pour affichage
lieuSelect.appendChild(option);
});
@@ -40,20 +43,27 @@ document.addEventListener('DOMContentLoaded', function () {
}
});
+ // Listener pour le lieu
lieuSelect.addEventListener('change', function () {
const selectedOption = lieuSelect.options[lieuSelect.selectedIndex];
if (selectedOption && selectedOption.dataset.details) {
const lieuDetails = JSON.parse(selectedOption.dataset.details);
+ // Mise à jour des labels avec les détails du lieu sélectionné
rueLabel.textContent = lieuDetails.rue || 'Non renseignée';
codePostalLabel.textContent = lieuDetails.codePostal || 'Non renseigné';
latitudeLabel.textContent = lieuDetails.latitude || 'Non renseignée';
longitudeLabel.textContent = lieuDetails.longitude || 'Non renseignée';
+
+ console.log('Lieu sélectionné:', lieuDetails);
} else {
+ // Réinitialisation des labels si aucun lieu n'est sélectionné
rueLabel.textContent = 'Renseigner avec le lieu';
codePostalLabel.textContent = 'Renseigner avec le lieu';
latitudeLabel.textContent = 'Renseigner avec le lieu';
longitudeLabel.textContent = 'Renseigner avec le lieu';
+
+ console.log('Aucun lieu sélectionné.');
}
});
} else {
diff --git a/src/Controller/SortieController.php b/src/Controller/SortieController.php
index 6b97eb5..2c4afb1 100644
--- a/src/Controller/SortieController.php
+++ b/src/Controller/SortieController.php
@@ -4,8 +4,9 @@ namespace App\Controller;
use App\Entity\Sortie;
use App\Form\SortieType;
+use App\Repository\EtatRepository;
use App\Repository\LieuRepository;
-use App\Repository\VilleRepository;
+use App\Repository\ParticipantRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
@@ -17,29 +18,75 @@ use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInt
class SortieController extends AbstractController
{
#[Route('/creates', name: 'create', methods: ['GET', 'POST'])]
- public function create(Request $request, EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage): Response
- {
+ public function create(
+ Request $request,
+ EntityManagerInterface $entityManager,
+ TokenStorageInterface $tokenStorage,
+ LieuRepository $lieuRepository,
+ ParticipantRepository $participantRepository,
+ EtatRepository $etatRepository // Ajout du repository pour les états
+ ): Response {
$sortie = new Sortie();
- // Créez le formulaire sans options spéciales
+ // Récupérer l'utilisateur connecté
+ $token = $tokenStorage->getToken();
+ $userConnect = $token?->getUser();
+
+ if (!$userConnect) {
+ $this->addFlash('error', 'Vous devez être connecté pour créer une sortie.');
+ return $this->redirectToRoute('app_login');
+ }
+
+ // Créer le formulaire
$form = $this->createForm(SortieType::class, $sortie);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
- // Sauvegarde dans la base de données
+ // Récupérer l'ID du lieu depuis le formulaire
+ $lieuId = $form->get('lieu')->getData();
+ $lieu = $lieuRepository->find($lieuId);
+
+ if (!$lieu) {
+ $this->addFlash('error', 'Le lieu sélectionné est invalide.');
+ return $this->redirectToRoute('sortie_create');
+ }
+
+ // Associer le lieu à la sortie
+ $sortie->setLieu($lieu);
+
+ // Associer le site à partir de l'utilisateur connecté
+ $participant = $participantRepository->find($userConnect->getIdParticipant());
+
+ if (!$participant) {
+ $this->addFlash('error', 'Impossible de déterminer le site de l\'utilisateur.');
+ return $this->redirectToRoute('sortie_create');
+ }
+
+ $sortie->setSite($participant->getSite());
+ $sortie->setParticipant($participant);
+
+ // Récupérer l'état "en création" avec l'ID donné
+ $etat = $etatRepository->find('019349ba-38ca-7a39-93c3-62f046671525');
+ if (!$etat) {
+ $this->addFlash('error', 'État non trouvé.');
+ return $this->redirectToRoute('sortie_create');
+ }
+
+ // Associer l'état à la sortie
+ $sortie->setEtat($etat);
+
+ // Sauvegarder la sortie
$entityManager->persist($sortie);
$entityManager->flush();
$this->addFlash('success', 'La sortie a été créée avec succès.');
- return $this->redirectToRoute('sortie_create');
+ return $this->redirectToRoute('home');
}
- $token = $tokenStorage->getToken();
- $userConnect = $token?->getUser();
+
return $this->render('sortie/create.html.twig', [
'profile' => $userConnect,
'form' => $form->createView(),
]);
}
-
}
diff --git a/src/Entity/Sortie.php b/src/Entity/Sortie.php
index 3479552..0b7e2d7 100644
--- a/src/Entity/Sortie.php
+++ b/src/Entity/Sortie.php
@@ -18,13 +18,13 @@ class Sortie
#[ORM\Column(length: 255)]
private ?string $nom = null;
- #[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
+ #[ORM\Column(type: Types::DATETIME_IMMUTABLE, nullable: true)]
private ?\DateTimeInterface $dateHeureDebut = null;
#[ORM\Column(nullable: true)]
private ?int $duree = null;
- #[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
+ #[ORM\Column(type: Types::DATETIME_IMMUTABLE, nullable: true)]
private ?\DateTimeInterface $dateLimiteInscription = null;
#[ORM\Column(nullable: true)]
diff --git a/src/Form/SortieType.php b/src/Form/SortieType.php
index efc3f92..8746166 100644
--- a/src/Form/SortieType.php
+++ b/src/Form/SortieType.php
@@ -64,8 +64,8 @@ class SortieType extends AbstractType
'class' => Lieu::class,
'choice_label' => 'nom',
'label' => 'Lieu',
- 'placeholder' => 'Sélectionnez une ville d\'abord',
- 'choices' => [],
+ 'placeholder' => 'Sélectionnez un lieu',
+ 'required' => true,
'attr' => ['id' => 'lieu-select'],
]);
}
diff --git a/templates/main/index.html.twig b/templates/main/index.html.twig
index 5d63f2f..7e41c3c 100644
--- a/templates/main/index.html.twig
+++ b/templates/main/index.html.twig
@@ -22,7 +22,7 @@
Inscriptions max : {{ sortie.nbInscriptionsMax }}
Infos : {{ sortie.infosSortie }}
- Voir plus
+ Voir plus
From 0ff9ac68b28c3e2b3864ff27e9464010e592b382 Mon Sep 17 00:00:00 2001
From: jleroy2023
Date: Wed, 20 Nov 2024 15:48:47 +0100
Subject: [PATCH 3/5] set V1
---
src/Controller/AdminController.php | 2 +-
src/Repository/ParticipantRepository.php | 11 +++++++++++
templates/admin/user.html.twig | 2 ++
templates/main/index.html.twig | 2 +-
4 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php
index 430ff71..a91cbb9 100644
--- a/src/Controller/AdminController.php
+++ b/src/Controller/AdminController.php
@@ -44,7 +44,7 @@ class AdminController extends AbstractController
$userConnect = $token?->getUser();
return $this->render('admin/user.html.twig', [
'profile' => $userConnect,
- 'participants' => $participantRepository->findAll(),
+ 'participants' => $participantRepository->getAll(),
'controller_name' => 'AdminController',
]);
}
diff --git a/src/Repository/ParticipantRepository.php b/src/Repository/ParticipantRepository.php
index 4c69fdf..38d41e0 100644
--- a/src/Repository/ParticipantRepository.php
+++ b/src/Repository/ParticipantRepository.php
@@ -4,6 +4,7 @@ namespace App\Repository;
use App\Entity\Participant;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
+use Doctrine\ORM\Tools\Pagination\Paginator;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
@@ -33,6 +34,16 @@ class ParticipantRepository extends ServiceEntityRepository
return $newProfile;
}
+ public function getAll(): Paginator
+ {
+ $qb = $this->createQueryBuilder('p')
+ ->addSelect('s')
+ ->leftJoin('p.site', 's')
+ ->getQuery();
+ return new Paginator($qb);
+ }
+
+
// /**
// * @return Participant[] Returns an array of Participant objects
// */
diff --git a/templates/admin/user.html.twig b/templates/admin/user.html.twig
index ad4f743..4baaa6a 100644
--- a/templates/admin/user.html.twig
+++ b/templates/admin/user.html.twig
@@ -49,6 +49,7 @@
Nom |
Prénom |
Pseudo |
+ Site |
Téléphone |
Email |
Administrateur |
@@ -64,6 +65,7 @@
{{ participant.nom }} |
{{ participant.prenom }} |
{{ participant.pseudo }} |
+ {{ participant.site.nom }} |
{{ participant.telephone }} |
{{ participant.email }} |
diff --git a/templates/main/index.html.twig b/templates/main/index.html.twig
index 5d63f2f..7e41c3c 100644
--- a/templates/main/index.html.twig
+++ b/templates/main/index.html.twig
@@ -22,7 +22,7 @@
Inscriptions max : {{ sortie.nbInscriptionsMax }}
Infos : {{ sortie.infosSortie }}
- Voir plus
+ Voir plus
From 110cca48a1f7ee55f32d510b2fcfae4c30bef951 Mon Sep 17 00:00:00 2001
From: jleroy2023
Date: Wed, 20 Nov 2024 16:02:32 +0100
Subject: [PATCH 4/5] set V1
---
src/Controller/AdminController.php | 9 +++++++--
src/Repository/ParticipantRepository.php | 4 ++--
templates/admin/user.html.twig | 3 ++-
3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php
index a91cbb9..394659a 100644
--- a/src/Controller/AdminController.php
+++ b/src/Controller/AdminController.php
@@ -25,6 +25,10 @@ use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
class AdminController extends AbstractController
{
+ private ParticipantRepository $participantRepository;
+ public function __construct(ParticipantRepository $participantRepository){
+ $this->participantRepository = $participantRepository;
+ }
#[Route('/admin', name: 'app_admin')]
public function index(TokenStorageInterface $tokenStorage): Response
{
@@ -38,13 +42,14 @@ class AdminController extends AbstractController
//Gestion des utilisateurs
#[Route('/admin/user', name: 'app_adminUser')]
- public function adminUser(ParticipantRepository $participantRepository, TokenStorageInterface $tokenStorage): Response
+ public function adminUser(TokenStorageInterface $tokenStorage): Response
{
$token = $tokenStorage->getToken();
$userConnect = $token?->getUser();
+ $participants = $this->participantRepository->findAll();
return $this->render('admin/user.html.twig', [
'profile' => $userConnect,
- 'participants' => $participantRepository->getAll(),
+ 'participants' => $participants,
'controller_name' => 'AdminController',
]);
}
diff --git a/src/Repository/ParticipantRepository.php b/src/Repository/ParticipantRepository.php
index 38d41e0..140933d 100644
--- a/src/Repository/ParticipantRepository.php
+++ b/src/Repository/ParticipantRepository.php
@@ -37,8 +37,8 @@ class ParticipantRepository extends ServiceEntityRepository
public function getAll(): Paginator
{
$qb = $this->createQueryBuilder('p')
- ->addSelect('s')
- ->leftJoin('p.site', 's')
+ ->addSelect('site')
+ ->leftJoin('p.site', 'site')
->getQuery();
return new Paginator($qb);
}
diff --git a/templates/admin/user.html.twig b/templates/admin/user.html.twig
index 4baaa6a..51e1233 100644
--- a/templates/admin/user.html.twig
+++ b/templates/admin/user.html.twig
@@ -65,7 +65,7 @@
{{ participant.nom }} |
{{ participant.prenom }} |
{{ participant.pseudo }} |
- {{ participant.site.nom }} |
+ {{ participant.site ? participant.site.nom : "N/A" }} |
{{ participant.telephone }} |
{{ participant.email }} |
@@ -93,6 +93,7 @@
+
{# Tableau user en attente #}
From f197db0455b9009fd2c6387c455259be66efb4b0 Mon Sep 17 00:00:00 2001
From: marvin
Date: Wed, 20 Nov 2024 16:03:55 +0100
Subject: [PATCH 5/5] home
---
templates/main/index.html.twig | 31 ++++++++++++++++---------------
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/templates/main/index.html.twig b/templates/main/index.html.twig
index 7e41c3c..33729f3 100644
--- a/templates/main/index.html.twig
+++ b/templates/main/index.html.twig
@@ -2,6 +2,7 @@
{% block head %}
+ Liste des sorties
{% block stylesheets %}
{{ encore_entry_link_tags('app') }}
{% endblock %}
@@ -9,24 +10,24 @@
{% endblock %}
{% block content %}
-
-
+
+ Liste des sorties
+
+
{% for sortie in sorties %}
-
-
-
- {{ sortie.nom }}
-
- Date de début : {{ sortie.dateHeureDebut|date('d/m/Y H:i') }}
- Durée : {{ sortie.duree }} minutes
- Inscriptions max : {{ sortie.nbInscriptionsMax }}
- Infos : {{ sortie.infosSortie }}
-
- Voir plus
-
+
+ {{ sortie.nom }}
+
+ Date de début : {{ sortie.dateHeureDebut|date('d/m/Y H:i') }}
+ Durée : {{ sortie.duree }} minutes
+ Inscriptions max : {{ sortie.nbInscriptionsMax }}
+ Infos : {{ sortie.infosSortie }}
+
+
{% endfor %}
-{% endblock %}
\ No newline at end of file
+{% endblock %}
| |