src/Controller/UserController.php line 134

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Form\UserType;
  5. use App\Form\UserFilesType;
  6. use App\Repository\UserRepository;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
  13. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  14. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  15. use Symfony\Component\HttpFoundation\File\UploadedFile;
  16. use Symfony\Component\String\Slugger\SluggerInterface;
  17. use Symfony\Component\Mailer\MailerInterface;
  18. use App\Factory\Email;
  19. use MailerSend\MailerSend;
  20. use MailerSend\Helpers\Builder\Recipient;
  21. use MailerSend\Helpers\Builder\EmailParams;
  22. #[Route('/user')]
  23. class UserController extends AbstractController
  24. {
  25.     private MailerInterface $mailer;
  26.     private Email $email;
  27.     private UserPasswordHasherInterface $userPasswordHasher;
  28.     public function __construct(MailerInterface $mailerEmail $emailUserPasswordHasherInterface $userPasswordHasher)
  29.     {
  30.         $this->mailer $mailer;
  31.         $this->email $email;
  32.         $this->userPasswordHasher $userPasswordHasher;
  33.     }
  34.     #[Route('/'name'app_user_index'methods: ['GET'])]
  35.     public function index(UserRepository $userRepository): Response
  36.     {
  37.         return $this->render('user/index.html.twig', [
  38.             'users' => $userRepository->findAdminUser(),
  39.         ]);
  40.     }
  41.     #[Route('/new'name'app_user_new'methods: ['GET''POST'])]
  42.     public function new(
  43.         Request $request,
  44.         UserRepository $userRepository,
  45.         
  46.         UserAuthenticatorInterface $userAuthenticator,
  47.         SluggerInterface $slugger
  48.     ): Response {
  49.         $user = new User();
  50.         $form $this->createForm(UserType::class, $user);
  51.         $form->handleRequest($request);
  52.         if ($form->isSubmitted() && $form->isValid()) {
  53.             $role = [$form->get('roles')->getData()];
  54.             $username $form->get('email')->getData();
  55.             $user->setRoles($role[0]);
  56.         
  57.             $password $this->updatePassword($user);
  58.             $userRepository->save($usertrue);
  59.             $this->createCompte($username$password);
  60.             return $this->redirectToRoute(
  61.                 'app_user_index',
  62.                 [],
  63.                 Response::HTTP_SEE_OTHER
  64.             );
  65.         }
  66.         $new 1;
  67.         return $this->renderForm('user/new.html.twig', [
  68.             'user' => $user,
  69.             'form' => $form,
  70.             'new' => $new,
  71.         ]);
  72.     }
  73.     public function updatePassword($user)
  74.     {
  75.         $comb =
  76.             'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  77.         $shfl str_shuffle($comb);
  78.         $password substr($shfl08);
  79.         $user->setPassword(
  80.             $this->userPasswordHasher->hashPassword($user$password)
  81.         );
  82.         return $password;
  83.     }
  84.     public function createAccount($username$password){
  85.         $TEMPLATE_CONTACT 'user/compte.html.twig';
  86.         $parameters = [
  87.             'username' => $username,
  88.             'password' => $password,
  89.         ];
  90.         $email $this->email->create(
  91.             'no-reply@iaa-tunisie.tn',
  92.             [$username],
  93.             'Création de compte',
  94.             $TEMPLATE_CONTACT,
  95.             $parameters
  96.         );
  97.         $this->mailer->send($email);
  98.     }
  99.     #[Route('/initialise/{id}'name'app_user_initilise_account'methods: ['GET''POST'])]
  100.     public function initialise(Request $requestUser$userUserRepository $userRepository): Response
  101.     {
  102.         $user->setEtatActivation(1);
  103.         $password $this->updatePassword($user);
  104.         $userRepository->save($usertrue);
  105.         $this->createAccount($user->getUsername(), $password);
  106.         return $this->redirectToRoute(
  107.             'app_candidat_index',
  108.             [],
  109.             Response::HTTP_SEE_OTHER
  110.         );
  111.     }
  112.     #[Route('/{id}'name'app_user_show'methods: ['GET'])]
  113.     public function show(User $user): Response
  114.     {
  115.         return $this->render('user/show.html.twig', [
  116.             'user' => $user,
  117.         ]);
  118.     }
  119.     #[Route('/{id}/edit'name'app_user_edit'methods: ['GET''POST'])]
  120.     public function edit(
  121.         Request $request,
  122.         User $user,
  123.         UserRepository $userRepository,
  124.         SluggerInterface $slugger,
  125.         UserPasswordHasherInterface $userPasswordHasher
  126.     ): Response {
  127.         $form $this->createForm(UserType::class, $user);
  128.         $form->remove('plainPassword');
  129.         $form->remove('username');
  130.         $form->remove('email');
  131.         $form->remove('photoDeProfilFile');
  132.         $form->handleRequest($request);
  133.         if ($form->isSubmitted() && $form->isValid()) {
  134.             $role = [$form->get('roles')->getData()];
  135.             $user->setRoles($role[0]);
  136.             $userRepository->save($usertrue);
  137.             return $this->redirectToRoute(
  138.                 'app_user_index',
  139.                 [],
  140.                 Response::HTTP_SEE_OTHER
  141.             );
  142.         }
  143.         $new 0;
  144.         return $this->renderForm('user/edit.html.twig', [
  145.             'user' => $user,
  146.             'form' => $form,
  147.             'new' => $new,
  148.         ]);
  149.     }
  150.     #[Route('/editprofil'name'app_user_editprofil'methods: ['GET''POST'])]
  151.     public function editprofil(
  152.         Request $request,
  153.         UserRepository $userRepository,
  154.     ): JsonResponse {
  155.         $user $this->getUser();
  156.         $user->setCivilite($request->request->get('civilite'));
  157.         $user->setNom($request->request->get('nom'));
  158.         $user->setPrenom($request->request->get('prenom'));
  159.         $user->setAdresse($request->request->get('adresse'));
  160.         $user->setCodePostal($request->request->get('codePostal'));
  161.         $user->setville($request->request->get('ville'));
  162.         $user->setTel($request->request->get('tel'));
  163.         $user->setEmail($request->request->get('email'));
  164.         $user->setDateNaissance($request->request->get('dateNaissance'));
  165.         $userRepository->save($usertrue);
  166.         return new JsonResponse(['response' => "ok"]);
  167.     }
  168.     #[Route('/{id}/modifier-photo-de-profil'name'app_modifier_photo_de_profil'methods: ['GET''POST'])]
  169.     public function modifierPhotoDeProfil(
  170.         Request $request,
  171.         User $user,
  172.         UserRepository $userRepository,
  173.         SluggerInterface $slugger,
  174.         UserPasswordHasherInterface $userPasswordHasher
  175.     ): JsonResponse {
  176.         $form $this->createForm(UserFilesType::class, new user());
  177.         $form->handleRequest($request);
  178.         $newFilename "";
  179.         if (1) {
  180.             $photoDeProfilFile $request->files->get('photoDeProfilFile');
  181.             if ($photoDeProfilFile) {
  182.                 $originalFilename pathinfo($photoDeProfilFile->getClientOriginalName(), PATHINFO_FILENAME);
  183.                 // this is needed to safely include the file name as part of the URL
  184.                 $safeFilename $slugger->slug($originalFilename);
  185.                 $newFilename $safeFilename '-' uniqid() . '.' $photoDeProfilFile->guessExtension();
  186.                 // Move the file to the directory where brochures are stored
  187.                 try {
  188.                     $destinationUrl $this->getParameter('kernel.project_dir') . '/public/uploads/user/photo';
  189.                     $photoDeProfilFile->move(
  190.                         $destinationUrl,
  191.                         $newFilename
  192.                     );
  193.                 } catch (FileException $e) {
  194.                     // ... handle exception if something happens during file upload
  195.                 }
  196.                 // updates the 'photoDeProfilFilename' property to store the PDF file name
  197.                 // instead of its contents
  198.                 $user->setPhotoDeProfil($newFilename);
  199.             }
  200.             $userRepository->save($usertrue);
  201.         }
  202.         return new JsonResponse(['response' => $newFilename]);
  203.     }
  204.     #[Route('/{id}/reset-password'name'app_user_reset-password'methods: ['GET''POST'])]
  205.     public function resetPassword(
  206.         Request $request,
  207.         User $user,
  208.         UserRepository $userRepository,
  209.         SluggerInterface $slugger,
  210.         UserPasswordHasherInterface $userPasswordHasher
  211.     ): Response {
  212.         $TEMPLATE_CONTACT 'user/reset-password.html.twig';
  213.         $comb =
  214.             'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  215.         $shfl str_shuffle($comb);
  216.         $password substr($shfl08);
  217.         $parameters = [
  218.             'username' => $user->getEmail(),
  219.             'password' => $password,
  220.         ];
  221.         $email $this->email->create(
  222.             'contact@iaa-tunisie.tn',
  223.             [$user->getEmail(),'helmi.mattoussi@gmail.com'],
  224.             'Initialisation de mot de passe',
  225.             $TEMPLATE_CONTACT,
  226.             $parameters
  227.         );
  228.         $this->mailer->send($email);
  229.         $user->setPassword($userPasswordHasher->hashPassword($user$password));
  230.         $userRepository->save($usertrue);
  231.         return $this->redirectToRoute(
  232.             'app_user_index',
  233.             [],
  234.             Response::HTTP_SEE_OTHER
  235.         );
  236.     }
  237.     #[Route('/{id}/aa'name'app_user_inscription'methods: ['GET''POST'])]
  238.     public function attestation(
  239.         Request $request,
  240.         User $user,
  241.         UserRepository $userRepository,
  242.         SluggerInterface $slugger,
  243.     ): Response {
  244.         $TEMPLATE_CONTACT 'user/attestation-inscription.html.twig';
  245.         $parameters = [];
  246.         $email $this->email->create(
  247.             'contact@iaa-tunisie.tn',
  248.             [$user->getEmail()],
  249.             'Changement du mot de passe',
  250.             $TEMPLATE_CONTACT,
  251.             $parameters
  252.         );
  253.         $this->mailer->send($email);
  254.         $userRepository->save($usertrue);
  255.         return $this->redirectToRoute(
  256.             'app_user_index',
  257.             [],
  258.             Response::HTTP_SEE_OTHER
  259.         );
  260.     }
  261.     #[Route('/{id}'name'app_user_delete'methods: ['POST'])]
  262.     public function delete(
  263.         Request $request,
  264.         User $user,
  265.         UserRepository $userRepository
  266.     ): Response {
  267.         if (
  268.             $this->isCsrfTokenValid(
  269.                 'delete' $user->getId(),
  270.                 $request->request->get('_token')
  271.             )
  272.         ) {
  273.             $userRepository->remove($usertrue);
  274.         }
  275.         return $this->redirectToRoute(
  276.             'app_user_index',
  277.             [],
  278.             Response::HTTP_SEE_OTHER
  279.         );
  280.     }
  281.     #[Route('/{id}/modifier-mot-de-passe'name'app_modifier_mot_de_passe'methods: ['GET''POST'])]
  282.     public function modidierMotDePasse(
  283.         User $user,
  284.         UserRepository $userRepository,
  285.         UserPasswordHasherInterface $userPasswordHasher
  286.     ): JsonResponse {
  287.         $TEMPLATE_CONTACT 'user/reset-password.html.twig';
  288.         $comb =
  289.             'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  290.         $shfl str_shuffle($comb);
  291.         $password substr($shfl08);
  292.         $parameters = [
  293.             'username' => $user->getEmail(),
  294.             'password' => $password,
  295.         ];
  296.         $email $this->email->create(
  297.             'contact@iaa-tunisie.tn',
  298.             [$user->getEmail(),'helmi.mattoussi@gmail.com'],
  299.             htmlentities('Changement du mot de passe'),
  300.             $TEMPLATE_CONTACT,
  301.             $parameters
  302.         );
  303.         $this->mailer->send($email);
  304.     
  305.         $user->setPassword($userPasswordHasher->hashPassword($user$password));
  306.         $userRepository->save($usertrue);
  307.         return new JsonResponse(['response' => "ok"]);
  308.     }
  309. }