src/Controller/LoginFormController.php line 418

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use MangoPay\MangoPayApi;
  5. use App\Entity\ImageProfil;
  6. use App\Entity\UserAccount;
  7. use App\Form\ImageprofilType;
  8. use App\Repository\UserRepository;
  9. use Symfony\Bundle\MakerBundle\Str;
  10. use Symfony\Component\Asset\Package;
  11. use App\Service\Payment\StripeService;
  12. use App\Service\Payment\MangopayService;
  13. use App\Repository\AccountFormRepository;
  14. use App\Repository\UserAccountRepository;
  15. use App\Repository\OrdersRepository;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Doctrine\Common\Collections\ArrayCollection;
  20. use Symfony\Component\HttpFoundation\RedirectResponse;
  21. use Symfony\Component\Form\Extension\Core\Type\DateType;
  22. use Symfony\Component\Form\Extension\Core\Type\TextType;
  23. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  24. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  25. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  26. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  27. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  28. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  29. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  30. use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;
  31. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  32. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  33. class LoginFormController extends AbstractController
  34. {
  35.     use TargetPathTrait;
  36.     private $passwordEncoder;
  37.      public function __construct(UserPasswordEncoderInterface $passwordEncoder)
  38.      {
  39.          $this->passwordEncoder $passwordEncoder;
  40.      }
  41.     public function load($pass$User)
  42.     {
  43.         
  44.         $User->setPassword($this->passwordEncoder->encodePassword(
  45.             $User,
  46.              $pass
  47.          ))->getPassword();
  48.     }
  49.     
  50. /**
  51.  *@Route("/register", name="user.register")
  52.  */
  53. public function register(Request $requestUserRepository $UserRepository, \Swift_Mailer $mailerStripeService $stripeService)
  54. {
  55.     if (!$this->getUser() && $this->getUser() === null)
  56.     {
  57.         $userRegistered false;
  58.         $LoginForm = new User();
  59.         $UserAccount = new UserAccount();
  60.        // $request->request->get()
  61.         $LoginForm->setUserAccount($UserAccount);
  62.         $form $this->createFormBuilder($LoginForm)
  63.             ->add('lastname'TextType::class, ['label'=>'Votre Nom'])
  64.             ->add('firstname'TextType::class, ['label'=> 'Votre prénom'])
  65.             ->add('phone'TextType::class, ['label'=> 'Numéro de téléphone'])
  66.             ->add('email'TextType::class, ['label'=> 'Votre adresse mail''attr'=> ['name'=>'_username']])
  67.             ->add('password'PasswordType::class, ['label'=> 'Mot de passe','attr' => ['password' => '_password']])
  68.             ->add('inscription'SubmitType::class, ['label' => 'S\' inscrire'])
  69.             ->getForm();
  70.             //$pass =  $form['password']->getData();
  71.            // dump($form['password']);
  72.              $form->handleRequest($request);
  73.     }   
  74.         else
  75.     {
  76.             $user $this->getUser();
  77.            // if ($user->getUserAccount() &&  $user->getUserAccount() !== null)
  78.             //{
  79.                 $userRegistered true;
  80.                 $LoginForm null;
  81.                 $user $user->setUserAccount($user->getUserAccount());
  82.                 $form $this->createFormBuilder($user, ['validation_groups' => [false]])
  83.                     ->add('lastname'TextType::class, ['label'=>'Votre Nom'])
  84.                     ->add('firstname'TextType::class, ['label'=> 'Votre prénom'])
  85.                     ->add('email'TextType::class, ['label'=> 'Votre adresse mail''attr'=> ['name'=>'_username']])
  86.                     ->add('phone'TextType::class, ['label'=> 'Numéro de téléphone'])
  87.                     ->add('submit'SubmitType::class, ['label' => 'Valider'])
  88.                     ->getForm();
  89.              $form->handleRequest($request);
  90.           //  }
  91.         }
  92.         if ($form->isSubmitted() && $form->isValid()  )
  93.        {
  94. /*            $this->addFlash(
  95.                'registered',
  96.                'Your changes were saved!'
  97.            );*/
  98.            if($LoginForm !== null && isset($LoginForm))
  99.            {
  100.                $this->load($LoginForm->getPassword(), $LoginForm);
  101.                $user $form->getData();
  102.                //$mangopayUserNatural= $mangopayService->createMangoUserNatural($user);
  103.                // $user->setUserMangopayIdNatural($mangopayUserNatural->Id);
  104.                 $email $user->getEmail();
  105.                 $customer $stripeService->createStripeCustomer($email$user->getFirstname());
  106.                 $user->setCustomerStripeId($customer->id);
  107.                 $EntityManager $this->getDoctrine()->getManager();
  108.                 $EntityManager->persist($user);
  109.                 $EntityManager->persist($UserAccount);
  110.                 $EntityManager->flush();
  111.                 $this->addFlash('success''Félicitations votre compte a été créé, un mail de bienvenue vous a été envoyé. Pensez à vous authentifier avec vos nouveaux identifiants.');
  112.                 $logger = new \Swift_Plugins_Loggers_ArrayLogger;
  113.                 $mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));
  114.                 $message = (new \Swift_Message())  
  115.                     ->setSubject('Coasttocorner : confirmation de votre inscription'
  116.                     ->setFrom(['contact@coasttocorner.com' => 'CoastToCorner'])
  117.                     ->setTo("{$email}")
  118.                     ->setBody$this->renderView'welcome.html.twig',
  119.                         ['user' => $user]
  120.                         ),
  121.                         'text/html' 
  122.                     );
  123.                 $numSent $mailer->send($message);
  124.                 
  125.                 return $this->redirectToRoute('security.login', ['username_given' => $user->getEmail() ]);
  126.             } 
  127.                 else 
  128.             {
  129.                 $user $form->getData();
  130.                 $EntityManager $this->getDoctrine()->getManager();
  131.                 $EntityManager->persist($user);
  132.                 $EntityManager->flush();
  133.                 return $this->redirectToRoute('profil.user');
  134.             }
  135.         }
  136.   
  137.         if($this->getUser() !== null)
  138.         {
  139.             return $this->render('account.user.html.twig', [
  140.                 'form' => $form->createView(),
  141.             ]);
  142.         } 
  143.             else
  144.         {
  145.             return $this->render('login.html.twig', [
  146.                 'formLogin' => $form->createView(),
  147.                 ]);
  148.         }
  149. }
  150. /**
  151.  * @Route("/reset-password/{id}/{changePassword}", name="reset.password")
  152.  */
  153. public function resetPassword(Request $requestUserRepository $UserRepository$idSessionInterface $session$changePassword=false )
  154. {
  155.     $user = new User();
  156.     $userCurrent $this->getUser();
  157.     $resetPasswordToken $request->query->get('tokenForgotPassword');
  158.     $tokenSession $session->get('tokenForgotPassword');
  159.     $changePasswordSession $session->get('changePassword');
  160.     if($changePassword === "changePassword" )
  161.     {
  162.         $session->set('changePassword''passwordChanged');
  163.     }
  164.     if( $userCurrent !== null && $userCurrent->getId() == $id  && $changePasswordSession !== "changePassword")
  165.     {
  166.         return $this->redirectToRoute('home');
  167.     } 
  168.     
  169.     /*if($resetPasswordToken === $tokenSession)
  170.     {
  171.         return $this->redirectToRoute('home');
  172.     }*/
  173.     $user $UserRepository->find($id);
  174.     $LoginForm $this->createFormBuilder($user, ['attr' => ['class'=>'text-center']])
  175.         ->add('password'RepeatedType::class, [
  176.             'label' => false,
  177.             'type' => PasswordType::class,
  178.             'invalid_message' => 'Les champs du mot de passe doivent correspondre.',
  179.             'options' => ['attr' => ['password' => '_password' 'class' => 'text-center' ]],
  180.             'required' => true,
  181.             'first_options' => ['label' => 'Nouveau mot de passe''attr' => ['class' => 'mx-auto']],
  182.             'second_options' => ['label' => 'Confirmer votre mot de passe' 'attr' => ['class' => 'mx-auto']],
  183.             ])
  184.         ->add('submit'SubmitType::class, ['label' => 'Valider'])
  185.         ->getForm();
  186.     
  187.     $LoginForm->handleRequest($request);
  188.     if($LoginForm->isSubmitted() && $LoginForm->isValid() && $tokenSession === $resetPasswordToken)
  189.     {
  190.         $this->addFlash('success''Votre mot de passe a été modifié, veuillez vous connecter avec le nouveau mot de passe');    
  191.         $this->load($LoginForm->getData()->getPassword(), $user);
  192.         $EntityManager $this->getDoctrine()->getManager();
  193.         $EntityManager->persist($user);
  194.         $EntityManager->flush();           
  195.         return $this->redirectToRoute('security.login');
  196.     }
  197.     
  198.     return $this->render('login.reset.html.twig', [
  199.         'formResetLogin' => $LoginForm->createView()
  200.     ]);
  201. }
  202. /**
  203.  * @Route("/password-forgot", name="password.forgot")
  204.  */
  205. public function PasswordForgot(Request $requestUserRepository $userRepositorySessionInterface $session, \Swift_Mailer $mailer )
  206. {
  207.     $form $this->createFormBuilder()
  208.             ->add('email'EmailType::class, ['label' => 'Veuillez entrer votre adresse mail'])
  209.             ->add('submit'SubmitType::class, ['label' => 'envoyer'])
  210.             ->getForm();
  211.     $form->handleRequest($request);
  212.     $idFounded false;
  213.     
  214.     if( $form->isSubmitted() && $form->isValid() )
  215.     {
  216.         $data $form->getData();
  217.         $email $data['email'];
  218.         $user $userRepository->findOneBy(['email' => $email]);
  219.         if($user !== null && $email !== null )
  220.         {
  221.             try{
  222.                 $numberRand random_int(0999999999);
  223.                 $email $user->getEmail();
  224.                 $id $user->getId();
  225.                 $token crypt($email'$6$rounds=5000$burnbabyloneandratrace{$numberRand}' );
  226.                 $session->set('tokenForgotPassword'$token);
  227.                 $session->set('tokenForgotId'$id);
  228.                     $logger = new \Swift_Plugins_Loggers_ArrayLogger;
  229.                     $mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));
  230.                     $message = (new \Swift_Message())  
  231.                         ->setSubject('Munngano : mot de passe oublié'
  232.                         ->setFrom(['contact@munngano.com' => 'Munngano'])
  233.                         //->setTo("{$email}")
  234.                         ->setTo("{$email}")
  235.                         ->setBody$this->renderView'password.forgot.html.twig',
  236.                             ['tokenForgotPassword' => $token'user' => $user]
  237.                         ),
  238.                             'text/html' 
  239.                     );
  240.                     $numSent $mailer->send($message);
  241.                     $this->addFlash('success''Nous vous avons envoyer un lien de renouvellement de mot de passe par mail');
  242.                     $idFounded true;
  243.             } catch(\Swift_TransportException $e){
  244.                 dump('error :'.$e);
  245.             }
  246.         } 
  247.         else
  248.             {
  249.                 $this->addFlash('warning''Nous n\' avons pas trouver d\' utilisteur enregistré avec cet identifiant');
  250.                 $idFounded false;                         
  251.             }
  252.     
  253.     }
  254.         
  255.     //}
  256.   //  $email = $request->query->get('email');
  257.     return $this->render('password.forgot.request.html.twig', ['form' => $form->createView(), 'idFounded' => $idFounded]);
  258. }
  259. /**
  260.  *@Route("/register/edit/{lastname}/{firstname}/{id}", name="user.edit.register")
  261.  */
  262. public function registerEdit(Request $request$id,$lastnameUserRepository $UserRepositoryUser $userMangopayService $mangopayServiceUserAccountRepository $userAccountRepository )
  263. {
  264.         $this->denyAccessUnlessGranted('ROLE_USER');
  265.         $UserFetch $UserRepository->findOneBy(['id'=>$id'lastname'=>$lastname]);
  266.         // set image profil
  267.         if ( $UserFetch->getImageProfil() !== null)
  268.         {
  269.             $imageProfilUrl $UserFetch->getImageProfil()->getUrlImage();
  270.             $imageProfil $UserFetch->getImageProfil();
  271.             
  272.         } 
  273.             else
  274.         {
  275.             $imageProfilUrl "https://via.placeholder.com/200";
  276.             $imageProfil = new ImageProfil();
  277.         } 
  278.             $formImageProfilFetch $this->createForm(ImageprofilType::class,$imageProfil);
  279.          //   $UserFetch->getImageProfil()->setImage();
  280.             $formImageProfilFetch->handleRequest($request);
  281.         // set user account
  282.         if( $UserFetch->getUserAccount() === null )
  283.         {
  284.             $UserAccount = new UserAccount();
  285.         } 
  286.         else
  287.         {
  288.             $UserAccount $UserFetch->getUserAccount();
  289.         }
  290.         $UserAccount->setUser($UserFetch);
  291.         $form $this->createFormBuilder($UserAccount)
  292.            
  293.             ->add('adress'TextType::class, ['label'=>'Votre adresse'])
  294.             ->add('postalCode'TextType::class, ['label'=>'Votre code postal'])
  295.             ->add('city'TextType::class, ['label'=>'Votre ville'])
  296.             ->add('phone'TextType::class, ['label'=> 'Votre numéro de téléphone'])
  297.             ->add('inscription'SubmitType::class, ['label' => 'Enregistrer'])
  298.             ->getForm();
  299.             //$pass =  $form['password']->getData();
  300.            // dump($form['password']);
  301.             $form->handleRequest($request);
  302.             
  303.          // form image profil submission
  304.          if ($formImageProfilFetch->isSubmitted() && $formImageProfilFetch->isValid())
  305.             {
  306.                 $image $formImageProfilFetch->getData();
  307.                 $EntityManager $this->getDoctrine()->getManager();
  308.                 //$UserFetch = $UserFetch->setImageProfil($imageProfil);
  309.                 $image $image->setUser($UserFetch);
  310.                 $userId $UserFetch->getEmail();
  311.                 //$EntityManager->persist($UserFetch);
  312.                 $EntityManager->persist($image);
  313.                 $EntityManager->flush();
  314.                 if(!is_dir(dirname(__DIR__2)."/public_html/images/profils/{$userId}"))
  315.             {
  316.               
  317.               mkdirdirname(__DIR__2)."/public_html/images/profils/{$userId}");
  318.             }
  319.             //}
  320.              
  321.             
  322.             /* rename the files with the profil path */
  323.             if(!file_exists(dirname(__DIR__2)."/public_html/images/profils/{$userId}/{$image->getUrlImage()}"))
  324.             {
  325.               @rename(dirname(__DIR__2)."/public_html/images/profils/{$image->getUrlImage()}"dirname(__DIR__2)."/public_html/images/profils/{$userId}/{$image->getUrlImage()}");
  326.             } 
  327.                 $path_file dirname(__DIR__2)."/public_html/images/profils/{$userId}/{$image->getUrlImage()}";
  328.             }
  329.          // form user account submission
  330.             if ($form->isSubmitted() && $form->isValid())
  331.             {
  332.                 $user $form->getData();
  333.                // $mangopayService->createMangoUserNatural($UserFetch);
  334.                 $EntityManager $this->getDoctrine()->getManager();
  335.                 $EntityManager->persist($user);
  336.                 $EntityManager->flush();
  337.             }
  338.         return $this->render('login2.html.twig', [
  339.             'formLogin2' => $form->createView(),
  340.             'formImageProfilFetch' => $formImageProfilFetch->createView(),
  341.             'imageProfilUrl' => $imageProfilUrl,
  342.         ]);
  343. }
  344. /**
  345.  *@Route("/login", name="security.login" , methods={"GET", "POST"})
  346.  */
  347. public function loginUser(Request $requestAuthenticationUtils $authenticationUtilsSessionInterface $session)
  348. {
  349.     $error $authenticationUtils->getLastAuthenticationError();
  350.     $param $request->query->get('targetPath');
  351.     $lastUsername $authenticationUtils->getLastUsername();    
  352.     $session->set('changePassword''changePassword');
  353.     //$this->saveTargetPath($session, 'main', $request->headers->get('referer'));
  354.     if( $request->query->get('tokenForgotPassword') !== null )
  355.     {
  356.         return $this->redirectToRoute('home');
  357.     }
  358.     return $this->render('form.html.twig', [
  359.         'last_username' => $lastUsername,
  360.         'error'         => $error,
  361.         'param'   => $param
  362.     ]);
  363. }
  364. /**
  365.  *@Route("/logoutuser", name="security.logout")
  366.  */
  367. public function logoutUser(Request $request)
  368. {
  369.     $this->denyAccessUnlessGranted('ROLE_USER');
  370.     return $this->render('form.html.twig');
  371. }
  372. /**
  373. *
  374. *@Route("/profiluser", name="profil.user")
  375. */
  376. public function profilView(Request $requestMangopayService $mangoPayServiceOrdersRepository $ordersRepository)
  377. {
  378.     $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  379.     $user $this->getUser();
  380.     $accountForm $user->getAccountform();
  381.     if($accountForm){
  382.         $orders $ordersRepository->findBy(['accountForm'=> $accountForm->getId()]);
  383.     }
  384.     //var_dump($orders);die();
  385.     if ( $user !== null && isset($orders))
  386.     {    
  387.         $hasAccess in_array('ROLE_USER'$user->getRoles());
  388.         return $this->render('profil.html.twig', [
  389.             'user'=>$user
  390.             'orders'=>$orders
  391.         ]);
  392.     } else {
  393.         return $this->render('profil.html.twig', [
  394.             'user'=>$user 
  395.         ]);
  396.     }
  397.     return $this->render('form.html.twig');
  398. }
  399. /**
  400.  * 
  401.  *@Route("/declarebusiness")
  402.  */
  403. public function declareBusiness(MangopayService $mangopayService){
  404.     $this->denyAccessUnlessGranted('ROLE_USER');
  405.     $userId "";
  406.     return $mangopayService->createUboDeclaration($userId);
  407. }
  408. /**
  409. *
  410. *@Route("/deleteuser", name="delete.user")
  411. */
  412. public function deleteUser(Request $request)
  413. {
  414.     $this->denyAccessUnlessGranted('ROLE_USER');
  415.     $entityManager $this->getDoctrine()->getManager();    
  416.     $user $this->getUser();
  417.     if($user !== null && $user->getAccountForm() !== null )
  418.     {
  419.         $this->addFlash('warning''Veuillez supprimer votre vitrine ou boutique pour pouvoir supprimer votre compte');
  420.     }
  421.     else 
  422.     {    
  423.         $imagePro $user->getImageProfil();
  424.         if($imagePro !== null )
  425.         {
  426.             $user->setImageProfil(null);
  427.             $imagePro->setUser(null);
  428.             $entityManager->flush();
  429.             $entityManager->remove($imagePro);
  430.         }
  431.         $entityManager->remove($user);
  432.         $entityManager->flush();
  433.         $this->get('security.token_storage')->setToken(null);
  434.         $this->get('request')->getSession()->invalidate();
  435.         return $this->render('delete.user.html.twig');
  436.     }
  437.             return $this->render('profil.html.twig', [
  438.                 'user'=>$user 
  439.             ]);
  440. }
  441. }