Add newsletter stats data cleanup to newsletter bulk delete
[MAILPOET-2898]
This commit is contained in:
committed by
Veljko V
parent
7bcafcfce9
commit
91d2d92bbd
@ -17,6 +17,10 @@ use MailPoet\Entities\NewsletterSegmentEntity;
|
|||||||
use MailPoet\Entities\ScheduledTaskEntity;
|
use MailPoet\Entities\ScheduledTaskEntity;
|
||||||
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
||||||
use MailPoet\Entities\SendingQueueEntity;
|
use MailPoet\Entities\SendingQueueEntity;
|
||||||
|
use MailPoet\Entities\StatisticsClickEntity;
|
||||||
|
use MailPoet\Entities\StatisticsNewsletterEntity;
|
||||||
|
use MailPoet\Entities\StatisticsOpenEntity;
|
||||||
|
use MailPoet\Entities\StatisticsWooCommercePurchaseEntity;
|
||||||
use MailPoet\Entities\StatsNotificationEntity;
|
use MailPoet\Entities\StatsNotificationEntity;
|
||||||
use MailPoetVendor\Carbon\Carbon;
|
use MailPoetVendor\Carbon\Carbon;
|
||||||
use MailPoetVendor\Doctrine\DBAL\Connection;
|
use MailPoetVendor\Doctrine\DBAL\Connection;
|
||||||
@ -218,6 +222,31 @@ class NewslettersRepository extends Repository {
|
|||||||
$deletedChildrenCount = $this->bulkDelete(array_column($childrenIds, 'id'));
|
$deletedChildrenCount = $this->bulkDelete(array_column($childrenIds, 'id'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Delete statistics data
|
||||||
|
$newsletterStatisticsTable = $this->entityManager->getClassMetadata(StatisticsNewsletterEntity::class)->getTableName();
|
||||||
|
$this->entityManager->getConnection()->executeUpdate("
|
||||||
|
DELETE s FROM $newsletterStatisticsTable s
|
||||||
|
WHERE s.`newsletter_id` IN (:ids)
|
||||||
|
", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]);
|
||||||
|
|
||||||
|
$statisticsOpensTable = $this->entityManager->getClassMetadata(StatisticsOpenEntity::class)->getTableName();
|
||||||
|
$this->entityManager->getConnection()->executeUpdate("
|
||||||
|
DELETE s FROM $statisticsOpensTable s
|
||||||
|
WHERE s.`newsletter_id` IN (:ids)
|
||||||
|
", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]);
|
||||||
|
|
||||||
|
$statisticsClicksTable = $this->entityManager->getClassMetadata(StatisticsClickEntity::class)->getTableName();
|
||||||
|
$this->entityManager->getConnection()->executeUpdate("
|
||||||
|
DELETE s FROM $statisticsClicksTable s
|
||||||
|
WHERE s.`newsletter_id` IN (:ids)
|
||||||
|
", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]);
|
||||||
|
|
||||||
|
$statisticsPurchasesTable = $this->entityManager->getClassMetadata(StatisticsWooCommercePurchaseEntity::class)->getTableName();
|
||||||
|
$this->entityManager->getConnection()->executeUpdate("
|
||||||
|
DELETE s FROM $statisticsPurchasesTable s
|
||||||
|
WHERE s.`newsletter_id` IN (:ids)
|
||||||
|
", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]);
|
||||||
|
|
||||||
// Delete newsletter posts
|
// Delete newsletter posts
|
||||||
$postsTable = $this->entityManager->getClassMetadata(NewsletterPostEntity::class)->getTableName();
|
$postsTable = $this->entityManager->getClassMetadata(NewsletterPostEntity::class)->getTableName();
|
||||||
$this->entityManager->getConnection()->executeUpdate("
|
$this->entityManager->getConnection()->executeUpdate("
|
||||||
|
@ -13,6 +13,10 @@ use MailPoet\Entities\ScheduledTaskEntity;
|
|||||||
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
use MailPoet\Entities\SendingQueueEntity;
|
use MailPoet\Entities\SendingQueueEntity;
|
||||||
|
use MailPoet\Entities\StatisticsClickEntity;
|
||||||
|
use MailPoet\Entities\StatisticsNewsletterEntity;
|
||||||
|
use MailPoet\Entities\StatisticsOpenEntity;
|
||||||
|
use MailPoet\Entities\StatisticsWooCommercePurchaseEntity;
|
||||||
use MailPoet\Entities\StatsNotificationEntity;
|
use MailPoet\Entities\StatsNotificationEntity;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
|
use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
|
||||||
@ -88,7 +92,6 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
expect($newsletter1->getStatus())->equals(NewsletterEntity::STATUS_SENDING);
|
expect($newsletter1->getStatus())->equals(NewsletterEntity::STATUS_SENDING);
|
||||||
expect($newsletter2->getStatus())->equals(NewsletterEntity::STATUS_ACTIVE);
|
expect($newsletter2->getStatus())->equals(NewsletterEntity::STATUS_ACTIVE);
|
||||||
|
|
||||||
|
|
||||||
// Should restore sending queue and task
|
// Should restore sending queue and task
|
||||||
$newsletter1Queue = $newsletter1->getLatestQueue();
|
$newsletter1Queue = $newsletter1->getLatestQueue();
|
||||||
assert($newsletter1Queue instanceof SendingQueueEntity);
|
assert($newsletter1Queue instanceof SendingQueueEntity);
|
||||||
@ -141,6 +144,13 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
$optionValue = $this->createNewsletterOption($newsletter2Child1, $optionField, 'value');
|
$optionValue = $this->createNewsletterOption($newsletter2Child1, $optionField, 'value');
|
||||||
$newsletterPost = $this->createNewsletterPost($newsletter2, 1);
|
$newsletterPost = $this->createNewsletterPost($newsletter2, 1);
|
||||||
|
|
||||||
|
$subscriber = $scheduledTask1Subscriber->getSubscriber();
|
||||||
|
assert($subscriber instanceof SubscriberEntity);
|
||||||
|
$statisticsNewsletter = $this->createNewsletterStatistics($newsletter1, $newsletter1Queue, $subscriber);
|
||||||
|
$statisticsOpen = $this->createOpenStatistics($newsletter1, $newsletter1Queue, $subscriber);
|
||||||
|
$statisticsClick = $this->createClickStatistics($newsletter1, $newsletter1Queue, $subscriber, $newsletter1Link);
|
||||||
|
$statisticsPurchase = $this->createPurchaseStatistics($newsletter1, $newsletter1Queue, $statisticsClick, $subscriber);
|
||||||
|
|
||||||
// Trash
|
// Trash
|
||||||
$this->repository->bulkTrash([$newsletter1->getId(), $newsletter2->getId()]);
|
$this->repository->bulkTrash([$newsletter1->getId(), $newsletter2->getId()]);
|
||||||
// Delete
|
// Delete
|
||||||
@ -162,6 +172,10 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
$this->entityManager->detach($childLink);
|
$this->entityManager->detach($childLink);
|
||||||
$this->entityManager->detach($optionValue);
|
$this->entityManager->detach($optionValue);
|
||||||
$this->entityManager->detach($newsletterPost);
|
$this->entityManager->detach($newsletterPost);
|
||||||
|
$this->entityManager->detach($statisticsNewsletter);
|
||||||
|
$this->entityManager->detach($statisticsOpen);
|
||||||
|
$this->entityManager->detach($statisticsClick);
|
||||||
|
$this->entityManager->detach($statisticsPurchase);
|
||||||
|
|
||||||
// Check they were all deleted
|
// Check they were all deleted
|
||||||
// Newsletters
|
// Newsletters
|
||||||
@ -198,6 +212,12 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
|
|
||||||
// Newsletter post
|
// Newsletter post
|
||||||
expect($this->entityManager->find(NewsletterPostEntity::class, $newsletterPost->getId()))->null();
|
expect($this->entityManager->find(NewsletterPostEntity::class, $newsletterPost->getId()))->null();
|
||||||
|
|
||||||
|
// Statistics data
|
||||||
|
expect($this->entityManager->find(StatisticsNewsletterEntity::class, $statisticsNewsletter->getId()))->null();
|
||||||
|
expect($this->entityManager->find(StatisticsOpenEntity::class, $statisticsOpen->getId()))->null();
|
||||||
|
expect($this->entityManager->find(StatisticsClickEntity::class, $statisticsClick->getId()))->null();
|
||||||
|
expect($this->entityManager->find(StatisticsWooCommercePurchaseEntity::class, $statisticsPurchase->getId()))->null();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function _after() {
|
public function _after() {
|
||||||
@ -287,6 +307,45 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
return $post;
|
return $post;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function createNewsletterStatistics(NewsletterEntity $newsletter, SendingQueueEntity $queue, SubscriberEntity $subscriber): StatisticsNewsletterEntity {
|
||||||
|
$statisticsNewsletter = new StatisticsNewsletterEntity($newsletter, $queue, $subscriber);
|
||||||
|
$this->entityManager->persist($statisticsNewsletter);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
return $statisticsNewsletter;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createOpenStatistics(NewsletterEntity $newsletter, SendingQueueEntity $queue, SubscriberEntity $subscriber): StatisticsOpenEntity {
|
||||||
|
$statistics = new StatisticsOpenEntity($newsletter, $queue, (int)$subscriber->getId());
|
||||||
|
$this->entityManager->persist($statistics);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
return $statistics;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createClickStatistics(
|
||||||
|
NewsletterEntity $newsletter,
|
||||||
|
SendingQueueEntity $queue,
|
||||||
|
SubscriberEntity $subscriber,
|
||||||
|
NewsletterLinkEntity $link
|
||||||
|
): StatisticsClickEntity {
|
||||||
|
$statistics = new StatisticsClickEntity($newsletter, $queue, (int)$subscriber->getId(), $link, 1);
|
||||||
|
$this->entityManager->persist($statistics);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
return $statistics;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createPurchaseStatistics(
|
||||||
|
NewsletterEntity $newsletter,
|
||||||
|
SendingQueueEntity $queue,
|
||||||
|
StatisticsClickEntity $click,
|
||||||
|
SubscriberEntity $subscriber
|
||||||
|
): StatisticsWooCommercePurchaseEntity {
|
||||||
|
$statistics = new StatisticsWooCommercePurchaseEntity($newsletter, $queue, $click, 1, 'EUR', 100);
|
||||||
|
$statistics->setSubscriber($subscriber);
|
||||||
|
$this->entityManager->persist($statistics);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
return $statistics;
|
||||||
|
}
|
||||||
|
|
||||||
private function cleanup() {
|
private function cleanup() {
|
||||||
$this->truncateEntity(NewsletterEntity::class);
|
$this->truncateEntity(NewsletterEntity::class);
|
||||||
$this->truncateEntity(ScheduledTaskEntity::class);
|
$this->truncateEntity(ScheduledTaskEntity::class);
|
||||||
@ -300,5 +359,9 @@ class NewsletterRepositoryTest extends \MailPoetTest {
|
|||||||
$this->truncateEntity(NewsletterOptionFieldEntity::class);
|
$this->truncateEntity(NewsletterOptionFieldEntity::class);
|
||||||
$this->truncateEntity(NewsletterOptionEntity::class);
|
$this->truncateEntity(NewsletterOptionEntity::class);
|
||||||
$this->truncateEntity(NewsletterPostEntity::class);
|
$this->truncateEntity(NewsletterPostEntity::class);
|
||||||
|
$this->truncateEntity(StatisticsWooCommercePurchaseEntity::class);
|
||||||
|
$this->truncateEntity(StatisticsOpenEntity::class);
|
||||||
|
$this->truncateEntity(StatisticsClickEntity::class);
|
||||||
|
$this->truncateEntity(StatisticsNewsletterEntity::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user