src/Controller/UserController.php line 343

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\RequestPassword;
  4. use App\Entity\User;
  5. use App\Form\ForgetPasswordType;
  6. use App\Form\NewRegistrationType;
  7. use App\Form\PasswordUserType;
  8. use App\Form\RegistrationType;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Doctrine\Persistence\ManagerRegistry;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  16. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  17. class UserController extends AbstractController
  18. {
  19.     /**
  20.      * @var EntityManagerInterface
  21.      */
  22.     protected $manager;
  23.     /**
  24.      * AdminController constructor.
  25.      *
  26.      * @param EntityManagerInterface $manager
  27.      */
  28.     public function __construct(EntityManagerInterface $manager)
  29.     {
  30.         $this->manager $manager;
  31.     }
  32.     /**
  33.      * @Route("/user/new", name="user_create")
  34.      * @Route("/user/{id}/edit", name="user_edit")
  35.      */
  36.     public function form(User $user nullRequest $requestUserPasswordEncoderInterface $encoder)
  37.     {
  38.         if(!$user){
  39.             $user = new User();
  40.         }
  41.         $form $this->createForm(RegistrationType::class, $user, ['userConnected'=>$this->getUser()]);
  42.         $form->handleRequest($request);
  43.         if($form->isSubmitted() && $form->isValid()){
  44.             if ($user->getId() === null ){
  45.                 $hash $encoder->encodePassword($user$user->getPassword());
  46.                 $user->setPassword($hash)
  47.                     ->addRole($request->request->get('registration')["roles"]);
  48.                 $request->getSession()->getFlashBag()->add('info''Ajout utilisateur réalisé avec succès.');
  49.             }else{
  50.                 $request->getSession()->getFlashBag()->add('info''Modifications utilisateur réalisées avec succès.');
  51.             }
  52.             $this->manager->persist($user);
  53.             $this->manager->flush();
  54.             return $this->redirectToRoute("user_edit", ['id'=>$user->getId()]);
  55.         }
  56.         return $this->render('user/registration.html.twig', [
  57.             'form' => $form->createView(),
  58.             'typeForm' => $user->getId()
  59.         ]);
  60.     }
  61.     /**
  62.      * @Route("/user/new-society", name="society_create")
  63.      */
  64.     public function newSocietyAction(Request $requestUserPasswordEncoderInterface $encoder)
  65.     {
  66.         $user = new User();
  67.         $form $this->createForm(RegistrationType::class, $user, ['userConnected'=>$this->getUser(), 'typeForm' => 'new_society']);
  68.         $form->handleRequest($request);
  69.         if($form->isSubmitted() && $form->isValid()){
  70.             $hash $encoder->encodePassword($user$user->getPassword());
  71.             $user->setPassword($hash)
  72.                 ->addRole('ROLE_USER');
  73.             $request->getSession()->getFlashBag()->add('info''Ajout société réalisé avec succès.');
  74.             $this->manager->persist($user);
  75.             $this->manager->flush();
  76.             return $this->redirectToRoute("user_edit", ['id'=>$user->getId()]);
  77.         }
  78.         return $this->render('user/registration.html.twig', [
  79.             'form' => $form->createView(),
  80.             'typeForm' => $user->getId(),
  81.             'formSociety' => true
  82.         ]);
  83.     }
  84.     /**
  85.      * @Route("/user/{id}/new_password", name="user_new_password")
  86.      */
  87.     public function formPassword(User $user nullRequest $requestUserPasswordEncoderInterface $encoder)
  88.     {
  89.         if(!$user){
  90.             $user = new User();
  91.         }
  92.         $form $this->createForm(PasswordUserType::class, $user);
  93.         $form->handleRequest($request);
  94.         if($form->isSubmitted() &&$form->isValid()){
  95.             $hash $encoder->encodePassword($user$user->getPassword());
  96.             $user->setPassword($hash);
  97.             $this->manager->persist($user);
  98.             $this->manager->flush();
  99.             $request->getSession()->getFlashBag()->add('info''Modification mot de passe réalisée avec succès.');
  100.             return $this->redirectToRoute('user_new_password', ['id'=>$user->getId()]);
  101.         }
  102.         return $this->render('user/change-password.html.twig', [
  103.             'form' => $form->createView()
  104.         ]);
  105.     }
  106.     /**
  107.      * @Route("/reset-password", name="user_reset_password")
  108.      */
  109.     public function resetPassword(Request $requestUserPasswordEncoderInterface $encoder)
  110.     {
  111.         $repository $this->getDoctrine()->getRepository(User::class);
  112.         if ($request->query->get('token') !==null){
  113.              $user $repository->findOneByConfirmationToken($request->query->get('token'));
  114.         }
  115.         if ($request->request->get('token')!==null){
  116.             $user $repository->findOneByConfirmationToken($request->request->get('token'));
  117.         }
  118.         if (!$user){
  119.           $request->getSession()->getFlashBag()->add('info', ['texte'=>'Le lien que vous utilisé n\'est pas valide''type'=>'danger']);
  120.           return $this->redirectToRoute('security_login');
  121.         }
  122.         $form $this->createForm(PasswordUserType::class, $user);
  123.         $form->handleRequest($request);
  124.         if($form->isSubmitted() &&$form->isValid()){
  125.             $hash $encoder->encodePassword($user$user->getPassword());
  126.             $user->setPassword($hash);
  127.             $this->manager->persist($user);
  128.             $this->manager->flush();
  129.             $request->getSession()->getFlashBag()->add('info', ['texte'=>'Modification mot de passe réalisée avec succès. Vous pouvez désormais vous connecter''type'=>'success']);
  130.             return $this->redirectToRoute('security_login');
  131.         }
  132.         return $this->render('user/reset-password.html.twig', [
  133.             'form' => $form->createView()
  134.         ]);
  135.     }
  136.     /**
  137.      * @Route("/login", name="security_login")
  138.      */
  139.     public function login(Request $requestAuthenticationUtils $authenticationUtils){
  140.         // Formualaire de premiere connection
  141.         $user = new User();
  142.         $form $this->createForm(NewRegistrationType::class, $user);
  143.         // get the login error if there is one
  144.         $error $authenticationUtils->getLastAuthenticationError();
  145.         // last username entered by the user
  146.         $lastUsername $authenticationUtils->getLastUsername();
  147.         return $this->render('user/login.html.twig', array(
  148.             'last_username' => $lastUsername,
  149.             'error'         => $error,
  150.             'form' => $form->createView()
  151.         ));
  152.     }
  153.     /**
  154.      * @Route("/forget-password", name="security_forget_password")
  155.      */
  156.     public function forgetPassword(Request $request,  \Swift_Mailer $mailer){
  157.         $rp = new RequestPassword();
  158.         $form $this->createForm(ForgetPasswordType::class,$rp );
  159.         $form->handleRequest($request);
  160.         if($form->isSubmitted() &&$form->isValid()){
  161.             $repository $this->getDoctrine()->getRepository(User::class);
  162.             $user $repository->findOneByEmail($rp->getIdentifier());
  163.             if (!$user){
  164.                 $request->getSession()->getFlashBag()->add('info', ["texte"=>"Mail non trouvée""type"=>"danger"]);
  165.                 return $this->redirectToRoute("security_forget_password");
  166.             }
  167.             $user->setConfirmationToken(hash("sha512"uniqid()));
  168.             $user->setIsAlreadyRequested(true);
  169.             $user->setDateRequestPassword(new \DateTime());
  170.             $this->manager->persist($user);
  171.             $this->manager->flush();
  172.             $message = (new \Swift_Message('Mot de passe oublié'))
  173.                 ->setFrom('postmaster@helpers-pro.com')
  174.                 //->setTo(['joachim@cupani.fr', 'benoit@helpers-pro.com'])
  175.                 ->setTo($user->getEmail())
  176.                 ->setBody(
  177.                     $this->renderView(
  178.                     // templates/emails/registration.html.twig
  179.                         'user/forget-password-email.html.twig',
  180.                         array('name' => $user->getFullName(),'token' => $user->getConfirmationToken())
  181.                     ),
  182.                     'text/html'
  183.                 );
  184.             $mailer->send($message);
  185.            // return new Response('<html><body>OK</body></html>');
  186.             $request->getSession()->getFlashBag()->add('info', ["texte"=>"Mail envoyé""type"=>"success"]);
  187.             return $this->redirectToRoute("security_forget_password");
  188.         }
  189.         return $this->render('user/forget-password.html.twig', [
  190.             'form' => $form->createView()
  191.         ]);
  192.     }
  193.     /**
  194.      * @Route("/new-registration", name="security_new_registration")
  195.      */
  196.     public function NewRegistration(Request $request, \Swift_Mailer $mailerUserPasswordEncoderInterface $encoder){
  197.         $user = new User();
  198.         $form $this->createForm(NewRegistrationType::class,$user );
  199.         $form->handleRequest($request);
  200.         if($form->isSubmitted() && $form->isValid()){
  201.             // generation du mot de passe
  202.             $password_plain $this->generateRandomPassword();
  203.             $hash $encoder->encodePassword($user$password_plain);
  204.             $user->setPassword($hash);
  205.             // role
  206.             $user->addRole('ROLE_USER');
  207.             $this->manager->persist($user);
  208.             $this->manager->flush();
  209.             $message = (new \Swift_Message('Confirmation de création de votre compte'))
  210.                 ->setFrom('no-reply@helpers-pro.com')
  211.                 //->setTo(['joachim@cupani.fr', 'benoit@helpers-pro.com'])
  212.                 ->setTo([$user->getEmail()])
  213.                 ->setBody(
  214.                     $this->renderView(
  215.                     // templates/emails/registration.html.twig
  216.                         'user/new-registration-email.html.twig',
  217.                         array('name' => $user->getFullName(),'password' => $password_plain)
  218.                     ),
  219.                     'text/html'
  220.                 );
  221.             $mailer->send($message);
  222.             $request->getSession()->getFlashBag()->add('info', ["texte"=>"Votre inscription a bien été prise en compte. Votre mot de passe vous as été transmis par mail.""type"=>"success"]);
  223.         }else{
  224.             $request->getSession()->getFlashBag()->add('info', ["texte"=>"Une erreur est survenue lors de l'enregistrement""type"=>"danger"]);
  225.         }
  226.         return $this->redirectToRoute("security_login");
  227.     }
  228.     /**
  229.      * @Route("/", name="dashboard")
  230.      */
  231.     public function dashboard(){
  232.         if(in_array('ROLE_SUPER_ADMIN'$this->getUser()->getRoles())){
  233.             return $this->redirectToRoute("user_admin_liste", ['role'=>'members']);
  234.         }elseif(in_array('ROLE_ADMIN'$this->getUser()->getRoles())) {
  235.             return $this->redirectToRoute("user_admin_liste", ['role'=>'members']);
  236.         }elseif(in_array('ROLE_USER'$this->getUser()->getRoles())) {
  237.             return $this->redirectToRoute("members", ['user'=>$this->getUser()->getToken()]);
  238.         }else{
  239.             return $this->render('user/index.html.twig');
  240.         }
  241.     }
  242.     /**
  243.      * @Route("/logout", name="security_logout")
  244.      */
  245.     public function logout(){}
  246.     /**
  247.      * @Route("/user/{role}/liste", name="user_admin_liste", requirements={
  248.      *     "role"="admin|members"
  249.      * })
  250.      */
  251.     public function listeAdmin($role)
  252.     {
  253.         // get all access
  254.         $repository $this->getDoctrine()->getRepository(User::class);
  255.         if($role == "admin"){
  256.             $users $repository->findByRole('ROLE_ADMIN');
  257.         }else{
  258.             if(in_array('ROLE_ADMIN'$this->getUser()->getRoles())){
  259.                 $users $repository->findByRole('ROLE_USER'$this->getUser()->getCategoryUser());
  260.             }else{
  261.                 $users $repository->findByRole('ROLE_USER');
  262.             }
  263.         }
  264.         return $this->render(
  265.             'user/liste.html.twig',
  266.             array('users' => $users)
  267.         );
  268.     }
  269.     /**
  270.      * @Route("/user/{role}/delete/{user}", name="user_delete", requirements={
  271.      *     "role"="admin|members"
  272.      * })
  273.      */
  274.     public function delete(User $user null,  $role)
  275.     {
  276.         if(!$user){
  277.             throw $this->createNotFoundException('User does not exist');
  278.         }
  279.         $this->manager->remove($user);
  280.         $this->manager->flush();
  281.         return $this->redirectToRoute("user_admin_liste", ['role'=>$role]);
  282.     }
  283.     private function generateRandomPassword() {
  284.             return substrstr_shuffle'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ), 012 );
  285.     }
  286. }