Files
piratepoet/mailpoet/lib/Automation/Engine/Control/TriggerHandler.php
Jan Jakes a191c691f5 Add hook and basic handler for automation triggers
For now trigger keys are stored in the workflow as a JSON array.
This is not optimal in case someone has many workflows but as
workflows are user-created it's unlinkely someone will have thousands
of them. We can consider adding a workflow_triggers table as well.

[MAILPOET-4136]
2022-03-14 09:36:21 +01:00

47 lines
1.3 KiB
PHP

<?php declare(strict_types = 1);
namespace MailPoet\Automation\Engine\Control;
use MailPoet\Automation\Engine\Exceptions;
use MailPoet\Automation\Engine\Hooks;
use MailPoet\Automation\Engine\Storage\WorkflowStorage;
use MailPoet\Automation\Engine\WordPress;
use MailPoet\Automation\Engine\Workflows\Trigger;
class TriggerHandler {
/** @var ActionScheduler */
private $actionScheduler;
/** @var WordPress */
private $wordPress;
/** @var WorkflowStorage */
private $workflowStorage;
public function __construct(
ActionScheduler $actionScheduler,
WordPress $wordPress,
WorkflowStorage $workflowStorage
) {
$this->actionScheduler = $actionScheduler;
$this->wordPress = $wordPress;
$this->workflowStorage = $workflowStorage;
}
public function initialize(): void {
$this->wordPress->addAction(Hooks::TRIGGER, [$this, 'processTrigger']);
}
public function processTrigger(Trigger $trigger): void {
$workflows = $this->workflowStorage->getActiveWorkflowsByTrigger($trigger);
foreach ($workflows as $workflow) {
$step = $workflow->getTrigger($trigger->getKey());
if (!$step) {
throw Exceptions::workflowTriggerNotFound($workflow->getId(), $trigger->getKey());
}
// TODO: create new workflow run
}
}
}