From 87f35abf8bfb3ace3b693e17f0c8a759194d5597 Mon Sep 17 00:00:00 2001
From: Jan Jakes <jan.jakes@automattic.com>
Date: Thu, 28 Jul 2022 16:08:13 +0200
Subject: [PATCH] Add workflow and step before save hooks

[MAILPOET-4515]
---
 mailpoet/lib/Automation/Engine/Hooks.php  | 23 +++++++++++++++++++++++
 mailpoet/lib/DI/ContainerConfigurator.php |  1 +
 2 files changed, 24 insertions(+)

diff --git a/mailpoet/lib/Automation/Engine/Hooks.php b/mailpoet/lib/Automation/Engine/Hooks.php
index 025584dfcb..8d535cb6e0 100644
--- a/mailpoet/lib/Automation/Engine/Hooks.php
+++ b/mailpoet/lib/Automation/Engine/Hooks.php
@@ -2,10 +2,33 @@
 
 namespace MailPoet\Automation\Engine;
 
+use MailPoet\Automation\Engine\Data\Step;
+use MailPoet\Automation\Engine\Data\Workflow;
+
 class Hooks {
+  /** @var WordPress */
+  private $wordPress;
+
+  public function __construct(
+    WordPress $wordPress
+  ) {
+    $this->wordPress = $wordPress;
+  }
+
   public const INITIALIZE = 'mailpoet/automation/initialize';
   public const API_INITIALIZE = 'mailpoet/automation/api/initialize';
   public const STEP_RUNNER_INITIALIZE = 'mailpoet/automation/step_runner/initialize';
   public const TRIGGER = 'mailpoet/automation/trigger';
   public const WORKFLOW_STEP = 'mailpoet/automation/workflow/step';
+
+  public const WORKFLOW_BEFORE_SAVE = 'mailpoet/automation/workflow/before_save';
+  public const WORKFLOW_STEP_BEFORE_SAVE = 'mailpoet/automation/workflow/step/before_save';
+
+  public function doWorkflowBeforeSave(Workflow $workflow): void {
+    $this->wordPress->doAction(self::WORKFLOW_BEFORE_SAVE, $workflow);
+  }
+
+  public function doWorkflowStepBeforeSave(Step $step): void {
+    $this->wordPress->doAction(self::WORKFLOW_STEP_BEFORE_SAVE, $step);
+  }
 }
diff --git a/mailpoet/lib/DI/ContainerConfigurator.php b/mailpoet/lib/DI/ContainerConfigurator.php
index f9db205976..11b0ed0371 100644
--- a/mailpoet/lib/DI/ContainerConfigurator.php
+++ b/mailpoet/lib/DI/ContainerConfigurator.php
@@ -119,6 +119,7 @@ class ContainerConfigurator implements IContainerConfigurator {
     $container->autowire(\MailPoet\Automation\Engine\Control\Steps\ActionStepRunner::class)->setPublic(true);
     $container->autowire(\MailPoet\Automation\Engine\Control\TriggerHandler::class)->setPublic(true);
     $container->autowire(\MailPoet\Automation\Engine\Engine::class)->setPublic(true);
+    $container->autowire(\MailPoet\Automation\Engine\Hooks::class)->setPublic(true);
     $container->autowire(\MailPoet\Automation\Engine\Migrations\Migrator::class)->setPublic(true);
     $container->autowire(\MailPoet\Automation\Engine\Registry::class)->setPublic(true);
     $container->autowire(\MailPoet\Automation\Engine\Storage\WorkflowRunStorage::class)->setPublic(true);