vendor/store.shopware.com/swagb2bplatform/components/Shop/BridgePlatform/ContextProvider.php line 97

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\B2B\Shop\BridgePlatform;
  3. use Shopware\Core\Defaults;
  4. use Shopware\Core\Framework\Api\Context\AdminApiSource;
  5. use Shopware\Core\Framework\Context;
  6. use Shopware\Core\Framework\Routing\Event\SalesChannelContextResolvedEvent;
  7. use Shopware\Core\Framework\Uuid\Uuid;
  8. use Shopware\Core\PlatformRequest;
  9. use Shopware\Core\System\SalesChannel\Context\SalesChannelContextServiceInterface;
  10. use Shopware\Core\System\SalesChannel\Context\SalesChannelContextServiceParameters;
  11. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\RequestStack;
  14. class ContextProvider implements EventSubscriberInterface
  15. {
  16.     private ?SalesChannelContext $salesChannelContext null;
  17.     private ?Context $context null;
  18.     private RequestStack $requestStack;
  19.     private SalesChannelContextServiceInterface $salesChannelContextService;
  20.     public function __construct(
  21.         RequestStack $requestStack,
  22.         SalesChannelContextServiceInterface $salesChannelContextService
  23.     ) {
  24.         $this->requestStack $requestStack;
  25.         $this->salesChannelContextService $salesChannelContextService;
  26.     }
  27.     public static function getSubscribedEvents(): array
  28.     {
  29.         return [
  30.             SalesChannelContextResolvedEvent::class => 'onSalesChannelContextResolved',
  31.         ];
  32.     }
  33.     public function getSalesChannelContext(): SalesChannelContext
  34.     {
  35.         if ($this->salesChannelContext) {
  36.             return $this->salesChannelContext;
  37.         }
  38.         $this->salesChannelContext $this->loadSalesChannelContextFromRequest();
  39.         if (!$this->salesChannelContext) {
  40.             $this->salesChannelContext $this->loadDefaultSalesChannelContext();
  41.         }
  42.         return $this->salesChannelContext;
  43.     }
  44.     public function setSalesChannelContext(SalesChannelContext $salesChannelContext): void
  45.     {
  46.         $this->salesChannelContext $salesChannelContext;
  47.     }
  48.     public function hasSalesChannelContext(): bool
  49.     {
  50.         return $this->salesChannelContext instanceof SalesChannelContext;
  51.     }
  52.     public function getContext(): Context
  53.     {
  54.         if ($this->context) {
  55.             return $this->context;
  56.         }
  57.         $this->context $this->loadContextFromRequest();
  58.         if ($this->context) {
  59.             return $this->context;
  60.         }
  61.         return $this->getSalesChannelContext()->getContext();
  62.     }
  63.     public function isAdminApiSource(): bool
  64.     {
  65.         return $this->getContext()->getSource() instanceof AdminApiSource;
  66.     }
  67.     public function setContext(Context $context): void
  68.     {
  69.         $this->context $context;
  70.     }
  71.     /**
  72.      * @internal
  73.      */
  74.     protected function loadSalesChannelContextFromRequest(): ?SalesChannelContext
  75.     {
  76.         $masterRequest $this->requestStack->getMasterRequest();
  77.         if (!$masterRequest) {
  78.             return null;
  79.         }
  80.         return $masterRequest
  81.             ->attributes
  82.             ->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_CONTEXT_OBJECT);
  83.     }
  84.     /**
  85.      * @internal
  86.      */
  87.     protected function loadContextFromRequest(): ?Context
  88.     {
  89.         $masterRequest $this->requestStack->getMasterRequest();
  90.         if (!$masterRequest) {
  91.             return null;
  92.         }
  93.         return $masterRequest
  94.             ->attributes
  95.             ->get(PlatformRequest::ATTRIBUTE_CONTEXT_OBJECT);
  96.     }
  97.     public function onSalesChannelContextResolved(SalesChannelContextResolvedEvent $event): void
  98.     {
  99.         $this->salesChannelContext $event->getSalesChannelContext();
  100.     }
  101.     /**
  102.      * @internal
  103.      */
  104.     protected function loadDefaultSalesChannelContext(): SalesChannelContext
  105.     {
  106.         return $this
  107.             ->salesChannelContextService
  108.             ->get(new SalesChannelContextServiceParameters(
  109.                 Defaults::SALES_CHANNEL,
  110.                 Uuid::randomHex(),
  111.                 Defaults::LANGUAGE_SYSTEM
  112.             ));
  113.     }
  114. }