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:
committed by
Aschepikov
parent
d5ecfc58e0
commit
ee9ee7c491
@@ -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();
|
||||
}
|
||||
}
|
||||
|
@@ -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', [
|
||||
|
Reference in New Issue
Block a user