Keep subject entities private

[MAILPOET-4191]
This commit is contained in:
John Oleksowicz
2022-04-11 13:31:39 -05:00
committed by Veljko V
parent cbabaf9e4e
commit 78352d410d
3 changed files with 24 additions and 12 deletions

View File

@@ -9,13 +9,13 @@ use MailPoet\Automation\Engine\Workflows\WorkflowRun;
use MailPoet\Automation\Integrations\MailPoet\Subjects\SegmentSubject; use MailPoet\Automation\Integrations\MailPoet\Subjects\SegmentSubject;
use MailPoet\Automation\Integrations\MailPoet\Subjects\SubscriberSubject; use MailPoet\Automation\Integrations\MailPoet\Subjects\SubscriberSubject;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\SegmentEntity;
use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberEntity;
use MailPoet\InvalidStateException; use MailPoet\InvalidStateException;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Scheduler\WelcomeScheduler; use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Subscribers\SubscriberSegmentRepository; use MailPoet\Subscribers\SubscriberSegmentRepository;
use MailPoet\Subscribers\SubscribersRepository;
class SendWelcomeEmailAction implements Action { class SendWelcomeEmailAction implements Action {
/** @var WelcomeScheduler */ /** @var WelcomeScheduler */
@@ -30,16 +30,21 @@ class SendWelcomeEmailAction implements Action {
/** @var SubscriberSegmentRepository */ /** @var SubscriberSegmentRepository */
private $subscribersSegmentRepository; private $subscribersSegmentRepository;
/** @var SubscribersRepository */
private $subscribersRepository;
public function __construct( public function __construct(
WelcomeScheduler $welcomeScheduler, WelcomeScheduler $welcomeScheduler,
NewslettersRepository $newslettersRepository, NewslettersRepository $newslettersRepository,
ScheduledTasksRepository $scheduledTasksRepository, ScheduledTasksRepository $scheduledTasksRepository,
SubscriberSegmentRepository $subscriberSegmentRepository SubscriberSegmentRepository $subscriberSegmentRepository,
SubscribersRepository $subscribersRepository
) { ) {
$this->welcomeScheduler = $welcomeScheduler; $this->welcomeScheduler = $welcomeScheduler;
$this->newslettersRepository = $newslettersRepository; $this->newslettersRepository = $newslettersRepository;
$this->scheduledTasksRepository = $scheduledTasksRepository; $this->scheduledTasksRepository = $scheduledTasksRepository;
$this->subscribersSegmentRepository = $subscriberSegmentRepository; $this->subscribersSegmentRepository = $subscriberSegmentRepository;
$this->subscribersRepository = $subscribersRepository;
} }
public function getKey(): string { public function getKey(): string {
@@ -81,7 +86,9 @@ class SendWelcomeEmailAction implements Action {
throw InvalidStateException::create()->withMessage('A mailpoet:subscriber subject is required.'); 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) { if (!$subscriber instanceof SubscriberEntity) {
throw InvalidStateException::create()->withMessage('Could not retrieve subscriber from the subscriber subject.'); 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.'); throw InvalidStateException::create()->withMessage('A mailpoet:segment subject is required.');
} }
$segment = $segmentSubject->getSegment(); $segmentId = $segmentSubject->getFields()['id']->getValue();
if (!$segment instanceof SegmentEntity) {
throw InvalidStateException::create()->withMessage('Could not retrieve the segment from the segment subject.');
}
$subscriberSegment = $this->subscribersSegmentRepository->findOneBy([ $subscriberSegment = $this->subscribersSegmentRepository->findOneBy([
'subscriber' => $subscriber, 'subscriber' => $subscriber,
'segment' => $segment, 'segment' => $segmentId,
'status' => SubscriberEntity::STATUS_SUBSCRIBED, 'status' => SubscriberEntity::STATUS_SUBSCRIBED,
]); ]);
if ($subscriberSegment === null) { 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()); $previouslyScheduledNotification = $this->scheduledTasksRepository->findByNewsletterAndSubscriberId($newsletter, (int)$subscriber->getId());

View File

@@ -34,6 +34,15 @@ class SegmentSubject implements Subject {
return $this->getSegment()->getName(); 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()]; return ['segment_id' => $segment->getId()];
} }
public function getSegment(): SegmentEntity { private function getSegment(): SegmentEntity {
if (!$this->segment) { if (!$this->segment) {
throw InvalidStateException::create()->withMessage(__('Segment was not loaded.', 'mailpoet')); throw InvalidStateException::create()->withMessage(__('Segment was not loaded.', 'mailpoet'));
} }

View File

@@ -82,7 +82,7 @@ class SubscriberSubject implements Subject {
return ['subscriber_id' => $subscriber->getId()]; return ['subscriber_id' => $subscriber->getId()];
} }
public function getSubscriber(): SubscriberEntity { private function getSubscriber(): SubscriberEntity {
if (!$this->subscriber) { if (!$this->subscriber) {
throw InvalidStateException::create()->withMessage(__('Subscriber was not loaded.', 'mailpoet')); throw InvalidStateException::create()->withMessage(__('Subscriber was not loaded.', 'mailpoet'));
} }