Use Doctrine to re-check authorized emails on save

[MAILPOET-2900]
This commit is contained in:
Jan Jakeš
2020-05-13 13:35:44 +02:00
committed by Veljko V
parent 57b5d0c3c0
commit 8fe3870608
3 changed files with 9 additions and 12 deletions

View File

@ -102,17 +102,13 @@ class NewsletterSaveController {
} }
} }
$oldNewsletterModel = null;
if (isset($data['id'])) {
$fetched = Newsletter::findOne(intval($data['id']));
$oldNewsletterModel = $fetched instanceof Newsletter ? $fetched : null;
}
if (!empty($data['body'])) { if (!empty($data['body'])) {
$data['body'] = $this->emoji->encodeForUTF8Column(MP_NEWSLETTERS_TABLE, 'body', $data['body']); $data['body'] = $this->emoji->encodeForUTF8Column(MP_NEWSLETTERS_TABLE, 'body', $data['body']);
} }
$newsletter = $this->getNewsletter($data); $newsletter = $this->getNewsletter($data);
$oldSenderAddress = $newsletter->getSenderAddress();
$this->updateNewsletter($newsletter, $data); $this->updateNewsletter($newsletter, $data);
$this->updateSegments($newsletter, $data['segments'] ?? []); $this->updateSegments($newsletter, $data['segments'] ?? []);
$this->updateOptions($newsletter, $data['options'] ?? []); $this->updateOptions($newsletter, $data['options'] ?? []);
@ -135,7 +131,7 @@ class NewsletterSaveController {
$this->updateQueue($newsletter, $newsletterModel, $data['options'] ?? []); $this->updateQueue($newsletter, $newsletterModel, $data['options'] ?? []);
$this->wp->doAction('mailpoet_api_newsletters_save_after', $newsletterModel); $this->wp->doAction('mailpoet_api_newsletters_save_after', $newsletterModel);
$this->authorizedEmailsController->onNewsletterUpdate($newsletterModel, $oldNewsletterModel); $this->authorizedEmailsController->onNewsletterSenderAddressUpdate($newsletter, $oldSenderAddress);
$previewUrl = NewsletterUrl::getViewInBrowserUrl($newsletterModel); $previewUrl = NewsletterUrl::getViewInBrowserUrl($newsletterModel);
return [$newsletterModel->asArray(), ['preview_url' => $previewUrl]]; return [$newsletterModel->asArray(), ['preview_url' => $previewUrl]];

View File

@ -2,6 +2,7 @@
namespace MailPoet\Services; namespace MailPoet\Services;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Mailer\Mailer; use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\MailerError; use MailPoet\Mailer\MailerError;
use MailPoet\Mailer\MailerLog; use MailPoet\Mailer\MailerLog;
@ -86,14 +87,14 @@ class AuthorizedEmailsController {
} }
} }
public function onNewsletterUpdate(Newsletter $newsletter, Newsletter $oldNewsletter = null) { public function onNewsletterSenderAddressUpdate(NewsletterEntity $newsletter, string $oldSenderAddress = null) {
if ($oldNewsletter === null || $newsletter->senderAddress === $oldNewsletter->senderAddress) { if ($newsletter->getSenderAddress() === $oldSenderAddress) {
return; return;
} }
if ($newsletter->type === Newsletter::TYPE_STANDARD && $newsletter->status === Newsletter::STATUS_SCHEDULED) { if ($newsletter->getType() === NewsletterEntity::TYPE_STANDARD && $newsletter->getStatus() === NewsletterEntity::STATUS_SCHEDULED) {
$this->checkAuthorizedEmailAddresses(); $this->checkAuthorizedEmailAddresses();
} }
if (in_array($newsletter->type, $this->automaticEmailTypes, true) && $newsletter->status === Newsletter::STATUS_ACTIVE) { if (in_array($newsletter->getType(), $this->automaticEmailTypes, true) && $newsletter->getStatus() === Newsletter::STATUS_ACTIVE) {
$this->checkAuthorizedEmailAddresses(); $this->checkAuthorizedEmailAddresses();
} }
} }

View File

@ -197,7 +197,7 @@ class NewslettersTest extends \MailPoetTest {
$this->endpoint = $this->createNewslettersEndpointWithMocks([ $this->endpoint = $this->createNewslettersEndpointWithMocks([
'wp' => $wp, 'wp' => $wp,
'cronHelper' => $this->cronHelper, 'cronHelper' => $this->cronHelper,
'authorizedEmailsController' => $this->make(AuthorizedEmailsController::class, ['onNewsletterUpdate' => Expected::once()]), 'authorizedEmailsController' => $this->make(AuthorizedEmailsController::class, ['onNewsletterSenderAddressUpdate' => Expected::once()]),
'emoji' => $emoji, 'emoji' => $emoji,
'subscribersFeature' => Stub::make(SubscribersFeature::class), 'subscribersFeature' => Stub::make(SubscribersFeature::class),
]); ]);