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 */
private $wp;
/** @var Links */
private $links;
public function __construct(
SendingErrorHandler $errorHandler,
SendingThrottlingHandler $throttlingHandler,
@@ -72,6 +75,7 @@ class SendingQueue {
SubscribersFinder $subscriberFinder,
SegmentsRepository $segmentsRepository,
WPFunctions $wp,
Links $links,
$mailerTask = false,
$newsletterTask = false
) {
@@ -87,6 +91,7 @@ class SendingQueue {
$this->loggerFactory = $loggerFactory;
$this->newslettersRepository = $newslettersRepository;
$this->cronHelper = $cronHelper;
$this->links = $links;
}
public function process($timer = false) {
@@ -260,7 +265,7 @@ class SendingQueue {
);
$preparedSubscribersIds[] = $subscriber->id;
// create personalized instant unsubsribe link
$unsubscribeUrls[] = Links::getUnsubscribeUrl($queue, $subscriber->id);
$unsubscribeUrls[] = $this->links->getUnsubscribeUrl($queue, $subscriber->id);
$metas[] = $this->mailerMetaInfo->getNewsletterMetaInfo($newsletter, $subscriber);
// keep track of values for statistics purposes
$statistics[] = [

View File

@@ -13,14 +13,20 @@ use MailPoet\Subscription\SubscriptionUrlFactory;
use MailPoet\Util\Helpers;
class Links {
public static function process($renderedNewsletter, $newsletter, $queue) {
list($renderedNewsletter, $links) =
self::hashAndReplaceLinks($renderedNewsletter, $newsletter->id, $queue->id);
self::saveLinks($links, $newsletter, $queue);
/** @var LinkTokens */
private $linkTokens;
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;
}
public static function hashAndReplaceLinks($renderedNewsletter, $newsletterId, $queueId) {
public function hashAndReplaceLinks($renderedNewsletter, $newsletterId, $queueId) {
// join HTML and TEXT rendered body into a text string
$content = Helpers::joinObject($renderedNewsletter);
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);
}
public static function getUnsubscribeUrl($queue, $subscriberId) {
public function getUnsubscribeUrl($queue, $subscriberId) {
$subscriber = Subscriber::where('id', $subscriberId)->findOne();
$settings = SettingsController::getInstance();
if ((boolean)$settings->get('tracking.enabled')) {
@@ -48,10 +54,9 @@ class Links {
if (!$linkHash instanceof NewsletterLinkModel) {
return '';
}
$linkTokens = new LinkTokens;
$data = NewsletterLinks::createUrlDataObject(
$subscriber->id,
$linkTokens->getToken($subscriber),
$this->linkTokens->getToken($subscriber),
$queue->id,
$linkHash->hash,
false

View File

@@ -46,6 +46,9 @@ class Newsletter {
/** @var Emoji */
private $emoji;
/** @var LinksTask */
private $linksTask;
public function __construct(
WPFunctions $wp = null,
PostsTask $postsTask = null,
@@ -73,6 +76,7 @@ class Newsletter {
$this->emoji = $emoji;
$this->renderer = ContainerWrapper::getInstance()->get(Renderer::class);
$this->newslettersRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class);
$this->linksTask = ContainerWrapper::getInstance()->get(LinksTask::class);
}
public function getNewsletterFromQueue($queue) {
@@ -127,7 +131,7 @@ class Newsletter {
);
$renderedNewsletter = $this->gaTracking->applyGATracking($renderedNewsletter, $newsletter);
// hash and save all links
$renderedNewsletter = LinksTask::process($renderedNewsletter, $newsletter, $sendingTask);
$renderedNewsletter = $this->linksTask->process($renderedNewsletter, $newsletter, $sendingTask);
} else {
// render newsletter
$renderedNewsletter = $this->renderer->render($newsletter, $sendingTask);

View File

@@ -153,6 +153,7 @@ class ContainerConfigurator implements IContainerConfigurator {
// Cron workers
$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\Tasks\Links::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\KeyCheck\SendingServiceKeyCheck::class)->setPublic(true);

View File

@@ -8,6 +8,14 @@ use MailPoet\Models\NewsletterLink;
use MailPoetVendor\Idiorm\ORM;
class LinksTest extends \MailPoetTest {
/** @var Links */
private $links;
protected function _before() {
parent::_before();
$this->links = $this->diContainer->get(Links::class);
}
public function testItCanSaveLinks() {
$links = [
[
@@ -17,7 +25,7 @@ class LinksTest extends \MailPoetTest {
];
$newsletter = (object)['id' => 1];
$queue = (object)['id' => 2];
$result = Links::saveLinks($links, $newsletter, $queue);
$result = $this->links->saveLinks($links, $newsletter, $queue);
$newsletterLink = NewsletterLink::where('hash', $links[0]['hash'])
->findOne();
assert($newsletterLink instanceof NewsletterLink);
@@ -31,7 +39,7 @@ class LinksTest extends \MailPoetTest {
'html' => '<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];
$processedAndHashedLinks = $result[1];
expect($processedRenderedNewsletterBody['html'])
@@ -50,7 +58,7 @@ class LinksTest extends \MailPoetTest {
'text' => '<a href="http://example.com">Example Link</a>',
];
$queue = (object)['id' => 2];
$result = Links::process($renderedNewsletter, $newsletter, $queue);
$result = $this->links->process($renderedNewsletter, $newsletter, $queue);
$newsletterLink = NewsletterLink::where('newsletter_id', $newsletter->id)
->findOne();
assert($newsletterLink instanceof NewsletterLink);
@@ -66,7 +74,7 @@ class LinksTest extends \MailPoetTest {
'text' => '<a href="http://example.com">Example Link</a>',
];
$queue = (object)['id' => 2];
Links::process($renderedNewsletter, $newsletter, $queue);
$this->links->process($renderedNewsletter, $newsletter, $queue);
$unsubscribeCount = NewsletterLink::where('newsletter_id', $newsletter->id)
->where('url', NewsletterLink::INSTANT_UNSUBSCRIBE_LINK_SHORT_CODE)->count();
expect($unsubscribeCount)->equals(1);