Add check for orphaned newsletter links

[MAILPOET-1587]
This commit is contained in:
Rostislav Wolny
2024-08-01 14:02:38 +02:00
committed by Aschepikov
parent fe66e31b5f
commit 45114e4da2
4 changed files with 62 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ namespace MailPoet\Util\DataInconsistency;
use MailPoet\Cron\Workers\SendingQueue\SendingQueue;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\NewsletterLinkEntity;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
use MailPoet\Entities\SegmentEntity;
@@ -64,6 +65,19 @@ class DataInconsistencyRepository {
return intval($count);
}
public function getOrphanedNewsletterLinksCount(): int {
$newsletterTable = $this->entityManager->getClassMetadata(NewsletterEntity::class)->getTableName();
$sendingQueueTable = $this->entityManager->getClassMetadata(SendingQueueEntity::class)->getTableName();
$newsletterLinkTable = $this->entityManager->getClassMetadata(NewsletterLinkEntity::class)->getTableName();
$count = $this->entityManager->getConnection()->executeQuery("
SELECT count(distinct nl.`id`) FROM $newsletterLinkTable nl
LEFT JOIN $newsletterTable n ON n.`id` = nl.`newsletter_id`
LEFT JOIN $sendingQueueTable sq ON sq.`id` = nl.`queue_id`
WHERE n.`id` IS NULL OR sq.`id` IS NULL
")->fetchOne();
return intval($count);
}
public function cleanupOrphanedSendingTasks(): int {
$ids = $this->buildOrphanedSendingTasksQuery(
$this->entityManager->createQueryBuilder()
@@ -128,6 +142,18 @@ class DataInconsistencyRepository {
");
}
public function cleanupOrphanedNewsletterLinks(): int {
$newsletterTable = $this->entityManager->getClassMetadata(NewsletterEntity::class)->getTableName();
$sendingQueueTable = $this->entityManager->getClassMetadata(SendingQueueEntity::class)->getTableName();
$newsletterLinkTable = $this->entityManager->getClassMetadata(NewsletterLinkEntity::class)->getTableName();
return (int)$this->entityManager->getConnection()->executeStatement("
DELETE nl FROM $newsletterLinkTable nl
LEFT JOIN $newsletterTable n ON n.`id` = nl.`newsletter_id`
LEFT JOIN $sendingQueueTable sq ON sq.`id` = nl.`queue_id`
WHERE n.`id` IS NULL OR sq.`id` IS NULL
");
}
private function buildOrphanedSendingTasksQuery(QueryBuilder $queryBuilder): Query {
return $queryBuilder
->from(ScheduledTaskEntity::class, 'st')