custom/plugins/CoeBasketOfferSw6/src/Offer/Subscriber/OfferRuntimeSubscriber.php line 45

Open in your IDE?
  1. <?php
  2. namespace CoeBasketOfferSw6\Offer\Subscriber;
  3. use CoeBasketOfferSw6\Offer\OfferEntity;
  4. use Shopware\Core\Checkout\Cart\Cart;
  5. use Shopware\Core\Checkout\Cart\CartPersister;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
  7. use Shopware\Core\Framework\Uuid\Uuid;
  8. use Shopware\Core\System\SalesChannel\Context\AbstractSalesChannelContextFactory;
  9. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. class OfferRuntimeSubscriber implements EventSubscriberInterface {
  12.     /**
  13.      * @var CartPersister
  14.      */
  15.     private CartPersister $cartPersister;
  16.     /**
  17.      * @var AbstractSalesChannelContextFactory
  18.      */
  19.     private AbstractSalesChannelContextFactory $salesChannelContextFactory;
  20.     /**
  21.      * OfferRuntimeSubscriber constructor.
  22.      * @param CartPersister $cartPersister
  23.      * @param AbstractSalesChannelContextFactory $salesChannelContextFactory
  24.      */
  25.     public function __construct(
  26.         CartPersister $cartPersister,
  27.         AbstractSalesChannelContextFactory $salesChannelContextFactory
  28.     ) {
  29.         $this->cartPersister $cartPersister;
  30.         $this->salesChannelContextFactory $salesChannelContextFactory;
  31.     }
  32.     public static function getSubscribedEvents(): array {
  33.         return [
  34.             'coe_offer.loaded' => 'onOfferLoaded'
  35.         ];
  36.     }
  37.     public function onOfferLoaded(EntityLoadedEvent $event): void
  38.     {
  39.         /** @var string $salesChannelId */
  40.         $salesChannelId $event->getContext()->getSource()->getSalesChannelId();
  41.         /** @var SalesChannelContext $salesChannelContext */
  42.         $salesChannelContext $this->salesChannelContextFactory->create(Uuid::randomHex(), $salesChannelId);
  43.         /** @var OfferEntity $offer */
  44.         foreach ($event->getEntities() as $offer) {
  45.             $offer->setCart($this->computeCart($offer$salesChannelContext));
  46.         }
  47.     }
  48.     protected function computeCart(OfferEntity $offerSalesChannelContext $context) : Cart{
  49.        $cart $this->cartPersister->load($offer->getCartToken(), $context);
  50.        return $cart;
  51.     }
  52. }