participantRepository = $participantRepository; $this->siteRepository = $siteRepository; } #[Route('/admin', name: 'app_admin')] public function index(TokenStorageInterface $tokenStorage): Response { $token = $tokenStorage->getToken(); $userConnect = $token?->getUser(); return $this->render('admin/index.html.twig', [ 'profile' => $userConnect, 'controller_name' => 'AdminController', ]); } #[Route('/admin/user', name: 'app_adminUser')] public function adminUser(TokenStorageInterface $tokenStorage): Response { $participants = $this->participantRepository->findAll(); $sites = $this->siteRepository->findAll(); return $this->render('admin/user.html.twig', [ 'participants' => $participants, 'sites' => $sites, 'controller_name' => 'AdminController', ]); } #[Route('/admin/user/disable/{id}', name: 'app_adminUserDisable')] public function disableParticipant(string $id, ParticipantRepository $participantRepository, EntityManagerInterface $entityManager): RedirectResponse { $participant = $participantRepository->find($id); if (!$participant) { $this->addFlash('error', 'Le participant demandé n\'existe pas.'); return $this->redirectToRoute('app_adminUser'); } if ($participant->isActif()){ $participant->setActif(false); }else{ $participant->setActif(true); } $entityManager->persist($participant); $entityManager->flush(); $this->addFlash('success', 'Participant désactivé avec succès.'); return $this->redirectToRoute('app_adminUser'); } #[Route('/admin/user/delete/{id}', name: 'app_adminUserDelete')] public function deleteUser(string $id, ParticipantRepository $participantRepository, EntityManagerInterface $entityManager): RedirectResponse { $participant = $participantRepository->find($id); if (!$participant) { $this->addFlash('error', 'L\'utilisateur demandé n\'existe pas.'); return $this->redirectToRoute('app_adminUser'); // Redirigez vers une liste ou une autre page } $entityManager->remove($participant); $entityManager->flush(); $this->addFlash('success', 'Utilisateur supprimé avec succès.'); return $this->redirectToRoute('app_adminUser'); } #[Route('/admin/user/add', name: 'app_adminUserAdd', methods: ['POST'])] public function userAdd(Request $request, EntityManagerInterface $entityManager, MailerInterface $mailer, UrlGeneratorInterface $urlGenerator): Response { try { $nom = $request->request->get('nom'); $prenom = $request->request->get('prenom'); $pseudo = $request->request->get('pseudo'); $telephone = $request->request->get('phone'); $mail = $request->request->get('mail'); if (!$mail || !$pseudo) { $this->addFlash('error', 'Tous les champs sont requis.'); return $this->redirectToRoute('app_adminUser'); } if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) { $this->addFlash('error', 'L\'adresse e-mail n\'est pas valide.'); return $this->redirectToRoute('app_adminUser'); } $participant = new Participant(); $participant->setNom($nom); $participant->setPrenom($prenom); $participant->setPseudo($pseudo); $participant->setTelephone($telephone); $participant->setEmail($mail); $participant->setAdministrateur(false); $participant->setActif(false); $participant->setRoles(['ROLE_USER']); $participant->setPassword(password_hash("aChanger44!", PASSWORD_BCRYPT)); $participant->setPending(true); $entityManager->persist($participant); $token = bin2hex(random_bytes(32)); $passwordResetToken = new PasswordResetToken(); $passwordResetToken->setToken($token) ->setEmail($participant->getEmail()) ->setCreatedAt(new \DateTime()); $entityManager->persist($passwordResetToken); $entityManager->flush(); $resetLink = $urlGenerator->generate( 'app_password_reset', ['token' => $token], UrlGeneratorInterface::ABSOLUTE_URL ); $email = (new Email()) ->from('contact@sortir.com') ->to($participant->getEmail()) ->subject('Sortir.com | Bienvenue sur notre site !') ->html("
Un administrateur du site vous a créé un compte !
Terminer la création de cotre compte : Sortir.com
Toute l'équipe de Sortir vous souhaite la bienvenue !
"); $mailer->send($email); $this->addFlash('success', "Utilisateur ajouté ! Un email lui a été envoyé !"); return $this->redirectToRoute('app_adminUser'); } catch(UniqueConstraintViolationException $e) { $this->addFlash('error', "Le pseudo et/ou l'email est déjà utilisé"); return $this->redirectToRoute('app_adminUser'); } catch (TransportExceptionInterface $e) { $this->addFlash('error', "Erreur : " . $e->getMessage()); return $this->redirectToRoute('app_adminUser'); } } #[Route('/admin/user/import', name: 'participant_import', methods: ['POST'])] public function import(Request $request, EntityManagerInterface $em, MailerInterface $mailer, UrlGeneratorInterface $urlGenerator): RedirectResponse { try{ $file = $request->files->get('csv_file'); if ($file) { $csvData = array_map('str_getcsv', file($file->getPathname())); foreach ($csvData as $index => $row) { if ($index === 0) continue; $participant = new Participant(); $participant->setNom($row[0]); $participant->setPrenom($row[1]); $participant->setPseudo($row[2]); $participant->setTelephone($row[3]); $participant->setEmail($row[4]); $participant->setAdministrateur(false); $participant->setActif(false); $participant->setRoles(explode('|', $row[7])); $participant->setPassword(password_hash("aChanger44!", PASSWORD_BCRYPT)); $participant->setPending(true); $em->persist($participant); $token = bin2hex(random_bytes(32)); $passwordResetToken = new PasswordResetToken(); $passwordResetToken->setToken($token) ->setEmail($participant->getEmail()) ->setCreatedAt(new \DateTime()); $em->persist($passwordResetToken); $resetLink = $urlGenerator->generate( 'app_password_reset', ['token' => $token], UrlGeneratorInterface::ABSOLUTE_URL ); $email = (new Email()) ->from('contact@sortir.com') ->to($participant->getEmail()) ->subject('Sortir.com | Bienvenue sur notre site !') ->html("Un administrateur du site vous a créé un compte !
Terminer la création de cotre compte : Sortir.com
Toute l'équipe de Sortir vous souhaite la bienvenue !
"); $mailer->send($email); } $em->flush(); } return $this->redirectToRoute('app_adminUser'); }catch(\Exception $e){ $this->addFlash('error', "Votre fichier contient des erreurs : " . $e->getMessage()); return $this->redirectToRoute('app_adminUser'); } } #[Route('/admin/user/export', name: 'participant_export')] public function export(ParticipantRepository $participantRepository, Request $request): Response { // $participants = $participantRepository->findAll(); $userList = $request->request->all('userList'); if (empty($userList)) { $this->addFlash('warning', 'Veuillez sélectionner au moins un utilisateur.'); return $this->redirectToRoute('app_adminUser'); } $participants = $participantRepository->findBy([ 'idParticipant' => $userList, ]); $csv = "Nom,Prénom,Pseudo,Téléphone,Email,Administrateur,Actif,Rôles\n"; foreach ($participants as $participant) { $csv .= sprintf( "%s,%s,%s,%s,%s,%s,%s,%s\n", $participant->getNom(), $participant->getPrenom(), $participant->getPseudo(), $participant->getTelephone(), $participant->getEmail(), $participant->isAdministrateur() ? '1' : '0', $participant->isActif() ? '1' : '0', implode('|', $participant->getRoles()), ); } $response = new Response($csv); $response->headers->set('Content-Type', 'text/csv'); $response->headers->set('Content-Disposition', 'attachment;filename="participants.csv"'); return $response; } #[Route('/admin/site', name: 'app_adminSite')] public function adminSite(SiteRepository $siteRepository, TokenStorageInterface $tokenStorage): Response { $token = $tokenStorage->getToken(); $userConnect = $token?->getUser(); return $this->render('admin/site.html.twig', [ 'profile' => $userConnect, 'sites' => $siteRepository->findAll(), 'controller_name' => 'AdminController', ]); } #[Route('/admin/site/add', name: 'app_adminSiteAdd', methods: ['POST'])] public function adminSiteAdd(Request $request, EntityManagerInterface $entityManager): Response { try { $nom = $request->request->get('nom'); if (!$nom) { return new Response('Tous les champs sont requis.', Response::HTTP_BAD_REQUEST); } $site = new Site(); $site->setNom($nom); $entityManager->persist($site); $entityManager->flush(); $this->addFlash('success', "Site ajouté !"); return $this->redirectToRoute('app_adminSite'); } catch(\Exception $e) { $this->addFlash('error', "Erreur : " . $e->getMessage()); return $this->redirectToRoute('app_adminSite'); } } #[Route('/admin/site/delete/{id}', name: 'app_adminSiteDelete')] public function adminSiteDelete(string $id, SiteRepository $siteRepository, EntityManagerInterface $entityManager): RedirectResponse { $site = $siteRepository->find($id); if (!$site) { $this->addFlash('error', 'Le site demandée n\'existe pas.'); return $this->redirectToRoute('app_adminSite'); // Rediriger vers la liste des villes } $entityManager->remove($site); $entityManager->flush(); // Ajouter un message de succès et rediriger vers la liste des villes $this->addFlash('success', 'Site supprimée avec succès.'); return $this->redirectToRoute('app_adminSite'); } #[Route('/admin/accept', name: 'app_acceptUser', methods: ['POST'])] public function acceptUser(Request $request, EntityManagerInterface $entityManager, ParticipantRepository $participantRepository, SiteRepository $siteRepository): Response { try { $user = $participantRepository->findOneBy(["idParticipant" => $request->request->get('id')]); $site = $siteRepository->findOneBy(['idSite' => $request->request->get('site')]); if(!$user || !$site) { $this->addFlash('error', 'L\'utilisateur ou le site n\'existe pas.'); return $this->redirectToRoute('app_adminUser'); } $user->setSite($site); $user->setPending(false); $entityManager->persist($user); $entityManager->flush(); $this->addFlash('success', "L'utilisateur à bien été accepté et peut maintenant se connecter"); return $this->redirectToRoute('app_adminUser'); } catch(\Exception $e) { $this->addFlash('error', "Erreur : " . $e->getMessage()); return $this->redirectToRoute('home'); } } #[Route('/admin/deny', name: 'app_denyUser')] public function denyUser(Request $request, EntityManagerInterface $entityManager, ParticipantRepository $participantRepository): Response { try { $user = $participantRepository->findOneBy(["idParticipant" => $request->get('id')]); if(!$user) { $this->addFlash('error', 'Le utilisateur n\'existe pas.'); return $this->redirectToRoute('app_adminUser'); } $entityManager->remove($user); $entityManager->flush(); $this->addFlash('success', "L'utilisateur à bien été refusé et ne pourra pas se connecter"); return $this->redirectToRoute('app_adminUser'); } catch(\Exception $e) { $this->addFlash('error', "Erreur : " . $e->getMessage()); return $this->redirectToRoute('home'); } } #[Route('/admin/sortie', name: 'app_adminSortie')] public function sortie(TokenStorageInterface $tokenStorage, SortieRepository $sortieRepository): Response { $token = $tokenStorage->getToken(); $userConnect = $token?->getUser(); return $this->render('admin/sortie.html.twig', [ 'profile' => $userConnect, 'controller_name' => 'AdminController', 'sorties' => $sortieRepository->findAll(), ]); } #[Route('/admin/sortie/annuler/{id}', name: 'app_adminSortieAnnuler')] public function sortieAnuler(String $id, EntityManagerInterface $entityManager, SortieRepository $sortieRepository, EtatRepository $etatRepository): Response { $etat = $etatRepository->findOneBy(["libelle" => "Annulée"]); $sortie = $sortieRepository->find($id); $sortie->setEtat($etat); $entityManager->persist($sortie); $entityManager->flush(); $this->addFlash('success', "La sortie a bien été annuler"); return $this->redirectToRoute('app_adminSortie'); } }