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) {
$shortcodes->setQueue($queue);
} else {
$shortcodes->setQueue(null);
}
if ($newsletter instanceof \MailPoet\Models\Newsletter && $newsletter->id) {
$newsletter = $newsletterRepository->findOneById($newsletter->id);
}
if ($newsletter instanceof NewsletterEntity) {
$shortcodes->setNewsletter($newsletter);
} else {
$shortcodes->setNewsletter(null);
}
if ($subscriber instanceof Subscriber && $subscriber->id) {
$subscriber = $subscribersRepository->findOneById($subscriber->id);
}
if ($subscriber instanceof SubscriberEntity) {
$shortcodes->setSubscriber($subscriber);
} else {
$shortcodes->setSubscriber(null);
}
return $shortcodes->replace($content, $contentSource);
}

View File

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

View File

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

View File

@ -160,14 +160,19 @@ class ShortcodesTest extends \MailPoetTest {
}
public function testSubscriberShortcodesRequireSubscriberObjectOrFalseValue() {
// when subscriber is empty, default value is returned
// when subscriber is empty, original value is returned
$this->shortcodesObject->setSubscriber(null);
$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
$this->shortcodesObject->setSubscriber($this->subscriber);
$result = $this->shortcodesObject->process(['[subscriber:firstname | default:test]']);
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() {