Remove static calling from Links
[MAILPOET-3269]
This commit is contained in:
@@ -62,6 +62,9 @@ class SendingQueue {
|
|||||||
/** @var WPFunctions */
|
/** @var WPFunctions */
|
||||||
private $wp;
|
private $wp;
|
||||||
|
|
||||||
|
/** @var Links */
|
||||||
|
private $links;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
SendingErrorHandler $errorHandler,
|
SendingErrorHandler $errorHandler,
|
||||||
SendingThrottlingHandler $throttlingHandler,
|
SendingThrottlingHandler $throttlingHandler,
|
||||||
@@ -72,6 +75,7 @@ class SendingQueue {
|
|||||||
SubscribersFinder $subscriberFinder,
|
SubscribersFinder $subscriberFinder,
|
||||||
SegmentsRepository $segmentsRepository,
|
SegmentsRepository $segmentsRepository,
|
||||||
WPFunctions $wp,
|
WPFunctions $wp,
|
||||||
|
Links $links,
|
||||||
$mailerTask = false,
|
$mailerTask = false,
|
||||||
$newsletterTask = false
|
$newsletterTask = false
|
||||||
) {
|
) {
|
||||||
@@ -87,6 +91,7 @@ class SendingQueue {
|
|||||||
$this->loggerFactory = $loggerFactory;
|
$this->loggerFactory = $loggerFactory;
|
||||||
$this->newslettersRepository = $newslettersRepository;
|
$this->newslettersRepository = $newslettersRepository;
|
||||||
$this->cronHelper = $cronHelper;
|
$this->cronHelper = $cronHelper;
|
||||||
|
$this->links = $links;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function process($timer = false) {
|
public function process($timer = false) {
|
||||||
@@ -260,7 +265,7 @@ class SendingQueue {
|
|||||||
);
|
);
|
||||||
$preparedSubscribersIds[] = $subscriber->id;
|
$preparedSubscribersIds[] = $subscriber->id;
|
||||||
// create personalized instant unsubsribe link
|
// create personalized instant unsubsribe link
|
||||||
$unsubscribeUrls[] = Links::getUnsubscribeUrl($queue, $subscriber->id);
|
$unsubscribeUrls[] = $this->links->getUnsubscribeUrl($queue, $subscriber->id);
|
||||||
$metas[] = $this->mailerMetaInfo->getNewsletterMetaInfo($newsletter, $subscriber);
|
$metas[] = $this->mailerMetaInfo->getNewsletterMetaInfo($newsletter, $subscriber);
|
||||||
// keep track of values for statistics purposes
|
// keep track of values for statistics purposes
|
||||||
$statistics[] = [
|
$statistics[] = [
|
||||||
|
@@ -13,14 +13,20 @@ use MailPoet\Subscription\SubscriptionUrlFactory;
|
|||||||
use MailPoet\Util\Helpers;
|
use MailPoet\Util\Helpers;
|
||||||
|
|
||||||
class Links {
|
class Links {
|
||||||
public static function process($renderedNewsletter, $newsletter, $queue) {
|
/** @var LinkTokens */
|
||||||
list($renderedNewsletter, $links) =
|
private $linkTokens;
|
||||||
self::hashAndReplaceLinks($renderedNewsletter, $newsletter->id, $queue->id);
|
|
||||||
self::saveLinks($links, $newsletter, $queue);
|
public function __construct(LinkTokens $linkTokens) {
|
||||||
|
$this->linkTokens = $linkTokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function process($renderedNewsletter, $newsletter, $queue) {
|
||||||
|
[$renderedNewsletter, $links] = $this->hashAndReplaceLinks($renderedNewsletter, $newsletter->id, $queue->id);
|
||||||
|
$this->saveLinks($links, $newsletter, $queue);
|
||||||
return $renderedNewsletter;
|
return $renderedNewsletter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function hashAndReplaceLinks($renderedNewsletter, $newsletterId, $queueId) {
|
public function hashAndReplaceLinks($renderedNewsletter, $newsletterId, $queueId) {
|
||||||
// join HTML and TEXT rendered body into a text string
|
// join HTML and TEXT rendered body into a text string
|
||||||
$content = Helpers::joinObject($renderedNewsletter);
|
$content = Helpers::joinObject($renderedNewsletter);
|
||||||
list($content, $links) = NewsletterLinks::process($content, $newsletterId, $queueId);
|
list($content, $links) = NewsletterLinks::process($content, $newsletterId, $queueId);
|
||||||
@@ -34,11 +40,11 @@ class Links {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function saveLinks($links, $newsletter, $queue) {
|
public function saveLinks($links, $newsletter, $queue) {
|
||||||
return NewsletterLinks::save($links, $newsletter->id, $queue->id);
|
return NewsletterLinks::save($links, $newsletter->id, $queue->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getUnsubscribeUrl($queue, $subscriberId) {
|
public function getUnsubscribeUrl($queue, $subscriberId) {
|
||||||
$subscriber = Subscriber::where('id', $subscriberId)->findOne();
|
$subscriber = Subscriber::where('id', $subscriberId)->findOne();
|
||||||
$settings = SettingsController::getInstance();
|
$settings = SettingsController::getInstance();
|
||||||
if ((boolean)$settings->get('tracking.enabled')) {
|
if ((boolean)$settings->get('tracking.enabled')) {
|
||||||
@@ -48,10 +54,9 @@ class Links {
|
|||||||
if (!$linkHash instanceof NewsletterLinkModel) {
|
if (!$linkHash instanceof NewsletterLinkModel) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
$linkTokens = new LinkTokens;
|
|
||||||
$data = NewsletterLinks::createUrlDataObject(
|
$data = NewsletterLinks::createUrlDataObject(
|
||||||
$subscriber->id,
|
$subscriber->id,
|
||||||
$linkTokens->getToken($subscriber),
|
$this->linkTokens->getToken($subscriber),
|
||||||
$queue->id,
|
$queue->id,
|
||||||
$linkHash->hash,
|
$linkHash->hash,
|
||||||
false
|
false
|
||||||
|
@@ -46,6 +46,9 @@ class Newsletter {
|
|||||||
/** @var Emoji */
|
/** @var Emoji */
|
||||||
private $emoji;
|
private $emoji;
|
||||||
|
|
||||||
|
/** @var LinksTask */
|
||||||
|
private $linksTask;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
WPFunctions $wp = null,
|
WPFunctions $wp = null,
|
||||||
PostsTask $postsTask = null,
|
PostsTask $postsTask = null,
|
||||||
@@ -73,6 +76,7 @@ class Newsletter {
|
|||||||
$this->emoji = $emoji;
|
$this->emoji = $emoji;
|
||||||
$this->renderer = ContainerWrapper::getInstance()->get(Renderer::class);
|
$this->renderer = ContainerWrapper::getInstance()->get(Renderer::class);
|
||||||
$this->newslettersRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class);
|
$this->newslettersRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class);
|
||||||
|
$this->linksTask = ContainerWrapper::getInstance()->get(LinksTask::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getNewsletterFromQueue($queue) {
|
public function getNewsletterFromQueue($queue) {
|
||||||
@@ -127,7 +131,7 @@ class Newsletter {
|
|||||||
);
|
);
|
||||||
$renderedNewsletter = $this->gaTracking->applyGATracking($renderedNewsletter, $newsletter);
|
$renderedNewsletter = $this->gaTracking->applyGATracking($renderedNewsletter, $newsletter);
|
||||||
// hash and save all links
|
// hash and save all links
|
||||||
$renderedNewsletter = LinksTask::process($renderedNewsletter, $newsletter, $sendingTask);
|
$renderedNewsletter = $this->linksTask->process($renderedNewsletter, $newsletter, $sendingTask);
|
||||||
} else {
|
} else {
|
||||||
// render newsletter
|
// render newsletter
|
||||||
$renderedNewsletter = $this->renderer->render($newsletter, $sendingTask);
|
$renderedNewsletter = $this->renderer->render($newsletter, $sendingTask);
|
||||||
|
@@ -153,6 +153,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
// Cron workers
|
// Cron workers
|
||||||
$container->autowire(\MailPoet\Cron\Workers\Scheduler::class)->setPublic(true);
|
$container->autowire(\MailPoet\Cron\Workers\Scheduler::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Cron\Workers\SendingQueue\SendingQueue::class)->setPublic(true);
|
$container->autowire(\MailPoet\Cron\Workers\SendingQueue\SendingQueue::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\SendingQueue\Tasks\Links::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Cron\Workers\StatsNotifications\Worker::class)->setPublic(true);
|
$container->autowire(\MailPoet\Cron\Workers\StatsNotifications\Worker::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Cron\Workers\StatsNotifications\AutomatedEmails::class)->setPublic(true);
|
$container->autowire(\MailPoet\Cron\Workers\StatsNotifications\AutomatedEmails::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck::class)->setPublic(true);
|
$container->autowire(\MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck::class)->setPublic(true);
|
||||||
|
@@ -8,6 +8,14 @@ use MailPoet\Models\NewsletterLink;
|
|||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
|
|
||||||
class LinksTest extends \MailPoetTest {
|
class LinksTest extends \MailPoetTest {
|
||||||
|
/** @var Links */
|
||||||
|
private $links;
|
||||||
|
|
||||||
|
protected function _before() {
|
||||||
|
parent::_before();
|
||||||
|
$this->links = $this->diContainer->get(Links::class);
|
||||||
|
}
|
||||||
|
|
||||||
public function testItCanSaveLinks() {
|
public function testItCanSaveLinks() {
|
||||||
$links = [
|
$links = [
|
||||||
[
|
[
|
||||||
@@ -17,7 +25,7 @@ class LinksTest extends \MailPoetTest {
|
|||||||
];
|
];
|
||||||
$newsletter = (object)['id' => 1];
|
$newsletter = (object)['id' => 1];
|
||||||
$queue = (object)['id' => 2];
|
$queue = (object)['id' => 2];
|
||||||
$result = Links::saveLinks($links, $newsletter, $queue);
|
$result = $this->links->saveLinks($links, $newsletter, $queue);
|
||||||
$newsletterLink = NewsletterLink::where('hash', $links[0]['hash'])
|
$newsletterLink = NewsletterLink::where('hash', $links[0]['hash'])
|
||||||
->findOne();
|
->findOne();
|
||||||
assert($newsletterLink instanceof NewsletterLink);
|
assert($newsletterLink instanceof NewsletterLink);
|
||||||
@@ -31,7 +39,7 @@ class LinksTest extends \MailPoetTest {
|
|||||||
'html' => '<a href="http://example.com">Example Link</a>',
|
'html' => '<a href="http://example.com">Example Link</a>',
|
||||||
'text' => '<a href="http://example.com">Example Link</a>',
|
'text' => '<a href="http://example.com">Example Link</a>',
|
||||||
];
|
];
|
||||||
$result = Links::hashAndReplaceLinks($renderedNewsletter, 0, 0);
|
$result = $this->links->hashAndReplaceLinks($renderedNewsletter, 0, 0);
|
||||||
$processedRenderedNewsletterBody = $result[0];
|
$processedRenderedNewsletterBody = $result[0];
|
||||||
$processedAndHashedLinks = $result[1];
|
$processedAndHashedLinks = $result[1];
|
||||||
expect($processedRenderedNewsletterBody['html'])
|
expect($processedRenderedNewsletterBody['html'])
|
||||||
@@ -50,7 +58,7 @@ class LinksTest extends \MailPoetTest {
|
|||||||
'text' => '<a href="http://example.com">Example Link</a>',
|
'text' => '<a href="http://example.com">Example Link</a>',
|
||||||
];
|
];
|
||||||
$queue = (object)['id' => 2];
|
$queue = (object)['id' => 2];
|
||||||
$result = Links::process($renderedNewsletter, $newsletter, $queue);
|
$result = $this->links->process($renderedNewsletter, $newsletter, $queue);
|
||||||
$newsletterLink = NewsletterLink::where('newsletter_id', $newsletter->id)
|
$newsletterLink = NewsletterLink::where('newsletter_id', $newsletter->id)
|
||||||
->findOne();
|
->findOne();
|
||||||
assert($newsletterLink instanceof NewsletterLink);
|
assert($newsletterLink instanceof NewsletterLink);
|
||||||
@@ -66,7 +74,7 @@ class LinksTest extends \MailPoetTest {
|
|||||||
'text' => '<a href="http://example.com">Example Link</a>',
|
'text' => '<a href="http://example.com">Example Link</a>',
|
||||||
];
|
];
|
||||||
$queue = (object)['id' => 2];
|
$queue = (object)['id' => 2];
|
||||||
Links::process($renderedNewsletter, $newsletter, $queue);
|
$this->links->process($renderedNewsletter, $newsletter, $queue);
|
||||||
$unsubscribeCount = NewsletterLink::where('newsletter_id', $newsletter->id)
|
$unsubscribeCount = NewsletterLink::where('newsletter_id', $newsletter->id)
|
||||||
->where('url', NewsletterLink::INSTANT_UNSUBSCRIBE_LINK_SHORT_CODE)->count();
|
->where('url', NewsletterLink::INSTANT_UNSUBSCRIBE_LINK_SHORT_CODE)->count();
|
||||||
expect($unsubscribeCount)->equals(1);
|
expect($unsubscribeCount)->equals(1);
|
||||||
|
Reference in New Issue
Block a user