Save subject data in workflow runs
[MAILPOET-4136]
This commit is contained in:
@@ -7,6 +7,7 @@ use MailPoet\Automation\Engine\Hooks;
|
||||
use MailPoet\Automation\Engine\Storage\WorkflowRunStorage;
|
||||
use MailPoet\Automation\Engine\Storage\WorkflowStorage;
|
||||
use MailPoet\Automation\Engine\WordPress;
|
||||
use MailPoet\Automation\Engine\Workflows\Subject;
|
||||
use MailPoet\Automation\Engine\Workflows\Trigger;
|
||||
use MailPoet\Automation\Engine\Workflows\WorkflowRun;
|
||||
|
||||
@@ -36,10 +37,11 @@ class TriggerHandler {
|
||||
}
|
||||
|
||||
public function initialize(): void {
|
||||
$this->wordPress->addAction(Hooks::TRIGGER, [$this, 'processTrigger']);
|
||||
$this->wordPress->addAction(Hooks::TRIGGER, [$this, 'processTrigger'], 10, 2);
|
||||
}
|
||||
|
||||
public function processTrigger(Trigger $trigger): void {
|
||||
/** @param Subject[] $subjects */
|
||||
public function processTrigger(Trigger $trigger, array $subjects): void {
|
||||
$workflows = $this->workflowStorage->getActiveWorkflowsByTrigger($trigger);
|
||||
foreach ($workflows as $workflow) {
|
||||
$step = $workflow->getTrigger($trigger->getKey());
|
||||
@@ -47,7 +49,7 @@ class TriggerHandler {
|
||||
throw Exceptions::workflowTriggerNotFound($workflow->getId(), $trigger->getKey());
|
||||
}
|
||||
|
||||
$workflowRun = new WorkflowRun($workflow->getId(), $trigger->getKey());
|
||||
$workflowRun = new WorkflowRun($workflow->getId(), $trigger->getKey(), $subjects);
|
||||
$workflowRunId = $this->workflowRunStorage->createWorkflowRun($workflowRun);
|
||||
|
||||
$this->actionScheduler->enqueue(Hooks::WORKFLOW_STEP, [
|
||||
|
@@ -28,12 +28,17 @@ class WorkflowRun {
|
||||
/** @var DateTimeImmutable */
|
||||
private $updatedAt;
|
||||
|
||||
/** @var Subject[] */
|
||||
private $subjects;
|
||||
|
||||
public function __construct(
|
||||
int $workflowId,
|
||||
string $triggerKey
|
||||
string $triggerKey,
|
||||
array $subjects
|
||||
) {
|
||||
$this->workflowId = $workflowId;
|
||||
$this->triggerKey = $triggerKey;
|
||||
$this->subjects = $subjects;
|
||||
|
||||
$now = new DateTimeImmutable();
|
||||
$this->createdAt = $now;
|
||||
@@ -64,6 +69,11 @@ class WorkflowRun {
|
||||
return $this->updatedAt;
|
||||
}
|
||||
|
||||
/** @return Subject[] */
|
||||
public function getSubjects(): array {
|
||||
return $this->subjects;
|
||||
}
|
||||
|
||||
public function toArray(): array {
|
||||
return [
|
||||
'workflow_id' => $this->workflowId,
|
||||
@@ -71,11 +81,17 @@ class WorkflowRun {
|
||||
'status' => $this->status,
|
||||
'created_at' => $this->createdAt->format(DateTimeImmutable::W3C),
|
||||
'updated_at' => $this->updatedAt->format(DateTimeImmutable::W3C),
|
||||
'subjects' => json_encode(
|
||||
array_reduce($this->subjects, function (array $subjects, Subject $subject): array {
|
||||
$subjects[$subject->getKey()] = $subject->pack();
|
||||
return $subjects;
|
||||
}, [])
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
public static function fromArray(array $data): self {
|
||||
$workflowRun = new WorkflowRun((int)$data['workflow_id'], $data['trigger_key']);
|
||||
$workflowRun = new WorkflowRun((int)$data['workflow_id'], $data['trigger_key'], (array)json_decode($data['subjects'], true));
|
||||
$workflowRun->id = (int)$data['id'];
|
||||
$workflowRun->status = $data['status'];
|
||||
$workflowRun->createdAt = $data['created_at'];
|
||||
|
Reference in New Issue
Block a user