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
|
||||
$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(
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user