Add check for orphaned newsletter links
[MAILPOET-1587]
This commit is contained in:
committed by
Aschepikov
parent
fe66e31b5f
commit
45114e4da2
@@ -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')
|
||||
|
Reference in New Issue
Block a user