Processor.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Indexer\Model;
  7. use Magento\Framework\Indexer\ConfigInterface;
  8. use Magento\Framework\Indexer\IndexerInterface;
  9. use Magento\Framework\Indexer\IndexerInterfaceFactory;
  10. use Magento\Framework\Indexer\StateInterface;
  11. class Processor
  12. {
  13. /**
  14. * @var ConfigInterface
  15. */
  16. protected $config;
  17. /**
  18. * @var IndexerInterfaceFactory
  19. */
  20. protected $indexerFactory;
  21. /**
  22. * @var Indexer\CollectionFactory
  23. */
  24. protected $indexersFactory;
  25. /**
  26. * @var \Magento\Framework\Mview\ProcessorInterface
  27. */
  28. protected $mviewProcessor;
  29. /**
  30. * @param ConfigInterface $config
  31. * @param IndexerInterfaceFactory $indexerFactory
  32. * @param Indexer\CollectionFactory $indexersFactory
  33. * @param \Magento\Framework\Mview\ProcessorInterface $mviewProcessor
  34. */
  35. public function __construct(
  36. ConfigInterface $config,
  37. IndexerInterfaceFactory $indexerFactory,
  38. Indexer\CollectionFactory $indexersFactory,
  39. \Magento\Framework\Mview\ProcessorInterface $mviewProcessor
  40. ) {
  41. $this->config = $config;
  42. $this->indexerFactory = $indexerFactory;
  43. $this->indexersFactory = $indexersFactory;
  44. $this->mviewProcessor = $mviewProcessor;
  45. }
  46. /**
  47. * Regenerate indexes for all invalid indexers
  48. *
  49. * @return void
  50. */
  51. public function reindexAllInvalid()
  52. {
  53. $sharedIndexesComplete = [];
  54. foreach (array_keys($this->config->getIndexers()) as $indexerId) {
  55. /** @var Indexer $indexer */
  56. $indexer = $this->indexerFactory->create();
  57. $indexer->load($indexerId);
  58. $indexerConfig = $this->config->getIndexer($indexerId);
  59. if ($indexer->isInvalid()) {
  60. // Skip indexers having shared index that was already complete
  61. if (!in_array($indexerConfig['shared_index'], $sharedIndexesComplete)) {
  62. $indexer->reindexAll();
  63. } else {
  64. /** @var \Magento\Indexer\Model\Indexer\State $state */
  65. $state = $indexer->getState();
  66. $state->setStatus(StateInterface::STATUS_VALID);
  67. $state->save();
  68. }
  69. if ($indexerConfig['shared_index']) {
  70. $sharedIndexesComplete[] = $indexerConfig['shared_index'];
  71. }
  72. }
  73. }
  74. }
  75. /**
  76. * Regenerate indexes for all indexers
  77. *
  78. * @return void
  79. */
  80. public function reindexAll()
  81. {
  82. /** @var IndexerInterface[] $indexers */
  83. $indexers = $this->indexersFactory->create()->getItems();
  84. foreach ($indexers as $indexer) {
  85. $indexer->reindexAll();
  86. }
  87. }
  88. /**
  89. * Update indexer views
  90. *
  91. * @return void
  92. */
  93. public function updateMview()
  94. {
  95. $this->mviewProcessor->update('indexer');
  96. }
  97. /**
  98. * Clean indexer view changelogs
  99. *
  100. * @return void
  101. */
  102. public function clearChangelog()
  103. {
  104. $this->mviewProcessor->clearChangelog('indexer');
  105. }
  106. }