123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Indexer\Model;
- use Magento\Framework\Indexer\ConfigInterface;
- use Magento\Framework\Indexer\IndexerInterface;
- use Magento\Framework\Indexer\IndexerInterfaceFactory;
- use Magento\Framework\Indexer\StateInterface;
- class Processor
- {
- /**
- * @var ConfigInterface
- */
- protected $config;
- /**
- * @var IndexerInterfaceFactory
- */
- protected $indexerFactory;
- /**
- * @var Indexer\CollectionFactory
- */
- protected $indexersFactory;
- /**
- * @var \Magento\Framework\Mview\ProcessorInterface
- */
- protected $mviewProcessor;
- /**
- * @param ConfigInterface $config
- * @param IndexerInterfaceFactory $indexerFactory
- * @param Indexer\CollectionFactory $indexersFactory
- * @param \Magento\Framework\Mview\ProcessorInterface $mviewProcessor
- */
- public function __construct(
- ConfigInterface $config,
- IndexerInterfaceFactory $indexerFactory,
- Indexer\CollectionFactory $indexersFactory,
- \Magento\Framework\Mview\ProcessorInterface $mviewProcessor
- ) {
- $this->config = $config;
- $this->indexerFactory = $indexerFactory;
- $this->indexersFactory = $indexersFactory;
- $this->mviewProcessor = $mviewProcessor;
- }
- /**
- * Regenerate indexes for all invalid indexers
- *
- * @return void
- */
- public function reindexAllInvalid()
- {
- $sharedIndexesComplete = [];
- foreach (array_keys($this->config->getIndexers()) as $indexerId) {
- /** @var Indexer $indexer */
- $indexer = $this->indexerFactory->create();
- $indexer->load($indexerId);
- $indexerConfig = $this->config->getIndexer($indexerId);
- if ($indexer->isInvalid()) {
- // Skip indexers having shared index that was already complete
- if (!in_array($indexerConfig['shared_index'], $sharedIndexesComplete)) {
- $indexer->reindexAll();
- } else {
- /** @var \Magento\Indexer\Model\Indexer\State $state */
- $state = $indexer->getState();
- $state->setStatus(StateInterface::STATUS_VALID);
- $state->save();
- }
- if ($indexerConfig['shared_index']) {
- $sharedIndexesComplete[] = $indexerConfig['shared_index'];
- }
- }
- }
- }
- /**
- * Regenerate indexes for all indexers
- *
- * @return void
- */
- public function reindexAll()
- {
- /** @var IndexerInterface[] $indexers */
- $indexers = $this->indexersFactory->create()->getItems();
- foreach ($indexers as $indexer) {
- $indexer->reindexAll();
- }
- }
- /**
- * Update indexer views
- *
- * @return void
- */
- public function updateMview()
- {
- $this->mviewProcessor->update('indexer');
- }
- /**
- * Clean indexer view changelogs
- *
- * @return void
- */
- public function clearChangelog()
- {
- $this->mviewProcessor->clearChangelog('indexer');
- }
- }
|