src/Controller/UserController.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Notification;
  4. use App\Entity\User;
  5. use App\Form\PersonEditType;
  6. use App\Security\EmailVerifier;
  7. use App\Service\SendinBlueManager;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  12. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  13. use Symfony\Component\Form\FormFactoryInterface;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpFoundation\Session\Session;
  17. use Symfony\Component\Mime\Address;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Contracts\Translation\TranslatorInterface;
  20. class UserController extends AbstractController
  21. {
  22.     /** @var EmailVerifier  */
  23.     private $emailVerifier;
  24.     public function __construct(EmailVerifier $emailVerifier)
  25.     {
  26.         $this->emailVerifier $emailVerifier;
  27.     }
  28.     /**
  29.      * @Route("/utilisateur/rediriger", name="app_user_redirect")
  30.      */
  31.     public function redirectUser(ManagerRegistry $registry)
  32.     {
  33.         $user $this->getUser();
  34.         if ($this->isGranted('ROLE_ADMIN')) {
  35.             return $this->redirectToRoute('admin');
  36.         }
  37.         if ($this->isGranted('ROLE_CANDIDATE')) {
  38.             return $this->redirectToRoute('app_candidate_index');
  39.         }
  40.         if ($this->isGranted('ROLE_COMPANY')) {
  41.             return $this->redirectToRoute('app_company_profile_index');
  42.         }
  43.         if ($this->isGranted('ROLE_TERRITORY')) {
  44.             return $this->redirectToRoute('app_territory_index');
  45.         }
  46.         if ($this->isGranted('ROLE_USER_REAL_ESTATE')) {
  47.             return $this->redirectToRoute('app_real_estate_profile_index');
  48.         }
  49.         if ($this->isGranted('ROLE_PROJECT_ESTATE') || $this->isGranted('ROLE_PROJECT_OPPORTUNITY')) {
  50.             return $this->redirectToRoute('app_project_leader_index');
  51.         }
  52.         return $this->redirectToRoute('app_candidate_index');
  53.         throw new \Exception();
  54.     }
  55.     /**
  56.      * @Route("/user/edit-profile", name="app_user_edit_profile")
  57.      */
  58.     public function editProfile(
  59.         Request $request,
  60.         ManagerRegistry $registry,
  61.         FormFactoryInterface $formFactory,
  62.         TranslatorInterface $translator
  63.     ): Response
  64.     {
  65.         /** @var User $user */
  66.         $user $this->getUser();
  67.         $em $registry->getManager();
  68.         $person $user->getPerson();
  69.         $form $formFactory->createNamed('form'PersonEditType::class, $person);
  70.         $form->handleRequest($request);
  71.         if ($form->isSubmitted() && $form->isValid()) {
  72.             if (!$person->getPhoto() || (!$person->getPhoto()->getDocumentFile() && !$person->getPhoto()->getFileName())) {
  73.                 $person->setPhoto(null);
  74.             }
  75.             $em->flush();
  76.             $this->addFlash(
  77.                 'success',
  78.                 $translator->trans('flash.edit')
  79.             );
  80.             return $this->redirectToRoute('app_user_redirect');
  81.         }
  82.         $layout 'candidate/layout.html.twig';
  83.         if ($this->isGranted('ROLE_COMPANY')) {
  84.             $layout 'company_profile/layout.html.twig';
  85.         }
  86.         if ($this->isGranted('ROLE_TERRITORY')) {
  87.             $layout 'territory/layout.html.twig';
  88.         }
  89.         return $this->renderForm(
  90.             'user/edit_profile.html.twig',
  91.             [
  92.                 'form' => $form,
  93.                 'person' => $person,
  94.                 'layout' => $layout,
  95.             ]
  96.         );
  97.     }
  98.     /**
  99.      * @Route("/user/request-email-verifier", name="app_user_request_email_verifier")
  100.      */
  101.     public function requestEmailVerifier(
  102.         TranslatorInterface $translator
  103.     ): Response
  104.     {
  105.         $user $this->getUser();
  106.         // generate a signed url and email it to the user
  107.         $this->emailVerifier->sendEmailConfirmation('app_verify_email'$user,
  108.             (new TemplatedEmail())
  109.                 ->from(new Address('notifications@paris-jetequitte.com''Paris Je Te Quitte'))
  110.                 ->to($user->getEmail())
  111.                 ->subject($translator->trans('template_email.request_email_verifier.subject'))
  112.                 ->htmlTemplate('email/security/request_email_verifier.html.twig')
  113.         );
  114.         $this->addFlash(
  115.             'success',
  116.             $translator->trans('flash.user.requestemail')
  117.         );
  118.         return $this->redirectToRoute('app_user_redirect');
  119.     }
  120.     /**
  121.      * @Route("/user/supprimer-compte", name="app_user_delete")
  122.      */
  123.     public function delete(
  124.         Request $request,
  125.         ManagerRegistry $registry,
  126.         SendinBlueManager $sendinBlueManager,
  127.         TranslatorInterface $translator
  128.     ): Response
  129.     {
  130.         /** @var User $user */
  131.         $user $this->getUser();
  132.         $em $registry->getManager();
  133.         $form $this->createFormBuilder($user)
  134.             ->add('validate'SubmitType::class, ['label' => 'Je veux supprimer mon compte'])
  135.             ->getForm();
  136.         $form->handleRequest($request);
  137.         if ($form->isSubmitted() && $form->isValid()) {
  138.             $session = new Session();
  139.             $session->invalidate();
  140.             $sendinBlueManager->deleteContact($user->getEmail());
  141.             $em->remove($user);
  142.             $em->flush();
  143.             $this->addFlash(
  144.                 'success',
  145.                 $translator->trans('flash.user.delete')
  146.             );
  147.             return $this->redirectToRoute('app_logout');
  148.         }
  149.         return $this->renderForm(
  150.             'user/delete.html.twig',
  151.             [
  152.                 'form' => $form,
  153.                 'user' => $user
  154.             ]
  155.         );
  156.     }
  157.     public function notificationsNavbar(ManagerRegistry $registry)
  158.     {
  159.         $user $this->getUser();
  160.         $notifications $registry->getRepository(Notification::class)
  161.             ->getUser($user);
  162.         $total $registry->getRepository(Notification::class)
  163.             ->getTotalUser($user);
  164.         return $this->renderForm(
  165.             'user/notifications_navbar.html.twig',[
  166.             'notifications' => $notifications,
  167.             'total' => $total
  168.         ]);
  169.     }
  170. }