custom/static-plugins/relewise-search/src/Core/Content/RelewiseSearch/Subscriber/RelewiseSearchSubscriber.php line 82

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Wexo\RelewiseSearch\Core\Content\RelewiseSearch\Subscriber;
  3. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Wexo\Relewise\Service\Model\Items\Filtering\Filter\Content\ContentCategoryIdFilter;
  6. use Wexo\Relewise\Service\Model\Items\Search\Facet\CategoryFacet;
  7. use Wexo\RelewiseSearch\Core\Content\RelewiseSearch\Events\RelewiseSearchBuilderContentModelEvent;
  8. use Wexo\RelewiseSearch\Core\Content\RelewiseSearch\Events\RelewiseSearchBuilderResultEvent;
  9. use Wexo\RelewiseSearch\Core\Content\RelewiseSearch\RelewiseSearchBuilder;
  10. use Wexo\RelewiseSearch\Core\Content\RelewiseSearch\Tab\RelewiseSearchTabEntity;
  11. use Wexo\RelewiseSearch\Service\ConfigService;
  12. /**
  13.  * Class RelewiseSearchSubscriber
  14.  * @package Wexo\RelewiseSearch\Core\Content\RelewiseSearch
  15.  */
  16. class RelewiseSearchSubscriber implements EventSubscriberInterface
  17. {
  18.     /**
  19.      * @var ConfigService
  20.      */
  21.     protected $configService;
  22.     /**
  23.      * RelewiseSearchSubscriber constructor.
  24.      * @param ConfigService $configService
  25.      */
  26.     public function __construct(ConfigService $configService)
  27.     {
  28.         $this->configService $configService;
  29.     }
  30.     /**
  31.      * @return string[]
  32.      */
  33.     public static function getSubscribedEvents(): array
  34.     {
  35.         return [
  36.             RelewiseSearchBuilderContentModelEvent::class => 'onRelewiseSearchBuilderContent',
  37.             RelewiseSearchBuilderResultEvent::class => 'onRelewiseSearchResult'
  38.         ];
  39.     }
  40.     /**
  41.      * @param RelewiseSearchBuilderContentModelEvent $event
  42.      */
  43.     public function onRelewiseSearchBuilderContent(RelewiseSearchBuilderContentModelEvent $event): void
  44.     {
  45.         $request $event->getRequest();
  46.         $searchTab $event->getSearchTabEntity();
  47.         $model $event->getContentSearchRequest();
  48.         $searchType RelewiseSearchBuilder::getSearchTypeFromRequest($request);
  49.         $sidebarConfig $this->sidebarConfig($event->getSalesChannelContext());
  50.         if ($sidebarConfig) {
  51.             $model->setTake($searchTab->getMaxResults() ?? 100);
  52.         }
  53.         // Check for current search
  54.         if ($searchTab->getTechnicalName() === $searchType) {
  55.             $categoryFacet = new CategoryFacet();
  56.             if ($category $request->get('category')) {
  57.                 $categoryFacet->setSelected(explode('|'$category));
  58.             }
  59.             // Only fetch items from the current content search. This saves network time by requesting less data
  60.             $model->setTake($searchTab->getMaxResults() ?? 100);
  61.             $model->addFacet($categoryFacet);
  62.         }
  63.         if ($categoryIds $searchTab->getCategoryIds()) {
  64.             $model->addFilter(new ContentCategoryIdFilter($categoryIds));
  65.         }
  66.     }
  67.     /**
  68.      * @param RelewiseSearchBuilderResultEvent $event
  69.      */
  70.     public function onRelewiseSearchResult(RelewiseSearchBuilderResultEvent $event)
  71.     {
  72.         $relewiseSearch $event->getRelewiseSearch();
  73.         $searchType RelewiseSearchBuilder::getSearchTypeFromRequest($event->getRequest());
  74.         if ($searchType !== 'product') {
  75.             /** @var RelewiseSearchTabEntity $currentSearch */
  76.             if ($currentSearch $relewiseSearch->getTabs()->filterByProperty('technicalName'$searchType)->first()) {
  77.                 $relewiseSearch->setResult($currentSearch->getRelewiseContent() ?? []);
  78.                 $relewiseSearch->setContentLayout($currentSearch->getListingLayout());
  79.             }
  80.         }
  81.         $relewiseSearch->setContentSidebar($this->sidebarConfig($event->getSalesChannelContext()));
  82.     }
  83.     /**
  84.      * @param SalesChannelContext $salesChannelContext
  85.      * @return bool|null
  86.      */
  87.     private function sidebarConfig(SalesChannelContext $salesChannelContext)
  88.     {
  89.         return $this->configService->isContentSidebarEnabled($salesChannelContext->getSalesChannelId());
  90.     }
  91. }