From fd0acbd6cf2f148d6f6c3527fece783e8f13ae9d Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Sat, 27 Aug 2022 14:37:13 -0300 Subject: [PATCH] Refactor Newsletter to use Doctrine instead of the NewsletterSegment model [MAILPOET-4363] --- .../Workers/SendingQueue/SendingQueue.php | 2 +- .../Workers/SendingQueue/Tasks/Newsletter.php | 27 ++++++++++++++----- .../SendingQueue/Tasks/NewsletterTest.php | 11 ++++---- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php b/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php index 59e024ad32..13750d53b2 100644 --- a/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php +++ b/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php @@ -175,7 +175,7 @@ class SendingQueue { // configure mailer $this->mailerTask->configureMailer($newsletter); // get newsletter segments - $newsletterSegmentsIds = $this->newsletterTask->getNewsletterSegments($newsletter); + $newsletterSegmentsIds = $this->newsletterTask->getNewsletterSegments($newsletterEntity); // Pause task in case some of related segments was deleted or trashed if ($newsletterSegmentsIds && !$this->checkDeletedSegments($newsletterSegmentsIds)) { $this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info( diff --git a/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php b/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php index 417b71a58f..01b8ab9b20 100644 --- a/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php +++ b/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php @@ -7,16 +7,18 @@ use MailPoet\Cron\Workers\SendingQueue\Tasks\Posts as PostsTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Shortcodes as ShortcodesTask; use MailPoet\DI\ContainerWrapper; use MailPoet\Entities\NewsletterEntity; +use MailPoet\Entities\NewsletterSegmentEntity; +use MailPoet\Entities\SegmentEntity; use MailPoet\Logging\LoggerFactory; use MailPoet\Mailer\MailerLog; use MailPoet\Models\Newsletter as NewsletterModel; -use MailPoet\Models\NewsletterSegment as NewsletterSegmentModel; use MailPoet\Models\SendingQueue as SendingQueueModel; use MailPoet\Models\Subscriber as SubscriberModel; use MailPoet\Newsletter\Links\Links as NewsletterLinks; use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\Renderer\PostProcess\OpenTracking; use MailPoet\Newsletter\Renderer\Renderer; +use MailPoet\Newsletter\Segment\NewsletterSegmentRepository; use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Settings\TrackingConfig; use MailPoet\Statistics\GATracking; @@ -63,6 +65,9 @@ class Newsletter { /** @var SubscribersRepository */ private $subscribersRepository; + /** @var NewsletterSegmentRepository */ + private $newsletterSegmentRepository; + public function __construct( WPFunctions $wp = null, PostsTask $postsTask = null, @@ -94,6 +99,7 @@ class Newsletter { $this->newsletterLinks = ContainerWrapper::getInstance()->get(NewsletterLinks::class); $this->sendingQueuesRepository = ContainerWrapper::getInstance()->get(SendingQueuesRepository::class); $this->subscribersRepository = ContainerWrapper::getInstance()->get(SubscribersRepository::class); + $this->newsletterSegmentRepository = ContainerWrapper::getInstance()->get(NewsletterSegmentRepository::class); } public function getNewsletterFromQueue($queue) { @@ -283,11 +289,20 @@ class Newsletter { } } - public function getNewsletterSegments($newsletter) { - $segments = NewsletterSegmentModel::where('newsletter_id', $newsletter->id) - ->select('segment_id') - ->findArray(); - return Helpers::flattenArray($segments); + public function getNewsletterSegments(NewsletterEntity $newsletter) { + $newsletterSegments = $this->newsletterSegmentRepository->findBy(['newsletter' => $newsletter]); + $segmentIds = array_map( + function(NewsletterSegmentEntity $newsletterSegment) { + $segment = $newsletterSegment->getSegment(); + + if ($segment instanceof SegmentEntity) { + return $segment->getId(); + } + }, + $newsletterSegments + ); + + return $segmentIds; } public function stopNewsletterPreProcessing($errorCode = null) { diff --git a/mailpoet/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php b/mailpoet/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php index b59a2e4e52..ebf141f99b 100644 --- a/mailpoet/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php +++ b/mailpoet/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php @@ -15,7 +15,6 @@ use MailPoet\Entities\NewsletterLinkEntity; use MailPoet\Entities\NewsletterPostEntity; use MailPoet\Entities\NewsletterSegmentEntity; use MailPoet\Entities\ScheduledTaskEntity; -use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SendingQueueEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Logging\LoggerFactory; @@ -28,6 +27,7 @@ use MailPoet\Router\Router; use MailPoet\Settings\SettingsRepository; use MailPoet\Tasks\Sending; use MailPoet\Tasks\Sending as SendingTask; +use MailPoet\Test\DataFactories\Segment as SegmentFactory; use MailPoet\Test\DataFactories\Subscriber as SubscriberFactory; use MailPoet\WP\Emoji; use MailPoet\WP\Functions as WPFunctions; @@ -365,17 +365,18 @@ class NewsletterTest extends \MailPoetTest { public function testItGetsSegments() { $newsletterEntity = $this->newslettersRepository->findOneById($this->newsletter->id); $this->assertInstanceOf(NewsletterEntity::class, $newsletterEntity); + $segmentIds = []; for ($i = 1; $i <= 3; $i++) { - $segment = $this->entityManager->getReference(SegmentEntity::class, $i); - $this->assertInstanceOf(SegmentEntity::class, $segment); + $segment = (new SegmentFactory())->create(); + $segmentIds[] = $segment->getId(); $newsletterSegment = new NewsletterSegmentEntity($newsletterEntity, $segment); $this->entityManager->persist($newsletterSegment); } $this->entityManager->flush(); - expect($this->newsletterTask->getNewsletterSegments($this->newsletter))->equals( - [1,2,3] + expect($this->newsletterTask->getNewsletterSegments($newsletterEntity))->equals( + $segmentIds ); }