Inject subscribe() action instead of calling it statically [MAILPOET-1825]
This commit is contained in:
@@ -16,6 +16,7 @@ use MailPoet\Segments\SubscribersListings;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Subscribers\RequiredCustomFieldValidator;
|
||||
use MailPoet\Subscribers\Source;
|
||||
use MailPoet\Subscribers\SubscriberActions;
|
||||
use MailPoet\Subscription\Throttling as SubscriptionThrottling;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
@@ -35,6 +36,9 @@ class Subscribers extends APIEndpoint {
|
||||
/** @var SubscribersListings */
|
||||
private $subscribers_listings;
|
||||
|
||||
/** @var SubscriberActions */
|
||||
private $subscriber_actions;
|
||||
|
||||
/** @var RequiredCustomFieldValidator */
|
||||
private $required_custom_field_validator;
|
||||
|
||||
@@ -50,6 +54,7 @@ class Subscribers extends APIEndpoint {
|
||||
public function __construct(
|
||||
Listing\BulkActionController $bulk_action_controller,
|
||||
SubscribersListings $subscribers_listings,
|
||||
SubscriberActions $subscriber_actions,
|
||||
RequiredCustomFieldValidator $required_custom_field_validator,
|
||||
Listing\Handler $listing_handler,
|
||||
WPFunctions $wp,
|
||||
@@ -57,6 +62,7 @@ class Subscribers extends APIEndpoint {
|
||||
) {
|
||||
$this->bulk_action_controller = $bulk_action_controller;
|
||||
$this->subscribers_listings = $subscribers_listings;
|
||||
$this->subscriber_actions = $subscriber_actions;
|
||||
$this->required_custom_field_validator = $required_custom_field_validator;
|
||||
$this->listing_handler = $listing_handler;
|
||||
$this->wp = $wp;
|
||||
@@ -183,7 +189,7 @@ class Subscribers extends APIEndpoint {
|
||||
throw new \Exception(sprintf(__('You need to wait %d seconds before subscribing again.', 'mailpoet'), $timeout));
|
||||
}
|
||||
|
||||
$subscriber = Subscriber::subscribe($data, $segment_ids);
|
||||
$subscriber = $this->subscriber_actions->subscribe($data, $segment_ids);
|
||||
$errors = $subscriber->getErrors();
|
||||
|
||||
if ($errors !== false) {
|
||||
|
@@ -17,7 +17,7 @@ if (!defined('ABSPATH')) exit;
|
||||
class API {
|
||||
|
||||
/** @var NewSubscriberNotificationMailer */
|
||||
private $new_subscribe_notification_mailer;
|
||||
private $new_subscriber_notification_mailer;
|
||||
|
||||
/** @var ConfirmationEmailMailer */
|
||||
private $confirmation_email_mailer;
|
||||
@@ -26,11 +26,11 @@ class API {
|
||||
private $required_custom_field_validator;
|
||||
|
||||
public function __construct(
|
||||
NewSubscriberNotificationMailer $new_subscribe_notification_mailer,
|
||||
NewSubscriberNotificationMailer $new_subscriber_notification_mailer,
|
||||
ConfirmationEmailMailer $confirmation_email_mailer,
|
||||
RequiredCustomFieldValidator $required_custom_field_validator
|
||||
) {
|
||||
$this->new_subscribe_notification_mailer = $new_subscribe_notification_mailer;
|
||||
$this->new_subscriber_notification_mailer = $new_subscriber_notification_mailer;
|
||||
$this->confirmation_email_mailer = $confirmation_email_mailer;
|
||||
$this->required_custom_field_validator = $required_custom_field_validator;
|
||||
}
|
||||
@@ -299,6 +299,6 @@ class API {
|
||||
}
|
||||
|
||||
private function sendSubscriberNotification(Subscriber $subscriber, array $segment_ids) {
|
||||
$this->new_subscribe_notification_mailer->send($subscriber, Segment::whereIn('id', $segment_ids)->findMany());
|
||||
$this->new_subscriber_notification_mailer->send($subscriber, Segment::whereIn('id', $segment_ids)->findMany());
|
||||
}
|
||||
}
|
||||
|
@@ -3,7 +3,9 @@
|
||||
namespace MailPoet\Config;
|
||||
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Subscription\Comment;
|
||||
use MailPoet\Subscription\Form;
|
||||
use MailPoet\Subscription\Registration;
|
||||
use MailPoet\Segments\WooCommerce as WooCommerceSegment;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
@@ -12,6 +14,12 @@ class Hooks {
|
||||
/** @var Form */
|
||||
private $subscription_form;
|
||||
|
||||
/** @var Comment */
|
||||
private $subscription_comment;
|
||||
|
||||
/** @var Registration */
|
||||
private $subscription_registration;
|
||||
|
||||
/** @var SettingsController */
|
||||
private $settings;
|
||||
|
||||
@@ -23,11 +31,15 @@ class Hooks {
|
||||
|
||||
function __construct(
|
||||
Form $subscription_form,
|
||||
Comment $subscription_comment,
|
||||
Registration $subscription_registration,
|
||||
SettingsController $settings,
|
||||
WPFunctions $wp,
|
||||
WooCommerceSegment $woocommerce_segment
|
||||
) {
|
||||
$this->subscription_form = $subscription_form;
|
||||
$this->subscription_comment = $subscription_comment;
|
||||
$this->subscription_registration = $subscription_registration;
|
||||
$this->settings = $settings;
|
||||
$this->wp = $wp;
|
||||
$this->woocommerce_segment = $woocommerce_segment;
|
||||
@@ -54,25 +66,25 @@ class Hooks {
|
||||
if ($this->wp->isUserLoggedIn()) {
|
||||
$this->wp->addAction(
|
||||
'comment_form_field_comment',
|
||||
'\MailPoet\Subscription\Comment::extendLoggedInForm'
|
||||
[$this->subscription_comment, 'extendLoggedInForm']
|
||||
);
|
||||
} else {
|
||||
$this->wp->addAction(
|
||||
'comment_form_after_fields',
|
||||
'\MailPoet\Subscription\Comment::extendLoggedOutForm'
|
||||
[$this->subscription_comment, 'extendLoggedOutForm']
|
||||
);
|
||||
}
|
||||
|
||||
$this->wp->addAction(
|
||||
'comment_post',
|
||||
'\MailPoet\Subscription\Comment::onSubmit',
|
||||
[$this->subscription_comment, 'onSubmit'],
|
||||
60,
|
||||
2
|
||||
);
|
||||
|
||||
$this->wp->addAction(
|
||||
'wp_set_comment_status',
|
||||
'\MailPoet\Subscription\Comment::onStatusUpdate',
|
||||
[$this->subscription_comment, 'onStatusUpdate'],
|
||||
60,
|
||||
2
|
||||
);
|
||||
@@ -87,22 +99,22 @@ class Hooks {
|
||||
if (is_multisite()) {
|
||||
$this->wp->addAction(
|
||||
'signup_extra_fields',
|
||||
'\MailPoet\Subscription\Registration::extendForm'
|
||||
[$this->subscription_registration, 'extendForm']
|
||||
);
|
||||
$this->wp->addAction(
|
||||
'wpmu_validate_user_signup',
|
||||
'\MailPoet\Subscription\Registration::onMultiSiteRegister',
|
||||
[$this->subscription_registration, 'onMultiSiteRegister'],
|
||||
60,
|
||||
1
|
||||
);
|
||||
} else {
|
||||
$this->wp->addAction(
|
||||
'register_form',
|
||||
'\MailPoet\Subscription\Registration::extendForm'
|
||||
[$this->subscription_registration, 'extendForm']
|
||||
);
|
||||
$this->wp->addAction(
|
||||
'register_post',
|
||||
'\MailPoet\Subscription\Registration::onRegister',
|
||||
[$this->subscription_registration, 'onRegister'],
|
||||
60,
|
||||
3
|
||||
);
|
||||
|
@@ -85,7 +85,9 @@ class ContainerConfigurator implements IContainerConfigurator {
|
||||
// Settings
|
||||
$container->autowire(\MailPoet\Settings\SettingsController::class)->setPublic(true);
|
||||
// Subscription
|
||||
$container->autowire(\MailPoet\Subscription\Comment::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\Subscription\Form::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\Subscription\Registration::class)->setPublic(true);
|
||||
// Newsletter
|
||||
$container->autowire(\MailPoet\Newsletter\AutomatedLatestContent::class)->setPublic(true);
|
||||
// WooCommerce
|
||||
|
@@ -2,24 +2,38 @@
|
||||
namespace MailPoet\Subscription;
|
||||
use MailPoet\Models\Subscriber;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Subscribers\SubscriberActions;
|
||||
|
||||
class Comment {
|
||||
const SPAM = 'spam';
|
||||
const APPROVED = 1;
|
||||
const PENDING_APPROVAL = 0;
|
||||
|
||||
static function extendLoggedInForm($field) {
|
||||
$field .= self::getSubscriptionField();
|
||||
/** @var SettingsController */
|
||||
private $settings;
|
||||
|
||||
/** @var SubscriberActions */
|
||||
private $subscriber_actions;
|
||||
|
||||
function __construct(
|
||||
SettingsController $settings,
|
||||
SubscriberActions $subscriber_actions
|
||||
) {
|
||||
$this->settings = $settings;
|
||||
$this->subscriber_actions = $subscriber_actions;
|
||||
}
|
||||
|
||||
function extendLoggedInForm($field) {
|
||||
$field .= $this->getSubscriptionField();
|
||||
return $field;
|
||||
}
|
||||
|
||||
static function extendLoggedOutForm() {
|
||||
echo self::getSubscriptionField();
|
||||
function extendLoggedOutForm() {
|
||||
echo $this->getSubscriptionField();
|
||||
}
|
||||
|
||||
static function getSubscriptionField() {
|
||||
$settings = new SettingsController();
|
||||
$label = $settings->get(
|
||||
private function getSubscriptionField() {
|
||||
$label = $this->settings->get(
|
||||
'subscribe.on_comment.label',
|
||||
__('Yes, please add me to your mailing list.', 'mailpoet')
|
||||
);
|
||||
@@ -36,7 +50,7 @@ class Comment {
|
||||
</p>';
|
||||
}
|
||||
|
||||
static function onSubmit($comment_id, $comment_status) {
|
||||
function onSubmit($comment_id, $comment_status) {
|
||||
if ($comment_status === Comment::SPAM) return;
|
||||
|
||||
if (
|
||||
@@ -53,12 +67,12 @@ class Comment {
|
||||
true
|
||||
);
|
||||
} else if ($comment_status === Comment::APPROVED) {
|
||||
static::subscribeAuthorOfComment($comment_id);
|
||||
$this->subscribeAuthorOfComment($comment_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static function onStatusUpdate($comment_id, $action) {
|
||||
function onStatusUpdate($comment_id, $action) {
|
||||
if ($action === 'approve') {
|
||||
// check if the comment's author wants to subscribe
|
||||
$do_subscribe = (
|
||||
@@ -70,21 +84,20 @@ class Comment {
|
||||
);
|
||||
|
||||
if ($do_subscribe === true) {
|
||||
static::subscribeAuthorOfComment($comment_id);
|
||||
$this->subscribeAuthorOfComment($comment_id);
|
||||
|
||||
delete_comment_meta($comment_id, 'mailpoet');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static function subscribeAuthorOfComment($comment_id) {
|
||||
$settings = new SettingsController();
|
||||
$segment_ids = $settings->get('subscribe.on_comment.segments', array());
|
||||
private function subscribeAuthorOfComment($comment_id) {
|
||||
$segment_ids = $this->settings->get('subscribe.on_comment.segments', array());
|
||||
|
||||
if (!empty($segment_ids)) {
|
||||
$comment = get_comment($comment_id);
|
||||
|
||||
$result = Subscriber::subscribe(
|
||||
$result = $this->subscriber_actions->subscribe(
|
||||
array(
|
||||
'email' => $comment->comment_author_email,
|
||||
'first_name' => $comment->comment_author
|
||||
|
@@ -3,12 +3,26 @@ namespace MailPoet\Subscription;
|
||||
use MailPoet\Models\Setting;
|
||||
use MailPoet\Models\Subscriber;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Subscribers\SubscriberActions;
|
||||
|
||||
class Registration {
|
||||
|
||||
static function extendForm() {
|
||||
$settings = new SettingsController();
|
||||
$label = $settings->get(
|
||||
/** @var SettingsController */
|
||||
private $settings;
|
||||
|
||||
/** @var SubscriberActions */
|
||||
private $subscriber_actions;
|
||||
|
||||
function __construct(
|
||||
SettingsController $settings,
|
||||
SubscriberActions $subscriber_actions
|
||||
) {
|
||||
$this->settings = $settings;
|
||||
$this->subscriber_actions = $subscriber_actions;
|
||||
}
|
||||
|
||||
function extendForm() {
|
||||
$label = $this->settings->get(
|
||||
'subscribe.on_register.label',
|
||||
__('Yes, please add me to your mailing list.', 'mailpoet')
|
||||
);
|
||||
@@ -25,13 +39,13 @@ class Registration {
|
||||
</p>';
|
||||
}
|
||||
|
||||
static function onMultiSiteRegister($result) {
|
||||
function onMultiSiteRegister($result) {
|
||||
if (empty($result['errors']->errors)) {
|
||||
if (
|
||||
isset($_POST['mailpoet']['subscribe_on_register'])
|
||||
&& (bool)$_POST['mailpoet']['subscribe_on_register'] === true
|
||||
) {
|
||||
static::subscribeNewUser(
|
||||
$this->subscribeNewUser(
|
||||
$result['user_name'],
|
||||
$result['user_email']
|
||||
);
|
||||
@@ -40,7 +54,7 @@ class Registration {
|
||||
return $result;
|
||||
}
|
||||
|
||||
static function onRegister(
|
||||
function onRegister(
|
||||
$user_login,
|
||||
$user_email = null,
|
||||
$errors = null
|
||||
@@ -50,22 +64,21 @@ class Registration {
|
||||
&& isset($_POST['mailpoet']['subscribe_on_register'])
|
||||
&& (bool)$_POST['mailpoet']['subscribe_on_register'] === true
|
||||
) {
|
||||
static::subscribeNewUser(
|
||||
$this->subscribeNewUser(
|
||||
$user_login,
|
||||
$user_email
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private static function subscribeNewUser($name, $email) {
|
||||
$settings = new SettingsController();
|
||||
$segment_ids = $settings->get(
|
||||
private function subscribeNewUser($name, $email) {
|
||||
$segment_ids = $this->settings->get(
|
||||
'subscribe.on_register.segments',
|
||||
[]
|
||||
);
|
||||
|
||||
if (!empty($segment_ids)) {
|
||||
Subscriber::subscribe(
|
||||
$this->subscriber_actions->subscribe(
|
||||
array(
|
||||
'email' => $email,
|
||||
'first_name' => $name
|
||||
|
@@ -393,7 +393,7 @@ class APITest extends \MailPoetTest {
|
||||
\MailPoet\API\MP\v1\API::class,
|
||||
'addSubscriber',
|
||||
array(
|
||||
'new_subscribe_notification_mailer'=> Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send']),
|
||||
'new_subscriber_notification_mailer'=> Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send']),
|
||||
'required_custom_field_validator' => Stub::makeEmpty(RequiredCustomFieldValidator::class, ['validate']),
|
||||
'_scheduleWelcomeNotification' => Expected::once(),
|
||||
), $this);
|
||||
@@ -435,7 +435,7 @@ class APITest extends \MailPoetTest {
|
||||
'addSubscriber',
|
||||
array(
|
||||
'_scheduleWelcomeNotification' => Expected::never(),
|
||||
'new_subscribe_notification_mailer'=> Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send']),
|
||||
'new_subscriber_notification_mailer'=> Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send']),
|
||||
'required_custom_field_validator' => Stub::makeEmpty(RequiredCustomFieldValidator::class, ['validate']),
|
||||
), $this);
|
||||
$subscriber = array(
|
||||
@@ -451,7 +451,7 @@ class APITest extends \MailPoetTest {
|
||||
'addSubscriber',
|
||||
array(
|
||||
'_scheduleWelcomeNotification' => Expected::never(),
|
||||
'new_subscribe_notification_mailer'=> Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send']),
|
||||
'new_subscriber_notification_mailer'=> Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send']),
|
||||
'required_custom_field_validator' => Stub::makeEmpty(RequiredCustomFieldValidator::class, ['validate'])
|
||||
), $this);
|
||||
$subscriber = array(
|
||||
@@ -470,7 +470,7 @@ class APITest extends \MailPoetTest {
|
||||
array(
|
||||
'_sendConfirmationEmail' => Expected::once(),
|
||||
'required_custom_field_validator' => Stub::makeEmpty(RequiredCustomFieldValidator::class, ['validate']),
|
||||
'new_subscribe_notification_mailer'=> Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send'])
|
||||
'new_subscriber_notification_mailer'=> Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send'])
|
||||
), $this);
|
||||
$subscriber = array(
|
||||
'email' => 'test@example.com'
|
||||
@@ -511,7 +511,7 @@ class APITest extends \MailPoetTest {
|
||||
array(
|
||||
'__sendConfirmationEmail' => Expected::never(),
|
||||
'required_custom_field_validator' => Stub::makeEmpty(RequiredCustomFieldValidator::class, ['validate']),
|
||||
'new_subscribe_notification_mailer'=> Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send'])
|
||||
'new_subscriber_notification_mailer'=> Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send'])
|
||||
), $this);
|
||||
$subscriber = array(
|
||||
'email' => 'test@example.com'
|
||||
|
Reference in New Issue
Block a user