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();
}
}

View File

@@ -360,6 +360,30 @@ class NewsletterSaveControllerTest extends \MailPoetTest {
verify($newsletter->getId())->notNull();
}
public function testItCreatesNewNewsletterForBlockEditor() {
$wp = $this->diContainer->get(WPFunctions::class);
$data = [
'subject' => 'My First Newsletter',
'type' => NewsletterEntity::TYPE_STANDARD,
'new_editor' => true,
];
$newsletter = $this->saveController->save($data);
verify($newsletter->getSubject())->equals($data['subject']);
verify($newsletter->getType())->equals($data['type']);
verify($newsletter->getHash())->notNull();
verify($newsletter->getId())->notNull();
verify($newsletter->getWpPostId())->notNull();
$postEntity = $newsletter->getWpPost();
$this->assertInstanceOf(WpPostEntity::class, $postEntity);
verify($postEntity->getPostTitle())->equals('New Email');
$wpPost = $postEntity->getWpPostInstance();
$this->assertInstanceOf(\WP_Post::class, $wpPost);
verify($wpPost->post_content)->equals(''); // @phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
verify($wpPost->post_author)->equals($wp->getCurrentUserId()); // @phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
verify($wpPost->post_status)->equals('draft'); // @phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
}
public function testItCreatesNewsletterWithDefaultSender() {
$settings = $this->diContainer->get(SettingsController::class);
$settings->set('sender', [