Display personalization tags properly in listings
[MAILPOET-6385]
This commit is contained in:
@ -113,6 +113,28 @@ class NewslettersResponseBuilder {
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function processPersonalizationTags(string $content): string {
|
||||||
|
if (strpos($content, '<!--') === false) {
|
||||||
|
// we don't need to parse anything if there are no personalization tags
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
if (!class_exists('\MailPoet\EmailEditor\Engine\PersonalizationTags\HTML_Tag_Processor')) {
|
||||||
|
// editor is not active, we cannot process personalization tags
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
$content_processor = new \MailPoet\EmailEditor\Engine\PersonalizationTags\HTML_Tag_Processor($content);
|
||||||
|
while ($content_processor->next_token()) {
|
||||||
|
$type = $content_processor->get_token_type();
|
||||||
|
if ($type === '#comment') {
|
||||||
|
$token = $content_processor->get_modifiable_text();
|
||||||
|
$content_processor->replace_token($token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$content_processor->flush_updates();
|
||||||
|
return $content_processor->get_updated_html();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param NewsletterEntity[] $newsletters
|
* @param NewsletterEntity[] $newsletters
|
||||||
* @return mixed[]
|
* @return mixed[]
|
||||||
@ -138,7 +160,7 @@ class NewslettersResponseBuilder {
|
|||||||
$data = [
|
$data = [
|
||||||
'id' => (string)$newsletter->getId(), // (string) for BC
|
'id' => (string)$newsletter->getId(), // (string) for BC
|
||||||
'hash' => $newsletter->getHash(),
|
'hash' => $newsletter->getHash(),
|
||||||
'subject' => $newsletter->getSubject(),
|
'subject' => $this->processPersonalizationTags($newsletter->getSubject()),
|
||||||
'type' => $newsletter->getType(),
|
'type' => $newsletter->getType(),
|
||||||
'status' => $newsletter->getStatus(),
|
'status' => $newsletter->getStatus(),
|
||||||
'sent_at' => ($sentAt = $newsletter->getSentAt()) ? $sentAt->format(self::DATE_FORMAT) : null,
|
'sent_at' => ($sentAt = $newsletter->getSentAt()) ? $sentAt->format(self::DATE_FORMAT) : null,
|
||||||
|
@ -57,4 +57,22 @@ class NewslettersResponseBuilderTest extends \MailPoetTest {
|
|||||||
$em->remove($newsletter);
|
$em->remove($newsletter);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testItReplacesPersonalizationTags() {
|
||||||
|
$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->flush();
|
||||||
|
|
||||||
|
$newsletter->setSubject('Subject');
|
||||||
|
$response = $responseBuilder->buildForListing([$newsletter]);
|
||||||
|
verify($response[0]['subject'])->equals('Subject');
|
||||||
|
|
||||||
|
$newsletter->setSubject('Hello <!--[mailpoet/subscriber-firstname default="subscriber"]-->!');
|
||||||
|
$response = $responseBuilder->buildForListing([$newsletter]);
|
||||||
|
verify($response[0]['subject'])->equals('Hello [mailpoet/subscriber-firstname default="subscriber"]!');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user