diff --git a/mailpoet/lib/Newsletter/NewsletterSaveController.php b/mailpoet/lib/Newsletter/NewsletterSaveController.php index 4fc3b33ded..71a33179d0 100644 --- a/mailpoet/lib/Newsletter/NewsletterSaveController.php +++ b/mailpoet/lib/Newsletter/NewsletterSaveController.php @@ -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(); + } } diff --git a/mailpoet/tests/integration/Newsletter/NewsletterSaveControllerTest.php b/mailpoet/tests/integration/Newsletter/NewsletterSaveControllerTest.php index be4b144f1e..17a6596133 100644 --- a/mailpoet/tests/integration/Newsletter/NewsletterSaveControllerTest.php +++ b/mailpoet/tests/integration/Newsletter/NewsletterSaveControllerTest.php @@ -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', [