Inject subscribe() action instead of calling it statically [MAILPOET-1825]

This commit is contained in:
wxa
2019-02-20 15:18:06 +03:00
committed by M. Shull
parent 7528f0f52b
commit 2f487fd300
7 changed files with 90 additions and 44 deletions

View File

@@ -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) {

View File

@@ -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());
}
}

View File

@@ -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
);

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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'