Remove usage of deprecated method

[MAILPOET-3267]
This commit is contained in:
Pavel Dohnal
2021-05-26 10:16:17 +02:00
committed by Veljko V
parent 6ad686588d
commit 7426479631
8 changed files with 79 additions and 71 deletions

View File

@ -2,9 +2,10 @@
namespace MailPoet\Newsletter\ViewInBrowser;
use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Models\Newsletter;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Newsletter\Url as NewsletterUrl;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Subscribers\SubscribersRepository;
@ -19,14 +20,19 @@ class ViewInBrowserController {
/** @var SubscribersRepository */
private $subscribersRepository;
/** @var SendingQueuesRepository */
private $sendingQueuesRepository;
public function __construct(
LinkTokens $linkTokens,
ViewInBrowserRenderer $viewInBrowserRenderer,
SendingQueuesRepository $sendingQueuesRepository,
SubscribersRepository $subscribersRepository
) {
$this->linkTokens = $linkTokens;
$this->viewInBrowserRenderer = $viewInBrowserRenderer;
$this->subscribersRepository = $subscribersRepository;
$this->sendingQueuesRepository = $sendingQueuesRepository;
}
public function view(array $data) {
@ -43,7 +49,7 @@ class ViewInBrowserController {
// if queue and subscriber exist, subscriber must have received the newsletter
$queue = $this->getQueue($newsletter, $data);
if (!$isPreview && $queue && $subscriber && !$queue->isSubscriberProcessed($subscriber->getId())) {
if (!$isPreview && $queue && $subscriber && !$this->sendingQueuesRepository->isSubscriberProcessed($queue, $subscriber)) {
throw new \InvalidArgumentException("Subscriber did not receive the newsletter yet");
}
@ -95,7 +101,7 @@ class ViewInBrowserController {
return $subscriber;
}
private function getQueue(Newsletter $newsletter, array $data) {
private function getQueue(Newsletter $newsletter, array $data): ?SendingQueueEntity {
// queue is optional; try to find it if it's not defined and this is not a welcome email
if ($newsletter->type === Newsletter::TYPE_WELCOME) {
return null;
@ -106,10 +112,8 @@ class ViewInBrowserController {
return null;
}
$queue = !empty($data['queue_id'])
? SendingQueue::findOne($data['queue_id'])
: SendingQueue::where('newsletter_id', $newsletter->id)->findOne();
return $queue ?: null;
return !empty($data['queue_id'])
? $this->sendingQueuesRepository->findOneById($data['queue_id'])
: $this->sendingQueuesRepository->findOneBy(['newsletter' => $newsletter->id]);
}
}

View File

@ -48,11 +48,16 @@ class ViewInBrowserRenderer {
bool $isPreview,
Newsletter $newsletter,
SubscriberEntity $subscriber = null,
SendingQueue $queue = null
SendingQueueEntity $queue = null
) {
$wpUserPreview = $isPreview;
if ($queue && $queue->getNewsletterRenderedBody()) {
$newsletterBody = $queue->getNewsletterRenderedBody('html');
$body = $queue->getNewsletterRenderedBody();
if (is_array($body)) {
$newsletterBody = $body['html'];
} else {
$newsletterBody = '';
}
$newsletterBody = $this->emoji->decodeEmojisInBody($newsletterBody);
// rendered newsletter body has shortcodes converted to links; we need to
// isolate "view in browser", "unsubscribe" and "manage subscription" links
@ -61,7 +66,7 @@ class ViewInBrowserRenderer {
if ($wpUserPreview && preg_match(Links::getLinkRegex(), $newsletterBody)) {
$newsletterBody = Links::convertHashedLinksToShortcodesAndUrls(
$newsletterBody,
$queueId = $queue->id,
$queue->getId(),
$convertAll = true
);
// remove open tracking link
@ -84,7 +89,7 @@ class ViewInBrowserRenderer {
if (!$wpUserPreview && $queue && $subscriber && $this->isTrackingEnabled) {
$renderedNewsletter = Links::replaceSubscriberData(
$subscriber->getId(),
$queue->id,
$queue->getId(),
$renderedNewsletter
);
}
@ -93,16 +98,9 @@ class ViewInBrowserRenderer {
/** this is here to prepare entities for the shortcodes library, when this whole file uses doctrine, this can be deleted */
private function prepareShortcodes($newsletter, $subscriber, $queue, $wpUserPreview) {
/** @var SendingQueuesRepository $sendingQueueRepository */
$sendingQueueRepository = ContainerWrapper::getInstance()->get(SendingQueuesRepository::class);
/** @var NewslettersRepository $newsletterRepository */
$newsletterRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class);
/** @var SubscribersRepository $subscribersRepository */
$subscribersRepository = ContainerWrapper::getInstance()->get(SubscribersRepository::class);
if ($queue instanceof Sending || $queue instanceof SendingQueue) {
$queue = $sendingQueueRepository->findOneById($queue->id);
}
if ($queue instanceof SendingQueueEntity) {
$this->shortcodes->setQueue($queue);
}
@ -112,9 +110,7 @@ class ViewInBrowserRenderer {
if ($newsletter instanceof NewsletterEntity) {
$this->shortcodes->setNewsletter($newsletter);
}
if ($subscriber instanceof Subscriber) {
$subscriber = $subscribersRepository->findOneById($subscriber->id);
}
$this->shortcodes->setWpUserPreview($wpUserPreview);
if ($subscriber instanceof SubscriberEntity) {
$this->shortcodes->setSubscriber($subscriber);

View File

@ -110,10 +110,7 @@ class Track {
return $data;
}
// check if the newsletter was sent to the subscriber
$queue = SendingQueue::findOne($data->queue_id); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps
if (!$queue instanceof SendingQueue) return false;
return ($queue->isSubscriberProcessed($data->subscriber->getId())) ?
return ($this->sendingQueuesRepository->isSubscriberProcessed($data->queue, $data->subscriber)) ?
$data :
false;
}

View File

@ -26,23 +26,6 @@ class SendingQueueTest extends \MailPoetTest {
];
}
public function testItChecksProcessedSubscribersForOldQueues() {
$subscriberId = 123;
expect($this->queue->isSubscriberProcessed($subscriberId))->false();
$this->queue->subscribers = ['processed' => [$subscriberId]];
expect($this->queue->isSubscriberProcessed($subscriberId))->true();
}
public function testItChecksProcessedSubscribersForNewQueues() {
$subscriberId = 123;
$queue = SendingTask::create();
$queue->setSubscribers([$subscriberId]);
$queue->save();
expect($queue->isSubscriberProcessed($subscriberId))->false();
$queue->updateProcessedSubscribers([$subscriberId]);
expect($queue->isSubscriberProcessed($subscriberId))->true();
}
public function testItReadsSerializedRenderedNewsletterBody() {
$queue = $this->queue;
$data = [

View File

@ -73,11 +73,10 @@ class SendingQueuesRepositoryTest extends \MailPoetTest {
$newsletter = new NewsletterEntity();
$newsletter->setType('type');
$newsletter->setSubject('Subject');
$this->newsletter = $newsletter;
$this->entityManager->persist($newsletter);
$queue = new SendingQueueEntity();
$queue->setNewsletter($this->newsletter);
$queue->setNewsletter($newsletter);
$queue->setTask($task);
$this->entityManager->persist($queue);

View File

@ -3,15 +3,18 @@
namespace MailPoet\Newsletter\ViewInBrowser;
use Codeception\Stub\Expected;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Models\Newsletter;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoetVendor\Idiorm\ORM;
class ViewInBrowserControllerTest extends \MailPoetTest {
/** @var ViewInBrowserController */
@ -35,11 +38,15 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
/** @var mixed[] */
private $browserPreviewData;
/** @var SendingQueuesRepository */
private $sendingQueuesRepository;
public function _before() {
// instantiate class
$this->viewInBrowserController = $this->diContainer->get(ViewInBrowserController::class);
$this->linkTokens = $this->diContainer->get(LinkTokens::class);
$this->subscribersRepository = $this->diContainer->get(SubscribersRepository::class);
$this->sendingQueuesRepository = $this->diContainer->get(SendingQueuesRepository::class);
// create newsletter
$newsletter = Newsletter::create();
@ -120,7 +127,7 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
public function testItSetsSubscriberToLoggedInWPUserWhenPreviewIsEnabled() {
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueue $queue = null) {
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueueEntity $queue = null) {
assert($subscriber !== null); // PHPStan
expect($subscriber)->notNull();
expect($subscriber->getId())->equals(1);
@ -141,10 +148,10 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
public function testItGetsQueueByQueueId() {
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueue $queue = null) {
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueueEntity $queue = null) {
assert($queue !== null); // PHPStan
expect($queue)->notNull();
expect($queue->id)->same($this->sendingTask->id);
expect($queue->getId())->equals($this->sendingTask->id);
}),
]);
@ -157,10 +164,10 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
public function testItGetsQueueByNewsletter() {
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueue $queue = null) {
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueueEntity $queue = null) {
assert($queue !== null); // PHPStan
expect($queue)->notNull();
expect($queue->id)->same($this->sendingTask->queue()->id);
expect($queue->getId())->equals($this->sendingTask->queue()->id);
}),
]);
@ -173,7 +180,7 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
public function testItResetsQueueForWelcomeEmails() {
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueue $queue = null) {
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueueEntity $queue = null) {
expect($queue)->null();
}),
]);
@ -189,7 +196,7 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
public function testItResetsQueueForAutomaticEmailsInPreview() {
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueue $queue = null) {
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueueEntity $queue = null) {
expect($queue)->null();
}),
]);
@ -206,10 +213,10 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
}
public function _after() {
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
$this->truncateEntity(NewsletterEntity::class);
$this->truncateEntity(SubscriberEntity::class);
$this->truncateEntity(ScheduledTaskEntity::class);
$this->truncateEntity(SendingQueueEntity::class);
// reset WP user role
$wpUser = wp_get_current_user();
$wpUser->add_role('administrator');
@ -228,6 +235,7 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
return new ViewInBrowserController(
$this->linkTokens,
$viewInBrowserRenderer,
$this->sendingQueuesRepository,
$this->subscribersRepository
);
}

View File

@ -3,6 +3,10 @@
namespace MailPoet\Newsletter\ViewInBrowser;
use Codeception\Stub\Expected;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\NewsletterLinkEntity;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterLink;
@ -11,6 +15,7 @@ use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Links\Links;
use MailPoet\Newsletter\Renderer\Renderer;
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Newsletter\Shortcodes\Shortcodes;
use MailPoet\Router\Router;
use MailPoet\Settings\SettingsController;
@ -165,22 +170,26 @@ class ViewInBrowserRendererTest extends \MailPoetTest {
$this->diContainer->get(Shortcodes::class),
$this->diContainer->get(Renderer::class)
);
/** @var SendingQueuesRepository $sendingQueueRepository */
$sendingQueueRepository = $this->diContainer->get(SendingQueuesRepository::class);
$renderedBody = $viewInBrowser->render(
$preview = false,
$this->newsletter,
$this->subscriber,
$this->sendingTask->queue()
$sendingQueueRepository->findOneById($this->sendingTask->queue()->id)
);
expect($renderedBody)->regExp('/Newsletter from queue/');
}
public function testItConvertsShortcodes() {
/** @var SendingQueuesRepository $sendingQueueRepository */
$sendingQueueRepository = $this->diContainer->get(SendingQueuesRepository::class);
$this->settings->set('tracking.enabled', false);
$renderedBody = $this->viewInBrowserRenderer->render(
$preview = false,
$this->newsletter,
$this->subscriber,
$this->sendingTask->queue()
$sendingQueueRepository->findOneById($this->sendingTask->queue()->id)
);
expect($renderedBody)->stringContainsString('Hello, First');
expect($renderedBody)->stringContainsString(Router::NAME . '&endpoint=view_in_browser');
@ -188,8 +197,11 @@ class ViewInBrowserRendererTest extends \MailPoetTest {
public function testItRewritesLinksToRouterEndpointWhenTrackingIsEnabled() {
$this->settings->set('tracking.enabled', true);
$queue = $this->sendingTask->queue();
$queue->newsletterRenderedBody = $this->queueRenderedNewsletterWithTracking;
/** @var SendingQueuesRepository $sendingQueueRepository */
$sendingQueueRepository = $this->diContainer->get(SendingQueuesRepository::class);
$queue = $sendingQueueRepository->findOneById($this->sendingTask->queue()->id);
$this->assertInstanceOf(SendingQueueEntity::class, $queue);
$queue->setNewsletterRenderedBody($this->queueRenderedNewsletterWithTracking);
$renderedBody = $this->viewInBrowserRenderer->render(
$preview = false,
$this->newsletter,
@ -200,8 +212,11 @@ class ViewInBrowserRendererTest extends \MailPoetTest {
}
public function testItConvertsHashedLinksToUrlsWhenPreviewIsEnabledAndNewsletterWasSent() {
$queue = $this->sendingTask->queue();
$queue->newsletterRenderedBody = $this->queueRenderedNewsletterWithTracking;
/** @var SendingQueuesRepository $sendingQueueRepository */
$sendingQueueRepository = $this->diContainer->get(SendingQueuesRepository::class);
$queue = $sendingQueueRepository->findOneById($this->sendingTask->queue()->id);
$this->assertInstanceOf(SendingQueueEntity::class, $queue);
$queue->setNewsletterRenderedBody($this->queueRenderedNewsletterWithTracking);
$renderedBody = $this->viewInBrowserRenderer->render(
$preview = true,
$this->newsletter,
@ -214,8 +229,11 @@ class ViewInBrowserRendererTest extends \MailPoetTest {
}
public function testRemovesOpenTrackingTagWhenPreviewIsEnabledAndNewsletterWasSent() {
$queue = $this->sendingTask->queue();
$queue->newsletterRenderedBody = $this->queueRenderedNewsletterWithTracking;
/** @var SendingQueuesRepository $sendingQueueRepository */
$sendingQueueRepository = $this->diContainer->get(SendingQueuesRepository::class);
$queue = $sendingQueueRepository->findOneById($this->sendingTask->queue()->id);
$this->assertInstanceOf(SendingQueueEntity::class, $queue);
$queue->setNewsletterRenderedBody($this->queueRenderedNewsletterWithTracking);
$renderedBody = $this->viewInBrowserRenderer->render(
$preview = true,
$this->newsletter,
@ -228,10 +246,10 @@ class ViewInBrowserRendererTest extends \MailPoetTest {
}
public function _after() {
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
ORM::raw_execute('TRUNCATE ' . NewsletterLink::$_table);
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
$this->truncateEntity(NewsletterEntity::class);
$this->truncateEntity(SubscriberEntity::class);
$this->truncateEntity(ScheduledTaskEntity::class);
$this->truncateEntity(SendingQueueEntity::class);
$this->truncateEntity(NewsletterLinkEntity::class);
}
}

View File

@ -13,6 +13,7 @@ use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterLink;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Router\Endpoints\Track;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Tasks\Sending as SendingTask;
@ -106,6 +107,7 @@ class TrackTest extends \MailPoetTest {
$this->entityManager->flush();
$track = Stub::make(Track::class, [
'linkTokens' => new LinkTokens,
'sendingQueuesRepository' => $this->diContainer->get(SendingQueuesRepository::class),
'terminate' => function($code) {
expect($code)->equals(403);
},
@ -131,6 +133,7 @@ class TrackTest extends \MailPoetTest {
$this->entityManager->persist($subscriber);
$this->entityManager->flush();
$data->subscriber->setId($subscriber->getId());
$data->subscriber = $subscriber;
expect($this->track->_validateTrackData($data))->false();
}