Remove client side checks for trashing lists
[MAILPOET-3463]
This commit is contained in:
committed by
Veljko V
parent
271c0a0ec6
commit
fc66381da2
@ -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);
|
||||
},
|
||||
},
|
||||
];
|
||||
|
@ -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() . ']'
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
@ -79,7 +79,6 @@
|
||||
'restore': __('Restore'),
|
||||
'deletePermanently': __('Delete permanently'),
|
||||
'save': __('Save'),
|
||||
'trashDisallowed': _x('List cannot be deleted because it’s 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'),
|
||||
|
||||
|
Reference in New Issue
Block a user