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

@@ -76,7 +76,7 @@ class NewsletterSaveController {
/*** @var NewsletterCoupon */ /*** @var NewsletterCoupon */
private $newsletterCoupon; private $newsletterCoupon;
public function __construct( public function __construct(
AuthorizedEmailsController $authorizedEmailsController, AuthorizedEmailsController $authorizedEmailsController,
Emoji $emoji, Emoji $emoji,
@@ -194,6 +194,16 @@ class NewsletterSaveController {
$this->newslettersRepository->persist($duplicate); $this->newslettersRepository->persist($duplicate);
$this->newslettersRepository->flush(); $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 // create relationships between duplicate and segments
foreach ($newsletter->getNewsletterSegments() as $newsletterSegment) { foreach ($newsletter->getNewsletterSegments() as $newsletterSegment) {
$segment = $newsletterSegment->getSegment(); $segment = $newsletterSegment->getSegment();

View File

@@ -15,6 +15,7 @@ use MailPoet\Newsletter\Scheduler\Scheduler;
use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Carbon\Carbon;
class NewsletterSaveControllerTest extends \MailPoetTest { class NewsletterSaveControllerTest extends \MailPoetTest {
@@ -314,6 +315,18 @@ class NewsletterSaveControllerTest extends \MailPoetTest {
expect($duplicate->getStatus())->equals(NewsletterEntity::STATUS_DRAFT); 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() { public function testItCreatesNewNewsletter() {
$data = [ $data = [
'subject' => 'My First Newsletter', 'subject' => 'My First Newsletter',