Add newsletter posts cleanup to newsletter bulk delete

[MAILPOET-2898]
This commit is contained in:
Rostislav Wolny
2020-06-09 17:09:53 +02:00
committed by Veljko V
parent 19be52d162
commit 7bcafcfce9
2 changed files with 26 additions and 4 deletions

View File

@@ -12,6 +12,7 @@ use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\NewsletterLinkEntity; use MailPoet\Entities\NewsletterLinkEntity;
use MailPoet\Entities\NewsletterOptionEntity; use MailPoet\Entities\NewsletterOptionEntity;
use MailPoet\Entities\NewsletterOptionFieldEntity; use MailPoet\Entities\NewsletterOptionFieldEntity;
use MailPoet\Entities\NewsletterPostEntity;
use MailPoet\Entities\NewsletterSegmentEntity; use MailPoet\Entities\NewsletterSegmentEntity;
use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\ScheduledTaskSubscriberEntity; use MailPoet\Entities\ScheduledTaskSubscriberEntity;
@@ -217,10 +218,12 @@ class NewslettersRepository extends Repository {
$deletedChildrenCount = $this->bulkDelete(array_column($childrenIds, 'id')); $deletedChildrenCount = $this->bulkDelete(array_column($childrenIds, 'id'));
} }
// Delete scheduled tasks and scheduled task subscribers // Delete newsletter posts
$scheduledTasksTable = $this->entityManager->getClassMetadata(ScheduledTaskEntity::class)->getTableName(); $postsTable = $this->entityManager->getClassMetadata(NewsletterPostEntity::class)->getTableName();
$sendingQueueTable = $this->entityManager->getClassMetadata(SendingQueueEntity::class)->getTableName(); $this->entityManager->getConnection()->executeUpdate("
$scheduledTaskSubscribersTable = $this->entityManager->getClassMetadata(ScheduledTaskSubscriberEntity::class)->getTableName(); DELETE np FROM $postsTable np
WHERE np.`newsletter_id` IN (:ids)
", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]);
// Delete newsletter options // Delete newsletter options
$optionsTable = $this->entityManager->getClassMetadata(NewsletterOptionEntity::class)->getTableName(); $optionsTable = $this->entityManager->getClassMetadata(NewsletterOptionEntity::class)->getTableName();
@@ -243,6 +246,11 @@ class NewslettersRepository extends Repository {
WHERE sn.`newsletter_id` IN (:ids) WHERE sn.`newsletter_id` IN (:ids)
", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]); ", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]);
// Delete scheduled tasks and scheduled task subscribers
$scheduledTasksTable = $this->entityManager->getClassMetadata(ScheduledTaskEntity::class)->getTableName();
$sendingQueueTable = $this->entityManager->getClassMetadata(SendingQueueEntity::class)->getTableName();
$scheduledTaskSubscribersTable = $this->entityManager->getClassMetadata(ScheduledTaskSubscriberEntity::class)->getTableName();
// Delete sending tasks subscribers // Delete sending tasks subscribers
$this->entityManager->getConnection()->executeUpdate(" $this->entityManager->getConnection()->executeUpdate("
DELETE ts FROM $scheduledTaskSubscribersTable ts DELETE ts FROM $scheduledTaskSubscribersTable ts

View File

@@ -7,6 +7,7 @@ use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\NewsletterLinkEntity; use MailPoet\Entities\NewsletterLinkEntity;
use MailPoet\Entities\NewsletterOptionEntity; use MailPoet\Entities\NewsletterOptionEntity;
use MailPoet\Entities\NewsletterOptionFieldEntity; use MailPoet\Entities\NewsletterOptionFieldEntity;
use MailPoet\Entities\NewsletterPostEntity;
use MailPoet\Entities\NewsletterSegmentEntity; use MailPoet\Entities\NewsletterSegmentEntity;
use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\ScheduledTaskSubscriberEntity; use MailPoet\Entities\ScheduledTaskSubscriberEntity;
@@ -138,6 +139,7 @@ class NewsletterRepositoryTest extends \MailPoetTest {
$childLink = $this->createNewsletterLink($newsletter2Child1, $childrenQueue); $childLink = $this->createNewsletterLink($newsletter2Child1, $childrenQueue);
$optionField = $this->createNewsletterOptionField(NewsletterEntity::TYPE_NOTIFICATION, 'option'); $optionField = $this->createNewsletterOptionField(NewsletterEntity::TYPE_NOTIFICATION, 'option');
$optionValue = $this->createNewsletterOption($newsletter2Child1, $optionField, 'value'); $optionValue = $this->createNewsletterOption($newsletter2Child1, $optionField, 'value');
$newsletterPost = $this->createNewsletterPost($newsletter2, 1);
// Trash // Trash
$this->repository->bulkTrash([$newsletter1->getId(), $newsletter2->getId()]); $this->repository->bulkTrash([$newsletter1->getId(), $newsletter2->getId()]);
@@ -159,6 +161,7 @@ class NewsletterRepositoryTest extends \MailPoetTest {
$this->entityManager->detach($newsletter1Link); $this->entityManager->detach($newsletter1Link);
$this->entityManager->detach($childLink); $this->entityManager->detach($childLink);
$this->entityManager->detach($optionValue); $this->entityManager->detach($optionValue);
$this->entityManager->detach($newsletterPost);
// Check they were all deleted // Check they were all deleted
// Newsletters // Newsletters
@@ -192,6 +195,9 @@ class NewsletterRepositoryTest extends \MailPoetTest {
// Option fields values // Option fields values
expect($this->entityManager->find(NewsletterOptionEntity::class, $optionValue->getId()))->null(); expect($this->entityManager->find(NewsletterOptionEntity::class, $optionValue->getId()))->null();
// Newsletter post
expect($this->entityManager->find(NewsletterPostEntity::class, $newsletterPost->getId()))->null();
} }
public function _after() { public function _after() {
@@ -274,6 +280,13 @@ class NewsletterRepositoryTest extends \MailPoetTest {
return $option; return $option;
} }
private function createNewsletterPost(NewsletterEntity $newsletter, int $postId): NewsletterPostEntity {
$post = new NewsletterPostEntity($newsletter, $postId);
$this->entityManager->persist($post);
$this->entityManager->flush();
return $post;
}
private function cleanup() { private function cleanup() {
$this->truncateEntity(NewsletterEntity::class); $this->truncateEntity(NewsletterEntity::class);
$this->truncateEntity(ScheduledTaskEntity::class); $this->truncateEntity(ScheduledTaskEntity::class);
@@ -286,5 +299,6 @@ class NewsletterRepositoryTest extends \MailPoetTest {
$this->truncateEntity(NewsletterLinkEntity::class); $this->truncateEntity(NewsletterLinkEntity::class);
$this->truncateEntity(NewsletterOptionFieldEntity::class); $this->truncateEntity(NewsletterOptionFieldEntity::class);
$this->truncateEntity(NewsletterOptionEntity::class); $this->truncateEntity(NewsletterOptionEntity::class);
$this->truncateEntity(NewsletterPostEntity::class);
} }
} }