Fix rendering shortcodes in subject

[MAILPOET-3333]
This commit is contained in:
Pavel Dohnal
2020-12-02 15:41:53 +01:00
committed by Veljko V
parent 3af2ffbbb4
commit 56d7cd1398
4 changed files with 22 additions and 8 deletions

View File

@ -32,18 +32,24 @@ class Shortcodes {
} }
if ($queue instanceof SendingQueueEntity) { if ($queue instanceof SendingQueueEntity) {
$shortcodes->setQueue($queue); $shortcodes->setQueue($queue);
} else {
$shortcodes->setQueue(null);
} }
if ($newsletter instanceof \MailPoet\Models\Newsletter && $newsletter->id) { if ($newsletter instanceof \MailPoet\Models\Newsletter && $newsletter->id) {
$newsletter = $newsletterRepository->findOneById($newsletter->id); $newsletter = $newsletterRepository->findOneById($newsletter->id);
} }
if ($newsletter instanceof NewsletterEntity) { if ($newsletter instanceof NewsletterEntity) {
$shortcodes->setNewsletter($newsletter); $shortcodes->setNewsletter($newsletter);
} else {
$shortcodes->setNewsletter(null);
} }
if ($subscriber instanceof Subscriber && $subscriber->id) { if ($subscriber instanceof Subscriber && $subscriber->id) {
$subscriber = $subscribersRepository->findOneById($subscriber->id); $subscriber = $subscribersRepository->findOneById($subscriber->id);
} }
if ($subscriber instanceof SubscriberEntity) { if ($subscriber instanceof SubscriberEntity) {
$shortcodes->setSubscriber($subscriber); $shortcodes->setSubscriber($subscriber);
} else {
$shortcodes->setSubscriber(null);
} }
return $shortcodes->replace($content, $contentSource); return $shortcodes->replace($content, $contentSource);
} }

View File

@ -34,18 +34,21 @@ class Subscriber implements CategoryInterface {
string $content = '', string $content = '',
bool $wpUserPreview = false bool $wpUserPreview = false
): ?string { ): ?string {
if (!($subscriber instanceof SubscriberEntity)) {
return $shortcodeDetails['shortcode'];
}
$defaultValue = ($shortcodeDetails['action_argument'] === 'default') ? $defaultValue = ($shortcodeDetails['action_argument'] === 'default') ?
$shortcodeDetails['action_argument_value'] : $shortcodeDetails['action_argument_value'] :
''; '';
switch ($shortcodeDetails['action']) { switch ($shortcodeDetails['action']) {
case 'firstname': case 'firstname':
return (($subscriber instanceof SubscriberEntity) && !empty($subscriber->getFirstName())) ? $subscriber->getFirstName() : $defaultValue; return (!empty($subscriber->getFirstName())) ? $subscriber->getFirstName() : $defaultValue;
case 'lastname': case 'lastname':
return (($subscriber instanceof SubscriberEntity) && !empty($subscriber->getLastName())) ? $subscriber->getLastName() : $defaultValue; return !empty($subscriber->getLastName()) ? $subscriber->getLastName() : $defaultValue;
case 'email': case 'email':
return ($subscriber instanceof SubscriberEntity) ? $subscriber->getEmail() : $defaultValue; return $subscriber->getEmail();
case 'displayname': case 'displayname':
if (($subscriber instanceof SubscriberEntity) && $subscriber->getWpUserId()) { if ($subscriber->getWpUserId()) {
$wpUser = WPFunctions::get()->getUserdata($subscriber->getWpUserId()); $wpUser = WPFunctions::get()->getUserdata($subscriber->getWpUserId());
return $wpUser->user_login; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps return $wpUser->user_login; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps
} }

View File

@ -49,7 +49,7 @@ class Shortcodes {
$this->subscriberCategory = $subscriberCategory; $this->subscriberCategory = $subscriberCategory;
} }
public function setNewsletter(NewsletterEntity $newsletter): void { public function setNewsletter(NewsletterEntity $newsletter = null): void {
$this->newsletter = $newsletter; $this->newsletter = $newsletter;
} }
@ -57,7 +57,7 @@ class Shortcodes {
$this->subscriber = $subscriber; $this->subscriber = $subscriber;
} }
public function setQueue(SendingQueueEntity $queue): void { public function setQueue(SendingQueueEntity $queue = null): void {
$this->queue = $queue; $this->queue = $queue;
} }

View File

@ -160,14 +160,19 @@ class ShortcodesTest extends \MailPoetTest {
} }
public function testSubscriberShortcodesRequireSubscriberObjectOrFalseValue() { public function testSubscriberShortcodesRequireSubscriberObjectOrFalseValue() {
// when subscriber is empty, default value is returned // when subscriber is empty, original value is returned
$this->shortcodesObject->setSubscriber(null); $this->shortcodesObject->setSubscriber(null);
$result = $this->shortcodesObject->process(['[subscriber:firstname | default:test]']); $result = $this->shortcodesObject->process(['[subscriber:firstname | default:test]']);
expect($result[0])->equals('test'); expect($result[0])->equals('[subscriber:firstname | default:test]');
// when subscriber is an object, proper value is returned // when subscriber is an object, proper value is returned
$this->shortcodesObject->setSubscriber($this->subscriber); $this->shortcodesObject->setSubscriber($this->subscriber);
$result = $this->shortcodesObject->process(['[subscriber:firstname | default:test]']); $result = $this->shortcodesObject->process(['[subscriber:firstname | default:test]']);
expect($result[0])->equals($this->subscriber->getFirstName()); expect($result[0])->equals($this->subscriber->getFirstName());
// when subscriber hasn't name, the default value is returned
$this->subscriber->setFirstName('');
$this->shortcodesObject->setSubscriber($this->subscriber);
$result = $this->shortcodesObject->process(['[subscriber:firstname | default:test]']);
expect($result[0])->equals('test');
} }
public function testSubscriberFirstAndLastNameShortcodesReturnDefaultValueWhenDataIsEmpty() { public function testSubscriberFirstAndLastNameShortcodesReturnDefaultValueWhenDataIsEmpty() {