fixtures done

This commit is contained in:
Olivier PARPAILLON
2024-11-27 10:30:26 +01:00
parent 266a338b24
commit 6d238f8d85
11 changed files with 271 additions and 67 deletions

View File

@@ -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.

View File

@@ -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);
}

View File

@@ -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,
];
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace App\DataFixtures;
use App\Entity\Site;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
class SiteFixtures extends Fixture
{
public function load(ObjectManager $manager): void
{
$nantes = new Site();
$nantes->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();
}
}

View File

@@ -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,
];
}
}

View File

@@ -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,
];
}
}

View File

@@ -1,30 +0,0 @@
<?php
namespace App\DataFixtures;
use App\Entity\Ville;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
class VilleFixtures extends Fixture
{
public function load(ObjectManager $manager): void
{
$villes = [
['nom' => '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();
}
}

35
src/Purger/MyPurger.php Normal file
View File

@@ -0,0 +1,35 @@
<?php
namespace App\Purger;
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Doctrine\ORM\EntityManagerInterface;
class MyPurger extends ORMPurger
{
/**
* {@inheritDoc}
*/
public function __construct(private readonly EntityManagerInterface $entityManager, array $excluded = [])
{
parent::__construct($this->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');
}
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Purger;
use Doctrine\Bundle\FixturesBundle\Purger\PurgerFactory;
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Doctrine\Common\DataFixtures\Purger\PurgerInterface;
use Doctrine\ORM\EntityManagerInterface;
class MyPurgerFactory implements PurgerFactory
{
/**
* Adapted from {@see \Doctrine\Bundle\FixturesBundle\Purger\ORMPurgerFactory} to return a MySQL-specific {@see PurgerInterface}.
*
* {@inheritDoc}
*/
public function createForEntityManager(
?string $emName,
EntityManagerInterface $em,
array $excluded = [],
bool $purgeWithTruncate = false
): PurgerInterface {
$purger = new MyPurger($em, $excluded);
$purger->setPurgeMode($purgeWithTruncate ? ORMPurger::PURGE_MODE_TRUNCATE : ORMPurger::PURGE_MODE_DELETE);
return $purger;
}
}

View File

@@ -38,11 +38,11 @@
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">{{ sortie.duree }}</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">{{ sortie.dateLimiteInscription|date('d/m/Y H:i') }}</td>
<td class="flex flex-row px-6 py-4 whitespace-nowrap text-base text-gray-900">
{% if not sortie.participants.contains(app.user) and sortie.etat.libelle == 'Ouverte' %}
{% if not sortie.participants.contains(app.user) and sortie.etat.libelle == 'Ouverte' and date(sortie.dateLimiteInscription) > date() %}
<form action="{{ path('sortie_inscription', { id: sortie.idSortie }) }}" method="post">
<button type="submit">🔔</button>
</form>
{% elseif sortie.participants.contains(app.user) and sortie.etat.libelle == 'Ouverte' %}
{% elseif sortie.participants.contains(app.user) and sortie.etat.libelle == 'Ouverte' and date(sortie.dateLimiteInscription) > date() %}
<form method="post" action="{{ path('sortie_unsubscribe', { id: sortie.idSortie }) }}">
<button type="submit">🔕</button>
</form>

View File

@@ -107,6 +107,13 @@
</a>
</div>
{% endif %}
{% if sortie.motifAnnul is not empty %}
<div class="mt-6 flex flex-col space-x-4">
<h4 class="text-base font-bold uppercase text-red-700 mb-2">🚫 Raison de l'annulation :</h4>
<p class="text-base text-gray-800">{{ sortie.motifAnnul }}</p>
</div>
{% endif %}
</div>
<div class="lg:col-span-5 bg-white rounded-lg shadow p-6">