src/Flexy/FrontBundle/Themes/CoWorking/Controller/MyAccountController.php line 143

  1. <?php
  2. namespace App\Flexy\FrontBundle\Themes\CoWorking\Controller;
  3. use App\Entity\User;
  4. use App\Flexy\FrontBundle\Themes\CoWorking\Form\Customer\CustomerAddressType;
  5. use App\Flexy\FrontBundle\Themes\CoWorking\Form\RegistrationCustomerPasswordFormType;
  6. use App\Flexy\FrontBundle\Themes\CoWorking\Form\RegistrationCustomerFormType;
  7. use App\Flexy\FrontBundle\Themes\CoWorking\Form\RegistrationCustomerProfilFormType;
  8. use App\Flexy\FrontBundle\Themes\CoWorking\Form\RegistrationVendorFormType;
  9. use App\Flexy\ShopBundle\Entity\Customer\Customer;
  10. use App\Flexy\ShopBundle\Entity\Customer\CustomerAddress;
  11. use App\Flexy\ShopBundle\Entity\Order\Order;
  12. use App\Flexy\ShopBundle\Entity\Product\Comment;
  13. use App\Flexy\ShopBundle\Entity\Product\Product;
  14. use App\Flexy\ShopBundle\Entity\Vendor\Vendor;
  15. use App\Flexy\ShopBundle\Repository\Customer\CustomerRepository;
  16. use App\Flexy\ShopBundle\Repository\Order\OrderRepository;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use Doctrine\Persistence\ManagerRegistry;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  23. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  26. use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
  27. use App\Security\AppAuthenticator;
  28. #[Route('/account')]
  29. class MyAccountController extends AbstractController
  30. {
  31.     #[Route('/login-register'name'login_register')]
  32.     public function register(
  33.         Request $request,
  34.         SessionInterface $session,
  35.          UserPasswordHasherInterface $userPasswordHasher,
  36.           EntityManagerInterface $entityManager,
  37.           AuthenticationUtils $authenticationUtils
  38.           ): Response
  39.     {
  40.       
  41.           
  42.         $message $request->query->get('message');
  43.      
  44.          if(!empty($message) && $message="warning"){
  45.       $message" Vous n'êtes pas connecté, vous ne pouvez pas réserver, veuillez vous connecter ou créer un compte client pour continuer" ;
  46.      
  47.          }
  48.          
  49.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  50.         if($hasAccess){
  51.             return $this->redirectToRoute("customer_dashboard");
  52.         }
  53.  
  54.         // Auth
  55.         // if ($this->getUser()) {
  56.         //     return $this->redirectToRoute('target_path');
  57.         // }
  58.         // get the login error if there is one
  59.         $error $authenticationUtils->getLastAuthenticationError();
  60.         // last username entered by the user
  61.         $lastUsername $authenticationUtils->getLastUsername();
  62.         
  63.         // Register
  64.         $user = new User();
  65.         $vendor = new Vendor();
  66.         $formVendor $this->createForm(RegistrationVendorFormType::class, $vendor);
  67.         $formVendor->handleRequest($request);
  68.         $customer = new Customer();
  69.         $formCustomer $this->createForm(RegistrationCustomerFormType::class, $customer);
  70.         $formCustomer->handleRequest($request);
  71.         if ($formVendor->isSubmitted() && $formVendor->isValid()) {
  72.             // encode the plain password
  73.             //dd($vendor);
  74.             $user->setUsername($formVendor->get('simulateUsername')->getData());
  75.             $user->setPassword(
  76.             $userPasswordHasher->hashPassword(
  77.                     $user,
  78.                     $formVendor->get('simulatePassword')->getData()
  79.                 )
  80.             );
  81.             $user->setRoles(["ROLE_VENDOR"]);
  82.             $vendor->setUser($user);
  83.             $entityManager->persist($vendor);
  84.             $entityManager->flush();
  85.             // do anything else you need here, like send an email
  86.             return $this->redirectToRoute('front_home');
  87.         }
  88.         if ($formCustomer->isSubmitted() && $formCustomer->isValid()) {
  89.             // encode the plain password
  90.         
  91.             $user $formCustomer->get('user')->getData();
  92.             
  93.             if($user instanceof User){
  94.                 $user->setIsValid(true);
  95.                 $user->setUsername($formCustomer->get('email')->getData());
  96.                 $user->setRoles(["ROLE_CUSTOMER"]);
  97.                 //dd($user);
  98.                 $customer->setUser($user);
  99.             }
  100.             
  101.             $entityManager->persist($customer);
  102.             $entityManager->flush();
  103.             // do anything else you need here, like send an email
  104.             return $this->redirectToRoute('front_home');
  105.         }
  106.         return $this->render('@Flexy/FrontBundle/Themes/CoWorking/templates/myaccount/login-register.html.twig', [
  107.             'registrationVendorForm' => $formVendor->createView(),
  108.             'registrationCustomerForm' => $formCustomer->createView(),
  109.             'last_username' => $lastUsername,
  110.             'message' => $message,
  111.              'error' => $error
  112.         ]);
  113.     }
  114.     #[Route('/registre'name'registre')]
  115.     public function create(
  116.         Request $request,
  117.          UserPasswordHasherInterface $userPasswordHasher,
  118.           EntityManagerInterface $entityManager,
  119.           AuthenticationUtils $authenticationUtils,
  120.           UserAuthenticatorInterface $userAuthenticator,
  121.           AppAuthenticator $authenticator
  122.           ): Response
  123.     {
  124.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  125.         if($hasAccess){
  126.             return $this->redirectToRoute("customer_dashboard");
  127.         }
  128.         
  129.         // Auth
  130.         // if ($this->getUser()) {
  131.         //     return $this->redirectToRoute('target_path');
  132.         // }
  133.         // get the login error if there is one
  134.         $error $authenticationUtils->getLastAuthenticationError();
  135.         // last username entered by the user
  136.         $lastUsername $authenticationUtils->getLastUsername();
  137.         
  138.         // Register
  139.         $user = new User();
  140.         $vendor = new Vendor();
  141.         $formVendor $this->createForm(RegistrationVendorFormType::class, $vendor);
  142.         $formVendor->handleRequest($request);
  143.         $customer = new Customer();
  144.         $formCustomer $this->createForm(RegistrationCustomerFormType::class, $customer);
  145.         $formCustomer->handleRequest($request);
  146.         if ($formVendor->isSubmitted() && $formVendor->isValid()) {
  147.             // encode the plain password
  148.             //dd($vendor);
  149.             $user->setUsername($formVendor->get('simulateUsername')->getData());
  150.             $user->setPassword(
  151.             $userPasswordHasher->hashPassword(
  152.                     $user,
  153.                     $formVendor->get('simulatePassword')->getData()
  154.                 )
  155.             );
  156.             $user->setRoles(["ROLE_VENDOR"]);
  157.             $vendor->setUser($user);
  158.             $entityManager->persist($vendor);
  159.             $entityManager->flush();
  160.             // do anything else you need here, like send an email
  161.             return $this->redirectToRoute('front_home');
  162.         }
  163.         if ($formCustomer->isSubmitted() && $formCustomer->isValid()) {
  164.             // encode the plain password
  165.             $user $formCustomer->get('user')->getData();
  166.             $password =$user->getPassword();
  167.             $compte $request->request->get('type');
  168.           
  169.             /*dd($user->setPassword(
  170.                 $userPasswordHasher->hashPassword(
  171.                         $user,
  172.                         $user->getPassword()
  173.                     )
  174.                 ));*/
  175.             
  176.             //if($user instanceof User){
  177.                 $user->setIsValid(true);
  178.                 $user->setUsername($formCustomer->get('email')->getData());
  179.                 
  180.                 $user->setRoles(["ROLE_CUSTOMER"]);
  181.                 //dd($user);
  182.                 $customer->setUser($user);
  183.                 $customer->setType($compte);
  184.                 
  185.                $entityManager->persist($customer);
  186.                $entityManager->flush();
  187.              // dd($user->getPassword());
  188.             // do anything else you need here, like send an email
  189.             return $userAuthenticator->authenticateUser(
  190.                 $user,
  191.                 $authenticator,
  192.                 $request
  193.             );
  194.             //return $this->redirectToRoute('front_home');
  195.                 
  196.             //}
  197.                
  198.             
  199.         }
  200.         return $this->render('@Flexy/FrontBundle/Themes/CoWorking/templates/myaccount/register.html.twig', [
  201.             'registrationVendorForm' => $formVendor->createView(),
  202.             'registrationCustomerForm' => $formCustomer->createView(),
  203.             'last_username' => $lastUsername,
  204.              'error' => $error
  205.         ]);
  206.     }
  207.     #[Route('/editMyPassword'name'editpassword')]
  208.     public function editpassword
  209.         Request $request,
  210.           UserPasswordHasherInterface $userPasswordHasher,
  211.           EntityManagerInterface $entityManager,
  212.           AuthenticationUtils $authenticationUtils,
  213.           CustomerRepository $customerRepository
  214.           ): Response
  215.     {
  216.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  217.         $formCustomer $this->createForm(RegistrationCustomerPasswordFormType::class, $customer);
  218.      
  219.         return $this->render('@Flexy/FrontBundle/Themes/CoWorking/templates/myaccount/editMyPassword.html.twig', [
  220.              
  221.             'registrationCustomerForm' => $formCustomer->createView(),
  222.             "customer"=>$customer,
  223.             
  224.              
  225.         ]);
  226.     }
  227.   
  228.     #[Route('/myaccount'name'myaccount')]
  229.     public function myaccount(
  230.         CustomerRepository $customerRepository,
  231.         OrderRepository $orderRepository,
  232.          Request $request
  233.          
  234.          ): Response
  235.     {
  236.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  237.         if(!$hasAccess){
  238.             return $this->redirectToRoute("login_register");
  239.         }
  240.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  241.         $orders $orderRepository->findBy(["customer"=>$customer]);
  242.         return $this->render('@Flexy/FrontBundle/Themes/CoWorking/templates/myaccount/myaccount.html.twig',[
  243.             "customer"=>$customer,
  244.             "orders"=>$orders
  245.         ]);
  246.     }
  247.     
  248.     #[Route('/edit-myaccount'name'edit_myaccount')]
  249.     public function edit_myaccount(
  250.         CustomerRepository $customerRepository,
  251.         OrderRepository $orderRepository,
  252.         Request $request,
  253.         ManagerRegistry $doctrine 
  254.          ): Response
  255.     {
  256.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  257.         if(!$hasAccess){
  258.             return $this->redirectToRoute("login_register");
  259.         }
  260.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  261.        
  262.         $formCustomer $this->createForm(RegistrationCustomerProfilFormType::class, $customer);
  263.         $formCustomer->handleRequest($request);
  264.         if ($request->isMethod('POST')) {
  265.             if ($formCustomer->isSubmitted()) {
  266.                // dd($formCustomer->get('firstName')->getData());
  267.                 $customer->setFirstName($formCustomer->get('firstName')->getData());
  268.                 $customer->setLastName($formCustomer->get('lastName')->getData());
  269.                 $customer->setEmail($formCustomer->get('email')->getData());
  270.                 $customer->setGender($formCustomer->get('gender')->getData());
  271.                 $customer->setPhone($formCustomer->get('phone')->getData());
  272.                 $em $doctrine->getManager();
  273.                 $em->persist($customer);
  274.                 $em->flush();
  275.                 $this->addFlash("success","Vos informations personnelles ont été enregistrées"); 
  276.                 
  277.                 return $this->redirectToRoute('edit_myaccount');  
  278.         
  279.              
  280.         }
  281.         }
  282.          
  283.   
  284.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  285.         $orders $orderRepository->findBy(["customer"=>$customer]);
  286.         return $this->render('@Flexy/FrontBundle/Themes/CoWorking/templates/myaccount/editMyAccount.html.twig',[
  287.             "customer"=>$customer,
  288.             "orders"=>$orders,
  289.             "registrationCustomerForm"=>$formCustomer->createView()
  290.             
  291.         ]);
  292.     }
  293.     #[Route('/successPasswordUpdate',name'successPasswordUpdate') ]
  294.     
  295.     public function successPasswordUpdate(): Response
  296.     {
  297.         $this->addFlash("success","Votre mot de passe a été modifié avec succès.");
  298.         return $this->redirectToRoute('login',["passwordUpdated"=>true]);
  299.     }
  300.   
  301.     #[Route('/my-address-delete/{id}',name'delete_address') ]
  302.     
  303.     public function delete(Request $request,CustomerAddress $customerAddress,ManagerRegistry $doctrine): Response
  304.     {
  305.        
  306.             $entityManager $doctrine->getManager();
  307.             $entityManager->remove($customerAddress);
  308.             $entityManager->flush();
  309.        
  310.         $this->addFlash("success","Votre adresse a été Supprimer"); 
  311.         return $this->redirectToRoute('my_customer_address');
  312.     }
  313.     #[Route('/my-customer-address'name'my_customer_address'defaults:  ['id' => null]) ]
  314.     #[Route('/my-customer-address/{id}') ]
  315.     public function add_customer_address(
  316.         CustomerAddress $customerAddress null,
  317.         CustomerRepository $customerRepository,
  318.         Request $request,
  319.         ManagerRegistry $doctrine       
  320.          ): Response
  321.     {
  322.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  323.         if(!$hasAccess){
  324.             return $this->redirectToRoute("login_register");
  325.         }
  326.         if(!$customerAddress){
  327.             $customerAddress = new CustomerAddress();
  328.         }
  329.         
  330.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  331.        
  332.         $formCustomerAddress $this->createForm(CustomerAddressType::class, $customerAddress);
  333.         $formCustomerAddress->handleRequest($request);
  334.         
  335.                 if ($formCustomerAddress->isSubmitted() && $formCustomerAddress->isValid()) {
  336.                 
  337.                     //dd($customerAddress);
  338.                     $customerAddress->setCustomer($customer);
  339.                     $customerAddress->setCountry("Maroc");
  340.                     $em $doctrine->getManager();
  341.                     $em->persist($customerAddress);
  342.                     $em->flush();
  343.                     $this->addFlash("success","Vos informations personnelles adresse ont été enregistrées"); 
  344.                     return $this->redirectToRoute('my_customer_address');  
  345.                   
  346.             }
  347.         return $this->render('@Flexy/FrontBundle/Themes/CoWorking/templates/myaccount/myAddresses.html.twig',[
  348.             "customer"=>$customer,
  349.             "customAddress"=>$customerAddress,
  350.             "formCustomerAddress"=>$formCustomerAddress->createView()
  351.             
  352.         ]);
  353.     }
  354.     #[Route('/order-details/{id}'name'customer_order_detail')]
  355.     public function customer_order_detail(
  356.         Order $order
  357.        
  358.          ): Response
  359.     {
  360.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  361.         if(!$hasAccess){
  362.             return $this->redirectToRoute("login_register");
  363.         }
  364.         return $this->render('@Flexy/FrontBundle/Themes/CoWorking/templates/myaccount/orderDetail.html.twig',[
  365.             "order"=>$order
  366.         ]);
  367.     }
  368.     #[Route('/comment-product/{id}'name'comment_product')]
  369.     public function comment_product(
  370.         CustomerRepository $customerRepository,
  371.         Product $product,
  372.        Request $request,
  373.        ManagerRegistry $doctrine
  374.          ): Response
  375.     {
  376.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  377.         if(!$hasAccess){
  378.             return $this->redirectToRoute("login_register");
  379.         }
  380.         $em $doctrine->getManager();
  381.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  382.         $comment = new Comment();
  383.         $comment->setRating((int)$request->request->get("rating"));
  384.         $comment->setComment($request->request->get("comment"));
  385.         $comment->setProduct($product);
  386.         $comment->setCustomer($customer);
  387.         $em->persist($comment);
  388.         $em->flush();
  389.         
  390.        return $this->redirectToRoute("single_product",["id"=>$product->getId()]);
  391.     }
  392. }