getToken(); $userConnect = $token?->getUser(); return $this->render('admin/index.html.twig', [ 'profile' => $userConnect, 'controller_name' => 'AdminController', ]); } //Gestion des utilisateurs #[Route('/admin/user', name: 'app_adminUser')] public function adminUser(ParticipantRepository $participantRepository, TokenStorageInterface $tokenStorage): Response { $token = $tokenStorage->getToken(); $userConnect = $token?->getUser(); return $this->render('admin/user.html.twig', [ 'profile' => $userConnect, 'participants' => $participantRepository->findAll(), 'controller_name' => 'AdminController', ]); } #[Route('/admin/user/disable/{id}', name: 'app_adminUserDisable')] public function disableParticipant(string $id, ParticipantRepository $participantRepository, EntityManagerInterface $entityManager): RedirectResponse { // Récupérer le participant à partir de l'id $participant = $participantRepository->find($id); // Vérifier si le participant existe if (!$participant) { $this->addFlash('error', 'Le participant demandé n\'existe pas.'); return $this->redirectToRoute('app_adminUser'); // Redirigez vers une liste ou une autre page } // Désactiver le participant (par exemple, définir une propriété "isActive" à false) if ($participant->isActif()){ $participant->setActif(false); }else{ $participant->setActif(true); } // Sauvegarder la modification en base de données $entityManager->persist($participant); $entityManager->flush(); // Ajouter un message de succès et rediriger $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 { // Récupérer l'utilisateur ou le participant à partir de l'id $participant = $participantRepository->find($id); // Vérifier si l'utilisateur existe if (!$participant) { $this->addFlash('error', 'L\'utilisateur demandé n\'existe pas.'); return $this->redirectToRoute('app_adminUser'); // Redirigez vers une liste ou une autre page } // Supprimer l'utilisateur $entityManager->remove($participant); $entityManager->flush(); // Ajouter un message de succès et rediriger $this->addFlash('success', 'Utilisateur supprimé avec succès.'); return $this->redirectToRoute('app_adminUser'); // Redirigez vers la liste des utilisateurs } #[Route('/admin/user/add', name: 'app_adminUserAdd', methods: ['POST'])] public function userAdd(Request $request, EntityManagerInterface $entityManager, MailerInterface $mailer, UrlGeneratorInterface $urlGenerator): Response { try { // Récupérer les données envoyées par le formulaire $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'); // Vérifier que les champs ne sont pas vides if (!$mail || !$pseudo) { $this->addFlash('error', 'Tous les champs sont requis.'); return $this->redirectToRoute('app_adminUser'); } // Vérifier que le mail est valide avec une regex 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)); $entityManager->persist($participant); // Générer un token unique $token = bin2hex(random_bytes(32)); // Enregistrer le token dans la base de données $passwordResetToken = new PasswordResetToken(); $passwordResetToken->setToken($token) ->setEmail($participant->getEmail()) ->setCreatedAt(new \DateTime()); $entityManager->persist($passwordResetToken); $entityManager->flush(); // Générer un lien de réinitialisation $resetLink = $urlGenerator->generate( 'app_password_reset', ['token' => $token], UrlGeneratorInterface::ABSOLUTE_URL ); // Envoyer un email de notification $email = (new Email()) ->from('contact@sortir.com') ->to($participant->getEmail()) ->subject('Sortir.com | Bienvenue sur notre site !') ->html("

Bonjour $pseudo,

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 { $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)); $em->persist($participant); // Générer un token unique $token = bin2hex(random_bytes(32)); // Enregistrer le token dans la base de données $passwordResetToken = new PasswordResetToken(); $passwordResetToken->setToken($token) ->setEmail($participant->getEmail()) ->setCreatedAt(new \DateTime()); $em->persist($passwordResetToken); // Générer un lien de réinitialisation $resetLink = $urlGenerator->generate( 'app_password_reset', ['token' => $token], UrlGeneratorInterface::ABSOLUTE_URL ); // Envoyer un email de notification $email = (new Email()) ->from('contact@sortir.com') ->to($participant->getEmail()) ->subject('Sortir.com | Bienvenue sur notre site !') ->html("

Bonjour $row[2],

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'); } #[Route('/admin/user/export', name: 'participant_export')] public function export(ParticipantRepository $participantRepository): Response { $participants = $participantRepository->findAll(); $csv = "Nom,Prénom,Pseudo,Téléphone,Email,Administrateur,Actif,Rôles,Password\n"; foreach ($participants as $participant) { $csv .= sprintf( "%s,%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()), $participant->getPassword() ); } $response = new Response($csv); $response->headers->set('Content-Type', 'text/csv'); $response->headers->set('Content-Disposition', 'attachment;filename="participants.csv"'); return $response; } //Gestion des villes #[Route('/admin/city', name: 'app_adminCity')] public function adminCity(VilleRepository $villeRepository, TokenStorageInterface $tokenStorage): Response { $token = $tokenStorage->getToken(); $userConnect = $token?->getUser(); return $this->render('admin/city.html.twig', [ 'profile' => $userConnect, 'citys' => $villeRepository->findAll(), 'controller_name' => 'AdminController', ]); } #[Route('/admin/city/add', name: 'app_adminCityAdd', methods: ['POST'])] public function adminCityAdd(Request $request, EntityManagerInterface $entityManager): Response { try { // Récupérer les données envoyées par le formulaire $postalCode = $request->request->get('postalCode'); $cityName = $request->request->get('citySelect'); // Vérifier que les champs ne sont pas vides if (!$postalCode || !$cityName) { return new Response('Tous les champs sont requis.', Response::HTTP_BAD_REQUEST); } // Créer une nouvelle entité City et définir ses propriétés $city = new Ville(); $city->setNom($cityName); $city->setCodePostal($postalCode); // Enregistrer la ville dans la base de données $entityManager->persist($city); $entityManager->flush(); $this->addFlash('success', "Ville ajouté !"); return $this->redirectToRoute('app_adminCity'); } catch(\Exception $e) { $this->addFlash('error', "Erreur : " . $e->getMessage()); return $this->redirectToRoute('app_adminCity'); } } #[Route('/admin/city/delete/{id}', name: 'app_adminCityDelete')] public function adminCityDelete(string $id, VilleRepository $villeRepository, EntityManagerInterface $entityManager): RedirectResponse { // Récupérer la ville à supprimer $city = $villeRepository->find($id); // Vérifier si la ville existe if (!$city) { // Si la ville n'existe pas, rediriger avec un message d'erreur $this->addFlash('error', 'La ville demandée n\'existe pas.'); return $this->redirectToRoute('app_adminCity'); // Rediriger vers la liste des villes } // Supprimer la ville $entityManager->remove($city); $entityManager->flush(); // Ajouter un message de succès et rediriger vers la liste des villes $this->addFlash('success', 'Ville supprimée avec succès.'); return $this->redirectToRoute('app_adminCity'); } //Gestion des sites #[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 { // Récupérer les données envoyées par le formulaire $nom = $request->request->get('nom'); // Vérifier que les champs ne sont pas vides if (!$nom) { return new Response('Tous les champs sont requis.', Response::HTTP_BAD_REQUEST); } // Créer une nouvelle entité City et définir ses propriétés $site = new Site(); $site->setNom($nom); // Enregistrer la ville dans la base de données $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 { // Récupérer la ville à supprimer $site = $siteRepository->find($id); // Vérifier si la ville existe if (!$site) { // Si la ville n'existe pas, rediriger avec un message d'erreur $this->addFlash('error', 'Le site demandée n\'existe pas.'); return $this->redirectToRoute('app_adminSite'); // Rediriger vers la liste des villes } // Supprimer la ville $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'); } }