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\Models\Subscriber;
|
||||
use MailPoet\Newsletter\NewslettersRepository;
|
||||
use MailPoet\Newsletter\Shortcodes\Shortcodes as NewsletterShortcodes;
|
||||
use MailPoet\Newsletter\Url as NewsletterUrl;
|
||||
use MailPoet\Segments\SegmentSubscribersRepository;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
@@ -33,12 +34,16 @@ class Shortcodes {
|
||||
/** @var NewslettersRepository */
|
||||
private $newslettersRepository;
|
||||
|
||||
/** @var NewsletterShortcodes */
|
||||
private $shortcodeProcessor;
|
||||
|
||||
public function __construct(
|
||||
Pages $subscriptionPages,
|
||||
WPFunctions $wp,
|
||||
SegmentSubscribersRepository $segmentSubscribersRepository,
|
||||
SubscribersRepository $subscribersRepository,
|
||||
NewsletterUrl $newsletterUrl,
|
||||
NewsletterShortcodes $shortcodeProcessor,
|
||||
NewslettersRepository $newslettersRepository
|
||||
) {
|
||||
$this->subscriptionPages = $subscriptionPages;
|
||||
@@ -46,6 +51,7 @@ class Shortcodes {
|
||||
$this->segmentSubscribersRepository = $segmentSubscribersRepository;
|
||||
$this->subscribersRepository = $subscribersRepository;
|
||||
$this->newsletterUrl = $newsletterUrl;
|
||||
$this->shortcodeProcessor = $shortcodeProcessor;
|
||||
$this->newslettersRepository = $newslettersRepository;
|
||||
}
|
||||
|
||||
@@ -187,9 +193,12 @@ class Shortcodes {
|
||||
|
||||
public function renderArchiveSubject(NewsletterEntity $newsletter, $subscriber, SendingQueueEntity $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="'
|
||||
. esc_attr(__('Preview in a new tab', 'mailpoet')) . '">'
|
||||
. esc_attr((string)$queue->getNewsletterRenderedSubject()) .
|
||||
. esc_attr((string)$this->shortcodeProcessor->replace($queue->getNewsletterRenderedSubject())) .
|
||||
'</a>';
|
||||
}
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace MailPoet\Newsletter\Shortcodes\Categories;
|
||||
|
||||
@@ -12,6 +12,8 @@ use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
class Subscriber implements CategoryInterface {
|
||||
|
||||
const DEFAULT_ALLOWED_ACTIONS = ['firstname', 'lastname', 'displayname'];
|
||||
|
||||
/** @var SubscribersRepository */
|
||||
private $subscribersRepository;
|
||||
|
||||
@@ -34,12 +36,22 @@ 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'] :
|
||||
'';
|
||||
|
||||
if (
|
||||
!($subscriber instanceof SubscriberEntity)
|
||||
&& $this->shouldReturnDefault((string)$shortcodeDetails['action'])
|
||||
&& !empty($defaultValue)
|
||||
) {
|
||||
return $defaultValue;
|
||||
}
|
||||
|
||||
if (!($subscriber instanceof SubscriberEntity)) {
|
||||
return $shortcodeDetails['shortcode'];
|
||||
}
|
||||
|
||||
switch ($shortcodeDetails['action']) {
|
||||
case 'firstname':
|
||||
return (!empty($subscriber->getFirstName())) ? htmlspecialchars($subscriber->getFirstName()) : $defaultValue;
|
||||
@@ -69,4 +81,8 @@ class Subscriber implements CategoryInterface {
|
||||
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);
|
||||
}
|
||||
|
||||
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() {
|
||||
$wpUser = wp_set_current_user(1);
|
||||
expect((new WPFunctions)->isUserLoggedIn())->true();
|
||||
|
Reference in New Issue
Block a user