diff --git a/lib/API/JSON/v1/Subscribers.php b/lib/API/JSON/v1/Subscribers.php index 2e7e446f6f..8dbe92b732 100644 --- a/lib/API/JSON/v1/Subscribers.php +++ b/lib/API/JSON/v1/Subscribers.php @@ -87,7 +87,7 @@ class Subscribers extends APIEndpoint { private $subscribersResponseBuilder; /** @var SubscriberListingRepository */ - private $newsletterListingRepository; + private $subscriberListingRepository; public function __construct( Listing\BulkActionController $bulkActionController, @@ -104,7 +104,7 @@ class Subscribers extends APIEndpoint { Unsubscribes $unsubscribesTracker, SubscribersRepository $subscribersRepository, SubscribersResponseBuilder $subscribersResponseBuilder, - SubscriberListingRepository $newsletterListingRepository, + SubscriberListingRepository $subscriberListingRepository, FieldNameObfuscator $fieldNameObfuscator ) { $this->bulkActionController = $bulkActionController; @@ -122,7 +122,7 @@ class Subscribers extends APIEndpoint { $this->unsubscribesTracker = $unsubscribesTracker; $this->subscribersRepository = $subscribersRepository; $this->subscribersResponseBuilder = $subscribersResponseBuilder; - $this->newsletterListingRepository = $newsletterListingRepository; + $this->subscriberListingRepository = $subscriberListingRepository; } public function get($data = []) { @@ -139,10 +139,15 @@ class Subscribers extends APIEndpoint { public function listing($data = []) { if (!isset($data['filter']['segment'])) { $definition = $this->listingHandler->getListingDefinition($data); - $items = $this->newsletterListingRepository->getData($definition); - $count = $this->newsletterListingRepository->getCount($definition); - $filters = $this->newsletterListingRepository->getFilters($definition); - $groups = $this->newsletterListingRepository->getGroups($definition); + $items = $this->subscriberListingRepository->getData($definition); + $count = $this->subscriberListingRepository->getCount($definition); + $filters = $this->subscriberListingRepository->getFilters($definition); + $groups = $this->subscriberListingRepository->getGroups($definition); + + $filters['segment'] = $this->wp->applyFilters( + 'mailpoet_subscribers_listings_filters_segments', + $filters['segment'] + ); return $this->successResponse($this->subscribersResponseBuilder->buildForListing($items), [ 'count' => $count, @@ -150,30 +155,33 @@ class Subscribers extends APIEndpoint { 'groups' => $groups, ]); } else { + // this branch is here temporarily until we refactor dynamic segments to doctrine [MAILPOET-3077] $listingData = $this->subscribersListings->getListingsInSegment($data); - } - $result = []; - foreach ($listingData['items'] as $subscriber) { - $subscriberResult = $subscriber - ->withSubscriptions() - ->asArray(); - if (isset($data['filter']['segment'])) { - $subscriberResult = $this->preferUnsubscribedStatusFromSegment($subscriberResult, $data['filter']['segment']); + $result = []; + foreach ($listingData['items'] as $subscriber) { + $subscriberResult = $subscriber + ->withSubscriptions() + ->asArray(); + if (isset($data['filter']['segment'])) { + $subscriberResult = $this->preferUnsubscribedStatusFromSegment($subscriberResult, $data['filter']['segment']); + } + $result[] = $subscriberResult; } - $result[] = $subscriberResult; + + $listingData['filters']['segment'] = $this->wp->applyFilters( + 'mailpoet_subscribers_listings_filters_segments', + $listingData['filters']['segment'] ?? [] + ); + + return $this->successResponse( + $result, [ + 'count' => $listingData['count'], + 'filters' => $listingData['filters'], + 'groups' => $listingData['groups'], + ] + ); } - - $listingData['filters']['segment'] = $this->wp->applyFilters( - 'mailpoet_subscribers_listings_filters_segments', - $listingData['filters']['segment'] ?? [] - ); - - return $this->successResponse($result, [ - 'count' => $listingData['count'], - 'filters' => $listingData['filters'], - 'groups' => $listingData['groups'], - ]); } private function preferUnsubscribedStatusFromSegment(array $subscriber, $segmentId) { diff --git a/lib/Subscribers/SubscriberListingRepository.php b/lib/Subscribers/SubscriberListingRepository.php index a5b682b853..8bd550f0bf 100644 --- a/lib/Subscribers/SubscriberListingRepository.php +++ b/lib/Subscribers/SubscriberListingRepository.php @@ -6,7 +6,6 @@ use MailPoet\Entities\SubscriberEntity; use MailPoet\Listing\ListingDefinition; use MailPoet\Listing\ListingRepository; use MailPoet\WP\Functions as WPFunctions; -use MailPoetVendor\Doctrine\ORM\EntityManager; use MailPoetVendor\Doctrine\ORM\Query\Expr\Join; use MailPoetVendor\Doctrine\ORM\QueryBuilder; diff --git a/tests/integration/API/JSON/v1/SubscribersTest.php b/tests/integration/API/JSON/v1/SubscribersTest.php index 1c56b7605c..64bbb1c9ef 100644 --- a/tests/integration/API/JSON/v1/SubscribersTest.php +++ b/tests/integration/API/JSON/v1/SubscribersTest.php @@ -38,6 +38,7 @@ use MailPoet\Subscribers\LinkTokens; use MailPoet\Subscribers\RequiredCustomFieldValidator; use MailPoet\Subscribers\Source; use MailPoet\Subscribers\SubscriberActions; +use MailPoet\Subscribers\SubscriberListingRepository; use MailPoet\Subscribers\SubscribersRepository; use MailPoet\Subscription\Captcha; use MailPoet\Subscription\CaptchaSession; @@ -98,6 +99,7 @@ class SubscribersTest extends \MailPoetTest { $container->get(Unsubscribes::class), $container->get(SubscribersRepository::class), $container->get(SubscribersResponseBuilder::class), + $container->get(SubscriberListingRepository::class), $obfuscator ); $this->obfuscatedEmail = $obfuscator->obfuscate('email');