Load dynamic segments for list directly without hook

[MAILPOET-3077]
This commit is contained in:
Rostislav Wolny
2020-09-14 13:32:36 +02:00
committed by Veljko V
parent c64137a792
commit dd4bf486a6
5 changed files with 40 additions and 30 deletions

View File

@@ -7,6 +7,7 @@ use MailPoet\Config\Env;
use MailPoet\Config\Installer; use MailPoet\Config\Installer;
use MailPoet\Config\Menu; use MailPoet\Config\Menu;
use MailPoet\Config\ServicesChecker; use MailPoet\Config\ServicesChecker;
use MailPoet\DynamicSegments\FreePluginConnectors\AddToNewslettersSegments;
use MailPoet\Features\FeaturesController; use MailPoet\Features\FeaturesController;
use MailPoet\Listing\PageLimit; use MailPoet\Listing\PageLimit;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
@@ -58,6 +59,9 @@ class Newsletters {
/** @var NewsletterTemplatesRepository */ /** @var NewsletterTemplatesRepository */
private $newsletterTemplatesRepository; private $newsletterTemplatesRepository;
/** @var AddToNewslettersSegments */
private $dynamicSegmentsLoader;
public function __construct( public function __construct(
PageRenderer $pageRenderer, PageRenderer $pageRenderer,
PageLimit $listingPageLimit, PageLimit $listingPageLimit,
@@ -69,7 +73,8 @@ class Newsletters {
FeaturesController $featuresController, FeaturesController $featuresController,
SubscribersFeature $subscribersFeature, SubscribersFeature $subscribersFeature,
ServicesChecker $servicesChecker, ServicesChecker $servicesChecker,
NewsletterTemplatesRepository $newsletterTemplatesRepository NewsletterTemplatesRepository $newsletterTemplatesRepository,
AddToNewslettersSegments $dynamicSegmentsLoader
) { ) {
$this->pageRenderer = $pageRenderer; $this->pageRenderer = $pageRenderer;
$this->listingPageLimit = $listingPageLimit; $this->listingPageLimit = $listingPageLimit;
@@ -82,6 +87,7 @@ class Newsletters {
$this->subscribersFeature = $subscribersFeature; $this->subscribersFeature = $subscribersFeature;
$this->servicesChecker = $servicesChecker; $this->servicesChecker = $servicesChecker;
$this->newsletterTemplatesRepository = $newsletterTemplatesRepository; $this->newsletterTemplatesRepository = $newsletterTemplatesRepository;
$this->dynamicSegmentsLoader = $dynamicSegmentsLoader;
} }
public function render() { public function render() {
@@ -100,6 +106,7 @@ class Newsletters {
$data['items_per_page'] = $this->listingPageLimit->getLimitPerPage('newsletters'); $data['items_per_page'] = $this->listingPageLimit->getLimitPerPage('newsletters');
$segments = Segment::getSegmentsWithSubscriberCount($type = false); $segments = Segment::getSegmentsWithSubscriberCount($type = false);
$segments = $this->dynamicSegmentsLoader->add($segments);
$segments = $this->wp->applyFilters('mailpoet_segments_with_subscriber_count', $segments); $segments = $this->wp->applyFilters('mailpoet_segments_with_subscriber_count', $segments);
usort($segments, function ($a, $b) { usort($segments, function ($a, $b) {
return strcasecmp($a["name"], $b["name"]); return strcasecmp($a["name"], $b["name"]);

View File

@@ -4,6 +4,7 @@ namespace MailPoet\AdminPages\Pages;
use MailPoet\AdminPages\PageRenderer; use MailPoet\AdminPages\PageRenderer;
use MailPoet\Config\ServicesChecker; use MailPoet\Config\ServicesChecker;
use MailPoet\DynamicSegments\FreePluginConnectors\AddToNewslettersSegments;
use MailPoet\Form\Block; use MailPoet\Form\Block;
use MailPoet\Listing\PageLimit; use MailPoet\Listing\PageLimit;
use MailPoet\Models\CustomField; use MailPoet\Models\CustomField;
@@ -34,13 +35,17 @@ class Subscribers {
/** @var ServicesChecker */ /** @var ServicesChecker */
private $servicesChecker; private $servicesChecker;
/** @var AddToNewslettersSegments */
private $dynamicSegmentsLoader;
public function __construct( public function __construct(
PageRenderer $pageRenderer, PageRenderer $pageRenderer,
PageLimit $listingPageLimit, PageLimit $listingPageLimit,
SubscribersFeature $subscribersFeature, SubscribersFeature $subscribersFeature,
WPFunctions $wp, WPFunctions $wp,
ServicesChecker $servicesChecker, ServicesChecker $servicesChecker,
Block\Date $dateBlock Block\Date $dateBlock,
AddToNewslettersSegments $dynamicSegmentsLoader
) { ) {
$this->pageRenderer = $pageRenderer; $this->pageRenderer = $pageRenderer;
$this->listingPageLimit = $listingPageLimit; $this->listingPageLimit = $listingPageLimit;
@@ -48,6 +53,7 @@ class Subscribers {
$this->wp = $wp; $this->wp = $wp;
$this->dateBlock = $dateBlock; $this->dateBlock = $dateBlock;
$this->servicesChecker = $servicesChecker; $this->servicesChecker = $servicesChecker;
$this->dynamicSegmentsLoader = $dynamicSegmentsLoader;
} }
public function render() { public function render() {
@@ -55,6 +61,7 @@ class Subscribers {
$data['items_per_page'] = $this->listingPageLimit->getLimitPerPage('subscribers'); $data['items_per_page'] = $this->listingPageLimit->getLimitPerPage('subscribers');
$segments = Segment::getSegmentsWithSubscriberCount($type = false); $segments = Segment::getSegmentsWithSubscriberCount($type = false);
$segments = $this->dynamicSegmentsLoader->add($segments);
$segments = $this->wp->applyFilters('mailpoet_segments_with_subscriber_count', $segments); $segments = $this->wp->applyFilters('mailpoet_segments_with_subscriber_count', $segments);
usort($segments, function ($a, $b) { usort($segments, function ($a, $b) {
return strcasecmp($a["name"], $b["name"]); return strcasecmp($a["name"], $b["name"]);

View File

@@ -131,6 +131,9 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\PostEditorBlocks\SubscriptionFormBlock::class); $container->autowire(\MailPoet\PostEditorBlocks\SubscriptionFormBlock::class);
// 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\Persistence\Loading\Loader::class);
$container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\SubscribersCount::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);

View File

@@ -2,7 +2,6 @@
namespace MailPoet\DynamicSegments; namespace MailPoet\DynamicSegments;
use MailPoet\DynamicSegments\FreePluginConnectors\AddToNewslettersSegments;
use MailPoet\DynamicSegments\FreePluginConnectors\AddToSubscribersFilters; use MailPoet\DynamicSegments\FreePluginConnectors\AddToSubscribersFilters;
use MailPoet\DynamicSegments\FreePluginConnectors\SendingNewslettersSubscribersFinder; use MailPoet\DynamicSegments\FreePluginConnectors\SendingNewslettersSubscribersFinder;
use MailPoet\DynamicSegments\FreePluginConnectors\SubscribersBulkActionHandler; use MailPoet\DynamicSegments\FreePluginConnectors\SubscribersBulkActionHandler;
@@ -23,11 +22,6 @@ class DynamicSegmentHooks {
} }
public function init() { public function init() {
$this->wp->addAction(
'mailpoet_segments_with_subscriber_count',
[$this, 'addSegmentsWithSubscribersCount']
);
$this->wp->addAction( $this->wp->addAction(
'mailpoet_get_subscribers_in_segment_finders', 'mailpoet_get_subscribers_in_segment_finders',
[$this, 'getSubscribersInSegmentsFinders'] [$this, 'getSubscribersInSegmentsFinders']
@@ -54,11 +48,6 @@ class DynamicSegmentHooks {
); );
} }
public function addSegmentsWithSubscribersCount($initialSegments) {
$newslettersAddSegments = new AddToNewslettersSegments(new Loader(new DBMapper()), new SubscribersCount());
return $newslettersAddSegments->add($initialSegments);
}
public function getSubscribersInSegmentsFinders(array $finders) { public function getSubscribersInSegmentsFinders(array $finders) {
$finders[] = new SendingNewslettersSubscribersFinder(new SingleSegmentLoader(new DBMapper()), new SubscribersIds()); $finders[] = new SendingNewslettersSubscribersFinder(new SingleSegmentLoader(new DBMapper()), new SubscribersIds());
return $finders; return $finders;

View File

@@ -2,22 +2,25 @@
namespace MailPoet\Subscribers\ImportExport; namespace MailPoet\Subscribers\ImportExport;
use MailPoet\DI\ContainerWrapper;
use MailPoet\DynamicSegments\FreePluginConnectors\AddToNewslettersSegments;
use MailPoet\Models\CustomField; use MailPoet\Models\CustomField;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Util\Helpers; use MailPoet\Util\Helpers;
use MailPoet\WP\Functions as WPFunctions;
class ImportExportFactory { class ImportExportFactory {
const IMPORT_ACTION = 'import'; const IMPORT_ACTION = 'import';
const EXPORT_ACTION = 'export'; const EXPORT_ACTION = 'export';
/** @var string|null */
public $action; public $action;
private $wp; /** @var AddToNewslettersSegments */
private $dynamicSegmentsLoader;
public function __construct($action = null) { public function __construct($action = null) {
$this->action = $action; $this->action = $action;
$this->wp = new WPFunctions; $this->dynamicSegmentsLoader = ContainerWrapper::getInstance()->get(AddToNewslettersSegments::class);
} }
public function getSegments() { public function getSegments() {
@@ -25,6 +28,7 @@ class ImportExportFactory {
$segments = Segment::getSegmentsForImport(); $segments = Segment::getSegmentsForImport();
} else { } else {
$segments = Segment::getSegmentsForExport(); $segments = Segment::getSegmentsForExport();
$segments = $this->dynamicSegmentsLoader->add($segments);
$segments = $this->wp->applyFilters('mailpoet_segments_with_subscriber_count', $segments); $segments = $this->wp->applyFilters('mailpoet_segments_with_subscriber_count', $segments);
$segments = array_values(array_filter($segments, function($segment) { $segments = array_values(array_filter($segments, function($segment) {
return $segment['subscribers'] > 0; return $segment['subscribers'] > 0;
@@ -32,7 +36,7 @@ class ImportExportFactory {
} }
return array_map(function($segment) { return array_map(function($segment) {
if (!$segment['name']) $segment['name'] = WPFunctions::get()->__('Not In List', 'mailpoet'); if (!$segment['name']) $segment['name'] = __('Not In List', 'mailpoet');
if (!$segment['id']) $segment['id'] = 0; if (!$segment['id']) $segment['id'] = 0;
return [ return [
'id' => $segment['id'], 'id' => $segment['id'],
@@ -45,17 +49,17 @@ class ImportExportFactory {
public function getSubscriberFields() { public function getSubscriberFields() {
$fields = [ $fields = [
'email' => WPFunctions::get()->__('Email', 'mailpoet'), 'email' => __('Email', 'mailpoet'),
'first_name' => WPFunctions::get()->__('First name', 'mailpoet'), 'first_name' => __('First name', 'mailpoet'),
'last_name' => WPFunctions::get()->__('Last name', 'mailpoet'), 'last_name' => __('Last name', 'mailpoet'),
]; ];
if ($this->action === 'export') { if ($this->action === 'export') {
$fields = array_merge( $fields = array_merge(
$fields, $fields,
[ [
'list_status' => WPFunctions::get()->_x('List status', 'Subscription status', 'mailpoet'), 'list_status' => _x('List status', 'Subscription status', 'mailpoet'),
'global_status' => WPFunctions::get()->_x('Global status', 'Subscription status', 'mailpoet'), 'global_status' => _x('Global status', 'Subscription status', 'mailpoet'),
'subscribed_ip' => WPFunctions::get()->__('IP address', 'mailpoet'), 'subscribed_ip' => __('IP address', 'mailpoet'),
] ]
); );
} }
@@ -96,36 +100,36 @@ class ImportExportFactory {
[ [
[ [
'id' => 'ignore', 'id' => 'ignore',
'name' => WPFunctions::get()->__('Ignore field...', 'mailpoet'), 'name' => __('Ignore field...', 'mailpoet'),
], ],
[ [
'id' => 'create', 'id' => 'create',
'name' => WPFunctions::get()->__('Create new field...', 'mailpoet'), 'name' => __('Create new field...', 'mailpoet'),
], ],
] : ] :
[ [
[ [
'id' => 'select', 'id' => 'select',
'name' => WPFunctions::get()->__('Select all...', 'mailpoet'), 'name' => __('Select all...', 'mailpoet'),
], ],
[ [
'id' => 'deselect', 'id' => 'deselect',
'name' => WPFunctions::get()->__('Deselect all...', 'mailpoet'), 'name' => __('Deselect all...', 'mailpoet'),
], ],
]; ];
$select2Fields = [ $select2Fields = [
[ [
'name' => WPFunctions::get()->__('Actions', 'mailpoet'), 'name' => __('Actions', 'mailpoet'),
'children' => $actions, 'children' => $actions,
], ],
[ [
'name' => WPFunctions::get()->__('System fields', 'mailpoet'), 'name' => __('System fields', 'mailpoet'),
'children' => $this->formatSubscriberFields($subscriberFields), 'children' => $this->formatSubscriberFields($subscriberFields),
], ],
]; ];
if ($subscriberCustomFields) { if ($subscriberCustomFields) {
array_push($select2Fields, [ array_push($select2Fields, [
'name' => WPFunctions::get()->__('User fields', 'mailpoet'), 'name' => __('User fields', 'mailpoet'),
'children' => $this->formatSubscriberCustomFields( 'children' => $this->formatSubscriberCustomFields(
$subscriberCustomFields $subscriberCustomFields
), ),