Refactor Newsletter to use Doctrine instead of the NewsletterSegment model
[MAILPOET-4363]
This commit is contained in:
committed by
Aschepikov
parent
f4053b0583
commit
fd0acbd6cf
@@ -175,7 +175,7 @@ class SendingQueue {
|
|||||||
// configure mailer
|
// configure mailer
|
||||||
$this->mailerTask->configureMailer($newsletter);
|
$this->mailerTask->configureMailer($newsletter);
|
||||||
// get newsletter segments
|
// 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
|
// Pause task in case some of related segments was deleted or trashed
|
||||||
if ($newsletterSegmentsIds && !$this->checkDeletedSegments($newsletterSegmentsIds)) {
|
if ($newsletterSegmentsIds && !$this->checkDeletedSegments($newsletterSegmentsIds)) {
|
||||||
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info(
|
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info(
|
||||||
|
@@ -7,16 +7,18 @@ use MailPoet\Cron\Workers\SendingQueue\Tasks\Posts as PostsTask;
|
|||||||
use MailPoet\Cron\Workers\SendingQueue\Tasks\Shortcodes as ShortcodesTask;
|
use MailPoet\Cron\Workers\SendingQueue\Tasks\Shortcodes as ShortcodesTask;
|
||||||
use MailPoet\DI\ContainerWrapper;
|
use MailPoet\DI\ContainerWrapper;
|
||||||
use MailPoet\Entities\NewsletterEntity;
|
use MailPoet\Entities\NewsletterEntity;
|
||||||
|
use MailPoet\Entities\NewsletterSegmentEntity;
|
||||||
|
use MailPoet\Entities\SegmentEntity;
|
||||||
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\Newsletter as NewsletterModel;
|
||||||
use MailPoet\Models\NewsletterSegment as NewsletterSegmentModel;
|
|
||||||
use MailPoet\Models\SendingQueue as SendingQueueModel;
|
use MailPoet\Models\SendingQueue as SendingQueueModel;
|
||||||
use MailPoet\Models\Subscriber as SubscriberModel;
|
use MailPoet\Models\Subscriber as SubscriberModel;
|
||||||
use MailPoet\Newsletter\Links\Links as NewsletterLinks;
|
use MailPoet\Newsletter\Links\Links as NewsletterLinks;
|
||||||
use MailPoet\Newsletter\NewslettersRepository;
|
use MailPoet\Newsletter\NewslettersRepository;
|
||||||
use MailPoet\Newsletter\Renderer\PostProcess\OpenTracking;
|
use MailPoet\Newsletter\Renderer\PostProcess\OpenTracking;
|
||||||
use MailPoet\Newsletter\Renderer\Renderer;
|
use MailPoet\Newsletter\Renderer\Renderer;
|
||||||
|
use MailPoet\Newsletter\Segment\NewsletterSegmentRepository;
|
||||||
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
||||||
use MailPoet\Settings\TrackingConfig;
|
use MailPoet\Settings\TrackingConfig;
|
||||||
use MailPoet\Statistics\GATracking;
|
use MailPoet\Statistics\GATracking;
|
||||||
@@ -63,6 +65,9 @@ class Newsletter {
|
|||||||
/** @var SubscribersRepository */
|
/** @var SubscribersRepository */
|
||||||
private $subscribersRepository;
|
private $subscribersRepository;
|
||||||
|
|
||||||
|
/** @var NewsletterSegmentRepository */
|
||||||
|
private $newsletterSegmentRepository;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
WPFunctions $wp = null,
|
WPFunctions $wp = null,
|
||||||
PostsTask $postsTask = null,
|
PostsTask $postsTask = null,
|
||||||
@@ -94,6 +99,7 @@ class Newsletter {
|
|||||||
$this->newsletterLinks = ContainerWrapper::getInstance()->get(NewsletterLinks::class);
|
$this->newsletterLinks = ContainerWrapper::getInstance()->get(NewsletterLinks::class);
|
||||||
$this->sendingQueuesRepository = ContainerWrapper::getInstance()->get(SendingQueuesRepository::class);
|
$this->sendingQueuesRepository = ContainerWrapper::getInstance()->get(SendingQueuesRepository::class);
|
||||||
$this->subscribersRepository = ContainerWrapper::getInstance()->get(SubscribersRepository::class);
|
$this->subscribersRepository = ContainerWrapper::getInstance()->get(SubscribersRepository::class);
|
||||||
|
$this->newsletterSegmentRepository = ContainerWrapper::getInstance()->get(NewsletterSegmentRepository::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getNewsletterFromQueue($queue) {
|
public function getNewsletterFromQueue($queue) {
|
||||||
@@ -283,11 +289,20 @@ class Newsletter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getNewsletterSegments($newsletter) {
|
public function getNewsletterSegments(NewsletterEntity $newsletter) {
|
||||||
$segments = NewsletterSegmentModel::where('newsletter_id', $newsletter->id)
|
$newsletterSegments = $this->newsletterSegmentRepository->findBy(['newsletter' => $newsletter]);
|
||||||
->select('segment_id')
|
$segmentIds = array_map(
|
||||||
->findArray();
|
function(NewsletterSegmentEntity $newsletterSegment) {
|
||||||
return Helpers::flattenArray($segments);
|
$segment = $newsletterSegment->getSegment();
|
||||||
|
|
||||||
|
if ($segment instanceof SegmentEntity) {
|
||||||
|
return $segment->getId();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
$newsletterSegments
|
||||||
|
);
|
||||||
|
|
||||||
|
return $segmentIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function stopNewsletterPreProcessing($errorCode = null) {
|
public function stopNewsletterPreProcessing($errorCode = null) {
|
||||||
|
@@ -15,7 +15,6 @@ use MailPoet\Entities\NewsletterLinkEntity;
|
|||||||
use MailPoet\Entities\NewsletterPostEntity;
|
use MailPoet\Entities\NewsletterPostEntity;
|
||||||
use MailPoet\Entities\NewsletterSegmentEntity;
|
use MailPoet\Entities\NewsletterSegmentEntity;
|
||||||
use MailPoet\Entities\ScheduledTaskEntity;
|
use MailPoet\Entities\ScheduledTaskEntity;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
|
||||||
use MailPoet\Entities\SendingQueueEntity;
|
use MailPoet\Entities\SendingQueueEntity;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Logging\LoggerFactory;
|
use MailPoet\Logging\LoggerFactory;
|
||||||
@@ -28,6 +27,7 @@ use MailPoet\Router\Router;
|
|||||||
use MailPoet\Settings\SettingsRepository;
|
use MailPoet\Settings\SettingsRepository;
|
||||||
use MailPoet\Tasks\Sending;
|
use MailPoet\Tasks\Sending;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
|
use MailPoet\Test\DataFactories\Segment as SegmentFactory;
|
||||||
use MailPoet\Test\DataFactories\Subscriber as SubscriberFactory;
|
use MailPoet\Test\DataFactories\Subscriber as SubscriberFactory;
|
||||||
use MailPoet\WP\Emoji;
|
use MailPoet\WP\Emoji;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
@@ -365,17 +365,18 @@ class NewsletterTest extends \MailPoetTest {
|
|||||||
public function testItGetsSegments() {
|
public function testItGetsSegments() {
|
||||||
$newsletterEntity = $this->newslettersRepository->findOneById($this->newsletter->id);
|
$newsletterEntity = $this->newslettersRepository->findOneById($this->newsletter->id);
|
||||||
$this->assertInstanceOf(NewsletterEntity::class, $newsletterEntity);
|
$this->assertInstanceOf(NewsletterEntity::class, $newsletterEntity);
|
||||||
|
$segmentIds = [];
|
||||||
|
|
||||||
for ($i = 1; $i <= 3; $i++) {
|
for ($i = 1; $i <= 3; $i++) {
|
||||||
$segment = $this->entityManager->getReference(SegmentEntity::class, $i);
|
$segment = (new SegmentFactory())->create();
|
||||||
$this->assertInstanceOf(SegmentEntity::class, $segment);
|
$segmentIds[] = $segment->getId();
|
||||||
$newsletterSegment = new NewsletterSegmentEntity($newsletterEntity, $segment);
|
$newsletterSegment = new NewsletterSegmentEntity($newsletterEntity, $segment);
|
||||||
$this->entityManager->persist($newsletterSegment);
|
$this->entityManager->persist($newsletterSegment);
|
||||||
}
|
}
|
||||||
$this->entityManager->flush();
|
$this->entityManager->flush();
|
||||||
|
|
||||||
expect($this->newsletterTask->getNewsletterSegments($this->newsletter))->equals(
|
expect($this->newsletterTask->getNewsletterSegments($newsletterEntity))->equals(
|
||||||
[1,2,3]
|
$segmentIds
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user