Disallow trashing single dynamic segment with active email

[MAILPOET-3463]
This commit is contained in:
Rostislav Wolny
2021-03-19 16:31:21 +01:00
committed by Veljko V
parent 9ffc3372e6
commit f066bc8fdd
3 changed files with 65 additions and 1 deletions

View File

@ -14,6 +14,32 @@ class NewsletterSegmentRepository extends Repository {
return NewsletterSegmentEntity::class;
}
public function getSubjectsOfActivelyUsedEmailsForSegments(array $segmentIds): array {
$results = $this->doctrineRepository->createQueryBuilder('ns')
->join('ns.newsletter', 'n')
->leftJoin('n.queues', 'q')
->leftJoin('q.task', 't')
->select('IDENTITY(ns.segment) AS segment_id, n.subject')
->where('(n.type IN (:types) OR n.status = :scheduled OR (t.id IS NOT NULL AND t.status IS NULL))')
->andWhere('ns.segment IN (:segmentIds)')
->setParameter('types', [
NewsletterEntity::TYPE_AUTOMATIC,
NewsletterEntity::TYPE_WELCOME,
NewsletterEntity::TYPE_NOTIFICATION,
])
->setParameter('segmentIds', $segmentIds)
->setParameter('scheduled', NewsletterEntity::STATUS_SCHEDULED)
->addGroupBy('n.id, q.id, t.id')
->getQuery()
->getResult();
$nameMap = [];
foreach ($results as $result) {
$nameMap[(string)$result['segment_id']][] = $result['subject'];
}
return $nameMap;
}
public function getAutomatedEmailSubjectsBySegmentIds(array $segmentIds): array {
$results = $this->doctrineRepository->createQueryBuilder('ns')
->join('ns.newsletter', 'n')