Check authorized emails on newsletter update
[MAILPOET-2022]
This commit is contained in:
committed by
M. Shull
parent
61c3630add
commit
a1869a14cb
@ -21,6 +21,7 @@ use MailPoet\Models\Subscriber;
|
||||
use MailPoet\Newsletter\Renderer\Renderer;
|
||||
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||
use MailPoet\Newsletter\Url as NewsletterUrl;
|
||||
use MailPoet\Services\AuthorizedEmailsController;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoet\WooCommerce\Helper as WCHelper;
|
||||
@ -47,6 +48,9 @@ class Newsletters extends APIEndpoint {
|
||||
/** @var FeaturesController */
|
||||
private $features_controller;
|
||||
|
||||
/** @var AuthorizedEmailsController */
|
||||
private $authorized_emails_controller;
|
||||
|
||||
public $permissions = [
|
||||
'global' => AccessControl::PERMISSION_MANAGE_EMAILS,
|
||||
];
|
||||
@ -57,7 +61,8 @@ class Newsletters extends APIEndpoint {
|
||||
WPFunctions $wp,
|
||||
WCHelper $woocommerce_helper,
|
||||
SettingsController $settings,
|
||||
FeaturesController $features_controller
|
||||
FeaturesController $features_controller,
|
||||
AuthorizedEmailsController $authorized_emails_controller
|
||||
) {
|
||||
$this->bulk_action = $bulk_action;
|
||||
$this->listing_handler = $listing_handler;
|
||||
@ -65,6 +70,7 @@ class Newsletters extends APIEndpoint {
|
||||
$this->woocommerce_helper = $woocommerce_helper;
|
||||
$this->settings = $settings;
|
||||
$this->features_controller = $features_controller;
|
||||
$this->authorized_emails_controller = $authorized_emails_controller;
|
||||
}
|
||||
|
||||
function get($data = []) {
|
||||
@ -115,6 +121,11 @@ class Newsletters extends APIEndpoint {
|
||||
unset($data['template_id']);
|
||||
}
|
||||
|
||||
$old_newsletter = null;
|
||||
if (isset($data['id'])) {
|
||||
$old_newsletter = Newsletter::findOne(intval($data['id'])) ?: null;
|
||||
}
|
||||
|
||||
$newsletter = Newsletter::createOrUpdate($data);
|
||||
$errors = $newsletter->getErrors();
|
||||
|
||||
@ -190,6 +201,7 @@ class Newsletters extends APIEndpoint {
|
||||
}
|
||||
|
||||
$this->wp->doAction('mailpoet_api_newsletters_save_after', $newsletter);
|
||||
$this->authorized_emails_controller->onNewsletterUpdate($newsletter, $old_newsletter);
|
||||
|
||||
$preview_url = NewsletterUrl::getViewInBrowserUrl(
|
||||
NewsletterUrl::TYPE_LISTING_EDITOR,
|
||||
|
@ -14,11 +14,17 @@ class AuthorizedEmailsController {
|
||||
const AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING = 'authorized_emails_addresses_check';
|
||||
|
||||
/** @var Bridge */
|
||||
public $bridge;
|
||||
private $bridge;
|
||||
|
||||
/** @var SettingsController */
|
||||
private $settings;
|
||||
|
||||
private $automatic_email_types = [
|
||||
Newsletter::TYPE_WELCOME,
|
||||
Newsletter::TYPE_NOTIFICATION,
|
||||
Newsletter::TYPE_AUTOMATIC,
|
||||
];
|
||||
|
||||
function __construct(SettingsController $settingsController, Bridge $bridge) {
|
||||
$this->settings = $settingsController;
|
||||
$this->bridge = $bridge;
|
||||
@ -55,6 +61,18 @@ class AuthorizedEmailsController {
|
||||
}
|
||||
}
|
||||
|
||||
function onNewsletterUpdate(Newsletter $newsletter, Newsletter $old_newsletter = null) {
|
||||
if ($old_newsletter === null || $newsletter->sender_address === $old_newsletter->sender_address) {
|
||||
return;
|
||||
}
|
||||
if ($newsletter->type === Newsletter::TYPE_STANDARD && $newsletter->status === Newsletter::STATUS_SCHEDULED) {
|
||||
$this->checkAuthorizedEmailAddresses();
|
||||
}
|
||||
if (in_array($newsletter->type, $this->automatic_email_types, true) && $newsletter->status === Newsletter::STATUS_ACTIVE) {
|
||||
$this->checkAuthorizedEmailAddresses();
|
||||
}
|
||||
}
|
||||
|
||||
private function validateAddressesInSettings($authorized_emails, $result = []) {
|
||||
$default_sender_address = $this->settings->get('sender.address');
|
||||
$signup_confirmation_address = $this->settings->get('signup_confirmation.from.address');
|
||||
@ -74,7 +92,7 @@ class AuthorizedEmailsController {
|
||||
"(`type` = '%s' AND `status` = '%s') OR (`type` IN ('%s') AND `status` = '%s')",
|
||||
Newsletter::TYPE_STANDARD,
|
||||
Newsletter::STATUS_SCHEDULED,
|
||||
implode("', '", [ Newsletter::TYPE_WELCOME, Newsletter::TYPE_NOTIFICATION, Newsletter::TYPE_AUTOMATIC ]),
|
||||
implode("', '", $this->automatic_email_types),
|
||||
Newsletter::STATUS_ACTIVE
|
||||
);
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace MailPoet\Test\API\JSON\v1;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Codeception\Stub\Expected;
|
||||
use Codeception\Util\Fixtures;
|
||||
use Codeception\Util\Stub;
|
||||
use Helper\WordPressHooks as WPHooksHelper;
|
||||
@ -23,6 +24,7 @@ use MailPoet\Models\SendingQueue;
|
||||
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||
use MailPoet\Newsletter\Url;
|
||||
use MailPoet\Router\Router;
|
||||
use MailPoet\Services\AuthorizedEmailsController;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Subscription\Url as SubscriptionUrl;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
@ -125,7 +127,8 @@ class NewslettersTest extends \MailPoetTest {
|
||||
$wp,
|
||||
$this->makeEmpty(WCHelper::class),
|
||||
new SettingsController(),
|
||||
new FeaturesController()
|
||||
new FeaturesController(),
|
||||
$this->make(AuthorizedEmailsController::class, ['onNewsletterUpdate' => Expected::never()])
|
||||
);
|
||||
$response = $this->endpoint->get(['id' => $this->newsletter->id]);
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
@ -165,7 +168,8 @@ class NewslettersTest extends \MailPoetTest {
|
||||
$wp,
|
||||
$this->makeEmpty(WCHelper::class),
|
||||
new SettingsController(),
|
||||
new FeaturesController()
|
||||
new FeaturesController(),
|
||||
$this->make(AuthorizedEmailsController::class, ['onNewsletterUpdate' => Expected::once()])
|
||||
);
|
||||
|
||||
$response = $this->endpoint->save($valid_data);
|
||||
@ -532,7 +536,8 @@ class NewslettersTest extends \MailPoetTest {
|
||||
$wp,
|
||||
$this->makeEmpty(WCHelper::class),
|
||||
new SettingsController(),
|
||||
new FeaturesController()
|
||||
new FeaturesController(),
|
||||
$this->make(AuthorizedEmailsController::class, ['onNewsletterUpdate' => Expected::never()])
|
||||
);
|
||||
|
||||
$response = $this->endpoint->duplicate(['id' => $this->newsletter->id]);
|
||||
|
Reference in New Issue
Block a user