Refactor subscription form processing
[MAILPOET-1689]
This commit is contained in:
@ -3,9 +3,17 @@
|
|||||||
namespace MailPoet\Config;
|
namespace MailPoet\Config;
|
||||||
|
|
||||||
use MailPoet\Models\Setting;
|
use MailPoet\Models\Setting;
|
||||||
use MailPoet\WP\Posts as WPPosts;
|
use MailPoetVendor\Psr\Container\ContainerInterface;
|
||||||
|
|
||||||
class Hooks {
|
class Hooks {
|
||||||
|
|
||||||
|
/** @var ContainerInterface */
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
function __construct(ContainerInterface $container) {
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
$this->setupWPUsers();
|
$this->setupWPUsers();
|
||||||
$this->setupImageSize();
|
$this->setupImageSize();
|
||||||
@ -93,11 +101,11 @@ class Hooks {
|
|||||||
// Subscription form
|
// Subscription form
|
||||||
add_action(
|
add_action(
|
||||||
'admin_post_mailpoet_subscription_form',
|
'admin_post_mailpoet_subscription_form',
|
||||||
'\MailPoet\Subscription\Form::onSubmit'
|
[$this, 'subscriptionFormOnSubmit']
|
||||||
);
|
);
|
||||||
add_action(
|
add_action(
|
||||||
'admin_post_nopriv_mailpoet_subscription_form',
|
'admin_post_nopriv_mailpoet_subscription_form',
|
||||||
'\MailPoet\Subscription\Form::onSubmit'
|
[$this, 'subscriptionFormOnSubmit']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,4 +181,9 @@ class Hooks {
|
|||||||
10, 3
|
10, 3
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Callbacks
|
||||||
|
function subscriptionFormOnSubmit($data = false) {
|
||||||
|
$this->container->get(\MailPoet\Subscription\Form::class)->onSubmit($data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -282,8 +282,7 @@ class Initializer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setupHooks() {
|
function setupHooks() {
|
||||||
$hooks = new Hooks();
|
$this->container->get(\MailPoet\Config\Hooks::class)->init();
|
||||||
$hooks->init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupPrivacyPolicy() {
|
function setupPrivacyPolicy() {
|
||||||
|
@ -50,6 +50,10 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\API\JSON\v1\Subscribers::class)->setPublic(true);
|
$container->autowire(\MailPoet\API\JSON\v1\Subscribers::class)->setPublic(true);
|
||||||
// Config
|
// Config
|
||||||
$container->autowire(\MailPoet\Config\AccessControl::class)->setPublic(true);
|
$container->autowire(\MailPoet\Config\AccessControl::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Config\Hooks::class)
|
||||||
|
->addArgument(new Reference(ContainerWrapper::class))
|
||||||
|
->setPublic(true);
|
||||||
|
|
||||||
// Cron
|
// Cron
|
||||||
$container->autowire(\MailPoet\Cron\Daemon::class)->setPublic(true);
|
$container->autowire(\MailPoet\Cron\Daemon::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Cron\DaemonHttpRunner::class)->setPublic(true);
|
$container->autowire(\MailPoet\Cron\DaemonHttpRunner::class)->setPublic(true);
|
||||||
@ -62,6 +66,8 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\Subscribers\NewSubscriberNotificationMailer::class)->setPublic(true);
|
$container->autowire(\MailPoet\Subscribers\NewSubscriberNotificationMailer::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Subscribers\ConfirmationEmailMailer::class)->setPublic(true);
|
$container->autowire(\MailPoet\Subscribers\ConfirmationEmailMailer::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Subscribers\RequiredCustomFieldValidator::class)->setPublic(true);
|
$container->autowire(\MailPoet\Subscribers\RequiredCustomFieldValidator::class)->setPublic(true);
|
||||||
|
// Subscription
|
||||||
|
$container->autowire(\MailPoet\Subscription\Form::class)->setPublic(true);
|
||||||
// Newsletter
|
// Newsletter
|
||||||
$container->autowire(\MailPoet\Newsletter\AutomatedLatestContent::class)->setPublic(true);
|
$container->autowire(\MailPoet\Newsletter\AutomatedLatestContent::class)->setPublic(true);
|
||||||
return $container;
|
return $container;
|
||||||
|
@ -2,17 +2,24 @@
|
|||||||
|
|
||||||
namespace MailPoet\Subscription;
|
namespace MailPoet\Subscription;
|
||||||
|
|
||||||
use MailPoet\API\API as API;
|
use MailPoet\API\JSON\API;
|
||||||
use MailPoet\API\JSON\Response as APIResponse;
|
use MailPoet\API\JSON\Response as APIResponse;
|
||||||
use MailPoet\Util\Url as UrlHelper;
|
use MailPoet\Util\Url as UrlHelper;
|
||||||
|
|
||||||
class Form {
|
class Form {
|
||||||
static function onSubmit($request_data = false) {
|
|
||||||
|
/** @var API */
|
||||||
|
private $api;
|
||||||
|
|
||||||
|
function __construct(API $api) {
|
||||||
|
$this->api = $api;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onSubmit($request_data = false) {
|
||||||
$request_data = ($request_data) ? $request_data : $_REQUEST;
|
$request_data = ($request_data) ? $request_data : $_REQUEST;
|
||||||
$api = API::JSON();
|
$this->api->setRequestData($request_data);
|
||||||
$api->setRequestData($request_data);
|
|
||||||
$form_id = (!empty($request_data['data']['form_id'])) ? (int)$request_data['data']['form_id'] : false;
|
$form_id = (!empty($request_data['data']['form_id'])) ? (int)$request_data['data']['form_id'] : false;
|
||||||
$response = $api->processRoute();
|
$response = $this->api->processRoute();
|
||||||
if($response->status !== APIResponse::STATUS_OK) {
|
if($response->status !== APIResponse::STATUS_OK) {
|
||||||
return UrlHelper::redirectBack(
|
return UrlHelper::redirectBack(
|
||||||
array(
|
array(
|
||||||
|
@ -2,11 +2,12 @@
|
|||||||
namespace MailPoet\Test\Config;
|
namespace MailPoet\Test\Config;
|
||||||
|
|
||||||
use MailPoet\Config\Hooks;
|
use MailPoet\Config\Hooks;
|
||||||
|
use MailPoet\DI\ContainerWrapper;
|
||||||
use MailPoet\WP\Posts as WPPosts;
|
use MailPoet\WP\Posts as WPPosts;
|
||||||
|
|
||||||
class HooksTest extends \MailPoetTest {
|
class HooksTest extends \MailPoetTest {
|
||||||
function testItHooksSchedulerToMultiplePostTypes() {
|
function testItHooksSchedulerToMultiplePostTypes() {
|
||||||
$hooks = new Hooks();
|
$hooks = new Hooks(ContainerWrapper::getInstance());
|
||||||
$hooks->setupPostNotifications();
|
$hooks->setupPostNotifications();
|
||||||
expect(has_filter('transition_post_status', '\MailPoet\Newsletter\Scheduler\Scheduler::transitionHook'))->notEmpty();
|
expect(has_filter('transition_post_status', '\MailPoet\Newsletter\Scheduler\Scheduler::transitionHook'))->notEmpty();
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ namespace MailPoet\Test\Newsletter\Scheduler;
|
|||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Codeception\Util\Fixtures;
|
use Codeception\Util\Fixtures;
|
||||||
use Mailpoet\Config\Hooks;
|
use Mailpoet\Config\Hooks;
|
||||||
|
use MailPoet\DI\ContainerWrapper;
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Models\NewsletterOption;
|
use MailPoet\Models\NewsletterOption;
|
||||||
use MailPoet\Models\NewsletterOptionField;
|
use MailPoet\Models\NewsletterOptionField;
|
||||||
@ -696,7 +697,7 @@ class SchedulerTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function testUnsearchablePostTypeDoesNotSchedulePostNotification() {
|
function testUnsearchablePostTypeDoesNotSchedulePostNotification() {
|
||||||
$hook = new Hooks;
|
$hook = new Hooks(ContainerWrapper::getInstance());
|
||||||
|
|
||||||
$newsletter = $this->_createNewsletter(Newsletter::TYPE_NOTIFICATION);
|
$newsletter = $this->_createNewsletter(Newsletter::TYPE_NOTIFICATION);
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
namespace MailPoet\Test\Subscription;
|
namespace MailPoet\Test\Subscription;
|
||||||
|
|
||||||
use AspectMock\Test as Mock;
|
use AspectMock\Test as Mock;
|
||||||
|
use MailPoet\DI\ContainerWrapper;
|
||||||
use MailPoet\Form\Util\FieldNameObfuscator;
|
use MailPoet\Form\Util\FieldNameObfuscator;
|
||||||
use MailPoet\Models\Form as FormModel;
|
use MailPoet\Models\Form as FormModel;
|
||||||
use MailPoet\Models\Segment as SegmentModel;
|
use MailPoet\Models\Segment as SegmentModel;
|
||||||
@ -12,6 +13,10 @@ use MailPoet\Subscription\Form;
|
|||||||
use MailPoet\Util\Security;
|
use MailPoet\Util\Security;
|
||||||
|
|
||||||
class FormTest extends \MailPoetTest {
|
class FormTest extends \MailPoetTest {
|
||||||
|
|
||||||
|
/** @var Form */
|
||||||
|
private $form_controller;
|
||||||
|
|
||||||
function _before() {
|
function _before() {
|
||||||
Setting::setValue('sender', array(
|
Setting::setValue('sender', array(
|
||||||
'name' => 'John Doe',
|
'name' => 'John Doe',
|
||||||
@ -58,6 +63,7 @@ class FormTest extends \MailPoetTest {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
SettingModel::setValue('signup_confirmation.enabled', false);
|
SettingModel::setValue('signup_confirmation.enabled', false);
|
||||||
|
$this->form_controller = ContainerWrapper::getInstance()->get(Form::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItSubscribesAndRedirectsBackWithSuccessResponse() {
|
function testItSubscribesAndRedirectsBackWithSuccessResponse() {
|
||||||
@ -66,7 +72,7 @@ class FormTest extends \MailPoetTest {
|
|||||||
return $params;
|
return $params;
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
$result = Form::onSubmit($this->request_data);
|
$result = $this->form_controller->onSubmit($this->request_data);
|
||||||
expect(SubscriberModel::findOne($this->testEmail))->notEmpty();
|
expect(SubscriberModel::findOne($this->testEmail))->notEmpty();
|
||||||
$mock->verifyInvoked('redirectBack');
|
$mock->verifyInvoked('redirectBack');
|
||||||
expect($result['mailpoet_success'])->equals($this->form->id);
|
expect($result['mailpoet_success'])->equals($this->form->id);
|
||||||
@ -89,7 +95,7 @@ class FormTest extends \MailPoetTest {
|
|||||||
return $params;
|
return $params;
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
$result = Form::onSubmit($this->request_data);
|
$result = $this->form_controller->onSubmit($this->request_data);
|
||||||
expect(SubscriberModel::findOne($this->testEmail))->notEmpty();
|
expect(SubscriberModel::findOne($this->testEmail))->notEmpty();
|
||||||
$mock->verifyInvoked('redirectTo');
|
$mock->verifyInvoked('redirectTo');
|
||||||
expect($result)->regExp('/http.*?sample-post/i');
|
expect($result)->regExp('/http.*?sample-post/i');
|
||||||
@ -104,7 +110,7 @@ class FormTest extends \MailPoetTest {
|
|||||||
return $params;
|
return $params;
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
$result = Form::onSubmit($request_data);
|
$result = $this->form_controller->onSubmit($request_data);
|
||||||
expect(SubscriberModel::findMany())->isEmpty();
|
expect(SubscriberModel::findMany())->isEmpty();
|
||||||
$mock->verifyInvoked('redirectBack');
|
$mock->verifyInvoked('redirectBack');
|
||||||
expect($result['mailpoet_error'])->equals($this->form->id);
|
expect($result['mailpoet_error'])->equals($this->form->id);
|
||||||
|
Reference in New Issue
Block a user