diff --git a/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php b/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php index 5721d1a6ff..ca9d662f7b 100644 --- a/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php +++ b/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php @@ -272,6 +272,9 @@ class SendingQueue { $unsubscribeUrls = []; $statistics = []; $metas = []; + + $newsletterEntity = $this->newslettersRepository->findOneById($newsletter->id); + foreach ($subscribers as $subscriber) { $subscriberEntity = $this->subscribersRepository->findOneById($subscriber->id); @@ -282,7 +285,7 @@ class SendingQueue { // render shortcodes and replace subscriber data in tracked links $preparedNewsletters[] = $this->newsletterTask->prepareNewsletterForSending( - $newsletter, + $newsletterEntity, $subscriberEntity, $queue ); diff --git a/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php b/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php index 453358ccf0..b3e576d1e4 100644 --- a/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php +++ b/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php @@ -12,7 +12,6 @@ use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Logging\LoggerFactory; use MailPoet\Mailer\MailerLog; -use MailPoet\Models\Newsletter as NewsletterModel; use MailPoet\Models\SendingQueue as SendingQueueModel; use MailPoet\Newsletter\Links\Links as NewsletterLinks; use MailPoet\Newsletter\NewslettersRepository; @@ -103,20 +102,20 @@ class Newsletter { ->whereNull('deleted_at') ->whereAnyIs( [ - ['status' => NewsletterModel::STATUS_ACTIVE], - ['status' => NewsletterModel::STATUS_SENDING], + ['status' => NewsletterEntity::STATUS_ACTIVE], + ['status' => NewsletterEntity::STATUS_SENDING], ] ) ->findOne(); if (!$newsletter) return false; // 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() ->whereNull('deleted_at') ->whereAnyIs( [ - ['status' => NewsletterModel::STATUS_ACTIVE], - ['status' => NewsletterModel::STATUS_SENDING], + ['status' => NewsletterEntity::STATUS_ACTIVE], + ['status' => NewsletterEntity::STATUS_SENDING], ] ) ->findOne(); @@ -164,7 +163,7 @@ class Newsletter { } // check if this is a post notification and if it contains at least 1 ALC post if ( - $newsletter->type === NewsletterModel::TYPE_NOTIFICATION_HISTORY && + $newsletter->type === NewsletterEntity::TYPE_NOTIFICATION_HISTORY && $this->postsTask->getAlcPostsCount($renderedNewsletter, $newsletter) === 0 ) { // delete notification history record since it will never be sent @@ -215,7 +214,7 @@ class 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 // to speed the processing, join content into a continuous string $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) { $sendingQueueEntity = $this->sendingQueuesRepository->findOneById($queue->queue()->id); } else { @@ -243,7 +236,7 @@ class Newsletter { $preparedNewsletter = ShortcodesTask::process( $preparedNewsletter, null, - $newsletterEntity, + $newsletter, $subscriber, $sendingQueueEntity ); @@ -256,7 +249,7 @@ class Newsletter { } $preparedNewsletter = Helpers::splitObject($preparedNewsletter); return [ - 'id' => $newsletter->id, + 'id' => $newsletter->getId(), 'subject' => $preparedNewsletter[0], 'body' => [ 'html' => $preparedNewsletter[1], @@ -268,10 +261,10 @@ class Newsletter { public function markNewsletterAsSent(NewsletterEntity $newsletter, $queue) { // if it's a standard or notification history newsletter, update its status if ( - $newsletter->getType() === NewsletterModel::TYPE_STANDARD || - $newsletter->getType() === NewsletterModel::TYPE_NOTIFICATION_HISTORY + $newsletter->getType() === NewsletterEntity::TYPE_STANDARD || + $newsletter->getType() === NewsletterEntity::TYPE_NOTIFICATION_HISTORY ) { - $newsletter->setStatus(NewsletterModel::STATUS_SENT); + $newsletter->setStatus(NewsletterEntity::STATUS_SENT); $newsletter->setSentAt(new Carbon($queue->processedAt)); $this->newslettersRepository->persist($newsletter); $this->newslettersRepository->flush(); diff --git a/mailpoet/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php b/mailpoet/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php index ebf141f99b..0d8520ced6 100644 --- a/mailpoet/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php +++ b/mailpoet/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php @@ -310,6 +310,8 @@ class NewsletterTest extends \MailPoetTest { } public function testItUsesRenderedNewsletterBodyAndSubjectFromQueueObjectWhenPreparingNewsletterForSending() { + $newsletterEntity = $this->newslettersRepository->findOneById($this->newsletter->id); + $this->assertInstanceOf(NewsletterEntity::class, $newsletterEntity); $queue = $this->queue; $queue->newsletterRenderedBody = [ 'html' => 'queue HTML body', @@ -324,7 +326,7 @@ class NewsletterTest extends \MailPoetTest { ); $newsletterTask = new NewsletterTask(null, null, null, $emoji); $result = $newsletterTask->prepareNewsletterForSending( - $this->newsletter, + $newsletterEntity, $this->subscriber, $queue ); @@ -335,8 +337,10 @@ class NewsletterTest extends \MailPoetTest { public function testItRendersShortcodesAndReplacesSubscriberDataInLinks() { $newsletter = $this->newsletterTask->preProcessNewsletter($this->newsletter, $this->queue); + $newsletterEntity = $this->newslettersRepository->findOneById($newsletter->id); + $this->assertInstanceOf(NewsletterEntity::class, $newsletterEntity); $result = $this->newsletterTask->prepareNewsletterForSending( - $newsletter, + $newsletterEntity, $this->subscriber, $this->queue ); @@ -351,8 +355,10 @@ class NewsletterTest extends \MailPoetTest { $newsletterTask = $this->newsletterTask; $newsletterTask->trackingEnabled = false; $newsletter = $newsletterTask->preProcessNewsletter($this->newsletter, $this->queue); + $newsletterEntity = $this->newslettersRepository->findOneById($newsletter->id); + $this->assertInstanceOf(NewsletterEntity::class, $newsletterEntity); $result = $newsletterTask->prepareNewsletterForSending( - $newsletter, + $newsletterEntity, $this->subscriber, $this->queue );