12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\Elasticsearch\Model\Indexer\Plugin;
- use Magento\Elasticsearch\Model\Config;
- use Magento\Framework\Indexer\Config\DependencyInfoProvider as Provider;
- use Magento\CatalogSearch\Model\Indexer\Fulltext as CatalogSearchFulltextIndexer;
- use Magento\CatalogInventory\Model\Indexer\Stock\Processor as CatalogInventoryStockIndexer;
- /**
- * Plugin for maintenance catalog search index dependency on stock index.
- * If elasticsearch is used as search engine catalog search index becomes dependent on stock index. Elasticsearch
- * module declares this dependence. But in case when elasticsearch module is enabled and elasticsearch engine isn`t
- * used as search engine other search engines don`t need this dependency.
- * This plugin remove catalog search index dependency on stock index when elasticsearch isn`t used as search engine
- * except full reindexing. During full reindexing this dependency doesn`t make overhead.
- */
- class DependencyUpdaterPlugin
- {
- /**
- * @var Config
- */
- private $config;
- /**
- * @param Config $config
- */
- public function __construct(Config $config)
- {
- $this->config = $config;
- }
- /**
- * Remove index dependency, if it needed, on run reindexing by specifics indexes.
- *
- * @param Provider $provider
- * @param array $dependencies
- * @param string $indexerId
- * @return array
- * @see \Magento\Indexer\Console\Command\IndexerReindexCommand::getIndexers()
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- */
- public function afterGetIndexerIdsToRunBefore(Provider $provider, array $dependencies, string $indexerId): array
- {
- if ($this->isFilteringNeeded($indexerId, CatalogSearchFulltextIndexer::INDEXER_ID)) {
- $dependencies = array_diff($dependencies, [CatalogInventoryStockIndexer::INDEXER_ID]);
- }
- return $dependencies;
- }
- /**
- * Remove index dependency, if it needed, on reindex triggers.
- *
- * @param Provider $provider
- * @param array $dependencies
- * @param string $indexerId
- * @return array
- * @see \Magento\Indexer\Model\Indexer\DependencyDecorator
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- */
- public function afterGetIndexerIdsToRunAfter(Provider $provider, array $dependencies, string $indexerId): array
- {
- if ($this->isFilteringNeeded($indexerId, CatalogInventoryStockIndexer::INDEXER_ID)) {
- $dependencies = array_diff($dependencies, [CatalogSearchFulltextIndexer::INDEXER_ID]);
- }
- return $dependencies;
- }
- /**
- * @param string $currentIndexerId
- * @param string $targetIndexerId
- * @return bool
- */
- private function isFilteringNeeded(string $currentIndexerId, string $targetIndexerId): bool
- {
- return (!$this->config->isElasticsearchEnabled() && $targetIndexerId === $currentIndexerId);
- }
- }
|