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

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