Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
StockIndexer.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
20 
22 {
26  private $getAllStockIds;
27 
31  private $indexStructure;
32 
36  private $indexHandler;
37 
41  private $indexNameBuilder;
42 
46  private $indexDataByStockIdProvider;
47 
51  private $indexTableSwitcher;
52 
56  private $defaultStockProvider;
57 
69  public function __construct(
70  GetAllStockIds $getAllStockIds,
71  IndexStructureInterface $indexStructure,
72  IndexHandlerInterface $indexHandler,
73  IndexNameBuilder $indexNameBuilder,
74  IndexDataByStockIdProvider $indexDataByStockIdProvider,
75  IndexTableSwitcherInterface $indexTableSwitcher,
76  DefaultStockProviderInterface $defaultStockProvider
77  ) {
78  $this->getAllStockIds = $getAllStockIds;
79  $this->indexStructure = $indexStructure;
80  $this->indexHandler = $indexHandler;
81  $this->indexNameBuilder = $indexNameBuilder;
82  $this->indexDataByStockIdProvider = $indexDataByStockIdProvider;
83  $this->indexTableSwitcher = $indexTableSwitcher;
84  $this->defaultStockProvider = $defaultStockProvider;
85  }
86 
91  public function executeFull()
92  {
93  $stockIds = $this->getAllStockIds->execute();
94  $this->executeList($stockIds);
95  }
96 
102  public function executeRow(int $stockId)
103  {
104  $this->executeList([$stockId]);
105  }
106 
112  public function executeList(array $stockIds)
113  {
114  foreach ($stockIds as $stockId) {
115  if ($this->defaultStockProvider->getId() === $stockId) {
116  continue;
117  }
118 
119  $mainIndexName = $this->indexNameBuilder
120  ->setIndexId(InventoryIndexer::INDEXER_ID)
121  ->addDimension('stock_', (string)$stockId)
122  ->setAlias(Alias::ALIAS_MAIN)
123  ->build();
124 
125  if (!$this->indexStructure->isExist($mainIndexName, ResourceConnection::DEFAULT_CONNECTION)) {
126  $this->indexStructure->create($mainIndexName, ResourceConnection::DEFAULT_CONNECTION);
127  }
128 
129  $indexData = $this->indexDataByStockIdProvider->execute((int)$stockId);
130 
131  $this->indexHandler->cleanIndex(
132  $mainIndexName,
133  $indexData,
135  );
136 
137  $this->indexHandler->saveIndex(
138  $mainIndexName,
139  $indexData,
141  );
142  }
143  }
144 }
__construct(GetAllStockIds $getAllStockIds, IndexStructureInterface $indexStructure, IndexHandlerInterface $indexHandler, IndexNameBuilder $indexNameBuilder, IndexDataByStockIdProvider $indexDataByStockIdProvider, IndexTableSwitcherInterface $indexTableSwitcher, DefaultStockProviderInterface $defaultStockProvider)