diff --git a/mailpoet/lib/Automation/Engine/Builder/CreateWorkflowFromTemplateController.php b/mailpoet/lib/Automation/Engine/Builder/CreateWorkflowFromTemplateController.php index 6e681770ad..cfcd9c54ea 100644 --- a/mailpoet/lib/Automation/Engine/Builder/CreateWorkflowFromTemplateController.php +++ b/mailpoet/lib/Automation/Engine/Builder/CreateWorkflowFromTemplateController.php @@ -6,6 +6,7 @@ use MailPoet\Automation\Engine\Data\Workflow; use MailPoet\Automation\Engine\Exceptions\InvalidStateException; use MailPoet\Automation\Engine\Storage\WorkflowStorage; use MailPoet\Automation\Engine\Storage\WorkflowTemplateStorage; +use MailPoet\Automation\Engine\Validation\WorkflowValidator; use MailPoet\UnexpectedValueException; class CreateWorkflowFromTemplateController { @@ -15,26 +16,32 @@ class CreateWorkflowFromTemplateController { /** @var WorkflowTemplateStorage */ private $templateStorage; + /** @var WorkflowValidator */ + private $workflowValidator; + public function __construct( WorkflowStorage $storage, - WorkflowTemplateStorage $templateStorage + WorkflowTemplateStorage $templateStorage, + WorkflowValidator $workflowValidator ) { $this->storage = $storage; $this->templateStorage = $templateStorage; + $this->workflowValidator = $workflowValidator; } public function createWorkflow(string $slug): Workflow { - $template = $this->templateStorage->getTemplateBySlug($slug); if (!$template) { throw UnexpectedValueException::create()->withMessage('Template not found.'); } - $workflowId = $this->storage->createWorkflow($template->getWorkflow()); - $workflow = $this->storage->getWorkflow($workflowId); - if (!$workflow) { + $workflow = $template->getWorkflow(); + $this->workflowValidator->validate($workflow); + $workflowId = $this->storage->createWorkflow($workflow); + $savedWorkflow = $this->storage->getWorkflow($workflowId); + if (!$savedWorkflow) { throw new InvalidStateException('Workflow not found.'); } - return $workflow; + return $savedWorkflow; } } diff --git a/mailpoet/lib/Automation/Engine/Builder/UpdateWorkflowController.php b/mailpoet/lib/Automation/Engine/Builder/UpdateWorkflowController.php index 56ebaf3d2b..23877d1695 100644 --- a/mailpoet/lib/Automation/Engine/Builder/UpdateWorkflowController.php +++ b/mailpoet/lib/Automation/Engine/Builder/UpdateWorkflowController.php @@ -8,6 +8,7 @@ use MailPoet\Automation\Engine\Exceptions; use MailPoet\Automation\Engine\Exceptions\UnexpectedValueException; use MailPoet\Automation\Engine\Hooks; use MailPoet\Automation\Engine\Storage\WorkflowStorage; +use MailPoet\Automation\Engine\Validation\WorkflowValidator; class UpdateWorkflowController { /** @var Hooks */ @@ -16,24 +17,25 @@ class UpdateWorkflowController { /** @var WorkflowStorage */ private $storage; + /** @var WorkflowValidator */ + private $workflowValidator; + /** @var UpdateStepsController */ private $updateStepsController; public function __construct( Hooks $hooks, WorkflowStorage $storage, + WorkflowValidator $workflowValidator, UpdateStepsController $updateStepsController ) { $this->hooks = $hooks; $this->storage = $storage; + $this->workflowValidator = $workflowValidator; $this->updateStepsController = $updateStepsController; } public function updateWorkflow(int $id, array $data): Workflow { - // TODO: data & workflow validation (trigger existence, graph consistency, etc.) - // TODO: new revisions when content is changed - // TODO: validation when status being is changed - $workflow = $this->storage->getWorkflow($id); if (!$workflow) { throw Exceptions::workflowNotFound($id); @@ -58,6 +60,8 @@ class UpdateWorkflowController { } $this->hooks->doWorkflowBeforeSave($workflow); + + $this->workflowValidator->validate($workflow); $this->storage->updateWorkflow($workflow); $workflow = $this->storage->getWorkflow($id);