Improve NewsletterSaveController::save to support new editor

The method is used in API for creating a new newsletter.
To be able to use the API for the new editor, we also need to
make sure that a WP Post is created.
For now, we can signal that the email is intended for a new editor
by adding a flag to the initial data.
[MAILPOET-5810]
This commit is contained in:
Rostislav Wolny
2024-01-10 16:45:32 +01:00
committed by Aschepikov
parent d5ecfc58e0
commit ee9ee7c491
2 changed files with 44 additions and 0 deletions

View File

@@ -3,6 +3,7 @@
namespace MailPoet\Newsletter;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterQueueTask;
use MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\NewsletterOptionEntity;
use MailPoet\Entities\NewsletterOptionFieldEntity;
@@ -151,6 +152,9 @@ class NewsletterSaveController {
$this->rescheduleIfNeeded($newsletter);
$this->updateQueue($newsletter, $data['options'] ?? []);
$this->authorizedEmailsController->onNewsletterSenderAddressUpdate($newsletter, $oldSenderAddress);
if (isset($data['new_editor']) && $data['new_editor']) {
$this->ensureWpPost($newsletter);
}
return $newsletter;
}
@@ -433,4 +437,20 @@ class NewsletterSaveController {
}
$this->entityManager->flush();
}
private function ensureWpPost(NewsletterEntity $newsletter): void {
if ($newsletter->getWpPostId()) {
return;
}
$newPostId = $this->wp->wpInsertPost([
'post_content' => '',
'post_type' => EmailEditor::MAILPOET_EMAIL_POST_TYPE,
'post_status' => 'draft',
'post_author' => $this->wp->getCurrentUserId(),
'post_title' => __('New Email', 'mailpoet'),
]);
$newsletter->setWpPost($this->entityManager->getReference(WpPostEntity::class, $newPostId));
$this->entityManager->flush();
}
}