diff --git a/mailpoet/lib/Automation/Integrations/MailPoet/Actions/SendWelcomeEmailAction.php b/mailpoet/lib/Automation/Integrations/MailPoet/Actions/SendWelcomeEmailAction.php index 9fd82e67e4..9f0989e2b4 100644 --- a/mailpoet/lib/Automation/Integrations/MailPoet/Actions/SendWelcomeEmailAction.php +++ b/mailpoet/lib/Automation/Integrations/MailPoet/Actions/SendWelcomeEmailAction.php @@ -9,13 +9,13 @@ use MailPoet\Automation\Engine\Workflows\WorkflowRun; use MailPoet\Automation\Integrations\MailPoet\Subjects\SegmentSubject; use MailPoet\Automation\Integrations\MailPoet\Subjects\SubscriberSubject; use MailPoet\Entities\NewsletterEntity; -use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\InvalidStateException; use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\Scheduler\WelcomeScheduler; use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\Subscribers\SubscriberSegmentRepository; +use MailPoet\Subscribers\SubscribersRepository; class SendWelcomeEmailAction implements Action { /** @var WelcomeScheduler */ @@ -30,16 +30,21 @@ class SendWelcomeEmailAction implements Action { /** @var SubscriberSegmentRepository */ private $subscribersSegmentRepository; + /** @var SubscribersRepository */ + private $subscribersRepository; + public function __construct( WelcomeScheduler $welcomeScheduler, NewslettersRepository $newslettersRepository, ScheduledTasksRepository $scheduledTasksRepository, - SubscriberSegmentRepository $subscriberSegmentRepository + SubscriberSegmentRepository $subscriberSegmentRepository, + SubscribersRepository $subscribersRepository ) { $this->welcomeScheduler = $welcomeScheduler; $this->newslettersRepository = $newslettersRepository; $this->scheduledTasksRepository = $scheduledTasksRepository; $this->subscribersSegmentRepository = $subscriberSegmentRepository; + $this->subscribersRepository = $subscribersRepository; } public function getKey(): string { @@ -81,7 +86,9 @@ class SendWelcomeEmailAction implements Action { throw InvalidStateException::create()->withMessage('A mailpoet:subscriber subject is required.'); } - $subscriber = $subscriberSubject->getSubscriber(); + $subscriberId = $subscriberSubject->getFields()['id']->getValue(); + $subscriber = $this->subscribersRepository->findOneById($subscriberId); + if (!$subscriber instanceof SubscriberEntity) { throw InvalidStateException::create()->withMessage('Could not retrieve subscriber from the subscriber subject.'); } @@ -95,19 +102,15 @@ class SendWelcomeEmailAction implements Action { throw InvalidStateException::create()->withMessage('A mailpoet:segment subject is required.'); } - $segment = $segmentSubject->getSegment(); - if (!$segment instanceof SegmentEntity) { - throw InvalidStateException::create()->withMessage('Could not retrieve the segment from the segment subject.'); - } - + $segmentId = $segmentSubject->getFields()['id']->getValue(); $subscriberSegment = $this->subscribersSegmentRepository->findOneBy([ 'subscriber' => $subscriber, - 'segment' => $segment, + '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(), $segment->getId())); + throw InvalidStateException::create()->withMessage(sprintf("Subscriber ID '%s' is not subscribed to segment ID '%s'.", $subscriber->getId(), $segmentId)); } $previouslyScheduledNotification = $this->scheduledTasksRepository->findByNewsletterAndSubscriberId($newsletter, (int)$subscriber->getId()); diff --git a/mailpoet/lib/Automation/Integrations/MailPoet/Subjects/SegmentSubject.php b/mailpoet/lib/Automation/Integrations/MailPoet/Subjects/SegmentSubject.php index a5c056fbaf..865d1ad005 100644 --- a/mailpoet/lib/Automation/Integrations/MailPoet/Subjects/SegmentSubject.php +++ b/mailpoet/lib/Automation/Integrations/MailPoet/Subjects/SegmentSubject.php @@ -34,6 +34,15 @@ class SegmentSubject implements Subject { return $this->getSegment()->getName(); } ), + 'id' => + new Field( + 'mailpoet:segment:id', + Field::TYPE_INTEGER, + __('Segment ID', 'mailpoet'), + function () { + return $this->getSegment()->getId(); + } + ), ]; } @@ -58,7 +67,7 @@ class SegmentSubject implements Subject { return ['segment_id' => $segment->getId()]; } - public function getSegment(): SegmentEntity { + private function getSegment(): SegmentEntity { if (!$this->segment) { throw InvalidStateException::create()->withMessage(__('Segment was not loaded.', 'mailpoet')); } diff --git a/mailpoet/lib/Automation/Integrations/MailPoet/Subjects/SubscriberSubject.php b/mailpoet/lib/Automation/Integrations/MailPoet/Subjects/SubscriberSubject.php index cc164cd4bd..c41bc3e9b6 100644 --- a/mailpoet/lib/Automation/Integrations/MailPoet/Subjects/SubscriberSubject.php +++ b/mailpoet/lib/Automation/Integrations/MailPoet/Subjects/SubscriberSubject.php @@ -82,7 +82,7 @@ class SubscriberSubject implements Subject { return ['subscriber_id' => $subscriber->getId()]; } - public function getSubscriber(): SubscriberEntity { + private function getSubscriber(): SubscriberEntity { if (!$this->subscriber) { throw InvalidStateException::create()->withMessage(__('Subscriber was not loaded.', 'mailpoet')); }