Merge branch 'main' of https://gitlab.com/marvin.epip/sortir
This commit is contained in:
@@ -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',
|
||||
|
||||
@@ -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.');
|
||||
|
||||
@@ -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 = [];
|
||||
|
||||
|
||||
@@ -26,6 +26,6 @@ class EtatFixtures extends Fixture
|
||||
$manager->persist($etat);
|
||||
}
|
||||
|
||||
$manager->flush(); // Enregistrement en base de données
|
||||
$manager->flush();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user