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