diff --git a/lib/API/JSON/v1/Subscribers.php b/lib/API/JSON/v1/Subscribers.php index 8dbe92b732..8fa0c4cb80 100644 --- a/lib/API/JSON/v1/Subscribers.php +++ b/lib/API/JSON/v1/Subscribers.php @@ -7,6 +7,7 @@ use MailPoet\API\JSON\Error as APIError; use MailPoet\API\JSON\Response as APIResponse; use MailPoet\API\JSON\ResponseBuilders\SubscribersResponseBuilder; use MailPoet\Config\AccessControl; +use MailPoet\DynamicSegments\FreePluginConnectors\AddToSubscribersFilters; use MailPoet\Entities\StatisticsUnsubscribeEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Form\Util\FieldNameObfuscator; @@ -89,6 +90,9 @@ class Subscribers extends APIEndpoint { /** @var SubscriberListingRepository */ private $subscriberListingRepository; + /** @var AddToSubscribersFilters */ + private $dynamicSegmentsFiltersLoader; + public function __construct( Listing\BulkActionController $bulkActionController, SubscribersListings $subscribersListings, @@ -105,7 +109,8 @@ class Subscribers extends APIEndpoint { SubscribersRepository $subscribersRepository, SubscribersResponseBuilder $subscribersResponseBuilder, SubscriberListingRepository $subscriberListingRepository, - FieldNameObfuscator $fieldNameObfuscator + FieldNameObfuscator $fieldNameObfuscator, + AddToSubscribersFilters $dynamicSegmentsFiltersLoader ) { $this->bulkActionController = $bulkActionController; $this->subscribersListings = $subscribersListings; @@ -123,6 +128,7 @@ class Subscribers extends APIEndpoint { $this->subscribersRepository = $subscribersRepository; $this->subscribersResponseBuilder = $subscribersResponseBuilder; $this->subscriberListingRepository = $subscriberListingRepository; + $this->dynamicSegmentsFiltersLoader = $dynamicSegmentsFiltersLoader; } public function get($data = []) { @@ -143,12 +149,7 @@ class Subscribers extends APIEndpoint { $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'] - ); - + $filters['segment'] = $this->dynamicSegmentsFiltersLoader->add($filters['segment'] ?? []); return $this->successResponse($this->subscribersResponseBuilder->buildForListing($items), [ 'count' => $count, 'filters' => $filters, @@ -169,10 +170,7 @@ class Subscribers extends APIEndpoint { $result[] = $subscriberResult; } - $listingData['filters']['segment'] = $this->wp->applyFilters( - 'mailpoet_subscribers_listings_filters_segments', - $listingData['filters']['segment'] ?? [] - ); + $listingData['filters']['segment'] = $this->dynamicSegmentsFiltersLoader->add($listingData['filters']['segment'] ?? []); return $this->successResponse( $result, [ diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 17d57f344d..730351b6b4 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -133,6 +133,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\DynamicSegments\DynamicSegmentHooks::class); $container->autowire(\MailPoet\DynamicSegments\FreePluginConnectors\AddToNewslettersSegments::class); $container->autowire(\MailPoet\DynamicSegments\FreePluginConnectors\SendingNewslettersSubscribersFinder::class)->setPublic(true); + $container->autowire(\MailPoet\DynamicSegments\FreePluginConnectors\AddToSubscribersFilters::class); $container->autowire(\MailPoet\DynamicSegments\Mappers\DBMapper::class); $container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\Loader::class); $container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\SubscribersCount::class); diff --git a/lib/DynamicSegments/DynamicSegmentHooks.php b/lib/DynamicSegments/DynamicSegmentHooks.php index 278b0e947e..0f8b128b0b 100644 --- a/lib/DynamicSegments/DynamicSegmentHooks.php +++ b/lib/DynamicSegments/DynamicSegmentHooks.php @@ -2,12 +2,9 @@ namespace MailPoet\DynamicSegments; -use MailPoet\DynamicSegments\FreePluginConnectors\AddToSubscribersFilters; use MailPoet\DynamicSegments\FreePluginConnectors\SubscribersBulkActionHandler; use MailPoet\DynamicSegments\Mappers\DBMapper; -use MailPoet\DynamicSegments\Persistence\Loading\Loader; use MailPoet\DynamicSegments\Persistence\Loading\SingleSegmentLoader; -use MailPoet\DynamicSegments\Persistence\Loading\SubscribersCount; use MailPoet\WP\Functions as WPFunctions; class DynamicSegmentHooks { @@ -19,11 +16,6 @@ class DynamicSegmentHooks { } public function init() { - $this->wp->addAction( - 'mailpoet_subscribers_listings_filters_segments', - [$this, 'addDynamicFiltersToSubscribersListingsFilters'] - ); - $this->wp->addAction( 'mailpoet_subscribers_in_segment_apply_bulk_action_handlers', [$this, 'applySubscriberBulkAction'] @@ -35,11 +27,6 @@ class DynamicSegmentHooks { ); } - public function addDynamicFiltersToSubscribersListingsFilters($segmentFilters) { - $newslettersAddSegments = new AddToSubscribersFilters(new Loader(new DBMapper()), new SubscribersCount()); - return $newslettersAddSegments->add($segmentFilters); - } - public function applySubscriberBulkAction(array $handlers) { $handlers[] = new SubscribersBulkActionHandler(); return $handlers; diff --git a/tests/integration/API/JSON/v1/SubscribersTest.php b/tests/integration/API/JSON/v1/SubscribersTest.php index c951d6bd72..6ea8f9ff59 100644 --- a/tests/integration/API/JSON/v1/SubscribersTest.php +++ b/tests/integration/API/JSON/v1/SubscribersTest.php @@ -7,6 +7,7 @@ use MailPoet\API\JSON\Response as APIResponse; use MailPoet\API\JSON\ResponseBuilders\SubscribersResponseBuilder; use MailPoet\API\JSON\v1\Subscribers; use MailPoet\DI\ContainerWrapper; +use MailPoet\DynamicSegments\FreePluginConnectors\AddToSubscribersFilters; use MailPoet\Entities\CustomFieldEntity; use MailPoet\Entities\FormEntity; use MailPoet\Entities\NewsletterEntity; @@ -101,7 +102,8 @@ class SubscribersTest extends \MailPoetTest { $container->get(SubscribersRepository::class), $container->get(SubscribersResponseBuilder::class), $container->get(SubscriberListingRepository::class), - $obfuscator + $obfuscator, + $container->get(AddToSubscribersFilters::class) ); $this->obfuscatedEmail = $obfuscator->obfuscate('email'); $this->obfuscatedSegments = $obfuscator->obfuscate('segments');