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;
use MailPoet\Validator\Schema\ObjectSchema;
interface Step {
public function getKey(): 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\Hooks;
use MailPoet\Automation\Engine\Workflows\Action;
use MailPoet\Validator\Builder;
use MailPoet\Validator\Schema\ObjectSchema;
class DelayAction implements Action {
/** @var ActionScheduler */
@@ -27,6 +29,13 @@ class DelayAction implements Action {
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 {
$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\Scheduler\AutomationEmailScheduler;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\SubscriberSegmentRepository;
use MailPoet\Validator\Builder;
use MailPoet\Validator\Schema\ObjectSchema;
use Throwable;
class SendEmailAction implements Action {
/** @var SettingsController */
private $settings;
/** @var NewslettersRepository */
private $newslettersRepository;
@@ -32,11 +38,13 @@ class SendEmailAction implements Action {
private $automationEmailScheduler;
public function __construct(
SettingsController $settings,
NewslettersRepository $newslettersRepository,
ScheduledTasksRepository $scheduledTasksRepository,
SubscriberSegmentRepository $subscriberSegmentRepository,
AutomationEmailScheduler $automationEmailScheduler
) {
$this->settings = $settings;
$this->newslettersRepository = $newslettersRepository;
$this->scheduledTasksRepository = $scheduledTasksRepository;
$this->subscriberSegmentRepository = $subscriberSegmentRepository;
@@ -51,6 +59,15 @@ class SendEmailAction implements Action {
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 {
try {
$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\Entities\SubscriberSegmentEntity;
use MailPoet\InvalidStateException;
use MailPoet\Validator\Builder;
use MailPoet\Validator\Schema\ObjectSchema;
use MailPoet\WP\Functions as WPFunctions;
class SegmentSubscribedTrigger implements Trigger {
@@ -28,6 +30,10 @@ class SegmentSubscribedTrigger implements Trigger {
return __('Subscribed to segment');
}
public function getArgsSchema(): ObjectSchema {
return Builder::object();
}
public function registerHooks(): void {
$this->wp->addAction('mailpoet_segment_subscribed', [$this, 'handleSubscription'], 10, 2);
}