vendor/store.shopware.com/swagenterprisesearchplatform/src/IndexingQuery/IndexingQueryService.php line 62

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Swag\EnterpriseSearch\IndexingQuery;
  3. use Shopware\Core\Framework\Api\Context\SalesChannelApiSource;
  4. use Shopware\Core\Framework\Context;
  5. use Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry;
  6. use Shopware\Core\Framework\DataAbstractionLayer\EntityDefinition;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  9. class IndexingQueryService
  10. {
  11.     /**
  12.      * @var DefinitionInstanceRegistry
  13.      */
  14.     private $definitionInstanceRegistry;
  15.     /**
  16.      * @var IndexingQueryGateway
  17.      */
  18.     private $indexingQueryGateway;
  19.     public function __construct(
  20.         DefinitionInstanceRegistry $definitionInstanceRegistry,
  21.         IndexingQueryGateway $indexingQueryGateway
  22.     ) {
  23.         $this->definitionInstanceRegistry $definitionInstanceRegistry;
  24.         $this->indexingQueryGateway $indexingQueryGateway;
  25.     }
  26.     public function getQueries(EntityDefinition $entityDefinitionContext $context): ?IndexingQueryEntity
  27.     {
  28.         $source $context->getSource();
  29.         if (!$source instanceof SalesChannelApiSource) {
  30.             return null;
  31.         }
  32.         if (IndexingQueryExtension::hasIndexingQueryExtension($context)) {
  33.             $extension IndexingQueryExtension::getIndexingQueryExtension($context);
  34.         } else {
  35.             IndexingQueryExtension::addIndexingQueryExtension($context);
  36.             $extension IndexingQueryExtension::getIndexingQueryExtension($context);
  37.         }
  38.         if (!$extension->isCached()) {
  39.             return null;
  40.         }
  41.         if ($extension->hasIndexingQueryEntityForEntity($entityDefinition->getEntityName())) {
  42.             return $extension->getIndexingQueryEntityForEntity($entityDefinition->getEntityName());
  43.         }
  44.         $indexingQuery $this->getIndexingQuery($source$entityDefinition);
  45.         if (!$indexingQuery) {
  46.             return null;
  47.         }
  48.         $boostingCollection $this->indexingQueryGateway->fromJsonToBoostingCollection($indexingQuery->boostingJson ?? []);
  49.         $relevanceCollection $this->indexingQueryGateway->fromJsonToRelevanceCollection($indexingQuery->relevanceJson ?? []);
  50.         $indexingQuery->setBoostingCollection($boostingCollection);
  51.         $indexingQuery->setRelevanceCollection($relevanceCollection);
  52.         $extension->setIndexingQueryForEntity($indexingQuery);
  53.         return $indexingQuery;
  54.     }
  55.     private function getIndexingQuery(SalesChannelApiSource $apiSourceEntityDefinition $entityDefinition): ?IndexingQueryEntity
  56.     {
  57.         $criteria = new Criteria();
  58.         $criteria->addFilter(
  59.             new EqualsFilter('salesChannelId'$apiSource->getSalesChannelId()),
  60.             new EqualsFilter('entityName'$entityDefinition->getEntityName())
  61.         );
  62.         return $this->definitionInstanceRegistry->getRepository(IndexingQueryDefinition::ENTITY_NAME)
  63.             ->search($criteriaContext::createDefaultContext())
  64.             ->first();
  65.     }
  66. }