src/Controller/CustomerController.php line 146

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