diff --git a/src/Controller/CalendrierController.php b/src/Controller/CalendrierController.php index 8a5c056..c7c2f04 100644 --- a/src/Controller/CalendrierController.php +++ b/src/Controller/CalendrierController.php @@ -2,42 +2,89 @@ namespace App\Controller; +use App\Repository\InterventionRepository; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; #[Route('/calendrier')] class CalendrierController extends AbstractController { - #[Route(name: 'app_calendrier_index', methods: ['GET'])] - public function index(): Response + #[Route('/chauffagiste', name: 'app_calendrier_indexChauffagiste')] + public function indexChauffagiste(InterventionRepository $interventionRepository): Response { - return $this->render('calendrier/index.html.twig', [ - 'controller_name' => 'CalendrierController', + // Vérification : seul le chauffagiste connecté peut voir son propre calendrier + $this->denyAccessUnlessGranted('ROLE_CHAUFFAGISTE'); + + // Récupérer les interventions du chauffagiste connecté + $interventions = $interventionRepository->findByUser($this->getUser()); + + // Préparer les événements pour FullCalendar + $events = []; + foreach ($interventions as $intervention) { + $events[] = [ + 'title' => $intervention->getTitle(), + 'start' => $intervention->getStartDate()->format('Y-m-d H:i:s'), + 'end' => $intervention->getEndDate()->format('Y-m-d H:i:s'), + 'description' => $intervention->getDescription(), + ]; + } + + // Passer les événements à la vue + return $this->render('calendrier/indexChauffagiste.html.twig', [ + 'events' => json_encode($events), ]); } #[Route('/secretaire', name: 'app_calendrier_indexSecretaire')] - public function indexSecretaire(): Response + public function indexSecretaire(InterventionRepository $interventionRepository): Response { - // Check that only admins and secretaries can view this page + // Vérification : seul le secrétaire peut accéder à ce calendrier $this->denyAccessUnlessGranted('ROLE_SECRETAIRE'); + // Récupérer toutes les interventions de tous les chauffagistes + $interventions = $interventionRepository->findAll(); + + // Préparer les événements pour FullCalendar + $events = []; + foreach ($interventions as $intervention) { + $events[] = [ + 'title' => $intervention->getTitle(), + 'start' => $intervention->getStartDate()->format('Y-m-d H:i:s'), + 'end' => $intervention->getEndDate()->format('Y-m-d H:i:s'), + 'description' => $intervention->getDescription(), + ]; + } + + // Passer les événements à la vue return $this->render('calendrier/indexSecretaire.html.twig', [ - 'controller_name' => 'CalendrierController', + 'events' => json_encode($events), ]); } - #[Route('/chauffagiste', name: 'app_calendrier_indexChauffagiste')] - public function indexChauffagiste(): Response + #[Route('/admin', name: 'app_calendrier_index')] + public function indexAdmin(InterventionRepository $interventionRepository): Response { - // Ensure chauffagiste only sees their own calendar - if ($this->isGranted('ROLE_CHAUFFAGISTE')) { - // filter logic for individual chauffagiste calendar + // Vérification : seul un admin peut accéder à ce calendrier + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + // Récupérer toutes les interventions de tous les chauffagistes + $interventions = $interventionRepository->findAll(); + + // Préparer les événements pour FullCalendar + $events = []; + foreach ($interventions as $intervention) { + $events[] = [ + 'title' => $intervention->getTitle(), + 'start' => $intervention->getStartDate()->format('Y-m-d H:i:s'), + 'end' => $intervention->getEndDate()->format('Y-m-d H:i:s'), + 'description' => $intervention->getDescription(), + ]; } - return $this->render('calendrier/indexChauffagiste.html.twig', [ - 'controller_name' => 'CalendrierController', + // Passer les événements à la vue + return $this->render('calendrier/index.html.twig', [ + 'events' => json_encode($events), ]); } } diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index 3cf65ff..bdbf981 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -9,15 +9,13 @@ use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; +use Symfony\Component\Routing\Annotation\Route; -/** - * @Route("/user") - */ -class UserController extends AbstractController +final class UserController extends AbstractController { - /** - * @Route("/", name="app_user_index", methods={"GET"}) - */ + // Route pour afficher tous les utilisateurs + #[Route('/user', name: 'app_user_index', methods: ['GET'])] public function index(UserRepository $userRepository): Response { return $this->render('user/index.html.twig', [ @@ -25,16 +23,20 @@ class UserController extends AbstractController ]); } - /** - * @Route("/new", name="app_user_new", methods={"GET", "POST"}) - */ - public function new(Request $request, EntityManagerInterface $entityManager): Response + // Route pour créer un nouvel utilisateur + #[Route('/user/new', name: 'app_user_new', methods: ['GET', 'POST'])] + public function new(Request $request, EntityManagerInterface $entityManager, UserPasswordHasherInterface $passwordHasher): Response { $user = new Utilisateur(); $form = $this->createForm(UserType::class, $user); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { + // Hash du mot de passe + $plainPassword = $form->get('plainPassword')->getData(); + $hashedPassword = $passwordHasher->hashPassword($user, $plainPassword); + $user->setPassword($hashedPassword); + $entityManager->persist($user); $entityManager->flush(); @@ -47,9 +49,8 @@ class UserController extends AbstractController ]); } - /** - * @Route("/{id}", name="app_user_show", methods={"GET"}) - */ + // Route pour afficher un utilisateur spécifique + #[Route('/user/{id}', name: 'app_user_show', methods: ['GET'])] public function show(Utilisateur $user): Response { return $this->render('user/show.html.twig', [ @@ -57,9 +58,8 @@ class UserController extends AbstractController ]); } - /** - * @Route("/{id}/edit", name="app_user_edit", methods={"GET", "POST"}) - */ + // Route pour modifier un utilisateur spécifique + #[Route('/user/{id}/edit', name: 'app_user_edit', methods: ['GET', 'POST'])] public function edit(Request $request, Utilisateur $user, EntityManagerInterface $entityManager): Response { // Si l'utilisateur est un secrétaire et qu'il essaie de modifier un autre secrétaire @@ -90,9 +90,8 @@ class UserController extends AbstractController ]); } - /** - * @Route("/{id}", name="app_user_delete", methods={"POST"}) - */ + // Route pour supprimer un utilisateur spécifique + #[Route('/user/{id}', name: 'app_user_delete', methods: ['POST'])] public function delete(Request $request, Utilisateur $user, EntityManagerInterface $entityManager): Response { // Si l'utilisateur est un secrétaire et qu'il essaie de supprimer un autre secrétaire diff --git a/templates/base.html.twig b/templates/base.html.twig index 195031e..d841d1b 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -74,6 +74,10 @@ } {% block stylesheets %}{% endblock %} + + + +
diff --git a/templates/calendrier/index.html.twig b/templates/calendrier/index.html.twig index 8452a71..e240022 100644 --- a/templates/calendrier/index.html.twig +++ b/templates/calendrier/index.html.twig @@ -1,57 +1,23 @@ - - - - - -/home/allarda@stsio.lan/Test/HegreEtConfort/src/Controller/CalendrierController.php
/home/allarda@stsio.lan/Test/HegreEtConfort/templates/calendrier/index.html.twig