123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Indexer\Setup;
- use Magento\Framework\Encryption\Encryptor;
- use Magento\Framework\Encryption\EncryptorInterface;
- use Magento\Framework\Indexer\StateInterface;
- use Magento\Framework\Json\EncoderInterface;
- use Magento\Framework\Setup\InstallSchemaInterface;
- use Magento\Framework\Setup\ModuleContextInterface;
- use Magento\Framework\Setup\SchemaSetupInterface;
- use Magento\Framework\Indexer\ConfigInterface;
- use Magento\Indexer\Model\Indexer\State;
- use Magento\Indexer\Model\Indexer\StateFactory;
- use Magento\Indexer\Model\ResourceModel\Indexer\State\CollectionFactory;
- /**
- * @codeCoverageIgnore
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class Recurring implements InstallSchemaInterface
- {
- /**
- * Indexer collection factory
- *
- * @var CollectionFactory
- */
- private $statesFactory;
- /**
- * @var ConfigInterface
- */
- private $config;
- /**
- * @var EncryptorInterface
- */
- private $encryptor;
- /**
- * @var EncoderInterface
- */
- private $encoder;
- /**
- * @var StateFactory
- */
- private $stateFactory;
- /**
- * Init
- *
- * @param CollectionFactory $statesFactory
- * @param StateFactory $stateFactory
- * @param ConfigInterface $config
- * @param EncryptorInterface $encryptor
- * @param EncoderInterface $encoder
- */
- public function __construct(
- CollectionFactory $statesFactory,
- StateFactory $stateFactory,
- ConfigInterface $config,
- EncryptorInterface $encryptor,
- EncoderInterface $encoder
- ) {
- $this->statesFactory = $statesFactory;
- $this->stateFactory = $stateFactory;
- $this->config = $config;
- $this->encryptor = $encryptor;
- $this->encoder = $encoder;
- }
- /**
- * {@inheritdoc}
- */
- public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
- {
- /** @var State[] $stateIndexers */
- $stateIndexers = [];
- $states = $this->statesFactory->create();
- foreach ($states->getItems() as $state) {
- /** @var State $state */
- $stateIndexers[$state->getIndexerId()] = $state;
- }
- foreach ($this->config->getIndexers() as $indexerId => $indexerConfig) {
- $expectedHashConfig = $this->encryptor->hash(
- $this->encoder->encode($indexerConfig),
- Encryptor::HASH_VERSION_MD5
- );
- if (isset($stateIndexers[$indexerId])) {
- if ($stateIndexers[$indexerId]->getHashConfig() != $expectedHashConfig) {
- $stateIndexers[$indexerId]->setStatus(StateInterface::STATUS_INVALID);
- $stateIndexers[$indexerId]->setHashConfig($expectedHashConfig);
- $stateIndexers[$indexerId]->save();
- }
- } else {
- /** @var State $state */
- $state = $this->stateFactory->create();
- $state->loadByIndexer($indexerId);
- $state->setHashConfig($expectedHashConfig);
- $state->setStatus(StateInterface::STATUS_INVALID);
- $state->save();
- }
- }
- }
- }
|