Refactor Newsletter to use Doctrine instead of the Newsletter model

[MAILPOET-4363]
This commit is contained in:
Rodrigo Primo
2022-08-27 15:58:23 -03:00
committed by Aschepikov
parent f6afe987c8
commit 9a92068d5b
3 changed files with 25 additions and 23 deletions

View File

@ -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
); );

View File

@ -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();

View File

@ -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
); );