Skip to content

Commit 11b1ed1

Browse files
authored
MDEE-451: force order exporter indexer to be on 'Update by Schedule' mode (#282)
* MDEE-451: force order exporter indexer to be on 'Update by Schedule' mode.
1 parent 7679840 commit 11b1ed1

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Magento\SalesOrdersDataExporter\Setup;
10+
11+
use InvalidArgumentException;
12+
use Magento\Framework\Indexer\IndexerInterface;
13+
use Magento\Framework\Indexer\IndexerInterfaceFactory;
14+
use Magento\Framework\Setup\InstallSchemaInterface;
15+
use Magento\Framework\Setup\ModuleContextInterface;
16+
use Magento\Framework\Setup\SchemaSetupInterface;
17+
use Psr\Log\LoggerInterface;
18+
19+
/**
20+
* Ensures orders' export indexer is in mode 'Update by Schedule' on each upgrade.
21+
*/
22+
class Recurring implements InstallSchemaInterface
23+
{
24+
private const ORDERS_INDEXER_NAME = 'sales_order_data_exporter_v2';
25+
26+
/**
27+
* @var LoggerInterface
28+
*/
29+
private LoggerInterface $logger;
30+
/**
31+
* @var IndexerInterfaceFactory
32+
*/
33+
private IndexerInterfaceFactory $indexerInterfaceFactory;
34+
35+
/**
36+
* @param LoggerInterface $logger
37+
* @param IndexerInterfaceFactory $indexerInterfaceFactory
38+
*/
39+
public function __construct(LoggerInterface $logger, IndexerInterfaceFactory $indexerInterfaceFactory)
40+
{
41+
$this->logger = $logger;
42+
$this->indexerInterfaceFactory = $indexerInterfaceFactory;
43+
}
44+
45+
/**
46+
* If orders indexer is found, will force mode to be On Schedule
47+
*
48+
* @param SchemaSetupInterface $setup
49+
* @param ModuleContextInterface $context
50+
* @return void
51+
*
52+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
53+
*/
54+
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context): void
55+
{
56+
$setup->startSetup();
57+
58+
$ordersIndexer = $this->findOrdersIndexer();
59+
if ($ordersIndexer && !$ordersIndexer->isScheduled()) {
60+
$ordersIndexer->setScheduled(true);
61+
$this->logger->info(
62+
'Mode for indexer sales_order_data_exporter_v2 has been forced to \'Update by Schedule\'.'
63+
);
64+
}
65+
66+
$setup->endSetup();
67+
}
68+
69+
/**
70+
* Finds orders indexer in the set of available indexers
71+
*
72+
* @return IndexerInterface|null
73+
*/
74+
private function findOrdersIndexer(): ?IndexerInterface
75+
{
76+
try {
77+
return $this->indexerInterfaceFactory->create()->load(self::ORDERS_INDEXER_NAME);
78+
} catch (InvalidArgumentException) {
79+
// ignored, if not found is expected to do nothing
80+
return null;
81+
}
82+
}
83+
}

0 commit comments

Comments
 (0)