Data.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Indexer\Model\Config;
  7. use Magento\Framework\Serialize\SerializerInterface;
  8. use Magento\Framework\App\ObjectManager;
  9. /**
  10. * Provides indexer configuration
  11. */
  12. class Data extends \Magento\Framework\Config\Data
  13. {
  14. /**
  15. * @var \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection
  16. */
  17. protected $stateCollection;
  18. /**
  19. * Constructor
  20. *
  21. * @param \Magento\Framework\Indexer\Config\Reader $reader
  22. * @param \Magento\Framework\Config\CacheInterface $cache
  23. * @param \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection $stateCollection
  24. * @param string|null $cacheId
  25. * @param SerializerInterface|null $serializer
  26. */
  27. public function __construct(
  28. \Magento\Framework\Indexer\Config\Reader $reader,
  29. \Magento\Framework\Config\CacheInterface $cache,
  30. \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection $stateCollection,
  31. $cacheId = 'indexer_config',
  32. SerializerInterface $serializer = null
  33. ) {
  34. $this->stateCollection = $stateCollection;
  35. $isCacheExists = $cache->test($cacheId);
  36. parent::__construct($reader, $cache, $cacheId, $serializer);
  37. if (!$isCacheExists) {
  38. $this->deleteNonexistentStates();
  39. }
  40. }
  41. /**
  42. * Delete all states that are not in configuration
  43. *
  44. * @return void
  45. */
  46. protected function deleteNonexistentStates()
  47. {
  48. foreach ($this->stateCollection->getItems() as $state) {
  49. /** @var \Magento\Indexer\Model\Indexer\State $state */
  50. if (!isset($this->_data[$state->getIndexerId()])) {
  51. $state->delete();
  52. }
  53. }
  54. }
  55. }