From a2d04e93c51b601d833028d5073fd3d2b2d549e7 Mon Sep 17 00:00:00 2001 From: John Oleksowicz Date: Wed, 30 Aug 2023 15:19:51 -0500 Subject: [PATCH] Add endpoint to retrieve count for multiple segments MAILPOET-5510 --- mailpoet/lib/API/JSON/v1/Segments.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/mailpoet/lib/API/JSON/v1/Segments.php b/mailpoet/lib/API/JSON/v1/Segments.php index 9074cb9f21..fe21322d52 100644 --- a/mailpoet/lib/API/JSON/v1/Segments.php +++ b/mailpoet/lib/API/JSON/v1/Segments.php @@ -20,6 +20,7 @@ use MailPoet\Newsletter\Segment\NewsletterSegmentRepository; use MailPoet\Segments\SegmentListingRepository; use MailPoet\Segments\SegmentSaveController; use MailPoet\Segments\SegmentsRepository; +use MailPoet\Segments\SegmentSubscribersRepository; use MailPoet\Segments\WooCommerce; use MailPoet\Segments\WP; use MailPoet\Subscribers\SubscribersRepository; @@ -63,12 +64,16 @@ class Segments extends APIEndpoint { /** @var FormsRepository */ private $formsRepository; + /** @var SegmentSubscribersRepository */ + private $segmentSubscribersRepository; + public function __construct( Listing\Handler $listingHandler, SegmentsRepository $segmentsRepository, SegmentListingRepository $segmentListingRepository, SegmentsResponseBuilder $segmentsResponseBuilder, SegmentSaveController $segmentSavecontroller, + SegmentSubscribersRepository $segmentSubscribersRepository, SubscribersRepository $subscribersRepository, WooCommerce $wooCommerce, WP $wpSegment, @@ -87,6 +92,7 @@ class Segments extends APIEndpoint { $this->newsletterSegmentRepository = $newsletterSegmentRepository; $this->cronWorkerScheduler = $cronWorkerScheduler; $this->formsRepository = $formsRepository; + $this->segmentSubscribersRepository = $segmentSubscribersRepository; } public function get($data = []) { @@ -294,6 +300,20 @@ class Segments extends APIEndpoint { return $this->successResponse(null, ['count' => $count]); } + public function subscriberCount($data = []) { + $segmentIds = $data['segmentIds'] ?? []; + if (empty($segmentIds)) { + return $this->errorResponse([ + APIError::BAD_REQUEST => __('No segment IDs provided.', 'mailpoet'), + ]); + } + $filterSegmentId = $data['filterSegmentId'] ?? null; + $status = $data['status'] ?? SubscriberEntity::STATUS_SUBSCRIBED; + $response['count'] = $this->segmentSubscribersRepository->getSubscribersCountBySegmentIds($segmentIds, $status, $filterSegmentId); + + return $this->successResponse($response); + } + private function isTrashOrRestoreAllowed(SegmentEntity $segment): bool { $allowedSegmentTypes = [ SegmentEntity::TYPE_DEFAULT,