Use step run args in existing actions
[MAILPOET-4629]
This commit is contained in:
@ -3,10 +3,12 @@
|
||||
namespace MailPoet\Automation\Integrations\MailPoet\Actions;
|
||||
|
||||
use MailPoet\Automation\Engine\Data\Step;
|
||||
use MailPoet\Automation\Engine\Data\StepRunArgs;
|
||||
use MailPoet\Automation\Engine\Data\Workflow;
|
||||
use MailPoet\Automation\Engine\Data\WorkflowRun;
|
||||
use MailPoet\Automation\Engine\Workflows\Action;
|
||||
use MailPoet\Automation\Engine\Workflows\Subject;
|
||||
use MailPoet\Automation\Integrations\MailPoet\Payloads\SegmentPayload;
|
||||
use MailPoet\Automation\Integrations\MailPoet\Payloads\SubscriberPayload;
|
||||
use MailPoet\Automation\Integrations\MailPoet\Subjects\SegmentSubject;
|
||||
use MailPoet\Automation\Integrations\MailPoet\Subjects\SubscriberSubject;
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
@ -96,30 +98,44 @@ class SendEmailAction implements Action {
|
||||
return count($segmentSubjects) === 1 && count($subscriberSubjects) === 1;
|
||||
}
|
||||
|
||||
public function run(Workflow $workflow, WorkflowRun $workflowRun, Step $step): void {
|
||||
$newsletter = $this->getEmailForStep($step);
|
||||
$subscriberSubject = $workflowRun->requireSingleSubject(SubscriberSubject::class);
|
||||
$subscriber = $subscriberSubject->getSubscriber();
|
||||
public function run(StepRunArgs $args): void {
|
||||
$newsletter = $this->getEmailForStep($args->getStep());
|
||||
|
||||
if ($subscriber->getStatus() !== SubscriberEntity::STATUS_SUBSCRIBED) {
|
||||
throw InvalidStateException::create()->withMessage(sprintf("Cannot schedule a newsletter for subscriber ID '%s' because their status is '%s'.", $subscriber->getId(), $subscriber->getStatus()));
|
||||
$segmentPayload = $args->getSingleSubjectEntry('mailpoet:segment')->getPayload();
|
||||
if (!$segmentPayload instanceof SegmentPayload) {
|
||||
throw new InvalidStateException();
|
||||
}
|
||||
$segmentId = $segmentPayload->getId();
|
||||
|
||||
$subscriberPayload = $args->getSingleSubjectEntry('mailpoet:subscriber')->getPayload();
|
||||
if (!$subscriberPayload instanceof SubscriberPayload) {
|
||||
throw new InvalidStateException();
|
||||
}
|
||||
$subscriberId = $subscriberPayload->getId();
|
||||
|
||||
$segmentSubject = $workflowRun->requireSingleSubject(SegmentSubject::class);
|
||||
$segmentId = $segmentSubject->getSegment()->getId();
|
||||
$subscriberSegment = $this->subscriberSegmentRepository->findOneBy([
|
||||
'subscriber' => $subscriber,
|
||||
'subscriber' => $subscriberId,
|
||||
'segment' => $segmentId,
|
||||
'status' => SubscriberEntity::STATUS_SUBSCRIBED,
|
||||
]);
|
||||
|
||||
if ($subscriberSegment === null) {
|
||||
throw InvalidStateException::create()->withMessage(sprintf("Subscriber ID '%s' is not subscribed to segment ID '%s'.", $subscriber->getId(), $segmentId));
|
||||
if (!$subscriberSegment) {
|
||||
throw InvalidStateException::create()->withMessage(sprintf("Subscriber ID '%s' is not subscribed to segment ID '%s'.", $subscriberId, $segmentId));
|
||||
}
|
||||
|
||||
$previouslyScheduledNotification = $this->scheduledTasksRepository->findByNewsletterAndSubscriberId($newsletter, (int)$subscriber->getId());
|
||||
$subscriber = $subscriberSegment->getSubscriber();
|
||||
if (!$subscriber) {
|
||||
throw InvalidStateException::create();
|
||||
}
|
||||
|
||||
$subscriberStatus = $subscriber->getStatus();
|
||||
if ($subscriberStatus !== SubscriberEntity::STATUS_SUBSCRIBED) {
|
||||
throw InvalidStateException::create()->withMessage(sprintf("Cannot schedule a newsletter for subscriber ID '%s' because their status is '%s'.", $subscriberId, $subscriberStatus));
|
||||
}
|
||||
|
||||
$previouslyScheduledNotification = $this->scheduledTasksRepository->findByNewsletterAndSubscriberId($newsletter, $subscriberId);
|
||||
if (!empty($previouslyScheduledNotification)) {
|
||||
throw InvalidStateException::create()->withMessage(sprintf("Subscriber ID '%s' was already scheduled to receive newsletter ID '%s'.", $subscriber->getId(), $newsletter->getId()));
|
||||
throw InvalidStateException::create()->withMessage(sprintf("Subscriber ID '%s' was already scheduled to receive newsletter ID '%s'.", $subscriberId, $newsletter->getId()));
|
||||
}
|
||||
|
||||
try {
|
||||
|
Reference in New Issue
Block a user