custom/plugins/NrbnBasketStore/src/Storefront/Controller/NrbnBasketStoreController.php line 52

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace NrbnBasketStore\Storefront\Controller;
  3. use NrbnBasketStore\Storefront\Page\NrbnBasketStore\NrbnBasketStorePageLoader;
  4. use Shopware\Core\Checkout\Cart\Cart;
  5. use Shopware\Core\Checkout\Cart\LineItem\LineItem;
  6. use Shopware\Core\Checkout\Cart\SalesChannel\CartService;
  7. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  8. use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
  9. use Shopware\Core\Framework\Uuid\Uuid;
  10. use Shopware\Core\Framework\Validation\DataBag\RequestDataBag;
  11. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  12. use Shopware\Storefront\Controller\StorefrontController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. /**
  17.  * @Route(defaults={"_routeScope"={"storefront"}})
  18.  */
  19. class NrbnBasketStoreController extends StorefrontController
  20. {
  21.     /**
  22.      * @var CartService
  23.      */
  24.     private $cartService;
  25.     /**
  26.      * @var EntityRepository
  27.      */
  28.     private $basketStoreRespository;
  29.     private NrbnBasketStorePageLoader $nrbnBasketStorePageLoader;
  30.     public function __construct(
  31.         CartService $cartService,
  32.         EntityRepository $basketStoreRespository,
  33.         NrbnBasketStorePageLoader $nrbnBasketStorePageLoader
  34.     )
  35.     {
  36.         $this->cartService $cartService;
  37.         $this->basketStoreRespository $basketStoreRespository;
  38.         $this->nrbnBasketStorePageLoader $nrbnBasketStorePageLoader;
  39.     }
  40.     /**
  41.      * @Route("/NrbnBasketStore", name="frontend.nrbnbasketstore.page", methods={"GET"})
  42.      */
  43.     public function examplePage(Request $requestSalesChannelContext $context): Response
  44.     {
  45.         $page $this->nrbnBasketStorePageLoader->load($request,$context);
  46.         return $this->renderStorefront('@NrbnBasketStore/storefront/page/nrbnbasketstore/index.html.twig',[
  47.             'controllerName' => 'BasketStore',
  48.             'page' => $page
  49.         ]);
  50.     }
  51.     /**
  52.      * @Route("/NrbnBasketStore/save", name="frontend.nrbnbasketstore.save", methods={"POST"},  defaults={ "XmlHttpRequest"=true})
  53.      */
  54.     public function save(RequestDataBag $requestDataBag,SalesChannelContext $salesChannelContext)
  55.     {
  56.         $cart $this->cartService->getCart($salesChannelContext->getToken(),$salesChannelContext);
  57.         $description $requestDataBag->getAlnum('templatedesc');
  58.         if (!$description){
  59.             throw new MissingRequestParameterException($description);
  60.         }
  61.         $lineItems $cart->getLineItems();
  62.         $basketStore = [
  63.             'id' => Uuid::randomHex(),
  64.             'customerId' => $salesChannelContext->getCustomer()->getId(),
  65.             'description' => $description,
  66.         ];
  67.         /** @var LineItem $lineItem */
  68.         foreach ($lineItems as $lineItem) {
  69.             if ($lineItem->getType() != LineItem::PRODUCT_LINE_ITEM_TYPE) continue;
  70.             $basketStore['lineItems'][] = [
  71.                 'id' => Uuid::randomHex(),
  72.                 'cartId' => $basketStore['id'],
  73.                 'identifier' => $lineItem->getId(),
  74.                 'referencedId' => $lineItem->getReferencedId(),
  75.                 'type' => $lineItem->getType(),
  76.                 'quantity' => $lineItem->getQuantity(),
  77.                 'label' => $lineItem->getLabel(),
  78.                 'price' => $lineItem->getPrice(),
  79.                 'priceDefinition' => $lineItem->getPriceDefinition(),
  80.                 'coverId' => $lineItem->getCover() ? $lineItem->getCover()->getId() : null,
  81.                 'payload' => $lineItem->getPayload(),
  82.             ];
  83.         }
  84.         $this->basketStoreRespository->create([$basketStore],$salesChannelContext->getContext());
  85.         $this->addFlash(self::SUCCESS$this->trans(
  86.             'nrbn_basketstore.checkout.saved'
  87.         ));
  88.         return $this->redirectToRoute('frontend.checkout.cart.page');
  89.     }
  90. }