src/Controller/CartController.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\DTO\AppDTO;
  4. use App\Model\Cart as ModelCart;
  5. use App\Model\Delivery as ModelDelivery;
  6. use App\Model\Prod as ModelProd;
  7. use App\Model\Wishlist as ModelWishlist;
  8. use App\Repository\DeliveryRepository;
  9. use App\Repository\PageRepository;
  10. use App\Repository\ProdRepository;
  11. use App\Service\Auth\Auth as Auth;
  12. use App\Service\Cart\Cart;
  13. use App\Service\Checkout\Checkout;
  14. use App\Service\Paginator as ServicePaginator;
  15. use App\Service\Promocode\PromocodeService;
  16. use Doctrine\ORM\EntityManagerInterface;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\RequestStack;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Security\Core\Security;
  23. use Symfony\Contracts\Cache\CacheInterface;
  24. class CartController extends AbstractASController
  25. {
  26.     public function __construct(
  27.         private DeliveryRepository $Deliveries
  28.         private PageRepository $Pages
  29.         private ProdRepository $Prods
  30.         private ModelWishlist $Wishes
  31.         private CacheInterface $Cache
  32.         private AppDTO $app
  33.         private Auth $Auth
  34.         private ModelCart $Cart
  35.         private Checkout $Checkout
  36.         private ModelProd $ModelProd
  37.         private Security $security
  38.         private EntityManagerInterface $em,
  39.         private PromocodeService $promocodeService
  40.     )
  41.     {
  42.     }
  43.     #[Route(path'/cart'name'cart_no_locale'defaults: ['_locale' => '%app.default_lang%'])]
  44.     #[Route(path'/{_locale}/cart'name'cart'requirements: ['_locale' => '%app.langs%'])]
  45.     public function index(Request $request\App\Service\Cart\Cart $Cart): Response
  46.     {
  47.         $start = (int) $request->get('start'0);
  48.         $results $this->getParameter('cart.results');
  49.         
  50.         $wishlist $this->Wishes->getOnePage($start$results);
  51.         $deliveries $this->Deliveries->getByRegion($this->Checkout->getRegion_fias_id());
  52.         $freedelivery $this->Cart->isFreeDelivery((float) $this->app->sett->get('free_delivery_amount'));
  53.         $prod_limited_msg $this->app->labels->get('cart-edit-1').':\n';
  54.         foreach ($this->Cart->getProdsLimited() as $k => $v)
  55.         {
  56.             $prod $this->Prods->get($v);
  57.             $prod_limited_msg .= $prod->getArt().': '.$prod->getNum().' '.$this->app->labels->get('cart-edit-2').'\n';
  58.         }
  59.         $cart_items $this->Cart->getCart();
  60.         foreach ($cart_items as $k => $v) {
  61.             $cart_items[$k]['prod'] = $this->Prods->get($v['id']);
  62.         }
  63.         
  64.         $cart_new_prods $this->em->createQuery("SELECT p FROM App\Entity\Prod p WHERE p.visible = 1 AND p.new = 1 AND (p.num > 0 or p.num2 > 0 or p.num3 > 0)")
  65.             ->setMaxResults(6)
  66.             ->getResult();
  67.         
  68.         foreach ($cart_new_prods as $k => $prod) {
  69.             $cart_new_prods[$k]->prices $this->ModelProd->getPrices($prod);
  70.         }
  71.         $cart_pop_prods $this->em->createQuery("SELECT p FROM App\Entity\Prod p WHERE p.visible = 1 AND p.pop = 1 AND (p.num > 0 or p.num2 > 0 or p.num3 > 0)")
  72.             ->setMaxResults(6)
  73.             ->getResult();
  74.         
  75.         foreach ($cart_pop_prods as $k => $prod) {
  76.             $cart_pop_prods[$k]->prices $this->ModelProd->getPrices($prod);
  77.         }
  78.         return $this->render('cart/edit.html.twig', [
  79.             'cart' => $this->Cart,
  80.             'cart_items' => $cart_items,
  81.             'wishlist' => $wishlist,
  82.             'deliveries' => $deliveries,
  83.             'freedelivery' => $freedelivery,
  84.             'delivery_indicator_data' => $Cart->getDeliveryIndicatorData((float) $this->app->sett->get('free_delivery_amount')),
  85.             'prod_limited_msg' => $prod_limited_msg,
  86.             'checkout' => $this->Checkout,
  87.             'page' => $this->Pages->getByName('cart'),
  88.             'paginator' => new ServicePaginator('cart'count($wishlist), $results$start),
  89.             'cart_pop_prods' => $cart_pop_prods,
  90.             'cart_new_prods' => $cart_new_prods,
  91.             'promocode' => $this->promocodeService,
  92.         ]);
  93.     }
  94.     #[Route(path'/cart/show'name'cart_show_no_locale'defaults: ['_locale' => '%app.default_lang%'])]
  95.     #[Route(path'/{_locale}/cart/show'name'cart_show'requirements: ['_locale' => '%app.langs%'])]
  96.     public function show(Request $request): Response
  97.     {
  98.         $freedelivery $this->Cart->isFreeDelivery((float) $this->app->sett->get('free_delivery_amount'));
  99.         $cart_items $this->Cart->getCart();
  100.         foreach ($cart_items as $k => $v) {
  101.             $cart_items[$k]['prod'] = $this->Prods->get($v['id']);
  102.         }
  103.         
  104.         return $this->render('cart/show.html.twig', [
  105.             'order' => null,
  106.             'cart' => $this->Cart,
  107.             'cart_items' => $cart_items,
  108.             'freedelivery' => $freedelivery,
  109.             'checkout' => $this->Checkout,
  110.         ]);
  111.     }
  112.     #[Route(path'/cart/list'name'cart_list_no_locale'defaults: ['_locale' => '%app.default_lang%'])]
  113.     #[Route(path'/{_locale}/cart/list'name'cart_list'requirements: ['_locale' => '%app.langs%'])]
  114.     public function list(Request $request): Response
  115.     {
  116.         $cart_items $this->Cart->getCart();
  117.         foreach ($cart_items as $k => $v) {
  118.             $cart_items[$k]['prod'] = $this->Prods->get($v['id']);
  119.         }
  120.         return $this->render('cart/list.html.twig', [
  121.             'cart' => $this->Cart,
  122.             'cart_items' => $cart_items,
  123.         ]);
  124.     } 
  125.     #[Route(path'/cart/clear'name'cart_clear')]
  126.     public function clear(Request $request): Response
  127.     {
  128.         $this->Cart->deleteAll();
  129.         return new Response("ok");
  130.     } 
  131. }