This commit is contained in:
Olivier PARPAILLON
2024-11-25 11:00:51 +01:00
17 changed files with 52 additions and 367 deletions

View File

@@ -73,7 +73,6 @@ class LieuController extends AbstractController
return new JsonResponse(['error' => 'Ville non trouvée'], Response::HTTP_NOT_FOUND);
}
// Utilisez l'API Nominatim pour récupérer les bounds
$params = [
'q' => $ville->getNom(),
'format' => 'json',

View File

@@ -28,7 +28,6 @@ class SortieController extends AbstractController
): Response {
$sortie = new Sortie();
// Récupérer l'utilisateur connecté
$token = $tokenStorage->getToken();
$userConnect = $token?->getUser();
@@ -37,12 +36,10 @@ class SortieController extends AbstractController
return $this->redirectToRoute('app_login');
}
// Créer le formulaire
$form = $this->createForm(SortieType::class, $sortie);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Récupérer l'ID du lieu depuis le formulaire
$lieuId = $form->get('lieu')->getData();
$lieu = $lieuRepository->find($lieuId);
@@ -51,10 +48,8 @@ class SortieController extends AbstractController
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) {
@@ -64,20 +59,16 @@ class SortieController extends AbstractController
$sortie->setSite($participant->getSite());
// 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);
// Associer l'organisateur à la sortie
$sortie->setOrganisateur($participant);
// Sauvegarder la sortie
$entityManager->persist($sortie);
$entityManager->flush();
@@ -95,7 +86,6 @@ class SortieController extends AbstractController
#[Route('/view/{id}', name: 'view', methods: ['GET'])]
public function view(string $id, EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage): Response
{
// Récupérer l'utilisateur connecté
$token = $tokenStorage->getToken();
$userConnect = $token?->getUser();
@@ -106,7 +96,6 @@ class SortieController extends AbstractController
return $this->redirectToRoute('home');
}
// Récupérer le profil de l'utilisateur connecté
$profile = $this->getUser();
return $this->render('sortie/view.html.twig', [
@@ -118,7 +107,6 @@ class SortieController extends AbstractController
#[Route('/inscription/{id}', name: 'inscription', methods: ['POST'])]
public function inscription(string $id, EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage): Response
{
// Récupérer l'utilisateur connecté
$token = $tokenStorage->getToken();
$userConnect = $token?->getUser();
@@ -127,7 +115,6 @@ class SortieController extends AbstractController
return $this->redirectToRoute('app_login');
}
// Récupérer la sortie
$sortie = $entityManager->getRepository(Sortie::class)->find($id);
if (!$sortie) {
@@ -135,25 +122,21 @@ class SortieController extends AbstractController
return $this->redirectToRoute('home');
}
// Vérifier que la sortie est "Ouverte"
if ($sortie->getEtat()->getLibelle() !== 'Ouverte') {
$this->addFlash('error', 'Vous ne pouvez pas vous inscrire à cette sortie car elle n\'est pas ouverte.');
return $this->redirectToRoute('sortie_view', ['id' => $id]);
}
// Vérifier si l'utilisateur est déjà inscrit
if ($sortie->getParticipants()->contains($userConnect)) {
$this->addFlash('error', 'Vous êtes déjà inscrit à cette sortie.');
return $this->redirectToRoute('sortie_view', ['id' => $id]);
}
// Vérifier le nombre maximum d'inscriptions
if ($sortie->getParticipants()->count() >= $sortie->getNbInscriptionsMax()) {
$this->addFlash('error', 'Le nombre maximum d\'inscriptions a été atteint pour cette sortie.');
return $this->redirectToRoute('sortie_view', ['id' => $id]);
}
// Ajouter l'utilisateur à la liste des participants
$sortie->addParticipant($userConnect);
$entityManager->flush();
@@ -170,7 +153,6 @@ class SortieController extends AbstractController
TokenStorageInterface $tokenStorage,
LieuRepository $lieuRepository
): Response {
// Récupérer la sortie
$sortie = $entityManager->getRepository(Sortie::class)->find($id);
if (!$sortie) {
@@ -178,7 +160,6 @@ class SortieController extends AbstractController
return $this->redirectToRoute('home');
}
// Vérifier si l'utilisateur est l'organisateur
$token = $tokenStorage->getToken();
$userConnect = $token?->getUser();
@@ -187,12 +168,10 @@ class SortieController extends AbstractController
return $this->redirectToRoute('home');
}
// Créer le formulaire
$form = $this->createForm(SortieType::class, $sortie);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Mettre à jour le lieu si modifié
$lieuId = $form->get('lieu')->getData();
$lieu = $lieuRepository->find($lieuId);
@@ -200,7 +179,6 @@ class SortieController extends AbstractController
$sortie->setLieu($lieu);
}
// Sauvegarder les modifications
$entityManager->flush();
$this->addFlash('success', 'La sortie a été mise à jour avec succès.');

View File

@@ -16,14 +16,12 @@ class VilleController extends AbstractController
#[Route('/get-lieux/{id}', name: 'get_lieux', methods: ['GET'])]
public function getLieux(string $id, VilleRepository $villeRepository, LieuRepository $lieuRepository): JsonResponse
{
// Trouve la ville correspondant à l'ID (GUID)
$ville = $villeRepository->find($id);
if (!$ville) {
return new JsonResponse(['error' => 'Ville non trouvée'], Response::HTTP_NOT_FOUND);
}
// Trouve tous les lieux associés à la ville
$lieux = $lieuRepository->findBy(['ville' => $ville]);
$response = [];

View File

@@ -26,6 +26,6 @@ class EtatFixtures extends Fixture
$manager->persist($etat);
}
$manager->flush(); // Enregistrement en base de données
$manager->flush();
}
}

View File

@@ -14,7 +14,6 @@ class LieuFixtures extends Fixture implements DependentFixtureInterface
{
$faker = Factory::create();
// Exemple : Références pour des villes déjà créées dans VilleFixtures
$villes = [
$this->getReference('ville_Paris'),
$this->getReference('ville_Lyon'),
@@ -22,13 +21,13 @@ class LieuFixtures extends Fixture implements DependentFixtureInterface
];
foreach ($villes as $ville) {
for ($i = 0; $i < 5; $i++) { // Génère 5 lieux par ville
for ($i = 0; $i < 5; $i++) {
$lieu = new Lieu();
$lieu->setNom($faker->streetName());
$lieu->setRue($faker->streetAddress());
$lieu->setLatitude($faker->latitude());
$lieu->setLongitude($faker->longitude());
$lieu->setVille($ville); // Associe le lieu à une ville
$lieu->setVille($ville);
$manager->persist($lieu);
}
}
@@ -39,7 +38,7 @@ class LieuFixtures extends Fixture implements DependentFixtureInterface
public function getDependencies(): array
{
return [
VilleFixtures::class, // Assure que VilleFixtures est chargée en premier
VilleFixtures::class,
];
}
}

View File

@@ -10,7 +10,6 @@ class VilleFixtures extends Fixture
{
public function load(ObjectManager $manager): void
{
// Tableau associatif contenant les noms des villes et leurs codes postaux
$villes = [
['nom' => 'Paris', 'codePostal' => '75000'],
['nom' => 'Lyon', 'codePostal' => '69000'],
@@ -23,7 +22,6 @@ class VilleFixtures extends Fixture
$ville->setCodePostal($villeData['codePostal']); // Définit le code postal
$manager->persist($ville);
// Ajoute une référence pour les fixtures de lieux
$this->addReference('ville_' . $villeData['nom'], $ville);
}

View File

@@ -28,16 +28,18 @@ class Lieu
#[ORM\Column(nullable: true)]
private ?float $longitude = null;
#[ORM\Column(length: 255)]
private ?string $ville = null;
#[ORM\Column(type: 'integer')]
private ?int $codePostal = null;
/**
* @var Collection<int, Sortie>
*/
#[ORM\OneToMany(targetEntity: Sortie::class, mappedBy: 'lieu')]
private Collection $sorties;
#[ORM\ManyToOne(inversedBy: 'lieux')]
#[ORM\JoinColumn(name: 'ville_id', referencedColumnName: 'id_ville', nullable: false)]
private ?Ville $ville = null;
public function __construct()
{
$this->sorties = new ArrayCollection();
@@ -96,6 +98,30 @@ class Lieu
return $this;
}
public function getVille(): ?string
{
return $this->ville;
}
public function setVille(string $ville): self
{
$this->ville = $ville;
return $this;
}
public function getCodePostal(): ?int
{
return $this->codePostal;
}
public function setCodePostal(int $codePostal): self
{
$this->codePostal = $codePostal;
return $this;
}
/**
* @return Collection<int, Sortie>
*/
@@ -125,18 +151,4 @@ class Lieu
return $this;
}
public function getVille(): ?Ville
{
return $this->ville;
}
public function setVille(?Ville $ville): self
{
$this->ville = $ville;
return $this;
}
}

View File

@@ -1,94 +0,0 @@
<?php
namespace App\Entity;
use App\Repository\VilleRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: VilleRepository::class)]
class Ville
{
#[ORM\Id]
#[ORM\Column(type: 'guid', unique: true)]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
private ?string $idVille = null;
#[ORM\Column(length: 255)]
private ?string $nom = null;
#[ORM\Column(nullable: true)]
private ?int $codePostal = null;
/**
* @var Collection<int, Lieu>
*/
#[ORM\OneToMany(targetEntity: Lieu::class, mappedBy: 'ville')]
private Collection $lieux;
public function __construct()
{
$this->lieux = new ArrayCollection();
}
public function getIdVille(): ?string
{
return $this->idVille;
}
public function getNom(): ?string
{
return $this->nom;
}
public function setNom(string $nom): self
{
$this->nom = $nom;
return $this;
}
public function getCodePostal(): ?int
{
return $this->codePostal;
}
public function setCodePostal(?int $codePostal): self
{
$this->codePostal = $codePostal;
return $this;
}
/**
* @return Collection<int, Lieu>
*/
public function getLieux(): Collection
{
return $this->lieux;
}
public function addLieu(Lieu $lieu): self
{
if (!$this->lieux->contains($lieu)) {
$this->lieux->add($lieu);
$lieu->setVille($this);
}
return $this;
}
public function removeLieu(Lieu $lieu): self
{
if ($this->lieux->removeElement($lieu)) {
// Set the owning side to null (unless already changed)
if ($lieu->getVille() === $this) {
$lieu->setVille(null);
}
}
return $this;
}
}

View File

@@ -54,14 +54,6 @@ class SortieType extends AbstractType
'required' => false,
'attr' => ['class' => 'form-control'],
])
->add('ville', EntityType::class, [
'class' => Ville::class,
'choice_label' => 'nom',
'mapped' => false, // Non lié à l'entité Sortie
'label' => 'Ville',
'placeholder' => 'Sélectionnez une ville',
'attr' => ['id' => 'ville-select'],
])
->add('lieu', EntityType::class, [
'class' => Lieu::class,
'choice_label' => 'nom',