Duplicate associated post when duplicating newsletter

[MAILPOET-5365]
This commit is contained in:
Rostislav Wolny
2023-06-19 16:21:15 +02:00
committed by Aschepikov
parent 3ff4ba0c86
commit 61d6e41fc7
2 changed files with 24 additions and 1 deletions

View File

@@ -194,6 +194,16 @@ class NewsletterSaveController {
$this->newslettersRepository->persist($duplicate);
$this->newslettersRepository->flush();
// duplicate wp post data
$post = $this->wp->getPost($newsletter->getWpPostId());
if ($post instanceof \WP_Post) {
$newPostId = $this->wp->wpInsertPost([
'post_content' => $post->post_content, // @phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
'post_type' => $post->post_type, // @phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
]);
$duplicate->setWpPostId($newPostId);
}
// create relationships between duplicate and segments
foreach ($newsletter->getNewsletterSegments() as $newsletterSegment) {
$segment = $newsletterSegment->getSegment();

View File

@@ -15,6 +15,7 @@ use MailPoet\Newsletter\Scheduler\Scheduler;
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Settings\SettingsController;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon;
class NewsletterSaveControllerTest extends \MailPoetTest {
@@ -314,6 +315,18 @@ class NewsletterSaveControllerTest extends \MailPoetTest {
expect($duplicate->getStatus())->equals(NewsletterEntity::STATUS_DRAFT);
}
public function testItDuplicatesNewsletterWithAssociatedPost() {
$newsletter = $this->createNewsletter(NewsletterEntity::TYPE_STANDARD, NewsletterEntity::STATUS_SENT);
$wp = $this->diContainer->get(WPFunctions::class);
$postId = $wp->wpInsertPost(['post_content' => 'newsletter content']);
$newsletter->setWpPostId($postId);
$this->entityManager->flush();
$duplicate = $this->saveController->duplicate($newsletter);
expect($duplicate->getWpPostId())->notEquals($postId);
$post = $wp->getPost($duplicate->getWpPostId());
expect($post->post_content)->equals('newsletter content'); // @phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
}
public function testItCreatesNewNewsletter() {
$data = [
'subject' => 'My First Newsletter',