Add scheduled emails subjects into segments API response

[MAILPOET-3142]
This commit is contained in:
Jan Lysý
2021-01-04 13:55:10 +01:00
committed by Veljko V
parent 9fbff78291
commit 8f41628d29
2 changed files with 35 additions and 1 deletions

View File

@ -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, [

View File

@ -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;
}
}