diff --git a/config/services.yaml b/config/services.yaml index fbf1bdd..fbcedf0 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -7,6 +7,10 @@ parameters: services: # default configuration for services in *this* file + doctrine.fixtures.purger.orm_purger_factory: + class: App\Purger\MyPurgerFactory + tags: + - { name: doctrine.fixtures.purger_factory, alias: default } _defaults: autowire: true # Automatically injects dependencies in your services. autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. diff --git a/src/DataFixtures/EtatFixtures.php b/src/DataFixtures/EtatFixtures.php index 1af3717..823fa5b 100644 --- a/src/DataFixtures/EtatFixtures.php +++ b/src/DataFixtures/EtatFixtures.php @@ -12,6 +12,7 @@ class EtatFixtures extends Fixture public function load(ObjectManager $manager): void { $etats = [ + 'Créée', 'Ouverte', 'Clôturée', 'En cours', @@ -22,6 +23,7 @@ class EtatFixtures extends Fixture foreach ($etats as $libelle) { $etat = new Etat(); $etat->setLibelle($libelle); + $this->addReference($libelle, $etat); $manager->persist($etat); } diff --git a/src/DataFixtures/LieuFixtures.php b/src/DataFixtures/LieuFixtures.php index 2da0b25..35c770b 100644 --- a/src/DataFixtures/LieuFixtures.php +++ b/src/DataFixtures/LieuFixtures.php @@ -8,37 +8,60 @@ use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Persistence\ObjectManager; use Faker\Factory; -class LieuFixtures extends Fixture implements DependentFixtureInterface +class LieuFixtures extends Fixture { public function load(ObjectManager $manager): void { - $faker = Factory::create(); + $nantes = new Lieu(); + $nantes->setNom('Nantes'); + $nantes->setRue('Rue Franklin'); + $nantes->setCodePostal('44162'); + $nantes->setVille('Nantes'); + $nantes->setLatitude(47.22586773967533); + $nantes->setLongitude(-1.6178418031088329); + $this->addReference('lieu_nantes',$nantes); + $manager->persist($nantes); - $villes = [ - $this->getReference('ville_Paris'), - $this->getReference('ville_Lyon'), - $this->getReference('ville_Marseille'), - ]; + $paris = new Lieu(); + $paris->setNom('Paris'); + $paris->setRue('Avenue des Champs-Élysées'); + $paris->setCodePostal('75008'); + $paris->setVille('Paris'); + $paris->setLatitude(48.8706751269931); + $paris->setLongitude(2.3050144547273788); + $this->addReference('lieu_paris',$paris); + $manager->persist($paris); - foreach ($villes as $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); - $manager->persist($lieu); - } - } + $sablesDolonnees = new Lieu(); + $sablesDolonnees->setNom("Les Sables d'Olonne"); + $sablesDolonnees->setRue('Avenue de Bretagne'); + $sablesDolonnees->setCodePostal('85100'); + $sablesDolonnees->setVille("Les Sables d'Olonne"); + $sablesDolonnees->setLatitude(46.502285798756674); + $sablesDolonnees->setLongitude(-1.7780244910467913); + $this->addReference('lieu_sablesDolonnees',$sablesDolonnees); + $manager->persist($sablesDolonnees); + + $marseille = new Lieu(); + $marseille->setNom("Marseille"); + $marseille->setRue('Quai de Rive Neuve'); + $marseille->setCodePostal('13007'); + $marseille->setVille('Marseille'); + $marseille->setLatitude(43.292801737408666); + $marseille->setLongitude(5.3685224670508465); + $this->addReference('lieu_marseille',$marseille); + $manager->persist($marseille); + + $nice = new Lieu(); + $nice->setNom("Nice"); + $nice->setRue('Rue de France'); + $nice->setCodePostal('06000'); + $nice->setVille('Nice'); + $nice->setLatitude(43.696133144116466); + $nice->setLongitude(7.262421611744638); + $this->addReference('lieu_nice',$nice); + $manager->persist($nice); $manager->flush(); } - - public function getDependencies(): array - { - return [ - VilleFixtures::class, - ]; - } } diff --git a/src/DataFixtures/SiteFixtures.php b/src/DataFixtures/SiteFixtures.php new file mode 100644 index 0000000..3d20964 --- /dev/null +++ b/src/DataFixtures/SiteFixtures.php @@ -0,0 +1,40 @@ +setNom('Nantes'); + $this->addReference('site_nantes', $nantes); + $manager->persist($nantes); + + $paris = new Site(); + $paris->setNom('Paris'); + $this->addReference('site_paris', $paris); + $manager->persist($paris); + + $marseille = new Site(); + $marseille->setNom('Marseille'); + $this->addReference('site_marseille', $marseille); + $manager->persist($marseille); + + $nice = new Site(); + $nice->setNom('Nice'); + $this->addReference('site_nice', $nice); + $manager->persist($nice); + + $sabledolonne = new Site(); + $sabledolonne->setNom('Les Sables d\'Olonne'); + $this->addReference('site_sables_des_olonne', $sabledolonne); + $manager->persist($sabledolonne); + + $manager->flush(); + } +} diff --git a/src/DataFixtures/SortieFixtures.php b/src/DataFixtures/SortieFixtures.php index eca4d56..feb0b9c 100644 --- a/src/DataFixtures/SortieFixtures.php +++ b/src/DataFixtures/SortieFixtures.php @@ -4,22 +4,88 @@ namespace App\DataFixtures; use App\Entity\Sortie; use Doctrine\Bundle\FixturesBundle\Fixture; +use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Persistence\ObjectManager; -class SortieFixtures extends Fixture +class SortieFixtures extends Fixture implements DependentFixtureInterface { public function load(ObjectManager $manager): void { - $sortie = new Sortie(); - $sortie->setNom('Sortie 1'); - $sortie->setInfosSortie('Description de la sortie 1'); - $sortie->setDuree(45); - $sortie->setDateHeureDebut(new \DateTimeImmutable('2024-11-30 09:15:00')); - $sortie->setDateLimiteInscription(new \DateTimeImmutable('2024-12-25 12:30:00')); - $sortie->setNbInscriptionsMax(25); + $balade = new Sortie(); + $balade->setNom('La balade des gens heureux'); + $balade->setInfosSortie('Balade sympathique en bord de mer en espérant que vous aimez !'); + $balade->setDuree(45); + $balade->setOrganisateur($this->getReference('organisateur')); + $balade->setLieu($this->getReference('lieu_nice')); + $balade->setEtat($this->getReference('Ouverte')); + $balade->setSite($this->getReference('site_nice')); + $balade->setDateHeureDebut(new \DateTimeImmutable('2024-12-30 09:15:00')); + $balade->setDateLimiteInscription(new \DateTimeImmutable('2024-12-25 12:30:00')); + $balade->setNbInscriptionsMax(25); + $manager->persist($balade); - $manager->persist($sortie); + $club = new Sortie(); + $club->setNom('Night club'); + $club->setInfosSortie('Night club le plus hype de la cote sud'); + $club->setDuree(600); + $club->setOrganisateur($this->getReference('organisateur')); + $club->setLieu($this->getReference('lieu_marseille')); + $club->setEtat($this->getReference('Créée')); + $club->setSite($this->getReference('site_marseille')); + $club->setDateHeureDebut(new \DateTimeImmutable('2025-02-11 22:00:00')); + $club->setDateLimiteInscription(new \DateTimeImmutable('2025-02-10 18:30:00')); + $club->setNbInscriptionsMax(500); + $manager->persist($club); + + $museum = new Sortie(); + $museum->setNom('Musée d\'art'); + $museum->setInfosSortie('Musée d\'art contemporain représentant l\'histoire et la culture de la ville'); + $museum->setDuree(300); + $museum->setOrganisateur($this->getReference('olivier')); + $museum->setLieu($this->getReference('lieu_sablesDolonnees')); + $museum->setEtat($this->getReference('Terminée')); + $museum->setSite($this->getReference('site_sables_des_olonne')); + $museum->setDateHeureDebut(new \DateTimeImmutable('2024-08-22 16:00:00')); + $museum->setDateLimiteInscription(new \DateTimeImmutable('2025-08-20 20:00:00')); + $museum->setNbInscriptionsMax(500); + $manager->persist($museum); + + $coffee = new Sortie(); + $coffee->setNom('La pause Caf'); + $coffee->setInfosSortie('La pause Caf, votre réunion quotidienne pour du divertissement'); + $coffee->setDuree(60); + $coffee->setOrganisateur($this->getReference('marvin')); + $coffee->setLieu($this->getReference('lieu_paris')); + $coffee->setEtat($this->getReference('En cours')); + $coffee->setSite($this->getReference('site_paris')); + $coffee->setDateHeureDebut(new \DateTimeImmutable('2024-11-29 10:15:00')); + $coffee->setDateLimiteInscription(new \DateTimeImmutable('2024-11-28 17:00:00')); + $coffee->setNbInscriptionsMax(5); + $manager->persist($coffee); + + $cascade = new Sortie(); + $cascade->setNom('Spectacle dangeureux'); + $cascade->setInfosSortie('Spectacle de cascade super dangeureuse (à ne pas reproduire)'); + $cascade->setDuree(15); + $cascade->setOrganisateur($this->getReference('johan')); + $cascade->setLieu($this->getReference('lieu_nantes')); + $cascade->setEtat($this->getReference('Annulée')); + $cascade->setMotifAnnul('Accident du cascadeur'); + $cascade->setSite($this->getReference('site_nantes')); + $cascade->setDateHeureDebut(new \DateTimeImmutable('2025-03-14 14:30:00')); + $cascade->setDateLimiteInscription(new \DateTimeImmutable('2025-03-10 18:30:00')); + $cascade->setNbInscriptionsMax(25); + $manager->persist($cascade); $manager->flush(); } + + public function getDependencies(): array + { + return [ + LieuFixtures::class, + UserFixtures::class, + EtatFixtures::class, + ]; + } } diff --git a/src/DataFixtures/UserFixtures.php b/src/DataFixtures/UserFixtures.php index 5fc343b..4f71299 100644 --- a/src/DataFixtures/UserFixtures.php +++ b/src/DataFixtures/UserFixtures.php @@ -4,10 +4,11 @@ namespace App\DataFixtures; use App\Entity\Participant; use Doctrine\Bundle\FixturesBundle\Fixture; +use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Persistence\ObjectManager; use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; -class UserFixtures extends Fixture +class UserFixtures extends Fixture implements DependentFixtureInterface { private UserPasswordHasherInterface $userPasswordHasher; public function __construct(UserPasswordHasherInterface $userPasswordHasher){ @@ -24,8 +25,10 @@ class UserFixtures extends Fixture $olivier->setRoles(['ROLE_USER', 'ROLE_ADMIN']); $olivier->setAdministrateur(true); $olivier->setPending(false); + $olivier->setSite($this->getReference('site_nantes')); $olivier->setActif(false); $olivier->setPassword($this->userPasswordHasher->hashPassword($olivier, 'test-44')); + $this->addReference('olivier', $olivier); $manager->persist($olivier); $johan = new Participant(); @@ -38,7 +41,9 @@ class UserFixtures extends Fixture $johan->setAdministrateur(true); $johan->setPending(false); $johan->setActif(false); + $johan->setSite($this->getReference('site_paris')); $johan->setPassword($this->userPasswordHasher->hashPassword($johan, 'Vn21pd%6a%Hw5j')); + $this->addReference('johan', $johan); $manager->persist($johan); $marvin = new Participant(); @@ -50,10 +55,34 @@ class UserFixtures extends Fixture $marvin->setRoles(['ROLE_USER', 'ROLE_ADMIN']); $marvin->setAdministrateur(true); $marvin->setPending(false); + $marvin->setSite($this->getReference('site_marseille')); $marvin->setActif(false); $marvin->setPassword($this->userPasswordHasher->hashPassword($marvin, 'test-44')); + $this->addReference('marvin', $marvin); $manager->persist($marvin); + $organisateur = new Participant(); + $organisateur->setPrenom('Jean'); + $organisateur->setNom('Biscotte'); + $organisateur->setPseudo('Organisateur'); + $organisateur->setTelephone('0675794302'); + $organisateur->setEmail('organisateur@gmail.com'); + $organisateur->setRoles(['ROLE_USER']); + $organisateur->setAdministrateur(false); + $organisateur->setPending(false); + $organisateur->setActif(false); + $organisateur->setSite($this->getReference('site_paris')); + $organisateur->setPassword($this->userPasswordHasher->hashPassword($organisateur, 'test-44')); + $this->addReference('organisateur', $organisateur); + $manager->persist($organisateur); + $manager->flush(); } + + public function getDependencies(): array + { + return [ + SiteFixtures::class, + ]; + } } diff --git a/src/DataFixtures/VilleFixtures.php b/src/DataFixtures/VilleFixtures.php deleted file mode 100644 index 3338f13..0000000 --- a/src/DataFixtures/VilleFixtures.php +++ /dev/null @@ -1,30 +0,0 @@ - 'Paris', 'codePostal' => '75000'], - ['nom' => 'Lyon', 'codePostal' => '69000'], - ['nom' => 'Marseille', 'codePostal' => '13000'], - ]; - - foreach ($villes as $villeData) { - $ville = new Ville(); - $ville->setNom($villeData['nom']); - $ville->setCodePostal($villeData['codePostal']); // Définit le code postal - $manager->persist($ville); - - $this->addReference('ville_' . $villeData['nom'], $ville); - } - - $manager->flush(); - } -} diff --git a/src/Purger/MyPurger.php b/src/Purger/MyPurger.php new file mode 100644 index 0000000..9b2eedc --- /dev/null +++ b/src/Purger/MyPurger.php @@ -0,0 +1,35 @@ +entityManager, $excluded); + } + + /** + * Purges the MySQL database with temporarily disabled foreign key checks. + * + * {@inheritDoc} + */ + public function purge(): void + { + $connection = $this->entityManager->getConnection(); + + try { + $connection->executeStatement('SET FOREIGN_KEY_CHECKS = 0'); + + parent::purge(); + } finally { + $connection->executeStatement('SET FOREIGN_KEY_CHECKS = 1'); + } + } +} \ No newline at end of file diff --git a/src/Purger/MyPurgerFactory.php b/src/Purger/MyPurgerFactory.php new file mode 100644 index 0000000..00beb25 --- /dev/null +++ b/src/Purger/MyPurgerFactory.php @@ -0,0 +1,28 @@ +setPurgeMode($purgeWithTruncate ? ORMPurger::PURGE_MODE_TRUNCATE : ORMPurger::PURGE_MODE_DELETE); + + return $purger; + } +} \ No newline at end of file diff --git a/templates/main/dashboard.html.twig b/templates/main/dashboard.html.twig index c8a01dd..cacaa32 100644 --- a/templates/main/dashboard.html.twig +++ b/templates/main/dashboard.html.twig @@ -38,11 +38,11 @@
{{ sortie.motifAnnul }}
+