custom/plugins/CbaxModulLexicon/src/Subscriber/FrontendSubscriber.php line 40

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Cbax\ModulLexicon\Subscriber;
  3. use Cbax\ModulLexicon\Components\LexiconReplacer;
  4. use Shopware\Storefront\Page\Product\QuickView\MinimalQuickViewPageLoadedEvent;
  5. use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
  6. use Shopware\Storefront\Framework\Routing\RequestTransformer;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Shopware\Core\PlatformRequest;
  9. use Shopware\Core\System\SystemConfig\SystemConfigService;
  10. class FrontendSubscriber implements EventSubscriberInterface
  11. {
  12.     const CONFIG_PATH 'CbaxModulLexicon.config';
  13.     private $systemConfigService;
  14.     private $config null;
  15.     private $lexiconReplacer;
  16.     public function __construct(
  17.         LexiconReplacer $lexiconReplacer,
  18.         SystemConfigService $systemConfigService)
  19.     {
  20.         $this->lexiconReplacer $lexiconReplacer;
  21.         $this->systemConfigService $systemConfigService;
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             ProductPageLoadedEvent::class => 'onProductPageLoaded',
  27.             MinimalQuickViewPageLoadedEvent::class => 'onQuickViewPageLoaded'
  28.         ];
  29.     }
  30.     public function onProductPageLoaded(ProductPageLoadedEvent $event)
  31.     {
  32.         $request $event->getRequest();
  33.         $salesChannelId $request->attributes->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_CONTEXT_OBJECT)->getSalesChannelId();
  34.         $this->config $this->config ?? $this->systemConfigService->get(self::CONFIG_PATH$salesChannelId);
  35.         if (!empty($this->config['active']))
  36.         {
  37.             if (!empty($this->config['activeArticle']) || !empty($this->config['activeProperties']))
  38.             {
  39.                 $shopUrl $request->attributes->get(RequestTransformer::STOREFRONT_URL);
  40.                 $context $request->attributes->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_CONTEXT_OBJECT)->getContext();
  41.                 $page $event->getPage();
  42.                 $cmsPage $page->getCmsPage();
  43.                 $product $page->getProduct();
  44.                 if (!empty($cmsPage)) {
  45.                     $productDescriptionReviewElement $cmsPage->getFirstElementOfType('product-description-reviews');
  46.                     if (!empty($productDescriptionReviewElement) && !empty($productDescriptionReviewElement->getData()))
  47.                     {
  48.                         $cmsProduct $productDescriptionReviewElement->getData()->getProduct();
  49.                     }
  50.                 }
  51.                 if (empty($product)) return;
  52.                 if (count($this->config['activeProperties']) > 0) {
  53.                     foreach ($product->get('sortedProperties')->getElements() as $groupId => $propertyGroup) {
  54.                         if (in_array('name'$this->config['activeProperties'])) {
  55.                             $translatedGroup $propertyGroup->getTranslated();
  56.                             $translatedGroup['name'] = $this->lexiconReplacer->getReplaceText($translatedGroup['name'], $salesChannelId$shopUrl$context$request$this->config);
  57.                             $propertyGroup->setTranslated($translatedGroup);
  58.                         }
  59.                         foreach ($propertyGroup->getOptions()->getElements() as $optionId => $option) {
  60.                             if (in_array('value'$this->config['activeProperties'])) {
  61.                                 $translatedOption $option->getTranslated();
  62.                                 $translatedOption['name'] = $this->lexiconReplacer->getReplaceText($translatedOption['name'], $salesChannelId$shopUrl$context$request$this->config);
  63.                                 $propertyGroup->getOptions()->getElements()[$optionId]->setTranslated($translatedOption);
  64.                             }
  65.                         }
  66.                     }
  67.                 }
  68.                 if (!empty($this->config['activeArticle']) || !empty($this->config['activeProductCustomFields'])) {
  69.                     $productTranslated $product->getTranslated();
  70.                     if (!empty($this->config['activeArticle'])) {
  71.                         $productTranslated['description'] = $this->lexiconReplacer->getReplaceText($productTranslated['description'], $salesChannelId$shopUrl$context$request$this->config);
  72.                     }
  73.                     if (!empty($this->config['activeProductCustomFields']) && !empty($productTranslated['customFields'])) {
  74.                         foreach ($this->config['activeProductCustomFields'] as $field) {
  75.                             if (!empty($productTranslated['customFields'][$field])) {
  76.                                 $productTranslated['customFields'][$field] = $this->lexiconReplacer->getReplaceText($productTranslated['customFields'][$field], $salesChannelId$shopUrl$context$request$this->config);
  77.                             }
  78.                         }
  79.                     }
  80.                     $product->assign(['translated' => $productTranslated]);
  81.                     if (!empty($cmsProduct)) {
  82.                         $cmsProduct->assign(['translated' => $productTranslated]);
  83.                     }
  84.                 }
  85.             }
  86.         }
  87.     }
  88.     public function onQuickViewPageLoaded (MinimalQuickViewPageLoadedEvent $event)
  89.     {
  90.         $request $event->getRequest();
  91.         $salesChannelId $request->attributes->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_CONTEXT_OBJECT)->getSalesChannelId();
  92.         $this->config $this->config ?? $this->systemConfigService->get(self::CONFIG_PATH$salesChannelId);
  93.         if (!empty($this->config['active']) && !empty($this->config['activeArticle']))
  94.         {
  95.             $shopUrl $request->attributes->get(RequestTransformer::STOREFRONT_URL);
  96.             $context $request->attributes->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_CONTEXT_OBJECT)->getContext();
  97.             $page $event->getPage();
  98.             $product $page->getProduct();
  99.             if (empty($product)) return;
  100.             $productTranslated $product->getTranslated();
  101.             $productTranslated['description'] = $this->lexiconReplacer->getReplaceText($productTranslated['description'], $salesChannelId$shopUrl$context$request$this->config);
  102.             $product->assign(['translated' => $productTranslated]);
  103.         }
  104.     }
  105. }