Refactor MailPoet\Subscribers, Subscription to use new settings

[MAILPOET-1757]
This commit is contained in:
Rostislav Wolny
2019-01-30 14:01:33 +01:00
parent 9399e19e3b
commit ce7ad292b8
8 changed files with 60 additions and 23 deletions

View File

@ -3,8 +3,8 @@
namespace MailPoet\Subscribers; namespace MailPoet\Subscribers;
use MailPoet\Mailer\Mailer; use MailPoet\Mailer\Mailer;
use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscription\Url; use MailPoet\Subscription\Url;
use MailPoet\Util\Helpers; use MailPoet\Util\Helpers;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
@ -18,6 +18,8 @@ class ConfirmationEmailMailer {
/** @var WPFunctions */ /** @var WPFunctions */
private $wp; private $wp;
/** @var SettingsController */
private $settings;
/** /**
* @param Mailer|null $mailer * @param Mailer|null $mailer
@ -29,10 +31,11 @@ class ConfirmationEmailMailer {
if(!$wp) { if(!$wp) {
$this->wp = new WPFunctions; $this->wp = new WPFunctions;
} }
$this->settings = new SettingsController();
} }
function sendConfirmationEmail(Subscriber $subscriber) { function sendConfirmationEmail(Subscriber $subscriber) {
$signup_confirmation = Setting::getValue('signup_confirmation'); $signup_confirmation = $this->settings->get('signup_confirmation');
if((bool)$signup_confirmation['enabled'] === false) { if((bool)$signup_confirmation['enabled'] === false) {
return false; return false;

View File

@ -4,9 +4,9 @@ namespace MailPoet\Subscribers;
use MailPoet\Config\Renderer; use MailPoet\Config\Renderer;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\WP\Functions; use MailPoet\WP\Functions;
use MailPoet\Settings\SettingsController;
class NewSubscriberNotificationMailer { class NewSubscriberNotificationMailer {
@ -22,6 +22,9 @@ class NewSubscriberNotificationMailer {
/** @var Functions */ /** @var Functions */
private $wordpress_functions; private $wordpress_functions;
/** @var SettingsController */
private $settings;
/** /**
* @param \MailPoet\Mailer\Mailer|null $mailer * @param \MailPoet\Mailer\Mailer|null $mailer
* @param Renderer|null $renderer * @param Renderer|null $renderer
@ -45,6 +48,7 @@ class NewSubscriberNotificationMailer {
} else { } else {
$this->mailer = new \MailPoet\Mailer\Mailer(false, $this->constructSenderEmail()); $this->mailer = new \MailPoet\Mailer\Mailer(false, $this->constructSenderEmail());
} }
$this->settings = new SettingsController();
} }
/** /**
@ -54,7 +58,7 @@ class NewSubscriberNotificationMailer {
* @throws \Exception * @throws \Exception
*/ */
function send(Subscriber $subscriber, array $segments) { function send(Subscriber $subscriber, array $segments) {
$settings = Setting::getValue(NewSubscriberNotificationMailer::SETTINGS_KEY); $settings = $this->settings->get(NewSubscriberNotificationMailer::SETTINGS_KEY);
if($this->isDisabled($settings)) { if($this->isDisabled($settings)) {
return; return;
} }

View File

@ -1,7 +1,7 @@
<?php <?php
namespace MailPoet\Subscription; namespace MailPoet\Subscription;
use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Settings\SettingsController;
class Comment { class Comment {
const SPAM = 'spam'; const SPAM = 'spam';
@ -18,7 +18,8 @@ class Comment {
} }
static function getSubscriptionField() { static function getSubscriptionField() {
$label = Setting::getValue( $settings = new SettingsController();
$label = $settings->get(
'subscribe.on_comment.label', 'subscribe.on_comment.label',
__('Yes, please add me to your mailing list.', 'mailpoet') __('Yes, please add me to your mailing list.', 'mailpoet')
); );
@ -77,7 +78,8 @@ class Comment {
} }
private static function subscribeAuthorOfComment($comment_id) { private static function subscribeAuthorOfComment($comment_id) {
$segment_ids = Setting::getValue('subscribe.on_comment.segments', array()); $settings = new SettingsController();
$segment_ids = $settings->get('subscribe.on_comment.segments', array());
if(!empty($segment_ids)) { if(!empty($segment_ids)) {
$comment = get_comment($comment_id); $comment = get_comment($comment_id);

View File

@ -8,6 +8,7 @@ use MailPoet\Models\CustomField;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Newsletter\Scheduler\Scheduler; use MailPoet\Newsletter\Scheduler\Scheduler;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\NewSubscriberNotificationMailer; use MailPoet\Subscribers\NewSubscriberNotificationMailer;
use MailPoet\Util\Helpers; use MailPoet\Util\Helpers;
use MailPoet\Util\Url as UrlHelper; use MailPoet\Util\Url as UrlHelper;
@ -25,6 +26,8 @@ class Pages {
private $subscriber; private $subscriber;
/** @var NewSubscriberNotificationMailer */ /** @var NewSubscriberNotificationMailer */
private $new_subscriber_notification_sender; private $new_subscriber_notification_sender;
/** @var SettingsController */
private $settings;
function __construct($action = false, $data = array(), $init_shortcodes = false, $init_page_filters = false, $new_subscriber_notification_sender = null) { function __construct($action = false, $data = array(), $init_shortcodes = false, $init_page_filters = false, $new_subscriber_notification_sender = null) {
$this->action = $action; $this->action = $action;
@ -37,6 +40,7 @@ class Pages {
} else { } else {
$this->new_subscriber_notification_sender = new NewSubscriberNotificationMailer(); $this->new_subscriber_notification_sender = new NewSubscriberNotificationMailer();
} }
$this->settings = new SettingsController();
} }
private function isPreview() { private function isPreview() {
@ -260,7 +264,7 @@ class Pages {
return $custom_field; return $custom_field;
}, CustomField::findMany()); }, CustomField::findMany());
$segment_ids = Setting::getValue('subscription.segments', array()); $segment_ids = $this->settings->get('subscription.segments', []);
if(!empty($segment_ids)) { if(!empty($segment_ids)) {
$segments = Segment::getPublic() $segments = Segment::getPublic()
->whereIn('id', $segment_ids) ->whereIn('id', $segment_ids)

View File

@ -2,11 +2,13 @@
namespace MailPoet\Subscription; namespace MailPoet\Subscription;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Settings\SettingsController;
class Registration { class Registration {
static function extendForm() { static function extendForm() {
$label = Setting::getValue( $settings = new SettingsController();
$label = $settings->get(
'subscribe.on_register.label', 'subscribe.on_register.label',
__('Yes, please add me to your mailing list.', 'mailpoet') __('Yes, please add me to your mailing list.', 'mailpoet')
); );
@ -56,9 +58,10 @@ class Registration {
} }
private static function subscribeNewUser($name, $email) { private static function subscribeNewUser($name, $email) {
$segment_ids = Setting::getValue( $settings = new SettingsController();
$segment_ids = $settings->get(
'subscribe.on_register.segments', 'subscribe.on_register.segments',
array() []
); );
if(!empty($segment_ids)) { if(!empty($segment_ids)) {
@ -71,4 +74,4 @@ class Registration {
); );
} }
} }
} }

View File

@ -4,21 +4,21 @@ namespace MailPoet\Subscription;
use MailPoet\Router\Router; use MailPoet\Router\Router;
use MailPoet\Router\Endpoints\Subscription as SubscriptionEndpoint; use MailPoet\Router\Endpoints\Subscription as SubscriptionEndpoint;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Models\Setting; use MailPoet\Settings\SettingsController;
class Url { class Url {
static function getConfirmationUrl(Subscriber $subscriber = null) { static function getConfirmationUrl(Subscriber $subscriber = null) {
$post = get_post(Setting::getValue('subscription.pages.confirmation')); $post = get_post(self::getSetting('subscription.pages.confirmation'));
return self::getSubscriptionUrl($post, 'confirm', $subscriber); return self::getSubscriptionUrl($post, 'confirm', $subscriber);
} }
static function getManageUrl(Subscriber $subscriber = null) { static function getManageUrl(Subscriber $subscriber = null) {
$post = get_post(Setting::getValue('subscription.pages.manage')); $post = get_post(self::getSetting('subscription.pages.manage'));
return self::getSubscriptionUrl($post, 'manage', $subscriber); return self::getSubscriptionUrl($post, 'manage', $subscriber);
} }
static function getUnsubscribeUrl(Subscriber $subscriber = null) { static function getUnsubscribeUrl(Subscriber $subscriber = null) {
$post = get_post(Setting::getValue('subscription.pages.unsubscribe')); $post = get_post(self::getSetting('subscription.pages.unsubscribe'));
return self::getSubscriptionUrl($post, 'unsubscribe', $subscriber); return self::getSubscriptionUrl($post, 'unsubscribe', $subscriber);
} }
@ -57,4 +57,9 @@ class Url {
return $url; return $url;
} }
static private function getSetting($key) {
$setting = new SettingsController();
return $setting->get($key);
}
} }

View File

@ -8,7 +8,9 @@ use MailPoet\Mailer\Mailer;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\WP\Functions; use MailPoet\WP\Functions;
use MailPoet\Settings\SettingsController;
class NewSubscriberNotificationMailerTest extends \MailPoetTest { class NewSubscriberNotificationMailerTest extends \MailPoetTest {
@ -18,23 +20,27 @@ class NewSubscriberNotificationMailerTest extends \MailPoetTest {
/** @var Segment[] */ /** @var Segment[] */
private $segments; private $segments;
/** @var SettingsController */
private $settings;
function _before() { function _before() {
$this->subscriber = Subscriber::create(); $this->subscriber = Subscriber::create();
$this->subscriber->email = 'subscriber@example.com'; $this->subscriber->email = 'subscriber@example.com';
$this->segments = [Segment::create(), Segment::create()]; $this->segments = [Segment::create(), Segment::create()];
$this->segments[0]->name = 'List1'; $this->segments[0]->name = 'List1';
$this->segments[1]->name = 'List2'; $this->segments[1]->name = 'List2';
$this->settings = new SettingsController();
} }
function testItDoesNotSendIfNoSettings() { function testItDoesNotSendIfNoSettings() {
Setting::setValue(NewSubscriberNotificationMailer::SETTINGS_KEY, null); $this->settings->set(NewSubscriberNotificationMailer::SETTINGS_KEY, null);
$mailer = Stub::makeEmpty(Mailer::class, ['getSenderNameAndAddress' => Expected::never()], $this); $mailer = Stub::makeEmpty(Mailer::class, ['getSenderNameAndAddress' => Expected::never()], $this);
$service = new NewSubscriberNotificationMailer($mailer); $service = new NewSubscriberNotificationMailer($mailer);
$service->send($this->subscriber, $this->segments); $service->send($this->subscriber, $this->segments);
} }
function testItDoesNotSendIfSettingsDoesNotHaveEnabled() { function testItDoesNotSendIfSettingsDoesNotHaveEnabled() {
Setting::setValue(NewSubscriberNotificationMailer::SETTINGS_KEY, []); $this->settings->set(NewSubscriberNotificationMailer::SETTINGS_KEY, []);
$mailer = Stub::makeEmpty(Mailer::class, ['getSenderNameAndAddress' => Expected::never()], $this); $mailer = Stub::makeEmpty(Mailer::class, ['getSenderNameAndAddress' => Expected::never()], $this);
$service = new NewSubscriberNotificationMailer($mailer); $service = new NewSubscriberNotificationMailer($mailer);
$service->send($this->subscriber, $this->segments); $service->send($this->subscriber, $this->segments);
@ -42,21 +48,21 @@ class NewSubscriberNotificationMailerTest extends \MailPoetTest {
function testItDoesNotSendIfSettingsDoesNotHaveAddress() { function testItDoesNotSendIfSettingsDoesNotHaveAddress() {
Setting::setValue(NewSubscriberNotificationMailer::SETTINGS_KEY, ['enabled' => false]); $this->settings->set(NewSubscriberNotificationMailer::SETTINGS_KEY, ['enabled' => false]);
$mailer = Stub::makeEmpty(Mailer::class, ['getSenderNameAndAddress' => Expected::never()], $this); $mailer = Stub::makeEmpty(Mailer::class, ['getSenderNameAndAddress' => Expected::never()], $this);
$service = new NewSubscriberNotificationMailer($mailer); $service = new NewSubscriberNotificationMailer($mailer);
$service->send($this->subscriber, $this->segments); $service->send($this->subscriber, $this->segments);
} }
function testItDoesNotSendIfDisabled() { function testItDoesNotSendIfDisabled() {
Setting::setValue(NewSubscriberNotificationMailer::SETTINGS_KEY, ['enabled' => false, 'address' => 'a@b.c']); $this->settings->set(NewSubscriberNotificationMailer::SETTINGS_KEY, ['enabled' => false, 'address' => 'a@b.c']);
$mailer = Stub::makeEmpty(Mailer::class, ['getSenderNameAndAddress' => Expected::never()], $this); $mailer = Stub::makeEmpty(Mailer::class, ['getSenderNameAndAddress' => Expected::never()], $this);
$service = new NewSubscriberNotificationMailer($mailer); $service = new NewSubscriberNotificationMailer($mailer);
$service->send($this->subscriber, $this->segments); $service->send($this->subscriber, $this->segments);
} }
function testItSends() { function testItSends() {
Setting::setValue(NewSubscriberNotificationMailer::SETTINGS_KEY, ['enabled' => true, 'address' => 'a@b.c']); $this->settings->set(NewSubscriberNotificationMailer::SETTINGS_KEY, ['enabled' => true, 'address' => 'a@b.c']);
$mailer = Stub::makeEmpty(Mailer::class, [ $mailer = Stub::makeEmpty(Mailer::class, [
'getSenderNameAndAddress' => 'getSenderNameAndAddress' =>
@ -85,7 +91,9 @@ class NewSubscriberNotificationMailerTest extends \MailPoetTest {
} }
function testItRemovesWwwFromSenderAddress() { function testItRemovesWwwFromSenderAddress() {
Setting::setValue(NewSubscriberNotificationMailer::SETTINGS_KEY, ['enabled' => true,'address' => 'a@b.c']); $this->settings->set(NewSubscriberNotificationMailer::SETTINGS_KEY, ['enabled' => true,'address' => 'a@b.c']);
$home_backup = \MailPoet\WP\get_option('home');
update_option( 'home', 'http://www.example.com/xyz' );
$mailer = Stub::makeEmpty(Mailer::class, [ $mailer = Stub::makeEmpty(Mailer::class, [
'getSenderNameAndAddress' => 'getSenderNameAndAddress' =>
@ -105,5 +113,10 @@ class NewSubscriberNotificationMailerTest extends \MailPoetTest {
$service = new NewSubscriberNotificationMailer($mailer, null, $functions); $service = new NewSubscriberNotificationMailer($mailer, null, $functions);
$service->send($this->subscriber, $this->segments); $service->send($this->subscriber, $this->segments);
update_option('home', $home_backup);
}
function _after() {
\ORM::raw_execute('TRUNCATE ' . Setting::$_table);
} }
} }

View File

@ -9,7 +9,9 @@ use MailPoet\Models\Segment as SegmentModel;
use MailPoet\Models\Setting as SettingModel; use MailPoet\Models\Setting as SettingModel;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber as SubscriberModel; use MailPoet\Models\Subscriber as SubscriberModel;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscription\Form; use MailPoet\Subscription\Form;
use MailPoet\Test\Cron\Workers\SendingErrorHandlerTest;
use MailPoet\Util\Security; use MailPoet\Util\Security;
class FormTest extends \MailPoetTest { class FormTest extends \MailPoetTest {
@ -19,7 +21,8 @@ class FormTest extends \MailPoetTest {
function _before() { function _before() {
parent::_before(); parent::_before();
Setting::setValue('sender', array( $settings = new SettingsController();
$settings->set('sender', array(
'name' => 'John Doe', 'name' => 'John Doe',
'address' => 'john.doe@example.com' 'address' => 'john.doe@example.com'
)); ));