Remove static calling from Links

[MAILPOET-3269]
This commit is contained in:
Jan Lysý
2021-05-27 19:57:02 +02:00
committed by Veljko V
parent 85b9d5b7e4
commit 4449f76901
5 changed files with 38 additions and 15 deletions

View File

@@ -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[] = [

View File

@@ -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

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);