Add schema definition for automation steps

[MAILPOET-4515]
This commit is contained in:
Jan Jakes
2022-07-29 17:00:17 +02:00
committed by Veljko V
parent 0dbfb196e2
commit 1f6ce667e5
4 changed files with 36 additions and 0 deletions

View File

@@ -2,8 +2,12 @@
namespace MailPoet\Automation\Engine\Workflows; namespace MailPoet\Automation\Engine\Workflows;
use MailPoet\Validator\Schema\ObjectSchema;
interface Step { interface Step {
public function getKey(): string; public function getKey(): string;
public function getName(): string; public function getName(): string;
public function getArgsSchema(): ObjectSchema;
} }

View File

@@ -8,6 +8,8 @@ use MailPoet\Automation\Engine\Data\Workflow;
use MailPoet\Automation\Engine\Data\WorkflowRun; use MailPoet\Automation\Engine\Data\WorkflowRun;
use MailPoet\Automation\Engine\Hooks; use MailPoet\Automation\Engine\Hooks;
use MailPoet\Automation\Engine\Workflows\Action; use MailPoet\Automation\Engine\Workflows\Action;
use MailPoet\Validator\Builder;
use MailPoet\Validator\Schema\ObjectSchema;
class DelayAction implements Action { class DelayAction implements Action {
/** @var ActionScheduler */ /** @var ActionScheduler */
@@ -27,6 +29,13 @@ class DelayAction implements Action {
return __('Delay', 'mailpoet'); return __('Delay', 'mailpoet');
} }
public function getArgsSchema(): ObjectSchema {
return Builder::object([
'delay' => Builder::integer()->minimum(1),
'delay_type' => Builder::string()->default('HOURS'),
]);
}
public function run(Workflow $workflow, WorkflowRun $workflowRun, Step $step): void { public function run(Workflow $workflow, WorkflowRun $workflowRun, Step $step): void {
$this->actionScheduler->schedule(time() + $this->calculateSeconds($step), Hooks::WORKFLOW_STEP, [ $this->actionScheduler->schedule(time() + $this->calculateSeconds($step), Hooks::WORKFLOW_STEP, [
[ [

View File

@@ -15,10 +15,16 @@ use MailPoet\InvalidStateException;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Scheduler\AutomationEmailScheduler; use MailPoet\Newsletter\Scheduler\AutomationEmailScheduler;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\SubscriberSegmentRepository; use MailPoet\Subscribers\SubscriberSegmentRepository;
use MailPoet\Validator\Builder;
use MailPoet\Validator\Schema\ObjectSchema;
use Throwable; use Throwable;
class SendEmailAction implements Action { class SendEmailAction implements Action {
/** @var SettingsController */
private $settings;
/** @var NewslettersRepository */ /** @var NewslettersRepository */
private $newslettersRepository; private $newslettersRepository;
@@ -32,11 +38,13 @@ class SendEmailAction implements Action {
private $automationEmailScheduler; private $automationEmailScheduler;
public function __construct( public function __construct(
SettingsController $settings,
NewslettersRepository $newslettersRepository, NewslettersRepository $newslettersRepository,
ScheduledTasksRepository $scheduledTasksRepository, ScheduledTasksRepository $scheduledTasksRepository,
SubscriberSegmentRepository $subscriberSegmentRepository, SubscriberSegmentRepository $subscriberSegmentRepository,
AutomationEmailScheduler $automationEmailScheduler AutomationEmailScheduler $automationEmailScheduler
) { ) {
$this->settings = $settings;
$this->newslettersRepository = $newslettersRepository; $this->newslettersRepository = $newslettersRepository;
$this->scheduledTasksRepository = $scheduledTasksRepository; $this->scheduledTasksRepository = $scheduledTasksRepository;
$this->subscriberSegmentRepository = $subscriberSegmentRepository; $this->subscriberSegmentRepository = $subscriberSegmentRepository;
@@ -51,6 +59,15 @@ class SendEmailAction implements Action {
return __('Send email', 'mailpoet'); return __('Send email', 'mailpoet');
} }
public function getArgsSchema(): ObjectSchema {
return Builder::object([
'subject' => Builder::string()->default(__('Subject', 'mailpoet')),
'preheader' => Builder::string(),
'from_name' => Builder::string()->default($this->settings->get('sender.name')),
'email' => Builder::string()->default($this->settings->get('sender.address')),
]);
}
public function isValid(array $subjects, Step $step, Workflow $workflow): bool { public function isValid(array $subjects, Step $step, Workflow $workflow): bool {
try { try {
$this->getEmailForStep($step); $this->getEmailForStep($step);

View File

@@ -8,6 +8,8 @@ use MailPoet\Automation\Integrations\MailPoet\Subjects\SegmentSubject;
use MailPoet\Automation\Integrations\MailPoet\Subjects\SubscriberSubject; use MailPoet\Automation\Integrations\MailPoet\Subjects\SubscriberSubject;
use MailPoet\Entities\SubscriberSegmentEntity; use MailPoet\Entities\SubscriberSegmentEntity;
use MailPoet\InvalidStateException; use MailPoet\InvalidStateException;
use MailPoet\Validator\Builder;
use MailPoet\Validator\Schema\ObjectSchema;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
class SegmentSubscribedTrigger implements Trigger { class SegmentSubscribedTrigger implements Trigger {
@@ -28,6 +30,10 @@ class SegmentSubscribedTrigger implements Trigger {
return __('Subscribed to segment'); return __('Subscribed to segment');
} }
public function getArgsSchema(): ObjectSchema {
return Builder::object();
}
public function registerHooks(): void { public function registerHooks(): void {
$this->wp->addAction('mailpoet_segment_subscribed', [$this, 'handleSubscription'], 10, 2); $this->wp->addAction('mailpoet_segment_subscribed', [$this, 'handleSubscription'], 10, 2);
} }