Add scheduled emails subjects into segments API response
[MAILPOET-3142]
This commit is contained in:
@ -12,6 +12,7 @@ use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Listing;
|
||||
use MailPoet\Models\Segment;
|
||||
use MailPoet\Newsletter\Segment\NewsletterSegmentRepository;
|
||||
use MailPoet\Segments\SegmentSaveController;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
use MailPoet\Segments\WooCommerce;
|
||||
@ -42,6 +43,9 @@ class Segments extends APIEndpoint {
|
||||
/** @var SubscribersRepository */
|
||||
private $subscribersRepository;
|
||||
|
||||
/** @var NewsletterSegmentRepository */
|
||||
private $newsletterSegmentRepository;
|
||||
|
||||
/** @var WooCommerce */
|
||||
private $wooCommerceSync;
|
||||
|
||||
@ -55,6 +59,7 @@ class Segments extends APIEndpoint {
|
||||
SegmentsResponseBuilder $segmentsResponseBuilder,
|
||||
SegmentSaveController $segmentSavecontroller,
|
||||
SubscribersRepository $subscribersRepository,
|
||||
NewsletterSegmentRepository $newsletterSegmentRepository,
|
||||
WooCommerce $wooCommerce,
|
||||
WP $wpSegment
|
||||
) {
|
||||
@ -65,6 +70,7 @@ class Segments extends APIEndpoint {
|
||||
$this->segmentsResponseBuilder = $segmentsResponseBuilder;
|
||||
$this->segmentSavecontroller = $segmentSavecontroller;
|
||||
$this->subscribersRepository = $subscribersRepository;
|
||||
$this->newsletterSegmentRepository = $newsletterSegmentRepository;
|
||||
$this->wpSegment = $wpSegment;
|
||||
}
|
||||
|
||||
@ -84,15 +90,24 @@ class Segments extends APIEndpoint {
|
||||
$listingData = $this->listingHandler->get('\MailPoet\Models\Segment', $data);
|
||||
|
||||
$data = [];
|
||||
$segmendIds = array_map(function(Segment $segment): int {
|
||||
return (int)$segment->id;
|
||||
}, $listingData['items']);
|
||||
$scheduledNewsletterSubjectsMap = $this->newsletterSegmentRepository->getScheduledNewsletterSubjectsBySegmentIds($segmendIds);
|
||||
|
||||
foreach ($listingData['items'] as $segment) {
|
||||
$segment->subscribersUrl = WPFunctions::get()->adminUrl(
|
||||
'admin.php?page=mailpoet-subscribers#/filter[segment=' . $segment->id . ']'
|
||||
);
|
||||
|
||||
$data[] = $segment
|
||||
$segmentData = $segment
|
||||
->withSubscribersCount()
|
||||
->withAutomatedEmailsSubjects()
|
||||
->asArray();
|
||||
|
||||
$segmentData['scheduled_emails_subjects'] = $scheduledNewsletterSubjectsMap[$segment->id] ?? [];
|
||||
|
||||
$data[] = $segmentData;
|
||||
}
|
||||
|
||||
return $this->successResponse($data, [
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace MailPoet\Newsletter\Segment;
|
||||
|
||||
use MailPoet\Doctrine\Repository;
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Entities\NewsletterSegmentEntity;
|
||||
|
||||
/**
|
||||
@ -12,4 +13,22 @@ class NewsletterSegmentRepository extends Repository {
|
||||
protected function getEntityClassName() {
|
||||
return NewsletterSegmentEntity::class;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user