Refactor Newsletter to use Doctrine instead of the NewsletterSegment model

[MAILPOET-4363]
This commit is contained in:
Rodrigo Primo
2022-08-27 14:37:13 -03:00
committed by Aschepikov
parent f4053b0583
commit fd0acbd6cf
3 changed files with 28 additions and 12 deletions

View File

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

View File

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

View File

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