Delete WP Posts when deleting Newsletter Entities
[MAILPOET-5365]
This commit is contained in:
committed by
Aschepikov
parent
e6e20e3159
commit
3ff4ba0c86
@@ -23,6 +23,7 @@ use MailPoet\Entities\StatisticsOpenEntity;
|
|||||||
use MailPoet\Entities\StatisticsWooCommercePurchaseEntity;
|
use MailPoet\Entities\StatisticsWooCommercePurchaseEntity;
|
||||||
use MailPoet\Entities\StatsNotificationEntity;
|
use MailPoet\Entities\StatsNotificationEntity;
|
||||||
use MailPoet\Logging\LoggerFactory;
|
use MailPoet\Logging\LoggerFactory;
|
||||||
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
use MailPoetVendor\Carbon\Carbon;
|
use MailPoetVendor\Carbon\Carbon;
|
||||||
use MailPoetVendor\Doctrine\DBAL\Connection;
|
use MailPoetVendor\Doctrine\DBAL\Connection;
|
||||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||||
@@ -35,11 +36,16 @@ class NewslettersRepository extends Repository {
|
|||||||
/** @var LoggerFactory */
|
/** @var LoggerFactory */
|
||||||
private $loggerFactory;
|
private $loggerFactory;
|
||||||
|
|
||||||
|
/** @var WPFunctions */
|
||||||
|
private $wp;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
EntityManager $entityManager
|
EntityManager $entityManager,
|
||||||
|
WPFunctions $wp
|
||||||
) {
|
) {
|
||||||
parent::__construct($entityManager);
|
parent::__construct($entityManager);
|
||||||
$this->loggerFactory = LoggerFactory::getInstance();
|
$this->loggerFactory = LoggerFactory::getInstance();
|
||||||
|
$this->wp = $wp;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getEntityClassName() {
|
protected function getEntityClassName() {
|
||||||
@@ -432,6 +438,18 @@ class NewslettersRepository extends Repository {
|
|||||||
WHERE ns.`newsletter_id` IN (:ids)
|
WHERE ns.`newsletter_id` IN (:ids)
|
||||||
", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]);
|
", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]);
|
||||||
|
|
||||||
|
// Fetch WP Posts IDs and delete them
|
||||||
|
$wpPostsIds = $entityManager->createQueryBuilder()->select('n.wpPostId')
|
||||||
|
->from(NewsletterEntity::class, 'n')
|
||||||
|
->where('n.id IN (:ids)')
|
||||||
|
->andWhere('n.wpPostId IS NOT NULL')
|
||||||
|
->setParameter('ids', $ids)
|
||||||
|
->getQuery()->getSingleColumnResult();
|
||||||
|
foreach ($wpPostsIds as $wpPostId) {
|
||||||
|
$this->wp->wpDeletePost(intval($wpPostId), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete newsletter entities
|
||||||
$queryBuilder = $entityManager->createQueryBuilder();
|
$queryBuilder = $entityManager->createQueryBuilder();
|
||||||
$queryBuilder->delete(NewsletterEntity::class, 'n')
|
$queryBuilder->delete(NewsletterEntity::class, 'n')
|
||||||
->where('n.id IN (:ids)')
|
->where('n.id IN (:ids)')
|
||||||
|
@@ -88,7 +88,7 @@ class NewslettersTest extends \MailPoetTest {
|
|||||||
[
|
[
|
||||||
'newslettersResponseBuilder' => new NewslettersResponseBuilder(
|
'newslettersResponseBuilder' => new NewslettersResponseBuilder(
|
||||||
$this->diContainer->get(EntityManager::class),
|
$this->diContainer->get(EntityManager::class),
|
||||||
new NewslettersRepository($this->diContainer->get(EntityManager::class)),
|
$this->diContainer->get(NewslettersRepository::class),
|
||||||
new NewsletterStatisticsRepository(
|
new NewsletterStatisticsRepository(
|
||||||
$this->diContainer->get(EntityManager::class),
|
$this->diContainer->get(EntityManager::class),
|
||||||
$this->makeEmpty(WCHelper::class)
|
$this->makeEmpty(WCHelper::class)
|
||||||
|
@@ -21,6 +21,7 @@ use MailPoet\Entities\StatsNotificationEntity;
|
|||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
|
use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
use MailPoetVendor\Carbon\Carbon;
|
use MailPoetVendor\Carbon\Carbon;
|
||||||
|
|
||||||
class NewsletterRepositoryTest extends \MailPoetTest {
|
class NewsletterRepositoryTest extends \MailPoetTest {
|
||||||
@@ -30,10 +31,14 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
/** @var ScheduledTaskSubscribersRepository */
|
/** @var ScheduledTaskSubscribersRepository */
|
||||||
private $taskSubscribersRepository;
|
private $taskSubscribersRepository;
|
||||||
|
|
||||||
|
/** @var WPFunctions */
|
||||||
|
private $wp;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->repository = $this->diContainer->get(NewslettersRepository::class);
|
$this->repository = $this->diContainer->get(NewslettersRepository::class);
|
||||||
$this->taskSubscribersRepository = $this->diContainer->get(ScheduledTaskSubscribersRepository::class);
|
$this->taskSubscribersRepository = $this->diContainer->get(ScheduledTaskSubscribersRepository::class);
|
||||||
|
$this->wp = $this->diContainer->get(WPFunctions::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItBulkTrashNewslettersAndChildren() {
|
public function testItBulkTrashNewslettersAndChildren() {
|
||||||
@@ -213,6 +218,26 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
expect($statisticsPurchase->getNewsletter())->null();
|
expect($statisticsPurchase->getNewsletter())->null();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testItDeletesWpPostsBulkDelete() {
|
||||||
|
$newsletter1 = $this->createNewsletter(NewsletterEntity::TYPE_STANDARD, NewsletterEntity::STATUS_SENDING);
|
||||||
|
$post1Id = $this->wp->wpInsertPost(['post_title' => 'Post 1']);
|
||||||
|
$newsletter1->setWpPostId($post1Id);
|
||||||
|
$newsletter2 = $this->createNewsletter(NewsletterEntity::TYPE_WELCOME, NewsletterEntity::STATUS_SENDING);
|
||||||
|
$post2Id = $this->wp->wpInsertPost(['post_title' => 'Post 2']);
|
||||||
|
$newsletter2->setWpPostId($post2Id);
|
||||||
|
$newsletter3 = $this->createNewsletter(NewsletterEntity::TYPE_STANDARD, NewsletterEntity::STATUS_SENDING);
|
||||||
|
|
||||||
|
expect($this->wp->getPost($post1Id))->isInstanceOf(\WP_Post::class);
|
||||||
|
expect($this->wp->getPost($post2Id))->isInstanceOf(\WP_Post::class);
|
||||||
|
|
||||||
|
$this->entityManager->flush();
|
||||||
|
$this->entityManager->clear();
|
||||||
|
|
||||||
|
$this->repository->bulkDelete([$newsletter1->getId(), $newsletter2->getId(), $newsletter3->getId()]);
|
||||||
|
expect($this->wp->getPost($post1Id))->null();
|
||||||
|
expect($this->wp->getPost($post2Id))->null();
|
||||||
|
}
|
||||||
|
|
||||||
public function testItGetsArchiveNewslettersForSegments() {
|
public function testItGetsArchiveNewslettersForSegments() {
|
||||||
$types = [
|
$types = [
|
||||||
NewsletterEntity::TYPE_STANDARD,
|
NewsletterEntity::TYPE_STANDARD,
|
||||||
|
Reference in New Issue
Block a user