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'])) {
$data['body'] = $this->emoji->encodeForUTF8Column(MP_NEWSLETTERS_TABLE, 'body', $data['body']);
}
$newsletter = $this->getNewsletter($data);
$oldSenderAddress = $newsletter->getSenderAddress();
$this->updateNewsletter($newsletter, $data);
$this->updateSegments($newsletter, $data['segments'] ?? []);
$this->updateOptions($newsletter, $data['options'] ?? []);
@ -135,7 +131,7 @@ class NewsletterSaveController {
$this->updateQueue($newsletter, $newsletterModel, $data['options'] ?? []);
$this->wp->doAction('mailpoet_api_newsletters_save_after', $newsletterModel);
$this->authorizedEmailsController->onNewsletterUpdate($newsletterModel, $oldNewsletterModel);
$this->authorizedEmailsController->onNewsletterSenderAddressUpdate($newsletter, $oldSenderAddress);
$previewUrl = NewsletterUrl::getViewInBrowserUrl($newsletterModel);
return [$newsletterModel->asArray(), ['preview_url' => $previewUrl]];

View File

@ -2,6 +2,7 @@
namespace MailPoet\Services;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\MailerError;
use MailPoet\Mailer\MailerLog;
@ -86,14 +87,14 @@ class AuthorizedEmailsController {
}
}
public function onNewsletterUpdate(Newsletter $newsletter, Newsletter $oldNewsletter = null) {
if ($oldNewsletter === null || $newsletter->senderAddress === $oldNewsletter->senderAddress) {
public function onNewsletterSenderAddressUpdate(NewsletterEntity $newsletter, string $oldSenderAddress = null) {
if ($newsletter->getSenderAddress() === $oldSenderAddress) {
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();
}
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();
}
}

View File

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