src/Front/Modules/Cart/Controller/CartController.php line 192

  1. <?php
  2. namespace App\Front\Modules\Cart\Controller;
  3. use Symfony\Component\HttpFoundation\Request;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use App\UserPanel\Modules\User\Service\UserService;
  6. use App\Front\Controller\BaseController;
  7. use App\Front\Modules\Cart\Service\CartService;
  8. use App\Front\Modules\Cart\Service\ContractPreviewService;
  9. use App\Front\Modules\Cart\Form\CartType;
  10. use App\Front\Modules\Cart\Form\LoginType;
  11. use App\Front\Modules\Cart\Form\RegistrationType;
  12. use App\Front\Modules\Cart\Form\ClientDataType;
  13. class CartController extends BaseController
  14. {
  15.     private $_userService;
  16.     private $_cartService;
  17.     private $_contractPreviewService;
  18.     
  19.     public function __construct(
  20.             UserService $userService,
  21.             CartService $cartService,
  22.             ContractPreviewService $contractPreviewService)
  23.     {
  24.         $this->_userService $userService;
  25.         $this->_cartService $cartService;
  26.         $this->_contractPreviewService $contractPreviewService;
  27.     }
  28.     
  29.     public function details(Request $request)
  30.     {
  31.         $this->_cartService->setUserPanelCartView(false);
  32.         return $this->cartDetails($request);
  33.     }
  34.     
  35.     /* forward z panelu uzytkownika */
  36.     public function cartDetails(Request $request)
  37.     {
  38.         $cartData $this->_cartService->getDetails();
  39.         if ($cartData['items'])
  40.         {
  41.             $form $this->createForm(CartType::class);
  42.             $form->handleRequest($request);
  43.             if ($form->isSubmitted() && $form->isValid())
  44.             {
  45.                 $this->_cartService->updateCartFromForm($form);
  46.                     
  47.                 return $this->redirectToRoute('front_cart_account');
  48.             }
  49.         }
  50.         
  51.         return $this->render('Front/Modules/Cart/Templates/Cart/details.html.twig', [
  52.             'cartData' => $this->_cartService->getDetails(),
  53.             'formType' => isset($form) ? $form->getConfig()->getType()->getInnerType() : null,
  54.             'form' => isset($form) ? $form->createView() : null
  55.         ]);        
  56.     }
  57.     
  58.     public function detailsUpdateAjax(Request $request)
  59.     {
  60.         $form $this->createForm(CartType::class, null, ['validation_groups' => false]);
  61.         $form->handleRequest($request);
  62.         
  63.         $this->_cartService->updateCartFromForm($form);
  64.         
  65.         $form $this->createForm(CartType::class);
  66.         
  67.         $formType $form->getConfig()->getType()->getInnerType();
  68.         
  69.         if (!$formType->cartData['items'])
  70.             $form null;
  71.         return new JsonResponse(array(
  72.             'html' => $this->renderView('Front/Modules/Cart/Templates/Cart/partials/details.html.twig', array(
  73.                 'formType' => $formType,
  74.                 'form' => $form ?? null
  75.             ))
  76.         ));
  77.     }
  78.     
  79.     public function account(Request $request)
  80.     {
  81.         if ($this->getUser())
  82.             return $this->redirectToRoute('front_cart_client_data');
  83.         
  84.         $cartData $this->_cartService->getDetails();
  85.         // logowanie
  86.         
  87.         $loginForm $this->createForm(LoginType::class);
  88.         $loginForm->handleRequest($request);
  89.         
  90.         if ($loginForm->isSubmitted())
  91.         {
  92.             if ($loginForm->isValid())
  93.             {
  94.                 $loginError = !$this->_userService->authUserByUsernameAndPassword($loginForm['username']->getData(), $loginForm['password']->getData());
  95.                 
  96.                 if (!$loginError)
  97.                     return $this->redirectToRoute('front_cart_client_data');
  98.             }
  99.             
  100.             $activeTab 'login';
  101.         }
  102.         
  103.         // rejestracja
  104.         
  105.         $registerForm $this->createForm(RegistrationType::class);
  106.         $registerForm->handleRequest($request);
  107.         
  108.         if ($registerForm->isSubmitted())
  109.         {
  110.             if ($registerForm->isValid())
  111.             {
  112.                 $this->_cartService->setAccountData($registerForm);
  113.                 
  114.                 return $this->redirectToRoute('front_cart_client_data');
  115.             }
  116.             
  117.             $activeTab 'register';
  118.         }
  119.         
  120.         return $this->render('Front/Modules/Cart/Templates/Cart/account.html.twig', array(
  121.             'cartData' => $cartData,
  122.             'loginForm' => $loginForm->createView(),
  123.             'loginError' => $loginError ?? false,
  124.             'registerForm' => $registerForm->createView(),
  125.             'activeTab' => $activeTab ?? (!empty($cartData['account_data']) ? 'register' 'login')
  126.         ));
  127.     }
  128.     public function clientData(Request $request)
  129.     {
  130.         $form $this->createForm(ClientDataType::class);
  131.         
  132.         $formType $form->getConfig()->getType()->getInnerType();
  133.         
  134.         if (!$formType->isInitialized)
  135.             return $this->redirectToRoute('user_panel_cart_details');
  136.         $form->handleRequest($request);
  137.      
  138.         if ($form->isSubmitted() && $form->isValid())
  139.         {
  140.             $this->_cartService->setClientData($form);
  141.                 
  142.             return $this->redirectToRoute('front_cart_contract_preview');
  143.         }
  144.         return $this->render('Front/Modules/Cart/Templates/Cart/clientData.html.twig', array(
  145.             'cartData' => $this->_cartService->getDetails(),
  146.             'formType' => $form->getConfig()->getType()->getInnerType(),
  147.             'form' => $form->createView()
  148.         ));
  149.     }
  150.     
  151.     public function clientDataUpdateFormAjax(Request $request)
  152.     {
  153.         $form $this->createForm(ClientDataType::class, null, ['validation_groups' => false]);
  154.         $form->handleRequest($request);        
  155.         
  156.         return new JsonResponse(array(
  157.             'html' => $this->renderView('Front/Modules/Cart/Templates/Cart/partials/clientData.html.twig', array(
  158.                 'formType' => $form->getConfig()->getType()->getInnerType(),
  159.                 'form' => $form->createView()
  160.             ))
  161.         ));
  162.     }
  163.     
  164.     public function contractPreview()
  165.     {
  166.         $data $this->_contractPreviewService->getData();
  167.         
  168.         if ($data['error_message'] != '')
  169.         {
  170.             $this->addFlash('error'$data['error_message']);
  171.             return $this->redirectToRoute('user_panel_cart_details');
  172.         }
  173.       
  174.         return $this->render('Front/Modules/Cart/Templates/Cart/contractPreview.html.twig', array(
  175.             'cartData' => $this->_cartService->getDetails(),
  176.             'data' => $data
  177.         ));
  178.     }
  179.     
  180.     public function cartWidget(Request $request$isUserPanelCart false)
  181.     {
  182.         if ($request->isMethod('POST'))
  183.         {
  184.             $cmd $request->get('cmd');
  185.             $cmdParam $request->get('cmdParam');
  186.             
  187.             switch($cmd)
  188.             {
  189.                 case 'delete_product':
  190.                     if ($cmdParam != '')
  191.                         $this->_cartService->deleteProduct($cmdParam);
  192.                     break;
  193.                 case 'clear':
  194.                     $this->_cartService->clear();
  195.                     break;
  196.             }
  197.         }
  198.         $viewParams = array(
  199.             'data' => $this->_cartService->getDetails(),
  200.             'isUserPanelCart' => (bool)(int)$isUserPanelCart
  201.         );
  202.         
  203.         $view 'Front/Modules/Cart/Templates/Cart/partials/cartWidget.html.twig';
  204.         
  205.         if ($request->isXmlHttpRequest())
  206.         {
  207.             return new JsonResponse(array(
  208.                 'html' => $this->renderView($view$viewParams)
  209.             ));
  210.         }
  211.         else
  212.             return $this->render($view$viewParams);         
  213.     }
  214. }