Add processing of shortcode in subject in archive page
[MAILPOET-3965]
This commit is contained in:
committed by
Veljko V
parent
fac560071a
commit
1630da0917
@@ -8,6 +8,7 @@ use MailPoet\Entities\SubscriberEntity;
|
|||||||
use MailPoet\Form\Widget;
|
use MailPoet\Form\Widget;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Newsletter\NewslettersRepository;
|
use MailPoet\Newsletter\NewslettersRepository;
|
||||||
|
use MailPoet\Newsletter\Shortcodes\Shortcodes as NewsletterShortcodes;
|
||||||
use MailPoet\Newsletter\Url as NewsletterUrl;
|
use MailPoet\Newsletter\Url as NewsletterUrl;
|
||||||
use MailPoet\Segments\SegmentSubscribersRepository;
|
use MailPoet\Segments\SegmentSubscribersRepository;
|
||||||
use MailPoet\Subscribers\SubscribersRepository;
|
use MailPoet\Subscribers\SubscribersRepository;
|
||||||
@@ -33,12 +34,16 @@ class Shortcodes {
|
|||||||
/** @var NewslettersRepository */
|
/** @var NewslettersRepository */
|
||||||
private $newslettersRepository;
|
private $newslettersRepository;
|
||||||
|
|
||||||
|
/** @var NewsletterShortcodes */
|
||||||
|
private $shortcodeProcessor;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
Pages $subscriptionPages,
|
Pages $subscriptionPages,
|
||||||
WPFunctions $wp,
|
WPFunctions $wp,
|
||||||
SegmentSubscribersRepository $segmentSubscribersRepository,
|
SegmentSubscribersRepository $segmentSubscribersRepository,
|
||||||
SubscribersRepository $subscribersRepository,
|
SubscribersRepository $subscribersRepository,
|
||||||
NewsletterUrl $newsletterUrl,
|
NewsletterUrl $newsletterUrl,
|
||||||
|
NewsletterShortcodes $shortcodeProcessor,
|
||||||
NewslettersRepository $newslettersRepository
|
NewslettersRepository $newslettersRepository
|
||||||
) {
|
) {
|
||||||
$this->subscriptionPages = $subscriptionPages;
|
$this->subscriptionPages = $subscriptionPages;
|
||||||
@@ -46,6 +51,7 @@ class Shortcodes {
|
|||||||
$this->segmentSubscribersRepository = $segmentSubscribersRepository;
|
$this->segmentSubscribersRepository = $segmentSubscribersRepository;
|
||||||
$this->subscribersRepository = $subscribersRepository;
|
$this->subscribersRepository = $subscribersRepository;
|
||||||
$this->newsletterUrl = $newsletterUrl;
|
$this->newsletterUrl = $newsletterUrl;
|
||||||
|
$this->shortcodeProcessor = $shortcodeProcessor;
|
||||||
$this->newslettersRepository = $newslettersRepository;
|
$this->newslettersRepository = $newslettersRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,9 +193,12 @@ class Shortcodes {
|
|||||||
|
|
||||||
public function renderArchiveSubject(NewsletterEntity $newsletter, $subscriber, SendingQueueEntity $queue) {
|
public function renderArchiveSubject(NewsletterEntity $newsletter, $subscriber, SendingQueueEntity $queue) {
|
||||||
$previewUrl = $this->newsletterUrl->getViewInBrowserUrl($newsletter, $subscriber, $queue);
|
$previewUrl = $this->newsletterUrl->getViewInBrowserUrl($newsletter, $subscriber, $queue);
|
||||||
|
$this->shortcodeProcessor->setNewsletter($newsletter);
|
||||||
|
$this->shortcodeProcessor->setSubscriber(null);
|
||||||
|
$this->shortcodeProcessor->setQueue($queue);
|
||||||
return '<a href="' . esc_attr($previewUrl) . '" target="_blank" title="'
|
return '<a href="' . esc_attr($previewUrl) . '" target="_blank" title="'
|
||||||
. esc_attr(__('Preview in a new tab', 'mailpoet')) . '">'
|
. esc_attr(__('Preview in a new tab', 'mailpoet')) . '">'
|
||||||
. esc_attr((string)$queue->getNewsletterRenderedSubject()) .
|
. esc_attr((string)$this->shortcodeProcessor->replace($queue->getNewsletterRenderedSubject())) .
|
||||||
'</a>';
|
'</a>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
namespace MailPoet\Newsletter\Shortcodes\Categories;
|
namespace MailPoet\Newsletter\Shortcodes\Categories;
|
||||||
|
|
||||||
@@ -12,6 +12,8 @@ use MailPoet\WP\Functions as WPFunctions;
|
|||||||
|
|
||||||
class Subscriber implements CategoryInterface {
|
class Subscriber implements CategoryInterface {
|
||||||
|
|
||||||
|
const DEFAULT_ALLOWED_ACTIONS = ['firstname', 'lastname', 'displayname'];
|
||||||
|
|
||||||
/** @var SubscribersRepository */
|
/** @var SubscribersRepository */
|
||||||
private $subscribersRepository;
|
private $subscribersRepository;
|
||||||
|
|
||||||
@@ -34,12 +36,22 @@ 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'] :
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
if (
|
||||||
|
!($subscriber instanceof SubscriberEntity)
|
||||||
|
&& $this->shouldReturnDefault((string)$shortcodeDetails['action'])
|
||||||
|
&& !empty($defaultValue)
|
||||||
|
) {
|
||||||
|
return $defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!($subscriber instanceof SubscriberEntity)) {
|
||||||
|
return $shortcodeDetails['shortcode'];
|
||||||
|
}
|
||||||
|
|
||||||
switch ($shortcodeDetails['action']) {
|
switch ($shortcodeDetails['action']) {
|
||||||
case 'firstname':
|
case 'firstname':
|
||||||
return (!empty($subscriber->getFirstName())) ? htmlspecialchars($subscriber->getFirstName()) : $defaultValue;
|
return (!empty($subscriber->getFirstName())) ? htmlspecialchars($subscriber->getFirstName()) : $defaultValue;
|
||||||
@@ -69,4 +81,8 @@ class Subscriber implements CategoryInterface {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function shouldReturnDefault(string $action): bool {
|
||||||
|
return in_array($action, self::DEFAULT_ALLOWED_ACTIONS, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -65,6 +65,26 @@ class ShortcodesTest extends \MailPoetTest {
|
|||||||
expect($requestData['newsletter_hash'])->equals($this->newsletter->hash);
|
expect($requestData['newsletter_hash'])->equals($this->newsletter->hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testItRendersShortcodeDefaultsInSubject() {
|
||||||
|
$shortcodes = ContainerWrapper::getInstance()->get(Shortcodes::class);
|
||||||
|
$this->queue->newsletterRenderedSubject = 'Hello [subscriber:firstname | default:reader]';
|
||||||
|
$this->queue->save();
|
||||||
|
WordPress::interceptFunction('apply_filters', function() use($shortcodes) {
|
||||||
|
$args = func_get_args();
|
||||||
|
$filterName = array_shift($args);
|
||||||
|
switch ($filterName) {
|
||||||
|
case 'mailpoet_archive_date':
|
||||||
|
return $shortcodes->renderArchiveDate($args[0]);
|
||||||
|
case 'mailpoet_archive_subject':
|
||||||
|
return $shortcodes->renderArchiveSubject($args[0], $args[1], $args[2]);
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
$result = $shortcodes->getArchive($params = false);
|
||||||
|
WordPress::releaseFunction('apply_filters');
|
||||||
|
expect((string)$result)->stringContainsString('Hello reader');
|
||||||
|
}
|
||||||
|
|
||||||
public function testItDisplaysManageSubscriptionFormForLoggedinExistingUsers() {
|
public function testItDisplaysManageSubscriptionFormForLoggedinExistingUsers() {
|
||||||
$wpUser = wp_set_current_user(1);
|
$wpUser = wp_set_current_user(1);
|
||||||
expect((new WPFunctions)->isUserLoggedIn())->true();
|
expect((new WPFunctions)->isUserLoggedIn())->true();
|
||||||
|
Reference in New Issue
Block a user