Prevent deleting lists with emails that are being sent

[MAILPOET-3417]
This commit is contained in:
Pavel Dohnal
2021-02-17 14:43:38 +01:00
committed by Veljko V
parent dc4727117c
commit aad1495262
3 changed files with 29 additions and 3 deletions

View File

@ -218,7 +218,8 @@ const itemActions = [
display: function display(segmt) {
return !isWooCommerceCustomersSegment(segmt)
&& segmt.automated_emails_subjects.length === 0
&& segmt.scheduled_emails_subjects.length === 0;
&& segmt.scheduled_emails_subjects.length === 0
&& segmt.sending_emails_subjects.length === 0;
},
},
{
@ -229,6 +230,7 @@ const itemActions = [
const subjects = [
...segment.automated_emails_subjects,
...segment.scheduled_emails_subjects,
...segment.sending_emails_subjects,
];
MailPoet.Notice.error(
MailPoet.I18n.t('trashDisallowed').replace(
@ -243,6 +245,7 @@ const itemActions = [
&& (
segment.automated_emails_subjects.length > 0
|| segment.scheduled_emails_subjects.length > 0
|| segment.sending_emails_subjects.length > 0
);
},
},
@ -254,6 +257,7 @@ const itemActions = [
const subjects = [
...segment.automated_emails_subjects,
...segment.scheduled_emails_subjects,
...segment.sending_emails_subjects,
];
MailPoet.Notice.error(
MailPoet.I18n.t('trashDisallowed').replace(
@ -268,6 +272,7 @@ const itemActions = [
&& (
segment.automated_emails_subjects.length > 0
|| segment.scheduled_emails_subjects.length > 0
|| segment.sending_emails_subjects.length > 0
);
},
},

View File

@ -48,17 +48,19 @@ class SegmentsResponseBuilder {
}, $segments);
$scheduledNewsletterSubjectsMap = $this->newsletterSegmentRepository->getScheduledNewsletterSubjectsBySegmentIds($segmendIds);
$automatedNewsletterSubjectsMap = $this->newsletterSegmentRepository->getAutomatedEmailSubjectsBySegmentIds($segmendIds);
$sendingNewsletterSubjectsMap = $this->newsletterSegmentRepository->getSendingEmailSubjectsBySegmentIds($segmendIds);
foreach ($segments as $segment) {
$data[] = $this->buildListingItem($segment, $scheduledNewsletterSubjectsMap, $automatedNewsletterSubjectsMap);
$data[] = $this->buildListingItem($segment, $scheduledNewsletterSubjectsMap, $automatedNewsletterSubjectsMap, $sendingNewsletterSubjectsMap);
}
return $data;
}
private function buildListingItem(SegmentEntity $segment, array $scheduledNewsletterSubjectsMap, array $automatedNewsletterSubjectsMap): array {
private function buildListingItem(SegmentEntity $segment, array $scheduledNewsletterSubjectsMap, array $automatedNewsletterSubjectsMap, array $sendingNewsletterSubjectsMap): array {
$data = $this->build($segment);
$data['automated_emails_subjects'] = $automatedNewsletterSubjectsMap[$segment->getId()] ?? [];
$data['scheduled_emails_subjects'] = $scheduledNewsletterSubjectsMap[$segment->getId()] ?? [];
$data['sending_emails_subjects'] = $sendingNewsletterSubjectsMap[$segment->getId()] ?? [];
$data['subscribers_count'] = $this->segmentSubscriberRepository->getSubscribersStatisticsCount($segment);
$data['subscribers_url'] = $this->wp->adminUrl(
'admin.php?page=mailpoet-subscribers#/filter[segment=' . $segment->getId() . ']'

View File

@ -53,4 +53,23 @@ class NewsletterSegmentRepository extends Repository {
}
return $nameMap;
}
public function getSendingEmailSubjectsBySegmentIds(array $segmentIds): array {
$results = $this->doctrineRepository->createQueryBuilder('ns')
->select('IDENTITY(ns.segment) AS segment_id, n.subject')
->join('ns.newsletter', 'n')
->join('n.queues', 'q')
->join('q.task', 't')
->where('t.status IS NULL')
->andWhere('ns.segment IN (:segmentIds)')
->setParameter('segmentIds', $segmentIds)
->getQuery()
->getResult();
$nameMap = [];
foreach ($results as $result) {
$nameMap[(string)$result['segment_id']][] = $result['subject'];
}
return $nameMap;
}
}