Remove client side checks for trashing lists

[MAILPOET-3463]
This commit is contained in:
Rostislav Wolny
2021-03-24 16:15:11 +01:00
committed by Veljko V
parent 271c0a0ec6
commit fc66381da2
5 changed files with 4 additions and 149 deletions

View File

@ -216,64 +216,7 @@ const itemActions = [
name: 'trash',
className: 'mailpoet-hide-on-mobile',
display: function display(segmt) {
return !isWooCommerceCustomersSegment(segmt)
&& segmt.automated_emails_subjects.length === 0
&& segmt.scheduled_emails_subjects.length === 0
&& segmt.sending_emails_subjects.length === 0;
},
},
{
name: 'delete',
className: 'mailpoet-hide-on-mobile',
label: MailPoet.I18n.t('moveToTrash'),
onClick: function onClick(segment) {
const subjects = [
...segment.automated_emails_subjects,
...segment.scheduled_emails_subjects,
...segment.sending_emails_subjects,
];
MailPoet.Notice.error(
MailPoet.I18n.t('trashDisallowed').replace(
'%$1s',
subjects.map((subject) => `'${subject}'`).join(', ')
),
{ scroll: true }
);
},
display: function display(segment) {
return !isSpecialSegment(segment)
&& (
segment.automated_emails_subjects.length > 0
|| segment.scheduled_emails_subjects.length > 0
|| segment.sending_emails_subjects.length > 0
);
},
},
{
name: 'delete_wp_users',
className: 'mailpoet-hide-on-mobile',
label: MailPoet.I18n.t('trashAndDisable'),
onClick: function onClick(segment) {
const subjects = [
...segment.automated_emails_subjects,
...segment.scheduled_emails_subjects,
...segment.sending_emails_subjects,
];
MailPoet.Notice.error(
MailPoet.I18n.t('trashDisallowed').replace(
'%$1s',
subjects.map((subject) => `'${subject}'`).join(', ')
),
{ scroll: true }
);
},
display: function display(segment) {
return isWPUsersSegment(segment)
&& (
segment.automated_emails_subjects.length > 0
|| segment.scheduled_emails_subjects.length > 0
|| segment.sending_emails_subjects.length > 0
);
return !isWooCommerceCustomersSegment(segmt);
},
},
];

View File

@ -3,7 +3,6 @@
namespace MailPoet\API\JSON\ResponseBuilders;
use MailPoet\Entities\SegmentEntity;
use MailPoet\Newsletter\Segment\NewsletterSegmentRepository;
use MailPoet\Segments\SegmentSubscribersRepository;
use MailPoet\WP\Functions;
@ -13,19 +12,14 @@ class SegmentsResponseBuilder {
/** @var Functions */
private $wp;
/** @var NewsletterSegmentRepository */
private $newsletterSegmentRepository;
/** @var SegmentSubscribersRepository */
private $segmentSubscriberRepository;
public function __construct(
Functions $wp,
SegmentSubscribersRepository $segmentSubscriberRepository,
NewsletterSegmentRepository $newsletterSegmentRepository
SegmentSubscribersRepository $segmentSubscriberRepository
) {
$this->wp = $wp;
$this->newsletterSegmentRepository = $newsletterSegmentRepository;
$this->segmentSubscriberRepository = $segmentSubscriberRepository;
}
@ -43,24 +37,15 @@ class SegmentsResponseBuilder {
public function buildForListing(array $segments): array {
$data = [];
$segmendIds = array_map(function(SegmentEntity $segment): int {
return (int)$segment->getId();
}, $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, $sendingNewsletterSubjectsMap);
$data[] = $this->buildListingItem($segment);
}
return $data;
}
private function buildListingItem(SegmentEntity $segment, array $scheduledNewsletterSubjectsMap, array $automatedNewsletterSubjectsMap, array $sendingNewsletterSubjectsMap): array {
private function buildListingItem(SegmentEntity $segment): 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

@ -39,63 +39,4 @@ class NewsletterSegmentRepository extends Repository {
}
return $nameMap;
}
public function getAutomatedEmailSubjectsBySegmentIds(array $segmentIds): array {
$results = $this->doctrineRepository->createQueryBuilder('ns')
->join('ns.newsletter', 'n')
->select('IDENTITY(ns.segment) AS segment_id, n.subject')
->where('n.type IN (:types)')
->setParameter('types', [
NewsletterEntity::TYPE_AUTOMATIC,
NewsletterEntity::TYPE_WELCOME,
NewsletterEntity::TYPE_NOTIFICATION,
])
->andWhere('ns.segment IN (:segmentIds)')
->setParameter('segmentIds', $segmentIds)
->getQuery()
->getResult();
$nameMap = [];
foreach ($results as $result) {
$nameMap[(string)$result['segment_id']][] = $result['subject'];
}
return $nameMap;
}
public function getScheduledNewsletterSubjectsBySegmentIds(array $segmentIds): array {
$results = $this->doctrineRepository->createQueryBuilder('ns')
->select('IDENTITY(ns.segment) AS segment_id, n.subject')
->join('ns.newsletter', 'n')
->where('n.status = :scheduled')
->andWhere('ns.segment IN (:segmentIds)')
->setParameter('scheduled', NewsletterEntity::STATUS_SCHEDULED)
->setParameter('segmentIds', $segmentIds)
->getQuery()
->getResult();
$nameMap = [];
foreach ($results as $result) {
$nameMap[(string)$result['segment_id']][] = $result['subject'];
}
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;
}
}

View File

@ -3,8 +3,6 @@
namespace MailPoet\API\JSON\ResponseBuilders;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\NewsletterSegmentEntity;
use MailPoet\Entities\SegmentEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Entities\SubscriberSegmentEntity;
@ -49,14 +47,6 @@ class SegmentsResponseBuilderTest extends \MailPoetTest {
$subscriberSegment = new SubscriberSegmentEntity($segment, $subscriber, SubscriberEntity::STATUS_SUBSCRIBED);
$em->persist($subscriberSegment);
$scheduledNewsletter = new NewsletterEntity();
$scheduledNewsletter->setSubject('subject1');
$scheduledNewsletter->setType(NewsletterEntity::TYPE_STANDARD);
$scheduledNewsletter->setStatus(NewsletterEntity::STATUS_SCHEDULED);
$em->persist($scheduledNewsletter);
$ns = new NewsletterSegmentEntity($scheduledNewsletter, $segment);
$em->persist($ns);
$em->flush();
$responseBuilder = $di->get(SegmentsResponseBuilder::class);
@ -66,8 +56,5 @@ class SegmentsResponseBuilderTest extends \MailPoetTest {
expect($response[0]['type'])->equals(SegmentEntity::TYPE_DEFAULT);
expect($response[0]['subscribers_url'])->startsWith('http');
expect($response[0]['subscribers_count']['subscribed'])->equals('1');
expect($response[0]['scheduled_emails_subjects'])->array();
expect($response[0]['scheduled_emails_subjects'])->notEmpty();
expect($response[0]['scheduled_emails_subjects'])->contains('subject1');
}
}

View File

@ -79,7 +79,6 @@
'restore': __('Restore'),
'deletePermanently': __('Delete permanently'),
'save': __('Save'),
'trashDisallowed': _x('List cannot be deleted because its used for %$1s email', 'Alert shown when trying to delete segment, which is assigned to any automatic emails.'),
'trashAndDisable': __('Trash and disable'),
'restoreAndEnable': __('Restore and enable'),