src/FMT/Domain/Service/Cart/Provider/AnonymousProvider.php line 100

Open in your IDE?
  1. <?php
  2. namespace FMT\Domain\Service\Cart\Provider;
  3. use FMT\Data\Entity\Order;
  4. use FMT\Domain\Repository\OrderRepositoryInterface;
  5. use FMT\Domain\Service\CartProviderInterface;
  6. use FOS\UserBundle\Util\TokenGeneratorInterface;
  7. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  8. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  9. /**
  10.  * Class AnonymousProvider
  11.  * @package FMT\Domain\Service\Cart\Provider
  12.  */
  13. class AnonymousProvider implements CartProviderInterface
  14. {
  15.     const CART_TOKEN_KEY 'fmt-cart-anonymous-token';
  16.     /**
  17.      * @var OrderRepositoryInterface
  18.      */
  19.     private $orderRepository;
  20.     /**
  21.      * @var TokenGeneratorInterface
  22.      */
  23.     private $tokenGenerator;
  24.     /**
  25.      * @var SessionInterface
  26.      */
  27.     private $session;
  28.     /**
  29.      * UserCartProvider constructor.
  30.      * @param OrderRepositoryInterface $orderRepository
  31.      * @param TokenGeneratorInterface $tokenGenerator
  32.      * @param SessionInterface $session
  33.      */
  34.     public function __construct(
  35.         OrderRepositoryInterface $orderRepository,
  36.         TokenGeneratorInterface $tokenGenerator,
  37.         SessionInterface $session
  38.     ) {
  39.         $this->orderRepository $orderRepository;
  40.         $this->tokenGenerator $tokenGenerator;
  41.         $this->session $session;
  42.     }
  43.     /**
  44.      * @inheritdoc
  45.      */
  46.     public function supports(TokenInterface $token)
  47.     {
  48.         return $token->getUser() === 'anon.';
  49.     }
  50.     /**
  51.      * Get Cart by session-based anonymous token
  52.      *
  53.      * @inheritdoc
  54.      */
  55.     public function getCart(TokenInterface $token)
  56.     {
  57.         $token $this->getCartToken();
  58.         if (is_null($token)) {
  59.             return null;
  60.         }
  61.         return $this->orderRepository->getAnonymousCart($token);
  62.     }
  63.     /**
  64.      * @inheritdoc
  65.      */
  66.     public function createCart(TokenInterface $token): Order
  67.     {
  68.         $token $this->tokenGenerator->generateToken();
  69.         $this->setCartToken($token);
  70.         $cart = new Order();
  71.         $cart
  72.             ->setAnonymousToken($token)
  73.             ->setStatus(Order::STATUS_CART)
  74.             ->setZeroCartPrices()
  75.         ;
  76.         return $cart;
  77.     }
  78.     #region Internal
  79.     /**
  80.      * @return string|null
  81.      */
  82.     private function getCartToken()
  83.     {
  84.         return $this->session->get(self::CART_TOKEN_KEY);
  85.     }
  86.     /**
  87.      * @param string $token
  88.      */
  89.     private function setCartToken(string $token)
  90.     {
  91.         $this->session->set(self::CART_TOKEN_KEY$token);
  92.     }
  93.     #endregion
  94. }