vendor/store.shopware.com/moorlmagazine/src/Core/Content/MagazineArticle/SalesChannel/MagazineArticleListing.php line 113

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace MoorlMagazine\Core\Content\MagazineArticle\SalesChannel;
  3. use MoorlFoundation\Core\System\EntityListingExtension;
  4. use MoorlFoundation\Core\System\EntityListingInterface;
  5. use MoorlMagazine\Core\Content\MagazineArticle\MagazineArticleDefinition;
  6. use MoorlMagazine\Core\Content\MagazineArticle\SalesChannel\Events\MagazineArticleListingCriteriaEvent;
  7. use MoorlMagazine\Core\Content\MagazineArticle\SalesChannel\Events\MagazineArticleListingResultEvent;
  8. use MoorlMagazine\Core\Content\MagazineArticle\SalesChannel\Events\MagazineArticleSearchCriteriaEvent;
  9. use MoorlMagazine\Core\Content\MagazineArticle\SalesChannel\Events\MagazineArticleSearchResultEvent;
  10. use MoorlMagazine\Core\Content\MagazineArticle\SalesChannel\Events\MagazineArticleSuggestCriteriaEvent;
  11. use MoorlMagazine\Core\Content\MagazineArticle\SalesChannel\Events\MagazineArticleSuggestResultEvent;
  12. use Shopware\Core\Content\Product\Events\ProductSearchResultEvent;
  13. use Shopware\Core\Content\Product\Events\ProductSuggestResultEvent;
  14. use Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingResult;
  15. use Shopware\Core\Content\Product\SalesChannel\Listing\ProductListingRouteResponse;
  16. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  17. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  18. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\MultiFilter;
  19. class MagazineArticleListing extends EntityListingExtension implements EntityListingInterface
  20. {
  21.     public function getEntityName(): string
  22.     {
  23.         return MagazineArticleDefinition::ENTITY_NAME;
  24.     }
  25.     public function getTitle(): string
  26.     {
  27.         return 'magazine-article-listing';
  28.     }
  29.     public function getSnippet(): ?string
  30.     {
  31.         return 'moorl-magazine.articles';
  32.     }
  33.     public function getElementConfig(): array
  34.     {
  35.         if ($this->isSearch() && $this->systemConfigService->get('MoorlMagazine.config.searchConfigActive')) {
  36.             return $this->systemConfigService->get('MoorlMagazine.config.searchConfig') ?: parent::getElementConfig();
  37.         } elseif ($this->isSuggest() && $this->systemConfigService->get('MoorlMagazine.config.suggestConfigActive')) {
  38.             return $this->systemConfigService->get('MoorlMagazine.config.suggestConfig') ?: parent::getElementConfig();
  39.         }
  40.         return parent::getElementConfig();
  41.     }
  42.     public function isActive(): bool
  43.     {
  44.         if ($this->isSearch()) {
  45.             return $this->systemConfigService->get('MoorlMagazine.config.searchActive') ? true false;
  46.         } elseif ($this->isSuggest()) {
  47.             return $this->systemConfigService->get('MoorlMagazine.config.suggestActive') ? true false;
  48.         }
  49.         return true;
  50.     }
  51.     public function getLimit(): int
  52.     {
  53.         if ($this->isSearch()) {
  54.             return $this->systemConfigService->get('MoorlMagazine.config.searchLimit') ?: 12;
  55.         } elseif ($this->isSuggest()) {
  56.             return $this->systemConfigService->get('MoorlMagazine.config.suggestLimit') ?: 6;
  57.         }
  58.         return 1;
  59.     }
  60.     public function processCriteria(Criteria $criteria): void
  61.     {
  62.         $criteria->addAssociation('tags');
  63.         $criteria->addAssociation('media');
  64.         $criteria->addAssociation('products.cover');
  65.         $criteria->addAssociation('categories');
  66.         $criteria->addFilter(new MagazineArticleAvailableFilter($this->salesChannelContext));
  67.         $criteria->addFilter(new EqualsFilter('moorl_magazine_article.invisible'false));
  68.         if ($this->event instanceof ProductSuggestResultEvent) {
  69.             $eventClass MagazineArticleSuggestCriteriaEvent::class;
  70.         } elseif ($this->event instanceof ProductSearchResultEvent) {
  71.             $eventClass MagazineArticleSearchCriteriaEvent::class;
  72.         } elseif ($this->isWidget()) {
  73.             $eventClass MagazineArticleSearchCriteriaEvent::class;
  74.         } else {
  75.             $eventClass MagazineArticleListingCriteriaEvent::class;
  76.         }
  77.         $this->eventDispatcher->dispatch(
  78.             new $eventClass($this->request$criteria$this->salesChannelContext)
  79.         );
  80.     }
  81.     public function processSearchResult(ProductListingResult $searchResult): void
  82.     {
  83.         if ($this->event instanceof ProductSuggestResultEvent) {
  84.             $eventClass MagazineArticleSuggestResultEvent::class;
  85.         } elseif ($this->event instanceof ProductSearchResultEvent) {
  86.             $eventClass MagazineArticleSearchResultEvent::class;
  87.         } elseif ($this->isWidget()) {
  88.             $eventClass MagazineArticleSearchResultEvent::class;
  89.         } else {
  90.             $eventClass MagazineArticleListingResultEvent::class;
  91.         }
  92.         $this->eventDispatcher->dispatch(
  93.             new $eventClass($this->request$searchResult$this->salesChannelContext)
  94.         );
  95.     }
  96.     public function listingRoute(Criteria $criteria, ?string $categoryId null): ProductListingRouteResponse
  97.     {
  98.         if ($categoryId && !$criteria->hasState('swCategories')) {
  99.             $criteria->addFilter(new MultiFilter(
  100.                 MultiFilter::CONNECTION_OR, [
  101.                     new EqualsFilter('moorl_magazine_article.swCategories.id'null),
  102.                     new EqualsFilter('moorl_magazine_article.swCategories.id'$categoryId)
  103.                 ]
  104.             ));
  105.         }
  106.         return parent::listingRoute($criteria$categoryId);
  107.     }
  108. }