src/Component/Elasticsearch/PropertyBuilder/CategoriesPropertyBuilder.php line 23

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace BitBag\OpenMarketplace\Component\Elasticsearch\PropertyBuilder;
  4. use BitBag\OpenMarketplace\Component\Product\Entity\ProductInterface;
  5. use BitBag\OpenMarketplace\Component\Taxonomy\Entity\TaxonInterface;
  6. use BitBag\SyliusElasticsearchPlugin\PropertyBuilder\AbstractBuilder;
  7. use Elastica\Document;
  8. use FOS\ElasticaBundle\Event\PostTransformEvent;
  9. use Sylius\Component\Core\Model\ProductTaxonInterface;
  10. use Sylius\Component\Locale\Provider\LocaleProviderInterface;
  11. final class CategoriesPropertyBuilder extends AbstractBuilder
  12. {
  13.     public function __construct(
  14.         private LocaleProviderInterface $localeProvider,
  15.         private string $categoriesProperty,
  16.     ) {
  17.     }
  18.     public function consumeEvent(PostTransformEvent $event): void
  19.     {
  20.         $locales $this->localeProvider->getAvailableLocalesCodes();
  21.         $this->buildProperty(
  22.             $event,
  23.             ProductInterface::class,
  24.             function (ProductInterface $productDocument $document) use ($locales): void {
  25.                 foreach ($locales as $localeCode) {
  26.                     $document->set(
  27.                         $this->resolvePropertyName($localeCode),
  28.                         $this->resolveCategories($product$localeCode),
  29.                     );
  30.                 }
  31.             }
  32.         );
  33.     }
  34.     private function resolvePropertyName(string $localeCode): string
  35.     {
  36.         return sprintf('%s_%s'$this->categoriesProperty$localeCode);
  37.     }
  38.     private function resolveCategories(ProductInterface $productstring $localeCode): array
  39.     {
  40.         $categories = [];
  41.         /** @var ProductTaxonInterface $productTaxon */
  42.         foreach ($product->getProductTaxons() as $productTaxon) {
  43.             $taxon $productTaxon->getTaxon();
  44.             if (!$taxon instanceof TaxonInterface) {
  45.                 continue;
  46.             }
  47.             $name $taxon->getTranslation($localeCode)->getName();
  48.             if (null === $name) {
  49.                 continue;
  50.             }
  51.             $categories[] = $name;
  52.         }
  53.         return $categories;
  54.     }
  55. }