Refactor mailpoet_get_subscribers_in_segment_finders hook to direct calls
[MAILPOET-3077]
This commit is contained in:
committed by
Veljko V
parent
331e40a137
commit
dd7390ec73
@@ -132,8 +132,12 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
// Dynamic segments
|
// Dynamic segments
|
||||||
$container->autowire(\MailPoet\DynamicSegments\DynamicSegmentHooks::class);
|
$container->autowire(\MailPoet\DynamicSegments\DynamicSegmentHooks::class);
|
||||||
$container->autowire(\MailPoet\DynamicSegments\FreePluginConnectors\AddToNewslettersSegments::class);
|
$container->autowire(\MailPoet\DynamicSegments\FreePluginConnectors\AddToNewslettersSegments::class);
|
||||||
|
$container->autowire(\MailPoet\DynamicSegments\FreePluginConnectors\SendingNewslettersSubscribersFinder::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\DynamicSegments\Mappers\DBMapper::class);
|
||||||
$container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\Loader::class);
|
$container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\Loader::class);
|
||||||
$container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\SubscribersCount::class);
|
$container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\SubscribersCount::class);
|
||||||
|
$container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\SubscribersIds::class);
|
||||||
|
$container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\SingleSegmentLoader::class);
|
||||||
// Cron
|
// Cron
|
||||||
$container->autowire(\MailPoet\Cron\CronHelper::class)->setPublic(true);
|
$container->autowire(\MailPoet\Cron\CronHelper::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Cron\CronTrigger::class)->setPublic(true);
|
$container->autowire(\MailPoet\Cron\CronTrigger::class)->setPublic(true);
|
||||||
|
@@ -3,14 +3,12 @@
|
|||||||
namespace MailPoet\DynamicSegments;
|
namespace MailPoet\DynamicSegments;
|
||||||
|
|
||||||
use MailPoet\DynamicSegments\FreePluginConnectors\AddToSubscribersFilters;
|
use MailPoet\DynamicSegments\FreePluginConnectors\AddToSubscribersFilters;
|
||||||
use MailPoet\DynamicSegments\FreePluginConnectors\SendingNewslettersSubscribersFinder;
|
|
||||||
use MailPoet\DynamicSegments\FreePluginConnectors\SubscribersBulkActionHandler;
|
use MailPoet\DynamicSegments\FreePluginConnectors\SubscribersBulkActionHandler;
|
||||||
use MailPoet\DynamicSegments\FreePluginConnectors\SubscribersListingsHandlerFactory;
|
use MailPoet\DynamicSegments\FreePluginConnectors\SubscribersListingsHandlerFactory;
|
||||||
use MailPoet\DynamicSegments\Mappers\DBMapper;
|
use MailPoet\DynamicSegments\Mappers\DBMapper;
|
||||||
use MailPoet\DynamicSegments\Persistence\Loading\Loader;
|
use MailPoet\DynamicSegments\Persistence\Loading\Loader;
|
||||||
use MailPoet\DynamicSegments\Persistence\Loading\SingleSegmentLoader;
|
use MailPoet\DynamicSegments\Persistence\Loading\SingleSegmentLoader;
|
||||||
use MailPoet\DynamicSegments\Persistence\Loading\SubscribersCount;
|
use MailPoet\DynamicSegments\Persistence\Loading\SubscribersCount;
|
||||||
use MailPoet\DynamicSegments\Persistence\Loading\SubscribersIds;
|
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
class DynamicSegmentHooks {
|
class DynamicSegmentHooks {
|
||||||
@@ -22,11 +20,6 @@ class DynamicSegmentHooks {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function init() {
|
public function init() {
|
||||||
$this->wp->addAction(
|
|
||||||
'mailpoet_get_subscribers_in_segment_finders',
|
|
||||||
[$this, 'getSubscribersInSegmentsFinders']
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->wp->addAction(
|
$this->wp->addAction(
|
||||||
'mailpoet_get_subscribers_listings_in_segment_handlers',
|
'mailpoet_get_subscribers_listings_in_segment_handlers',
|
||||||
[$this, 'getSubscribersListingsInSegmentsHandlers']
|
[$this, 'getSubscribersListingsInSegmentsHandlers']
|
||||||
@@ -48,11 +41,6 @@ class DynamicSegmentHooks {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getSubscribersInSegmentsFinders(array $finders) {
|
|
||||||
$finders[] = new SendingNewslettersSubscribersFinder(new SingleSegmentLoader(new DBMapper()), new SubscribersIds());
|
|
||||||
return $finders;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getSubscribersListingsInSegmentsHandlers(array $handlers) {
|
public function getSubscribersListingsInSegmentsHandlers(array $handlers) {
|
||||||
$handlers[] = new SubscribersListingsHandlerFactory();
|
$handlers[] = new SubscribersListingsHandlerFactory();
|
||||||
return $handlers;
|
return $handlers;
|
||||||
|
@@ -2,25 +2,28 @@
|
|||||||
|
|
||||||
namespace MailPoet\Segments;
|
namespace MailPoet\Segments;
|
||||||
|
|
||||||
|
use MailPoet\DI\ContainerWrapper;
|
||||||
|
use MailPoet\DynamicSegments\FreePluginConnectors\SendingNewslettersSubscribersFinder;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\ScheduledTaskSubscriber;
|
use MailPoet\Models\ScheduledTaskSubscriber;
|
||||||
use MailPoet\Models\Segment;
|
use MailPoet\Models\Segment;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
|
|
||||||
use function MailPoetVendor\array_column;
|
use function MailPoetVendor\array_column;
|
||||||
|
|
||||||
class SubscribersFinder {
|
class SubscribersFinder {
|
||||||
|
|
||||||
/** @var WPFunctions */
|
/** @var SendingNewslettersSubscribersFinder */
|
||||||
private $wp;
|
private $dynamicSegmentSubscriberFinder;
|
||||||
|
|
||||||
public function __construct(WPFunctions $wp = null) {
|
public function __construct(
|
||||||
if (!$wp) {
|
SendingNewslettersSubscribersFinder $dynamicSegmentSubscriberFinder = null
|
||||||
$wp = new WPFunctions;
|
) {
|
||||||
|
if ($dynamicSegmentSubscriberFinder === null) {
|
||||||
|
$dynamicSegmentSubscriberFinder = ContainerWrapper::getInstance()->get(SendingNewslettersSubscribersFinder::class);
|
||||||
}
|
}
|
||||||
$this->wp = $wp;
|
$this->dynamicSegmentSubscriberFinder = $dynamicSegmentSubscriberFinder;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findSubscribersInSegments($subscribersToProcessIds, $newsletterSegmentsIds) {
|
public function findSubscribersInSegments($subscribersToProcessIds, $newsletterSegmentsIds) {
|
||||||
@@ -40,13 +43,10 @@ class SubscribersFinder {
|
|||||||
$subscribers = Subscriber::findSubscribersInSegments($subscribersToProcessIds, [$segment->id])->findMany();
|
$subscribers = Subscriber::findSubscribersInSegments($subscribersToProcessIds, [$segment->id])->findMany();
|
||||||
return Subscriber::extractSubscribersIds($subscribers);
|
return Subscriber::extractSubscribersIds($subscribers);
|
||||||
}
|
}
|
||||||
$finders = $this->wp->applyFilters('mailpoet_get_subscribers_in_segment_finders', []);
|
$subscribers = $this->dynamicSegmentSubscriberFinder->findSubscribersInSegment($segment, $subscribersToProcessIds);
|
||||||
foreach ($finders as $finder) {
|
|
||||||
$subscribers = $finder->findSubscribersInSegment($segment, $subscribersToProcessIds);
|
|
||||||
if ($subscribers) {
|
if ($subscribers) {
|
||||||
return Subscriber::extractSubscribersIds($subscribers);
|
return Subscriber::extractSubscribersIds($subscribers);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,14 +108,11 @@ class SubscribersFinder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function addSubscribersToTaskFromDynamicSegment(ScheduledTask $task, Segment $segment) {
|
private function addSubscribersToTaskFromDynamicSegment(ScheduledTask $task, Segment $segment) {
|
||||||
$finders = $this->wp->applyFilters('mailpoet_get_subscribers_in_segment_finders', []);
|
|
||||||
$count = 0;
|
$count = 0;
|
||||||
foreach ($finders as $finder) {
|
$subscribers = $this->dynamicSegmentSubscriberFinder->getSubscriberIdsInSegment($segment);
|
||||||
$subscribers = $finder->getSubscriberIdsInSegment($segment);
|
|
||||||
if ($subscribers) {
|
if ($subscribers) {
|
||||||
$count += $this->addSubscribersToTaskByIds($task, $subscribers);
|
$count += $this->addSubscribersToTaskByIds($task, $subscribers);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return $count;
|
return $count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -5,13 +5,13 @@ namespace MailPoet\Segments;
|
|||||||
require_once('FinderMock.php');
|
require_once('FinderMock.php');
|
||||||
|
|
||||||
use Codeception\Util\Stub;
|
use Codeception\Util\Stub;
|
||||||
|
use MailPoet\DynamicSegments\FreePluginConnectors\SendingNewslettersSubscribersFinder;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\ScheduledTaskSubscriber;
|
use MailPoet\Models\ScheduledTaskSubscriber;
|
||||||
use MailPoet\Models\Segment;
|
use MailPoet\Models\Segment;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Models\SubscriberSegment;
|
use MailPoet\Models\SubscriberSegment;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
|
||||||
@@ -72,38 +72,28 @@ class SubscribersFinderTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testFindSubscribersInSegmentUsingFinder() {
|
public function testFindSubscribersInSegmentUsingFinder() {
|
||||||
/** @var MockObject $mock */
|
/** @var SendingNewslettersSubscribersFinder & MockObject $mock */
|
||||||
$mock = Stub::makeEmpty('MailPoet\Segments\FinderMock', ['findSubscribersInSegment']);
|
$mock = Stub::makeEmpty(SendingNewslettersSubscribersFinder::class, ['findSubscribersInSegment']);
|
||||||
$mock
|
$mock
|
||||||
->expects($this->once())
|
->expects($this->once())
|
||||||
->method('findSubscribersInSegment')
|
->method('findSubscribersInSegment')
|
||||||
->will($this->returnValue([$this->subscriber3]));
|
->will($this->returnValue([$this->subscriber3]));
|
||||||
|
|
||||||
remove_all_filters('mailpoet_get_subscribers_in_segment_finders');
|
$finder = new SubscribersFinder($mock);
|
||||||
(new WPFunctions)->addFilter('mailpoet_get_subscribers_in_segment_finders', function () use ($mock) {
|
|
||||||
return [$mock];
|
|
||||||
});
|
|
||||||
|
|
||||||
$finder = new SubscribersFinder();
|
|
||||||
$subscribers = $finder->findSubscribersInSegments([$this->subscriber3->id], [$this->segment3->id]);
|
$subscribers = $finder->findSubscribersInSegments([$this->subscriber3->id], [$this->segment3->id]);
|
||||||
expect($subscribers)->count(1);
|
expect($subscribers)->count(1);
|
||||||
expect($subscribers)->contains($this->subscriber3->id);
|
expect($subscribers)->contains($this->subscriber3->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testFindSubscribersInSegmentUsingFinderMakesResultUnique() {
|
public function testFindSubscribersInSegmentUsingFinderMakesResultUnique() {
|
||||||
/** @var MockObject $mock */
|
/** @var SendingNewslettersSubscribersFinder & MockObject $mock */
|
||||||
$mock = Stub::makeEmpty('MailPoet\Segments\FinderMock', ['findSubscribersInSegment']);
|
$mock = Stub::makeEmpty(SendingNewslettersSubscribersFinder::class, ['findSubscribersInSegment']);
|
||||||
$mock
|
$mock
|
||||||
->expects($this->exactly(2))
|
->expects($this->exactly(2))
|
||||||
->method('findSubscribersInSegment')
|
->method('findSubscribersInSegment')
|
||||||
->will($this->returnValue([$this->subscriber3]));
|
->will($this->returnValue([$this->subscriber3]));
|
||||||
|
|
||||||
remove_all_filters('mailpoet_get_subscribers_in_segment_finders');
|
$finder = new SubscribersFinder($mock);
|
||||||
(new WPFunctions)->addFilter('mailpoet_get_subscribers_in_segment_finders', function () use ($mock) {
|
|
||||||
return [$mock];
|
|
||||||
});
|
|
||||||
|
|
||||||
$finder = new SubscribersFinder();
|
|
||||||
$subscribers = $finder->findSubscribersInSegments([$this->subscriber3->id], [$this->segment3->id, $this->segment3->id]);
|
$subscribers = $finder->findSubscribersInSegments([$this->subscriber3->id], [$this->segment3->id, $this->segment3->id]);
|
||||||
expect($subscribers)->count(1);
|
expect($subscribers)->count(1);
|
||||||
}
|
}
|
||||||
@@ -133,19 +123,14 @@ class SubscribersFinderTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testItAddsSubscribersToTaskFromDynamicSegments() {
|
public function testItAddsSubscribersToTaskFromDynamicSegments() {
|
||||||
/** @var MockObject $mock */
|
/** @var SendingNewslettersSubscribersFinder & MockObject $mock */
|
||||||
$mock = Stub::makeEmpty('MailPoet\Segments\FinderMock', ['getSubscriberIdsInSegment']);
|
$mock = Stub::makeEmpty(SendingNewslettersSubscribersFinder::class, ['getSubscriberIdsInSegment']);
|
||||||
$mock
|
$mock
|
||||||
->expects($this->once())
|
->expects($this->once())
|
||||||
->method('getSubscriberIdsInSegment')
|
->method('getSubscriberIdsInSegment')
|
||||||
->will($this->returnValue([['id' => $this->subscriber1->id]]));
|
->will($this->returnValue([['id' => $this->subscriber1->id]]));
|
||||||
|
|
||||||
remove_all_filters('mailpoet_get_subscribers_in_segment_finders');
|
$finder = new SubscribersFinder($mock);
|
||||||
(new WPFunctions)->addFilter('mailpoet_get_subscribers_in_segment_finders', function () use ($mock) {
|
|
||||||
return [$mock];
|
|
||||||
});
|
|
||||||
|
|
||||||
$finder = new SubscribersFinder();
|
|
||||||
$subscribersCount = $finder->addSubscribersToTaskFromSegments(
|
$subscribersCount = $finder->addSubscribersToTaskFromSegments(
|
||||||
$this->sending->task(),
|
$this->sending->task(),
|
||||||
[
|
[
|
||||||
@@ -160,15 +145,11 @@ class SubscribersFinderTest extends \MailPoetTest {
|
|||||||
$finder = new SubscribersFinder();
|
$finder = new SubscribersFinder();
|
||||||
|
|
||||||
/** @var MockObject $mock */
|
/** @var MockObject $mock */
|
||||||
$mock = Stub::makeEmpty('MailPoet\Segments\FinderMock', ['getSubscriberIdsInSegment']);
|
$mock = Stub::makeEmpty(SendingNewslettersSubscribersFinder::class, ['getSubscriberIdsInSegment']);
|
||||||
$mock
|
$mock
|
||||||
->expects($this->once())
|
->expects($this->once())
|
||||||
->method('getSubscriberIdsInSegment')
|
->method('getSubscriberIdsInSegment')
|
||||||
->will($this->returnValue([['id' => $this->subscriber2->id]]));
|
->will($this->returnValue([['id' => $this->subscriber2->id]]));
|
||||||
remove_all_filters('mailpoet_get_subscribers_in_segment_finders');
|
|
||||||
(new WPFunctions)->addFilter('mailpoet_get_subscribers_in_segment_finders', function () use ($mock) {
|
|
||||||
return [$mock];
|
|
||||||
});
|
|
||||||
|
|
||||||
$subscribersCount = $finder->addSubscribersToTaskFromSegments(
|
$subscribersCount = $finder->addSubscribersToTaskFromSegments(
|
||||||
$this->sending->task(),
|
$this->sending->task(),
|
||||||
|
Reference in New Issue
Block a user