src/Controller/CustomerController.php line 84

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\SessionService;
  4. use App\Form\RegistrationFormType;
  5. use App\Form\CustomerProfilFormType;
  6. use App\Entity\Customer\Customer;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. // use App\Security\EmailVerifier;
  13. use App\Security\CustomerFormAuthenticator;
  14. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  15. use Symfony\Component\Mime\Address;
  16. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  17. use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
  18. use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
  19. use Symfony\Component\Form\FormError;
  20. use App\Service\Tools;
  21. use App\Service\ObpAPI;
  22. class CustomerController extends AbstractController
  23. {
  24.     private $requestStack;
  25.     private $url_bridge_shop 'https://boutique.1055.fr/bridge-customers.php';
  26.     private $centre_prefere 'lons';
  27.     private $obpAPIservice;
  28.     // private $emailVerifier;
  29.     public function __constructRequestStack $requestStackObpAPI $obpAPIservice /*, EmailVerifier $emailVerifier*/
  30.     {
  31.         $this->requestStack $requestStack;
  32.         $this->obpAPIservice $obpAPIservice;
  33.         // $this->emailVerifier = $emailVerifier;
  34.     }
  35.     /**
  36.      * @Route("/mon-compte/portefeuille", name="wallet")
  37.      */
  38.     public function walletCustomer(Request $request): Response
  39.     {
  40.         $session $this->requestStack->getSession();
  41.         $cart $session->get('cart');
  42.         if($this->container->get('security.token_storage')->getToken() != null) {
  43.             $time = new \DateTime(date("Y-m-d H:i:s"));
  44.             $customer $this->container->get('security.token_storage')->getToken()->getUser();
  45.             $form $this->createForm(CustomerProfilFormType::class, $customer);
  46.             $form->handleRequest($request);
  47.             if ($form->isSubmitted() && $form->isValid()) {
  48.                 $customer->setDateUpd($time);
  49.                 $entityManager $this->getDoctrine()->getManager('customer');
  50.                 $entityManager->persist($customer);
  51.                 $entityManager->flush();
  52.             }
  53.             return $this->render('mon-compte/dashboard.html.twig', [
  54.                 'customerProfilForm' => $form->createView(),
  55.                 'cart' => $cart,
  56.                 'controller_name' => 'CustomerController',
  57.             ]);
  58.         }
  59.         return $this->render('mon-compte/dashboard.html.twig', [
  60.             'page_name' => 'wallet',
  61.             'cart' => $cart,
  62.             'controller_name' => 'CustomerController',
  63.         ]);
  64.     }
  65.     /**
  66.      * @Route("/mon-compte", name="account")
  67.      */
  68.     public function dashboardCustomer(Request $request): Response
  69.     {
  70.         // $em = $this->getDoctrine()->getManager('customer');
  71.         $session $this->requestStack->getSession();
  72.         $cart $session->get('cart');
  73.         if($this->container->get('security.token_storage')->getToken() != null) {
  74.             $time = new \DateTime(date("Y-m-d H:i:s"));
  75.             $customer $this->container->get('security.token_storage')->getToken()->getUser();
  76.             $form $this->createForm(CustomerProfilFormType::class, $customer);
  77.             $form->handleRequest($request);
  78.             if ($form->isSubmitted() && $form->isValid()) {
  79.                 $customer->setDateUpd($time);
  80.                 $entityManager $this->getDoctrine()->getManager('customer');
  81.                 $entityManager->persist($customer);
  82.                 $entityManager->flush();
  83.             }
  84.             return $this->render('mon-compte/dashboard.html.twig', [
  85.                 'page_name' => 'page_account',
  86.                 'customerProfilForm' => $form->createView(),
  87.                 'cart' => $cart,
  88.                 'controller_name' => 'CustomerController',
  89.             ]);
  90.         } else {
  91.             return $this->redirectToRoute('customer_login');
  92.         }
  93.         // return $this->render('mon-compte/dashboard.html.twig', [
  94.         //     'page_name' => 'page_account',
  95.         //     'cart' => $cart,
  96.         //     'controller_name' => 'CustomerController',
  97.         // ]);
  98.     }
  99.     /**
  100.      * @Route("/inscription", name="app_register")
  101.      */
  102.     public function register(Request $requestUserPasswordHasherInterface $userPasswordHasherInterfaceGuardAuthenticatorHandler $guardHandlerCustomerFormAuthenticator $authenticator): Response
  103.     {
  104.         $time = new \DateTime(date("Y-m-d H:i:s"));
  105.         $user = new Customer();
  106.         $form $this->createForm(RegistrationFormType::class, $user);
  107.         $form->handleRequest($request);
  108.         if($form->isSubmitted()) {
  109.             $dataObpAPI = array(
  110.                 'firstname' => $user->email,
  111.                 'lastname' => $user->email,
  112.                 'email' => $user->email,
  113.                 'password' => $form->get('plainPassword')->getData(),
  114.                 'g-recaptcha-response' => $request->request->get('g-recaptcha-response'),
  115.                 'instance' => $this->obpAPIservice->getBaseInstance(),
  116.             );
  117.             $urlApi $this->obpAPIservice->getContactApiUrl();
  118.             $customer_obp_infos json_decode
  119.                 $this->obpAPIservice->CallAPI('POST'$urlApi.'/cashless/users'json_encode($dataObpAPI))
  120.             );
  121.             if(!$customer_obp_infos->meta->success && $customer_obp_infos->meta->type == 'EXISTING_EMAIL') {
  122.                 $form['email']->addError(new FormError('Un compte est déjà associé à ce mail'));
  123.             }
  124.         }
  125.         if ($form->isSubmitted() && $form->isValid() && $customer_obp_infos->meta->success) {
  126.             $phone $user->getPhone();
  127.             $phoneMobile $user->getPhoneMobile();
  128.             $user->setPhone(str_replace('±','+',$phone));
  129.             $user->setPhoneMobile(str_replace('±','+',$phoneMobile));
  130.             // encode the plain password
  131.             // $user->setPassword(
  132.             //     $userPasswordHasherInterface->hashPassword(
  133.             //         $user,
  134.             //         $form->get('plainPassword')->getData()
  135.             //     )
  136.             // );
  137.             $user->setDateAdd($time);
  138.             $user->setDateUpd($time);
  139.             // $user->setDateConnexion($time);
  140.             // $user->setActive(false);
  141.             $entityManager $this->getDoctrine()->getManager('customer');
  142.             $entityManager->persist($user);
  143.             $entityManager->flush();
  144.             // $number =  (int)$user->getId() + 100000;
  145.             $number =  str_pad((int)$user->getId(), 6'0'STR_PAD_LEFT);
  146.             $user->setCustomerNumber($number);
  147.             $user->setStatut('Actif');
  148.             $user->setActive(1);
  149.             $entityManager->persist($user);
  150.             $entityManager->flush();   
  151.             // // generate a signed url and email it to the user
  152.             // $this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,
  153.             //     (new TemplatedEmail())
  154.             //         ->from(new Address('noreply@1055.fr', 'Team 1055'))
  155.             //         ->to($user->getMail())
  156.             //         ->subject('Veuillez confirmer votre email')
  157.             //         ->htmlTemplate('registration/confirmation_email.html.twig')
  158.             // );
  159.             // // do anything else you need here, like send an email
  160.             
  161.             $guardHandler->authenticateUserAndHandleSuccess(
  162.                 $user,
  163.                 $request,
  164.                 $authenticator,
  165.                 'main' // firewall name in security.yaml
  166.             );
  167.             $query = array( 'create_customer_shop' => true'mail' => $request->request->get('registration_form')['email'], 'secret' => '''centre' => $this->centre_prefere );
  168.             $check_shop_customer json_decode(Tools::CallAPI('POST'$this->url_bridge_shop$query));
  169.             return $this->redirectToRoute('home');
  170.         } else if($customer_obp_infos && !$customer_obp_infos->meta->success && !$customer_obp_infos->meta->type == 'EXISTING_EMAIL') {
  171.             $form['email']->addError(new FormError($customer_obp_infos->meta->message));
  172.         }
  173.         return $this->render('mon-compte/register.html.twig', [
  174.             'page_name' => 'page_register',
  175.             'registrationForm' => $form->createView(),
  176.         ]);
  177.     }
  178.     /**
  179.      * @Route("/verify/email", name="app_verify_email")
  180.      */
  181.     public function verifyUserEmail(Request $request): Response
  182.     {
  183.         // dd($this->getUser());
  184.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  185.         // validate email confirmation link, sets Customer::isVerified=true and persists
  186.         try {
  187.             $this->emailVerifier->handleEmailConfirmation($request$this->getUser());
  188.         } catch (VerifyEmailExceptionInterface $exception) {
  189.             $this->addFlash('verify_email_error'$exception->getReason());
  190.             return $this->redirectToRoute('app_register');
  191.         }
  192.         // @TODO Change the redirect on success and handle or remove the flash message in your templates
  193.         $this->addFlash('success''Votre adresse e-mail a été vérifiée.');
  194.         return $this->redirectToRoute('customer_login');
  195.     }
  196.     /**
  197.      * @Route("/send_verify/email", name="app_resend_verify_email")
  198.      */
  199.     public function resendEmail(Request $request): Response 
  200.     {
  201.         $customer $this->getDoctrine()
  202.             ->getRepository(Customer::class)
  203.             ->find((int)$request->query->get('id'));
  204.         $this->emailVerifier->sendEmailConfirmation('app_verify_email'$customer,
  205.             (new TemplatedEmail())
  206.                 ->from(new Address('noreply@1055.fr''Team 1055'))
  207.                 ->to($customer->getEmail())
  208.                 ->subject('Veuillez confirmer votre email')
  209.                 ->htmlTemplate('registration/confirmation_email.html.twig')
  210.         );
  211.         $this->addFlash('success''Un mail d\'activation à été envoyé à l\'adresse mail '.$customer->getMail());
  212.         return $this->redirectToRoute('customer_login');
  213.     }
  214. }