Keep subject entities private
[MAILPOET-4191]
This commit is contained in:
committed by
Veljko V
parent
cbabaf9e4e
commit
78352d410d
@@ -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());
|
||||||
|
@@ -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'));
|
||||||
}
|
}
|
||||||
|
@@ -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'));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user