src/Flexy/FrontBundle/Themes/IlaveU/Controller/MyAccountController.php line 33

  1. <?php
  2. namespace App\Flexy\FrontBundle\Themes\IlaveU\Controller;
  3. use App\Entity\User;
  4. use App\Flexy\FrontBundle\Themes\IlaveU\Form\Customer\CustomerAddressType;
  5. use App\Flexy\FrontBundle\Themes\IlaveU\Form\RegistrationCustomerPasswordFormType;
  6. use App\Flexy\FrontBundle\Themes\IlaveU\Form\RegistrationCustomerFormType;
  7. use App\Flexy\FrontBundle\Themes\IlaveU\Form\RegistrationCustomerProfilFormType;
  8. use App\Flexy\FrontBundle\Themes\IlaveU\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\PasswordHasher\Hasher\UserPasswordHasherInterface;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  25. #[Route('/{_locale}/account')]
  26. class MyAccountController extends AbstractController
  27. {
  28.     #[Route('/login-register'name'login_register')]
  29.     public function register(
  30.         Request $request,
  31.          UserPasswordHasherInterface $userPasswordHasher,
  32.           EntityManagerInterface $entityManager,
  33.           AuthenticationUtils $authenticationUtils
  34.           ): Response
  35.     {
  36.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  37.         if($hasAccess){
  38.             return $this->redirectToRoute("customer_dashboard");
  39.         }
  40.         
  41.         // Auth
  42.         // if ($this->getUser()) {
  43.         //     return $this->redirectToRoute('target_path');
  44.         // }
  45.         // get the login error if there is one
  46.         $error $authenticationUtils->getLastAuthenticationError();
  47.         // last username entered by the user
  48.         $lastUsername $authenticationUtils->getLastUsername();
  49.         
  50.         // Register
  51.         $user = new User();
  52.         $vendor = new Vendor();
  53.         $formVendor $this->createForm(RegistrationVendorFormType::class, $vendor);
  54.         $formVendor->handleRequest($request);
  55.         $customer = new Customer();
  56.         $formCustomer $this->createForm(RegistrationCustomerFormType::class, $customer);
  57.         $formCustomer->handleRequest($request);
  58.         if ($formVendor->isSubmitted() && $formVendor->isValid()) {
  59.             // encode the plain password
  60.             //dd($vendor);
  61.             $user->setUsername($formVendor->get('simulateUsername')->getData());
  62.             $user->setPassword(
  63.             $userPasswordHasher->hashPassword(
  64.                     $user,
  65.                     $formVendor->get('simulatePassword')->getData()
  66.                 )
  67.             );
  68.             $user->setRoles(["ROLE_VENDOR"]);
  69.             $vendor->setUser($user);
  70.             $entityManager->persist($vendor);
  71.             $entityManager->flush();
  72.             // do anything else you need here, like send an email
  73.             return $this->redirectToRoute('front_home');
  74.         }
  75.         if ($formCustomer->isSubmitted() && $formCustomer->isValid()) {
  76.             // encode the plain password
  77.             $user $formCustomer->get('user')->getData();
  78.             
  79.             if($user instanceof User){
  80.                 $user->setIsValid(true);
  81.                 $user->setUsername($formCustomer->get('email')->getData());
  82.                 $user->setRoles(["ROLE_CUSTOMER"]);
  83.                 //dd($user);
  84.                 $customer->setUser($user);
  85.             }
  86.             
  87.             $entityManager->persist($customer);
  88.             $entityManager->flush();
  89.             // do anything else you need here, like send an email
  90.             return $this->redirectToRoute('front_home');
  91.         }
  92.         return $this->render('@Flexy/FrontBundle/Themes/IlaveU/templates/myaccount/login-register.html.twig', [
  93.             'registrationVendorForm' => $formVendor->createView(),
  94.             'registrationCustomerForm' => $formCustomer->createView(),
  95.             'last_username' => $lastUsername,
  96.              'error' => $error
  97.         ]);
  98.     }
  99.     #[Route('/editMyPassword'name'editpassword')]
  100.     public function editpassword
  101.         Request $request,
  102.           UserPasswordHasherInterface $userPasswordHasher,
  103.           EntityManagerInterface $entityManager,
  104.           AuthenticationUtils $authenticationUtils,
  105.           CustomerRepository $customerRepository
  106.           ): Response
  107.     {
  108.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  109.         $formCustomer $this->createForm(RegistrationCustomerPasswordFormType::class, $customer);
  110.      
  111.         return $this->render('@Flexy/FrontBundle/Themes/IlaveU/templates/myaccount/editMyPassword.html.twig', [
  112.              
  113.             'registrationCustomerForm' => $formCustomer->createView(),
  114.             "customer"=>$customer,
  115.             
  116.              
  117.         ]);
  118.     }
  119.   
  120.     #[Route('/myaccount'name'myaccount')]
  121.     public function myaccount(
  122.         CustomerRepository $customerRepository,
  123.         OrderRepository $orderRepository,
  124.          Request $request
  125.          
  126.          ): Response
  127.     {
  128.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  129.         if(!$hasAccess){
  130.             return $this->redirectToRoute("login_register");
  131.         }
  132.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  133.         $orders $orderRepository->findBy(["customer"=>$customer]);
  134.         return $this->render('@Flexy/FrontBundle/Themes/IlaveU/templates/myaccount/myaccount.html.twig',[
  135.             "customer"=>$customer,
  136.             "orders"=>$orders
  137.         ]);
  138.     }
  139.     
  140.     #[Route('/edit-myaccount'name'edit_myaccount')]
  141.     public function edit_myaccount(
  142.         CustomerRepository $customerRepository,
  143.         OrderRepository $orderRepository,
  144.         Request $request,
  145.         ManagerRegistry $doctrine 
  146.          ): Response
  147.     {
  148.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  149.         if(!$hasAccess){
  150.             return $this->redirectToRoute("login_register");
  151.         }
  152.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  153.        
  154.         $formCustomer $this->createForm(RegistrationCustomerProfilFormType::class, $customer);
  155.         $formCustomer->handleRequest($request);
  156.         if ($request->isMethod('POST')) {
  157.             if ($formCustomer->isSubmitted()) {
  158.                // dd($formCustomer->get('firstName')->getData());
  159.                 $customer->setFirstName($formCustomer->get('firstName')->getData());
  160.                 $customer->setLastName($formCustomer->get('lastName')->getData());
  161.                 $customer->setEmail($formCustomer->get('email')->getData());
  162.                 $customer->setGender($formCustomer->get('gender')->getData());
  163.                 $customer->setPhone($formCustomer->get('phone')->getData());
  164.                 $em $doctrine->getManager();
  165.                 $em->persist($customer);
  166.                 $em->flush();
  167.                 $this->addFlash("success","Vos informations personnelles ont été enregistrées"); 
  168.                 
  169.                 return $this->redirectToRoute('edit_myaccount');  
  170.         
  171.              
  172.         }
  173.         }
  174.          
  175.   
  176.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  177.         $orders $orderRepository->findBy(["customer"=>$customer]);
  178.         return $this->render('@Flexy/FrontBundle/Themes/IlaveU/templates/myaccount/editMyAccount.html.twig',[
  179.             "customer"=>$customer,
  180.             "orders"=>$orders,
  181.             "registrationCustomerForm"=>$formCustomer->createView()
  182.             
  183.         ]);
  184.     }
  185.     #[Route('/successPasswordUpdate',name'successPasswordUpdate') ]
  186.     
  187.     public function successPasswordUpdate(): Response
  188.     {
  189.         $this->addFlash("success","Votre mot de passe a été modifié avec succès.");
  190.         return $this->redirectToRoute('login',["passwordUpdated"=>true]);
  191.     }
  192.   
  193.     #[Route('/my-address-delete/{id}',name'delete_address') ]
  194.     
  195.     public function delete(Request $request,CustomerAddress $customerAddress,ManagerRegistry $doctrine): Response
  196.     {
  197.        
  198.             $entityManager $doctrine->getManager();
  199.             $entityManager->remove($customerAddress);
  200.             $entityManager->flush();
  201.        
  202.         $this->addFlash("success","Votre adresse a été Supprimer"); 
  203.         return $this->redirectToRoute('my_customer_address');
  204.     }
  205.     #[Route('/my-customer-address'name'my_customer_address'defaults:  ['id' => null]) ]
  206.     #[Route('/my-customer-address/{id}') ]
  207.     public function add_customer_address(
  208.         CustomerAddress $customerAddress null,
  209.         CustomerRepository $customerRepository,
  210.         Request $request,
  211.         ManagerRegistry $doctrine       
  212.          ): Response
  213.     {
  214.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  215.         if(!$hasAccess){
  216.             return $this->redirectToRoute("login_register");
  217.         }
  218.         if(!$customerAddress){
  219.             $customerAddress = new CustomerAddress();
  220.         }
  221.         
  222.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  223.        
  224.         $formCustomerAddress $this->createForm(CustomerAddressType::class, $customerAddress);
  225.         $formCustomerAddress->handleRequest($request);
  226.         
  227.                 if ($formCustomerAddress->isSubmitted() && $formCustomerAddress->isValid()) {
  228.                 
  229.                     //dd($customerAddress);
  230.                     $customerAddress->setCustomer($customer);
  231.                     $customerAddress->setCountry("Maroc");
  232.                     $em $doctrine->getManager();
  233.                     $em->persist($customerAddress);
  234.                     $em->flush();
  235.                     $this->addFlash("success","Vos informations personnelles adresse ont été enregistrées"); 
  236.                     return $this->redirectToRoute('my_customer_address');  
  237.                   
  238.             }
  239.         return $this->render('@Flexy/FrontBundle/Themes/IlaveU/templates/myaccount/myAddresses.html.twig',[
  240.             "customer"=>$customer,
  241.             "customAddress"=>$customerAddress,
  242.             "formCustomerAddress"=>$formCustomerAddress->createView()
  243.             
  244.         ]);
  245.     }
  246.     #[Route('/order-details/{id}'name'customer_order_detail')]
  247.     public function customer_order_detail(
  248.         Order $order
  249.        
  250.          ): Response
  251.     {
  252.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  253.         if(!$hasAccess){
  254.             return $this->redirectToRoute("login_register");
  255.         }
  256.         return $this->render('@Flexy/FrontBundle/Themes/IlaveU/templates/myaccount/orderDetail.html.twig',[
  257.             "order"=>$order
  258.         ]);
  259.     }
  260.     #[Route('/comment-product/{id}'name'comment_product')]
  261.     public function comment_product(
  262.         CustomerRepository $customerRepository,
  263.         Product $product,
  264.        Request $request,
  265.        ManagerRegistry $doctrine
  266.          ): Response
  267.     {
  268.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  269.         if(!$hasAccess){
  270.             return $this->redirectToRoute("login_register");
  271.         }
  272.         $em $doctrine->getManager();
  273.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  274.         $comment = new Comment();
  275.         $comment->setRating((int)$request->request->get("rating"));
  276.         $comment->setComment($request->request->get("comment"));
  277.         $comment->setProduct($product);
  278.         $comment->setCustomer($customer);
  279.         $em->persist($comment);
  280.         $em->flush();
  281.         
  282.        return $this->redirectToRoute("single_product",["id"=>$product->getId()]);
  283.     }
  284. }