Let transactional emails pass

[MAILPOET-4999]
This commit is contained in:
David Remer
2023-03-30 13:07:17 +03:00
committed by Aschepikov
parent ac65c138ee
commit 46f888a30b

View File

@ -18,6 +18,7 @@ use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Scheduler\AutomationEmailScheduler; use MailPoet\Newsletter\Scheduler\AutomationEmailScheduler;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\SubscriberSegmentRepository; use MailPoet\Subscribers\SubscriberSegmentRepository;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\Validator\Builder; use MailPoet\Validator\Builder;
use MailPoet\Validator\Schema\ObjectSchema; use MailPoet\Validator\Schema\ObjectSchema;
use Throwable; use Throwable;
@ -34,6 +35,9 @@ class SendEmailAction implements Action {
/** @var SubscriberSegmentRepository */ /** @var SubscriberSegmentRepository */
private $subscriberSegmentRepository; private $subscriberSegmentRepository;
/** @var SubscribersRepository */
private $subscribersRepository;
/** @var AutomationEmailScheduler */ /** @var AutomationEmailScheduler */
private $automationEmailScheduler; private $automationEmailScheduler;
@ -41,11 +45,13 @@ class SendEmailAction implements Action {
SettingsController $settings, SettingsController $settings,
NewslettersRepository $newslettersRepository, NewslettersRepository $newslettersRepository,
SubscriberSegmentRepository $subscriberSegmentRepository, SubscriberSegmentRepository $subscriberSegmentRepository,
SubscribersRepository $subscribersRepository,
AutomationEmailScheduler $automationEmailScheduler AutomationEmailScheduler $automationEmailScheduler
) { ) {
$this->settings = $settings; $this->settings = $settings;
$this->newslettersRepository = $newslettersRepository; $this->newslettersRepository = $newslettersRepository;
$this->subscriberSegmentRepository = $subscriberSegmentRepository; $this->subscriberSegmentRepository = $subscriberSegmentRepository;
$this->subscribersRepository = $subscribersRepository;
$this->automationEmailScheduler = $automationEmailScheduler; $this->automationEmailScheduler = $automationEmailScheduler;
} }
@ -120,17 +126,17 @@ class SendEmailAction implements Action {
'status' => SubscriberEntity::STATUS_SUBSCRIBED, 'status' => SubscriberEntity::STATUS_SUBSCRIBED,
]); ]);
if (!$subscriberSegment) { if ($newsletter->getType() !== NewsletterEntity::TYPE_TRANSACTIONAL && !$subscriberSegment) {
throw InvalidStateException::create()->withMessage(sprintf("Subscriber ID '%s' is not subscribed to segment ID '%s'.", $subscriberId, $segmentId)); throw InvalidStateException::create()->withMessage(sprintf("Subscriber ID '%s' is not subscribed to segment ID '%s'.", $subscriberId, $segmentId));
} }
$subscriber = $subscriberSegment->getSubscriber(); $subscriber = $subscriberSegment ? $subscriberSegment->getSubscriber() : $this->subscribersRepository->findOneById($subscriberId);
if (!$subscriber) { if (!$subscriber) {
throw InvalidStateException::create(); throw InvalidStateException::create();
} }
$subscriberStatus = $subscriber->getStatus(); $subscriberStatus = $subscriber->getStatus();
if ($subscriberStatus !== SubscriberEntity::STATUS_SUBSCRIBED) { if ($newsletter->getType() !== NewsletterEntity::TYPE_TRANSACTIONAL && $subscriberStatus !== SubscriberEntity::STATUS_SUBSCRIBED) {
throw InvalidStateException::create()->withMessage(sprintf("Cannot schedule a newsletter for subscriber ID '%s' because their status is '%s'.", $subscriberId, $subscriberStatus)); throw InvalidStateException::create()->withMessage(sprintf("Cannot schedule a newsletter for subscriber ID '%s' because their status is '%s'.", $subscriberId, $subscriberStatus));
} }