diff --git a/.env b/.env index 9fb8358..3c7998c 100644 --- a/.env +++ b/.env @@ -15,7 +15,7 @@ # https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration ###> symfony/framework-bundle ### -APP_ENV=prod +APP_ENV=dev APP_SECRET=ba1ab1eaa1c6662c10564a7a82901198 ###< symfony/framework-bundle ### diff --git a/migrations/Version20241125095027.php b/migrations/Version20241125154648.php similarity index 70% rename from migrations/Version20241125095027.php rename to migrations/Version20241125154648.php index 1f100be..6f33eb4 100644 --- a/migrations/Version20241125095027.php +++ b/migrations/Version20241125154648.php @@ -10,7 +10,7 @@ use Doctrine\Migrations\AbstractMigration; /** * Auto-generated Migration: Please modify to your needs! */ -final class Version20241125095027 extends AbstractMigration +final class Version20241125154648 extends AbstractMigration { public function getDescription(): string { @@ -20,12 +20,12 @@ final class Version20241125095027 extends AbstractMigration public function up(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs - $this->addSql('ALTER TABLE lieu ADD ville VARCHAR(255) NOT NULL, ADD code_postal INT NOT NULL'); + $this->addSql('ALTER TABLE sortie ADD motif_annul LONGTEXT DEFAULT NULL'); } public function down(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs - $this->addSql('ALTER TABLE lieu DROP ville, DROP code_postal'); + $this->addSql('ALTER TABLE sortie DROP motif_annul'); } } diff --git a/public/upload/image/profile/Stephen-Hawking-674494865bf40.png b/public/upload/image/profile/Stephen-Hawking-674494865bf40.png new file mode 100644 index 0000000..f0f290d Binary files /dev/null and b/public/upload/image/profile/Stephen-Hawking-674494865bf40.png differ diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index 8c3264b..ede938e 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -38,7 +38,7 @@ class AdminController extends AbstractController { $token = $tokenStorage->getToken(); $userConnect = $token?->getUser(); - return $this->render('admin/index.html.twig', [ + return $this->render('admin/list.html.twig', [ 'profile' => $userConnect, 'controller_name' => 'AdminController', ]); diff --git a/src/Controller/LieuController.php b/src/Controller/LieuController.php index f347a78..7e1e129 100644 --- a/src/Controller/LieuController.php +++ b/src/Controller/LieuController.php @@ -17,7 +17,7 @@ class LieuController extends AbstractController #[Route('/lieu', name: 'app_lieu')] public function index(): Response { - return $this->render('lieu/index.html.twig', [ + return $this->render('lieu/list.html.twig', [ 'controller_name' => 'LieuController', ]); } diff --git a/src/Controller/MainController.php b/src/Controller/MainController.php index 878ff6c..b07e54d 100644 --- a/src/Controller/MainController.php +++ b/src/Controller/MainController.php @@ -2,6 +2,7 @@ namespace App\Controller; +use App\Repository\ParticipantRepository; use App\Repository\SiteRepository; use App\Repository\SortieRepository; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -21,30 +22,32 @@ class MainController extends AbstractController $token = $tokenStorage->getToken(); $userConnect = $token?->getUser(); - // Récupérer les paramètres de filtre - $search = $request->query->get('search', ''); - $siteId = $request->query->get('site', ''); - $startDate = $request->query->get('start_date', ''); - $endDate = $request->query->get('end_date', ''); - $organisateur = $request->query->get('organisateur', false); - $inscrit = $request->query->get('inscrit', false); - $nonInscrit = $request->query->get('non_inscrit', false); - $passees = $request->query->get('passees', false); + $sorties = $sortieRepository->findForDashboard(); + $sortiesParticipation = $sortieRepository->findUserParticipation($userConnect); + $sortiesOrganisation = $sortieRepository->findUserOrganisation($userConnect); - $sorties = $sortieRepository->findWithFilters($search, $siteId, $startDate, $endDate, $organisateur, $inscrit, $nonInscrit, $passees, $userConnect); - - return $this->render('main/index.html.twig', [ + return $this->render('main/dashboard.html.twig', [ 'profile' => $userConnect, 'sorties' => $sorties, - 'sites' => $sortieRepository->findAllSites(), + 'sortiesParticipation' => $sortiesParticipation, + 'sortiesOrganisation' => $sortiesOrganisation, ]); } - - #[Route('/inscription', name: 'inscription')] public function inscription(TokenStorageInterface $tokenStorage): Response { return $this->render('main/inscription.html.twig'); } + + #[Route('/participants', name: 'participants')] + public function participants(TokenStorageInterface $tokenStorage, ParticipantRepository $participantRepository): Response + { + $token = $tokenStorage->getToken(); + $userConnect = $token?->getUser(); + return $this->render('main/participants.html.twig', [ + 'profile' => $userConnect, + 'participants' => $participantRepository->findAll(), + ]); + } } diff --git a/src/Controller/PasswordResetController.php b/src/Controller/PasswordResetController.php index 7151314..bb8f78b 100644 --- a/src/Controller/PasswordResetController.php +++ b/src/Controller/PasswordResetController.php @@ -116,6 +116,6 @@ class PasswordResetController extends AbstractController return $this->redirectToRoute('app_login'); } - return $this->render('password_reset/index.html.twig', ['token' => $token]); + return $this->render('password_reset/list.html.twig', ['token' => $token]); } } diff --git a/src/Controller/SortieController.php b/src/Controller/SortieController.php index 368d097..cac9415 100644 --- a/src/Controller/SortieController.php +++ b/src/Controller/SortieController.php @@ -8,6 +8,7 @@ use App\Form\SortieType; use App\Repository\EtatRepository; use App\Repository\LieuRepository; use App\Repository\ParticipantRepository; +use App\Repository\SortieRepository; use DateTime; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -19,6 +20,34 @@ use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInt #[Route('/sortie', name: 'sortie_')] class SortieController extends AbstractController { + #[Route('/liste', name: 'list', methods: ['GET'])] + public function index( + TokenStorageInterface $tokenStorage, + SortieRepository $sortieRepository, + Request $request + ): Response { + $token = $tokenStorage->getToken(); + $userConnect = $token?->getUser(); + + // Récupérer les paramètres de filtre + $search = $request->query->get('search', ''); + $siteId = $request->query->get('site', ''); + $startDate = $request->query->get('start_date', ''); + $endDate = $request->query->get('end_date', ''); + $organisateur = $request->query->get('organisateur', false); + $inscrit = $request->query->get('inscrit', false); + $nonInscrit = $request->query->get('non_inscrit', false); + $passees = $request->query->get('passees', false); + + $sorties = $sortieRepository->findWithFilters($search, $siteId, $startDate, $endDate, $organisateur, $inscrit, $nonInscrit, $passees, $userConnect); + + return $this->render('sortie/list.html.twig', [ + 'profile' => $userConnect, + 'sorties' => $sorties, + 'sites' => $sortieRepository->findAllSites(), + ]); + } + #[Route('/creates', name: 'create', methods: ['GET', 'POST'])] public function create( Request $request, @@ -90,6 +119,10 @@ class SortieController extends AbstractController $this->addFlash('error', 'Cette sortie n\'existe pas.'); return $this->redirectToRoute('home'); } + if ($sortie->getDateHeureDebut() < (new DateTime())->modify('-1 month')) { + $this->addFlash('error', "Cette sortie à plus de 30 jours."); + return $this->redirectToRoute('home'); + } return $this->render('sortie/view.html.twig', [ 'sortie' => $sortie, diff --git a/src/Repository/SortieRepository.php b/src/Repository/SortieRepository.php index da9b13f..f1135c2 100644 --- a/src/Repository/SortieRepository.php +++ b/src/Repository/SortieRepository.php @@ -17,59 +17,45 @@ class SortieRepository extends ServiceEntityRepository parent::__construct($registry, Sortie::class); } - public function findWithFilters($search, $siteId, $startDate, $endDate, $organisateur, $inscrit, $nonInscrit, $passees, $userConnect) + public function findWithFilters($search, $siteId, $startDate, $endDate, $organisateur, $inscrit, $nonInscrit, $passees, $user) { - $qb = $this->createQueryBuilder('s') - ->leftJoin('s.etat', 'e') - ->addSelect('e') - ->leftJoin('s.participants', 'p') - ->addSelect('p') - ->where('e.libelle != :annulee') - ->setParameter('annulee', 'Annulée'); + $qb = $this->createQueryBuilder('s'); - // Filtre par nom - if (!empty($search)) { + if ($search) { $qb->andWhere('s.nom LIKE :search') ->setParameter('search', '%' . $search . '%'); } - // Filtre par site - if (!empty($siteId)) { + if ($siteId) { $qb->andWhere('s.site = :siteId') ->setParameter('siteId', $siteId); } - // Filtre par date de début - if (!empty($startDate)) { + if ($startDate) { $qb->andWhere('s.dateHeureDebut >= :startDate') - ->setParameter('startDate', $startDate); + ->setParameter('startDate', new \DateTime($startDate)); } - // Filtre par date de fin - if (!empty($endDate)) { + if ($endDate) { $qb->andWhere('s.dateHeureDebut <= :endDate') - ->setParameter('endDate', $endDate); + ->setParameter('endDate', new \DateTime($endDate)); } - // Filtre par organisateur - if ($organisateur && $userConnect) { - $qb->andWhere('s.organisateur = :organisateur') - ->setParameter('organisateur', $userConnect); + if ($organisateur) { + $qb->andWhere('s.organisateur = :user') + ->setParameter('user', $user); } - // Filtre par inscription - if ($inscrit && $userConnect) { - $qb->andWhere(':userConnect MEMBER OF s.participants') - ->setParameter('userConnect', $userConnect); + if ($inscrit) { + $qb->andWhere(':user MEMBER OF s.participants') + ->setParameter('user', $user); } - // Filtre par non-inscription - if ($nonInscrit && $userConnect) { - $qb->andWhere(':userConnect NOT MEMBER OF s.participants') - ->setParameter('userConnect', $userConnect); + if ($nonInscrit) { + $qb->andWhere(':user NOT MEMBER OF s.participants') + ->setParameter('user', $user); } - // Filtre par sorties passées if ($passees) { $qb->andWhere('s.dateHeureDebut < :now') ->setParameter('now', new \DateTime()); @@ -81,7 +67,6 @@ class SortieRepository extends ServiceEntityRepository return $qb->getQuery()->getResult(); } - public function findAllSites() { return $this->getEntityManager() diff --git a/templates/admin/user.html.twig b/templates/admin/user.html.twig index 306a7a5..072ebaf 100644 --- a/templates/admin/user.html.twig +++ b/templates/admin/user.html.twig @@ -11,24 +11,7 @@