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