Refactor Newsletter to use Doctrine instead of the Newsletter model
[MAILPOET-4363]
This commit is contained in:
committed by
Aschepikov
parent
f6afe987c8
commit
9a92068d5b
@ -272,6 +272,9 @@ class SendingQueue {
|
|||||||
$unsubscribeUrls = [];
|
$unsubscribeUrls = [];
|
||||||
$statistics = [];
|
$statistics = [];
|
||||||
$metas = [];
|
$metas = [];
|
||||||
|
|
||||||
|
$newsletterEntity = $this->newslettersRepository->findOneById($newsletter->id);
|
||||||
|
|
||||||
foreach ($subscribers as $subscriber) {
|
foreach ($subscribers as $subscriber) {
|
||||||
$subscriberEntity = $this->subscribersRepository->findOneById($subscriber->id);
|
$subscriberEntity = $this->subscribersRepository->findOneById($subscriber->id);
|
||||||
|
|
||||||
@ -282,7 +285,7 @@ class SendingQueue {
|
|||||||
// render shortcodes and replace subscriber data in tracked links
|
// render shortcodes and replace subscriber data in tracked links
|
||||||
$preparedNewsletters[] =
|
$preparedNewsletters[] =
|
||||||
$this->newsletterTask->prepareNewsletterForSending(
|
$this->newsletterTask->prepareNewsletterForSending(
|
||||||
$newsletter,
|
$newsletterEntity,
|
||||||
$subscriberEntity,
|
$subscriberEntity,
|
||||||
$queue
|
$queue
|
||||||
);
|
);
|
||||||
|
@ -12,7 +12,6 @@ use MailPoet\Entities\SegmentEntity;
|
|||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Logging\LoggerFactory;
|
use MailPoet\Logging\LoggerFactory;
|
||||||
use MailPoet\Mailer\MailerLog;
|
use MailPoet\Mailer\MailerLog;
|
||||||
use MailPoet\Models\Newsletter as NewsletterModel;
|
|
||||||
use MailPoet\Models\SendingQueue as SendingQueueModel;
|
use MailPoet\Models\SendingQueue as SendingQueueModel;
|
||||||
use MailPoet\Newsletter\Links\Links as NewsletterLinks;
|
use MailPoet\Newsletter\Links\Links as NewsletterLinks;
|
||||||
use MailPoet\Newsletter\NewslettersRepository;
|
use MailPoet\Newsletter\NewslettersRepository;
|
||||||
@ -103,20 +102,20 @@ class Newsletter {
|
|||||||
->whereNull('deleted_at')
|
->whereNull('deleted_at')
|
||||||
->whereAnyIs(
|
->whereAnyIs(
|
||||||
[
|
[
|
||||||
['status' => NewsletterModel::STATUS_ACTIVE],
|
['status' => NewsletterEntity::STATUS_ACTIVE],
|
||||||
['status' => NewsletterModel::STATUS_SENDING],
|
['status' => NewsletterEntity::STATUS_SENDING],
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
->findOne();
|
->findOne();
|
||||||
if (!$newsletter) return false;
|
if (!$newsletter) return false;
|
||||||
// if this is a notification history, get existing active or sending parent newsletter
|
// if this is a notification history, get existing active or sending parent newsletter
|
||||||
if ($newsletter->type == NewsletterModel::TYPE_NOTIFICATION_HISTORY) {
|
if ($newsletter->type == NewsletterEntity::TYPE_NOTIFICATION_HISTORY) {
|
||||||
$parentNewsletter = $newsletter->parent()
|
$parentNewsletter = $newsletter->parent()
|
||||||
->whereNull('deleted_at')
|
->whereNull('deleted_at')
|
||||||
->whereAnyIs(
|
->whereAnyIs(
|
||||||
[
|
[
|
||||||
['status' => NewsletterModel::STATUS_ACTIVE],
|
['status' => NewsletterEntity::STATUS_ACTIVE],
|
||||||
['status' => NewsletterModel::STATUS_SENDING],
|
['status' => NewsletterEntity::STATUS_SENDING],
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
->findOne();
|
->findOne();
|
||||||
@ -164,7 +163,7 @@ class Newsletter {
|
|||||||
}
|
}
|
||||||
// check if this is a post notification and if it contains at least 1 ALC post
|
// check if this is a post notification and if it contains at least 1 ALC post
|
||||||
if (
|
if (
|
||||||
$newsletter->type === NewsletterModel::TYPE_NOTIFICATION_HISTORY &&
|
$newsletter->type === NewsletterEntity::TYPE_NOTIFICATION_HISTORY &&
|
||||||
$this->postsTask->getAlcPostsCount($renderedNewsletter, $newsletter) === 0
|
$this->postsTask->getAlcPostsCount($renderedNewsletter, $newsletter) === 0
|
||||||
) {
|
) {
|
||||||
// delete notification history record since it will never be sent
|
// delete notification history record since it will never be sent
|
||||||
@ -215,7 +214,7 @@ class Newsletter {
|
|||||||
return $newsletter;
|
return $newsletter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function prepareNewsletterForSending($newsletter, SubscriberEntity $subscriber, $queue): array {
|
public function prepareNewsletterForSending(NewsletterEntity $newsletter, SubscriberEntity $subscriber, $queue): array {
|
||||||
// shortcodes and links will be replaced in the subject, html and text body
|
// shortcodes and links will be replaced in the subject, html and text body
|
||||||
// to speed the processing, join content into a continuous string
|
// to speed the processing, join content into a continuous string
|
||||||
$renderedNewsletter = $queue->getNewsletterRenderedBody();
|
$renderedNewsletter = $queue->getNewsletterRenderedBody();
|
||||||
@ -228,12 +227,6 @@ class Newsletter {
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($newsletter instanceof NewsletterModel) {
|
|
||||||
$newsletterEntity = $this->newslettersRepository->findOneById($newsletter->id);
|
|
||||||
} else {
|
|
||||||
$newsletterEntity = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($queue->queue() instanceof SendingQueueModel) {
|
if ($queue->queue() instanceof SendingQueueModel) {
|
||||||
$sendingQueueEntity = $this->sendingQueuesRepository->findOneById($queue->queue()->id);
|
$sendingQueueEntity = $this->sendingQueuesRepository->findOneById($queue->queue()->id);
|
||||||
} else {
|
} else {
|
||||||
@ -243,7 +236,7 @@ class Newsletter {
|
|||||||
$preparedNewsletter = ShortcodesTask::process(
|
$preparedNewsletter = ShortcodesTask::process(
|
||||||
$preparedNewsletter,
|
$preparedNewsletter,
|
||||||
null,
|
null,
|
||||||
$newsletterEntity,
|
$newsletter,
|
||||||
$subscriber,
|
$subscriber,
|
||||||
$sendingQueueEntity
|
$sendingQueueEntity
|
||||||
);
|
);
|
||||||
@ -256,7 +249,7 @@ class Newsletter {
|
|||||||
}
|
}
|
||||||
$preparedNewsletter = Helpers::splitObject($preparedNewsletter);
|
$preparedNewsletter = Helpers::splitObject($preparedNewsletter);
|
||||||
return [
|
return [
|
||||||
'id' => $newsletter->id,
|
'id' => $newsletter->getId(),
|
||||||
'subject' => $preparedNewsletter[0],
|
'subject' => $preparedNewsletter[0],
|
||||||
'body' => [
|
'body' => [
|
||||||
'html' => $preparedNewsletter[1],
|
'html' => $preparedNewsletter[1],
|
||||||
@ -268,10 +261,10 @@ class Newsletter {
|
|||||||
public function markNewsletterAsSent(NewsletterEntity $newsletter, $queue) {
|
public function markNewsletterAsSent(NewsletterEntity $newsletter, $queue) {
|
||||||
// if it's a standard or notification history newsletter, update its status
|
// if it's a standard or notification history newsletter, update its status
|
||||||
if (
|
if (
|
||||||
$newsletter->getType() === NewsletterModel::TYPE_STANDARD ||
|
$newsletter->getType() === NewsletterEntity::TYPE_STANDARD ||
|
||||||
$newsletter->getType() === NewsletterModel::TYPE_NOTIFICATION_HISTORY
|
$newsletter->getType() === NewsletterEntity::TYPE_NOTIFICATION_HISTORY
|
||||||
) {
|
) {
|
||||||
$newsletter->setStatus(NewsletterModel::STATUS_SENT);
|
$newsletter->setStatus(NewsletterEntity::STATUS_SENT);
|
||||||
$newsletter->setSentAt(new Carbon($queue->processedAt));
|
$newsletter->setSentAt(new Carbon($queue->processedAt));
|
||||||
$this->newslettersRepository->persist($newsletter);
|
$this->newslettersRepository->persist($newsletter);
|
||||||
$this->newslettersRepository->flush();
|
$this->newslettersRepository->flush();
|
||||||
|
@ -310,6 +310,8 @@ class NewsletterTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testItUsesRenderedNewsletterBodyAndSubjectFromQueueObjectWhenPreparingNewsletterForSending() {
|
public function testItUsesRenderedNewsletterBodyAndSubjectFromQueueObjectWhenPreparingNewsletterForSending() {
|
||||||
|
$newsletterEntity = $this->newslettersRepository->findOneById($this->newsletter->id);
|
||||||
|
$this->assertInstanceOf(NewsletterEntity::class, $newsletterEntity);
|
||||||
$queue = $this->queue;
|
$queue = $this->queue;
|
||||||
$queue->newsletterRenderedBody = [
|
$queue->newsletterRenderedBody = [
|
||||||
'html' => 'queue HTML body',
|
'html' => 'queue HTML body',
|
||||||
@ -324,7 +326,7 @@ class NewsletterTest extends \MailPoetTest {
|
|||||||
);
|
);
|
||||||
$newsletterTask = new NewsletterTask(null, null, null, $emoji);
|
$newsletterTask = new NewsletterTask(null, null, null, $emoji);
|
||||||
$result = $newsletterTask->prepareNewsletterForSending(
|
$result = $newsletterTask->prepareNewsletterForSending(
|
||||||
$this->newsletter,
|
$newsletterEntity,
|
||||||
$this->subscriber,
|
$this->subscriber,
|
||||||
$queue
|
$queue
|
||||||
);
|
);
|
||||||
@ -335,8 +337,10 @@ class NewsletterTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function testItRendersShortcodesAndReplacesSubscriberDataInLinks() {
|
public function testItRendersShortcodesAndReplacesSubscriberDataInLinks() {
|
||||||
$newsletter = $this->newsletterTask->preProcessNewsletter($this->newsletter, $this->queue);
|
$newsletter = $this->newsletterTask->preProcessNewsletter($this->newsletter, $this->queue);
|
||||||
|
$newsletterEntity = $this->newslettersRepository->findOneById($newsletter->id);
|
||||||
|
$this->assertInstanceOf(NewsletterEntity::class, $newsletterEntity);
|
||||||
$result = $this->newsletterTask->prepareNewsletterForSending(
|
$result = $this->newsletterTask->prepareNewsletterForSending(
|
||||||
$newsletter,
|
$newsletterEntity,
|
||||||
$this->subscriber,
|
$this->subscriber,
|
||||||
$this->queue
|
$this->queue
|
||||||
);
|
);
|
||||||
@ -351,8 +355,10 @@ class NewsletterTest extends \MailPoetTest {
|
|||||||
$newsletterTask = $this->newsletterTask;
|
$newsletterTask = $this->newsletterTask;
|
||||||
$newsletterTask->trackingEnabled = false;
|
$newsletterTask->trackingEnabled = false;
|
||||||
$newsletter = $newsletterTask->preProcessNewsletter($this->newsletter, $this->queue);
|
$newsletter = $newsletterTask->preProcessNewsletter($this->newsletter, $this->queue);
|
||||||
|
$newsletterEntity = $this->newslettersRepository->findOneById($newsletter->id);
|
||||||
|
$this->assertInstanceOf(NewsletterEntity::class, $newsletterEntity);
|
||||||
$result = $newsletterTask->prepareNewsletterForSending(
|
$result = $newsletterTask->prepareNewsletterForSending(
|
||||||
$newsletter,
|
$newsletterEntity,
|
||||||
$this->subscriber,
|
$this->subscriber,
|
||||||
$this->queue
|
$this->queue
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user