custom/static-plugins/WexoCytexRelewise/src/Subscriber/PageSubscriber.php line 59

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Wexo\CytexRelewise\Subscriber;
  3. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  4. use Shopware\Core\System\SystemConfig\SystemConfigService;
  5. use Shopware\Storefront\Page\Checkout\Offcanvas\OffcanvasCartPageLoadedEvent;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Wexo\CytexRelewise\WexoCytexRelewise;
  8. use Wexo\Relewise\Core\Content\Relewise\SalesChannel\Recommend\Product\AbstractRelewiseProductRecommendRoute;
  9. use Wexo\Relewise\Service\Model\Recommendation\CurrentCart;
  10. use Wexo\Relewise\Service\Registry\RelewiseModelRegistry;
  11. class PageSubscriber implements EventSubscriberInterface
  12. {
  13.     public const RELEWISE_OFFCANVAS_RECOMMENDATIONS 'relewiseOffCanvasRecommendations';
  14.     /**
  15.      * @var RelewiseModelRegistry
  16.      */
  17.     protected $modelRegistry;
  18.     /**
  19.      * @var AbstractRelewiseProductRecommendRoute
  20.      */
  21.     protected $recommendRoute;
  22.     /**
  23.      * @var SystemConfigService
  24.      */
  25.     protected $configService;
  26.     /**
  27.      * PageSubscriber constructor.
  28.      * @param RelewiseModelRegistry $modelRegistry
  29.      * @param AbstractRelewiseProductRecommendRoute $recommendRoute
  30.      * @param SystemConfigService $configService
  31.      */
  32.     public function __construct(
  33.         RelewiseModelRegistry $modelRegistry,
  34.         AbstractRelewiseProductRecommendRoute $recommendRoute,
  35.         SystemConfigService $configService
  36.     ) {
  37.         $this->modelRegistry $modelRegistry;
  38.         $this->recommendRoute $recommendRoute;
  39.         $this->configService $configService;
  40.     }
  41.     public static function getSubscribedEvents()
  42.     {
  43.         return [
  44.             OffcanvasCartPageLoadedEvent::class => 'onOffCanvasCartLoaded'
  45.         ];
  46.     }
  47.     /**
  48.      * @param OffcanvasCartPageLoadedEvent $event
  49.      */
  50.     public function onOffCanvasCartLoaded(OffcanvasCartPageLoadedEvent $event)
  51.     {
  52.         $request $event->getRequest();
  53.         // Make sure request is from offcanvas controller
  54.         // Since the info request to load the mini cart widget does not use the products from relewise
  55.         if ($request->attributes->get('_route') !== 'frontend.cart.offcanvas') {
  56.             return;
  57.         }
  58.         $salesChannelContext $event->getSalesChannelContext();
  59.         /** @var CurrentCart $recommendationType */
  60.         $recommendationType $this->modelRegistry->createRecommendation(
  61.             CurrentCart::KEY,
  62.             $salesChannelContext,
  63.             $request
  64.         );
  65.         if ($settings $this->configService->get(
  66.             WexoCytexRelewise::OFFCANVAS_CART_RECOMMEND_SETTINGS,
  67.             $salesChannelContext->getSalesChannelId()
  68.         )) {
  69.             $recommendationType->setSettings($settings);
  70.         }
  71.         $recommendations $this->recommendRoute->load(
  72.             $recommendationType,
  73.             $request,
  74.             $salesChannelContext,
  75.             new Criteria()
  76.         )->getProducts();
  77.         if ($recommendations->count()) {
  78.             $event->getPage()->addExtension(self::RELEWISE_OFFCANVAS_RECOMMENDATIONS$recommendations);
  79.         }
  80.     }
  81. }