-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathProcessAttributeTask.php
77 lines (62 loc) · 2.71 KB
/
ProcessAttributeTask.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
declare(strict_types=1);
namespace Synolia\SyliusAkeneoPlugin\Task\Attribute;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
use Synolia\SyliusAkeneoPlugin\Event\FilterEvent;
use Synolia\SyliusAkeneoPlugin\Exceptions\Payload\CommandContextIsNullException;
use Synolia\SyliusAkeneoPlugin\Manager\ProcessManagerInterface;
use Synolia\SyliusAkeneoPlugin\Payload\Attribute\AttributePayload;
use Synolia\SyliusAkeneoPlugin\Payload\PipelinePayloadInterface;
use Synolia\SyliusAkeneoPlugin\Provider\Configuration\Api\ApiConnectionProviderInterface;
use Synolia\SyliusAkeneoPlugin\Task\AbstractProcessTask;
final class ProcessAttributeTask extends AbstractProcessTask
{
public function __construct(
EntityManagerInterface $entityManager,
LoggerInterface $akeneoLogger,
ProcessManagerInterface $processManager,
BatchAttributesTask $task,
private ApiConnectionProviderInterface $apiConnectionProvider,
private EventDispatcherInterface $eventDispatcher,
string $projectDir,
) {
parent::__construct($entityManager, $processManager, $task, $akeneoLogger, $projectDir);
}
/**
* @param \Synolia\SyliusAkeneoPlugin\Payload\Attribute\AttributePayload $payload
*/
public function __invoke(PipelinePayloadInterface $payload): PipelinePayloadInterface
{
$queryParameters = [];
$this->logger->debug(self::class);
if ($payload->isContinue()) {
$this->process($payload);
return $payload;
}
try {
$event = new FilterEvent($payload->getCommandContext());
$this->eventDispatcher->dispatch($event);
$queryParameters['search'] = $event->getFilters();
$queryParameters['with_table_select_options'] = true;
} catch (CommandContextIsNullException) {
} finally {
$this->logger->notice('Filters', $queryParameters);
}
$queryParameters = \array_merge_recursive($queryParameters, $payload->getCustomFilters());
$page = $payload->getAkeneoPimClient()->getAttributeApi()->listPerPage(
$this->apiConnectionProvider->get()->getPaginationSize(),
true,
$queryParameters,
);
$this->handle($payload, $page);
$this->processManager->waitForAllProcesses();
return $payload;
}
protected function createBatchPayload(PipelinePayloadInterface $payload): PipelinePayloadInterface
{
$commandContext = ($payload->hasCommandContext()) ? $payload->getCommandContext() : null;
return new AttributePayload($payload->getAkeneoPimClient(), $commandContext);
}
}