vendor/shopware/core/Framework/DataAbstractionLayer/Indexing/Subscriber/RegisteredIndexerSubscriber.php line 43

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Framework\DataAbstractionLayer\Indexing\Subscriber;
  3. use Shopware\Core\Framework\DataAbstractionLayer\Indexing\EntityIndexerRegistry;
  4. use Shopware\Core\Framework\Migration\IndexerQueuer;
  5. use Shopware\Core\Framework\Store\Event\FirstRunWizardFinishedEvent;
  6. use Shopware\Core\Framework\Update\Event\UpdatePreFinishEvent;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. /**
  9.  * @deprecated tag:v6.5.0 - reason:becomes-internal - EventSubscribers will become internal in v6.5.0
  10.  */
  11. class RegisteredIndexerSubscriber implements EventSubscriberInterface
  12. {
  13.     private IndexerQueuer $indexerQueuer;
  14.     private EntityIndexerRegistry $indexerRegistry;
  15.     /**
  16.      * @internal
  17.      */
  18.     public function __construct(IndexerQueuer $indexerQueuerEntityIndexerRegistry $indexerRegistry)
  19.     {
  20.         $this->indexerQueuer $indexerQueuer;
  21.         $this->indexerRegistry $indexerRegistry;
  22.     }
  23.     /**
  24.      * @return array<string, string|array{0: string, 1: int}|list<array{0: string, 1?: int}>>
  25.      */
  26.     public static function getSubscribedEvents()
  27.     {
  28.         return [
  29.             UpdatePreFinishEvent::class => 'runRegisteredIndexers',
  30.             FirstRunWizardFinishedEvent::class => 'runRegisteredIndexers',
  31.         ];
  32.     }
  33.     /**
  34.      * @internal
  35.      */
  36.     public function runRegisteredIndexers(): void
  37.     {
  38.         $queuedIndexers $this->indexerQueuer->getIndexers();
  39.         if (empty($queuedIndexers)) {
  40.             return;
  41.         }
  42.         $this->indexerQueuer->finishIndexer(array_keys($queuedIndexers));
  43.         foreach ($queuedIndexers as $indexerName => $options) {
  44.             $indexer $this->indexerRegistry->getIndexer($indexerName);
  45.             if ($indexer === null) {
  46.                 continue;
  47.             }
  48.             // If we don't have any required indexer, schedule all
  49.             if ($options === []) {
  50.                 $this->indexerRegistry->sendIndexingMessage([$indexerName]);
  51.                 continue;
  52.             }
  53.             $skipList array_values(array_diff($indexer->getOptions(), $options));
  54.             $this->indexerRegistry->sendIndexingMessage([$indexerName], $skipList);
  55.         }
  56.     }
  57. }