Process personalization tags in rendered subject

[MAILPOET-6385]
This commit is contained in:
Pavel Dohnal
2024-12-19 07:32:57 +01:00
committed by Aschepikov
parent 9ae0f6a0fa
commit 1ebfa4116c
2 changed files with 26 additions and 2 deletions

View File

@@ -113,7 +113,10 @@ class NewslettersResponseBuilder {
return $data; return $data;
} }
private function processPersonalizationTags(string $content): string { private function processPersonalizationTags(?string $content): ?string {
if (is_null($content) || strlen($content) === 0) {
return $content;
}
if (strpos($content, '<!--') === false) { if (strpos($content, '<!--') === false) {
// we don't need to parse anything if there are no personalization tags // we don't need to parse anything if there are no personalization tags
return $content; return $content;
@@ -278,7 +281,7 @@ class NewslettersResponseBuilder {
'meta' => $queue->getMeta(), 'meta' => $queue->getMeta(),
'task_id' => (string)$task->getId(), // (string) for BC 'task_id' => (string)$task->getId(), // (string) for BC
'newsletter_id' => ($newsletter = $queue->getNewsletter()) ? (string)$newsletter->getId() : null, // (string) for BC 'newsletter_id' => ($newsletter = $queue->getNewsletter()) ? (string)$newsletter->getId() : null, // (string) for BC
'newsletter_rendered_subject' => $queue->getNewsletterRenderedSubject(), 'newsletter_rendered_subject' => $this->processPersonalizationTags($queue->getNewsletterRenderedSubject()),
'count_total' => (string)$queue->getCountTotal(), // (string) for BC 'count_total' => (string)$queue->getCountTotal(), // (string) for BC
'count_processed' => (string)$queue->getCountProcessed(), // (string) for BC 'count_processed' => (string)$queue->getCountProcessed(), // (string) for BC
'count_to_process' => (string)$queue->getCountToProcess(), // (string) for BC 'count_to_process' => (string)$queue->getCountToProcess(), // (string) for BC

View File

@@ -5,6 +5,8 @@ namespace MailPoet\API\JSON\ResponseBuilders;
use Codeception\Util\Stub; use Codeception\Util\Stub;
use MailPoet\DI\ContainerWrapper; use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Logging\LogRepository; use MailPoet\Logging\LogRepository;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Newsletter\Sending\SendingQueuesRepository;
@@ -75,4 +77,23 @@ class NewslettersResponseBuilderTest extends \MailPoetTest {
$response = $responseBuilder->buildForListing([$newsletter]); $response = $responseBuilder->buildForListing([$newsletter]);
verify($response[0]['subject'])->equals('Hello [mailpoet/subscriber-firstname default="subscriber"]!'); verify($response[0]['subject'])->equals('Hello [mailpoet/subscriber-firstname default="subscriber"]!');
} }
public function testItReplacesPersonalizationTagsInSentEmail() {
$em = $this->diContainer->get(EntityManager::class);
$responseBuilder = $this->diContainer->get(NewslettersResponseBuilder::class);
$em->persist($newsletter = new NewsletterEntity);
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
$newsletter->setStatus(NewsletterEntity::STATUS_SENT);
$newsletter->setSubject('Subject');
$em->persist($task = new ScheduledTaskEntity());
$em->persist($queue = new SendingQueueEntity());
$queue->setNewsletter($newsletter);
$queue->setTask($task);
$queue->setNewsletterRenderedSubject('Hello <!--[mailpoet/subscriber-firstname default="subscriber"]-->!');
$em->flush();
$response = $responseBuilder->buildForListing([$newsletter]);
/** @var string[] $renderedQueue */
$renderedQueue = $response[0]['queue'];
verify($renderedQueue['newsletter_rendered_subject'])->equals('Hello [mailpoet/subscriber-firstname default="subscriber"]!');
}
} }