diff --git a/lib/Config/Hooks.php b/lib/Config/Hooks.php index 20a1ab46b2..dc9f81e34f 100644 --- a/lib/Config/Hooks.php +++ b/lib/Config/Hooks.php @@ -2,6 +2,7 @@ namespace MailPoet\Config; +use MailPoet\DynamicSegments\DynamicSegmentHooks; use MailPoet\Mailer\WordPress\Replacer; use MailPoet\Mailer\WordPress\WordpressMailerReplacer; use MailPoet\Newsletter\Scheduler\PostNotificationScheduler; @@ -54,6 +55,9 @@ class Hooks { /** @var WordpressMailerReplacer */ private $wordpress_mailer_replacer; + /** @var DynamicSegmentHooks */ + private $dynamic_segment_hooks; + function __construct( Form $subscription_form, Comment $subscription_comment, @@ -66,7 +70,8 @@ class Hooks { WooCommerceSettings $woocommerce_settings, WooCommercePurchases $woocommerce_purchases, PostNotificationScheduler $post_notification_scheduler, - WordpressMailerReplacer $wordpress_mailer_replacer + WordpressMailerReplacer $wordpress_mailer_replacer, + DynamicSegmentHooks $dynamic_segment_hooks ) { $this->subscription_form = $subscription_form; $this->subscription_comment = $subscription_comment; @@ -80,6 +85,7 @@ class Hooks { $this->woocommerce_purchases = $woocommerce_purchases; $this->post_notification_scheduler = $post_notification_scheduler; $this->wordpress_mailer_replacer = $wordpress_mailer_replacer; + $this->dynamic_segment_hooks = $dynamic_segment_hooks; } function init() { @@ -92,6 +98,7 @@ class Hooks { $this->setupWooCommerceSubscriptionEvents(); $this->setupPostNotifications(); $this->setupWooCommerceSettings(); + $this->dynamic_segment_hooks->init(); } function initEarlyHooks() { diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 805707f224..229de12a13 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -115,6 +115,8 @@ class ContainerConfigurator implements IContainerConfigurator { ->setFactory([new Reference(\MailPoet\Doctrine\EntityManagerFactory::class), 'createEntityManager']) ->setPublic(true); $container->autowire(\MailPoet\Doctrine\EventListeners\TimestampListener::class); + // Dynamic segments + $container->autowire(\MailPoet\DynamicSegments\DynamicSegmentHooks::class); // Cron $container->autowire(\MailPoet\Cron\Daemon::class)->setPublic(true); $container->autowire(\MailPoet\Cron\DaemonHttpRunner::class)->setPublic(true); diff --git a/lib/DynamicSegments/DynamicSegmentHooks.php b/lib/DynamicSegments/DynamicSegmentHooks.php new file mode 100644 index 0000000000..7774eb6ac0 --- /dev/null +++ b/lib/DynamicSegments/DynamicSegmentHooks.php @@ -0,0 +1,86 @@ +wp = $wp; + } + + function init() { + $this->wp->addAction( + 'mailpoet_segments_with_subscriber_count', + [$this, 'addSegmentsWithSubscribersCount'] + ); + + $this->wp->addAction( + 'mailpoet_get_subscribers_in_segment_finders', + [$this, 'getSubscribersInSegmentsFinders'] + ); + + $this->wp->addAction( + 'mailpoet_get_subscribers_listings_in_segment_handlers', + [$this, 'getSubscribersListingsInSegmentsHandlers'] + ); + + $this->wp->addAction( + 'mailpoet_subscribers_listings_filters_segments', + [$this, 'addDynamicFiltersToSubscribersListingsFilters'] + ); + + $this->wp->addAction( + 'mailpoet_subscribers_in_segment_apply_bulk_action_handlers', + [$this, 'applySubscriberBulkAction'] + ); + + $this->wp->addAction( + 'mailpoet_get_segment_filters', + [$this, 'getSegmentFilters'] + ); + } + + function addSegmentsWithSubscribersCount($initial_segments) { + $newsletters_add_segments = new AddToNewslettersSegments(new Loader(new DBMapper()), new SubscribersCount()); + return $newsletters_add_segments->add($initial_segments); + } + + function getSubscribersInSegmentsFinders(array $finders) { + $finders[] = new SendingNewslettersSubscribersFinder(new SingleSegmentLoader(new DBMapper()), new SubscribersIds()); + return $finders; + } + + function getSubscribersListingsInSegmentsHandlers(array $handlers) { + $handlers[] = new SubscribersListingsHandlerFactory(); + return $handlers; + } + + function addDynamicFiltersToSubscribersListingsFilters($segment_filters) { + $newsletters_add_segments = new AddToSubscribersFilters(new Loader(new DBMapper()), new SubscribersCount()); + return $newsletters_add_segments->add($segment_filters); + } + + function applySubscriberBulkAction(array $handlers) { + $handlers[] = new SubscribersBulkActionHandler(); + return $handlers; + } + + function getSegmentFilters($segment_id) { + $single_segment_loader = new SingleSegmentLoader(new DBMapper()); + return $single_segment_loader->load($segment_id)->getFilters(); + } +}