Load dynamic segments for list directly without hook
[MAILPOET-3077]
This commit is contained in:
committed by
Veljko V
parent
c64137a792
commit
dd4bf486a6
@@ -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"]);
|
||||||
|
@@ -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"]);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
),
|
),
|
||||||
|
Reference in New Issue
Block a user