Use getCurrentWPUser from SubscribersRepository

[MAILPOET-3268]
This commit is contained in:
Jan Lysý
2021-03-10 08:34:28 +01:00
committed by Veljko V
parent 97dd881e8d
commit dffaab10a2
6 changed files with 68 additions and 22 deletions

View File

@ -5,16 +5,19 @@ namespace MailPoet\AdminPages\Pages;
use MailPoet\AdminPages\PageRenderer;
use MailPoet\Config\Menu;
use MailPoet\Config\ServicesChecker;
use MailPoet\Models\Subscriber;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Newsletter\Shortcodes\ShortcodesHelper;
use MailPoet\Services\Bridge;
use MailPoet\Settings\SettingsController;
use MailPoet\Settings\UserFlagsController;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
use MailPoet\WooCommerce\TransactionalEmails;
use MailPoet\WP\Functions as WPFunctions;
class NewsletterEditor {
private const DATE_FORMAT = 'Y-m-d H:i:s';
/** @var PageRenderer */
private $pageRenderer;
@ -39,6 +42,9 @@ class NewsletterEditor {
/** @var ShortcodesHelper */
private $shortcodesHelper;
/** @var SubscribersRepository */
private $subscribersRepository;
public function __construct(
PageRenderer $pageRenderer,
SettingsController $settings,
@ -47,7 +53,8 @@ class NewsletterEditor {
WPFunctions $wp,
TransactionalEmails $wcTransactionalEmails,
ShortcodesHelper $shortcodesHelper,
ServicesChecker $servicesChecker
ServicesChecker $servicesChecker,
SubscribersRepository $subscribersRepository
) {
$this->pageRenderer = $pageRenderer;
$this->settings = $settings;
@ -57,6 +64,7 @@ class NewsletterEditor {
$this->wcTransactionalEmails = $wcTransactionalEmails;
$this->servicesChecker = $servicesChecker;
$this->shortcodesHelper = $shortcodesHelper;
$this->subscribersRepository = $subscribersRepository;
}
public function render() {
@ -76,8 +84,8 @@ class NewsletterEditor {
exit;
}
$subscriber = Subscriber::getCurrentWPUser();
$subscriberData = $subscriber ? $subscriber->asArray() : [];
$subscriber = $this->subscribersRepository->getCurrentWPUser();
$subscriberData = $subscriber ? $this->formatSubscriber($subscriber) : [];
$woocommerceData = [];
if ($this->woocommerceHelper->isWooCommerceActive()) {
$wcEmailSettings = $this->wcTransactionalEmails->getWCEmailSettings();
@ -106,4 +114,28 @@ class NewsletterEditor {
$this->pageRenderer->displayPage('newsletter/editor.html', $data);
}
private function formatSubscriber(SubscriberEntity $subscriber): array {
return [
'id' => $subscriber->getId(),
'wp_user_id' => $subscriber->getWpUserId(),
'is_woocommerce_user' => (string)$subscriber->isWPUser(), // BC compatibility
'first_name' => $subscriber->getFirstName(),
'last_name' => $subscriber->getLastName(),
'email' => $subscriber->getEmail(),
'status' => $subscriber->getStatus(),
'subscribed_ip' => $subscriber->getSubscribedIp(),
'confirmed_ip' => $subscriber->getConfirmedIp(),
'confirmed_at' => ($confirmedAt = $subscriber->getConfirmedAt()) ? $confirmedAt->format(self::DATE_FORMAT) : null,
'last_subscribed_at' => ($lastSubscribedAt = $subscriber->getLastSubscribedAt()) ? $lastSubscribedAt->format(self::DATE_FORMAT) : null,
'created_at' => $subscriber->getCreatedAt()->format(self::DATE_FORMAT),
'updated_at' => $subscriber->getUpdatedAt()->format(self::DATE_FORMAT),
'deleted_at' => ($deletedAt = $subscriber->getDeletedAt()) ? $deletedAt->format(self::DATE_FORMAT) : null,
'unconfirmed_data' => $subscriber->getUnconfirmedData(),
'source' => $subscriber->getSource(),
'count_confirmation' => $subscriber->getConfirmationsCount(),
'unsubscribe_token' => $subscriber->getUnsubscribeToken(),
'link_token' => $subscriber->getLinkToken(),
];
}
}

View File

@ -8,6 +8,7 @@ use MailPoet\Models\Newsletter;
use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Url as NewsletterUrl;
use MailPoet\Segments\SegmentSubscribersRepository;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\Subscription\Pages;
use MailPoet\WP\Functions as WPFunctions;
@ -21,14 +22,19 @@ class Shortcodes {
/** @var SegmentSubscribersRepository */
private $segmentSubscribersRepository;
/** @var SubscribersRepository */
private $subscribersRepository;
public function __construct(
Pages $subscriptionPages,
WPFunctions $wp,
SegmentSubscribersRepository $segmentSubscribersRepository
SegmentSubscribersRepository $segmentSubscribersRepository,
SubscribersRepository $subscribersRepository
) {
$this->subscriptionPages = $subscriptionPages;
$this->wp = $wp;
$this->segmentSubscribersRepository = $segmentSubscribersRepository;
$this->subscribersRepository = $subscribersRepository;
}
public function init() {
@ -101,7 +107,8 @@ class Shortcodes {
$newsletters = Newsletter::getArchives($segmentIds);
$subscriber = Subscriber::getCurrentWPUser();
$subscriber = $this->subscribersRepository->getCurrentWPUser();
$subscriber = $subscriber ? Subscriber::findOne($subscriber->getId()) : null;
if (empty($newsletters)) {
return $this->wp->applyFilters(

View File

@ -6,7 +6,6 @@ use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Mailer\Mailer;
use MailPoet\Mailer\MetaInfo;
use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Renderer\Renderer;
use MailPoet\Newsletter\Shortcodes\Shortcodes;
use MailPoet\Subscribers\SubscribersRepository;
@ -57,10 +56,7 @@ class SendPreviewController {
$body = implode($divider, $dataForShortcodes);
$subscriber = Subscriber::getCurrentWPUser();
if ($subscriber instanceof Subscriber) {
$subscriber = $this->subscribersRepository->findOneById($subscriber->id);
}
$subscriber = $this->subscribersRepository->getCurrentWPUser();
$this->shortcodes->setNewsletter($newsletter);
if ($subscriber instanceof SubscriberEntity) {
$this->shortcodes->setSubscriber($subscriber);

View File

@ -7,6 +7,7 @@ use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Url as NewsletterUrl;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Subscribers\SubscribersRepository;
class ViewInBrowserController {
/** @var LinkTokens */
@ -15,12 +16,17 @@ class ViewInBrowserController {
/** @var ViewInBrowserRenderer */
private $viewInBrowserRenderer;
/** @var SubscribersRepository */
private $subscribersRepository;
public function __construct(
LinkTokens $linkTokens,
ViewInBrowserRenderer $viewInBrowserRenderer
ViewInBrowserRenderer $viewInBrowserRenderer,
SubscribersRepository $subscribersRepository
) {
$this->linkTokens = $linkTokens;
$this->viewInBrowserRenderer = $viewInBrowserRenderer;
$this->subscribersRepository = $subscribersRepository;
}
public function view(array $data) {
@ -32,12 +38,12 @@ class ViewInBrowserController {
// if this is a preview and subscriber does not exist,
// attempt to set subscriber to the current logged-in WP user
if (!$subscriber && $isPreview) {
$subscriber = Subscriber::getCurrentWPUser() ?: null;
$subscriber = $this->subscribersRepository->getCurrentWPUser();
}
// if queue and subscriber exist, subscriber must have received the newsletter
$queue = $this->getQueue($newsletter, $data);
if (!$isPreview && $queue && $subscriber && !$queue->isSubscriberProcessed($subscriber->id)) {
if (!$isPreview && $queue && $subscriber && !$queue->isSubscriberProcessed($subscriber->getId())) {
throw new \InvalidArgumentException("Subscriber did not receive the newsletter yet");
}

View File

@ -47,7 +47,7 @@ class ViewInBrowserRenderer {
public function render(
bool $isPreview,
Newsletter $newsletter,
Subscriber $subscriber = null,
SubscriberEntity $subscriber = null,
SendingQueue $queue = null
) {
$wpUserPreview = $isPreview;
@ -83,7 +83,7 @@ class ViewInBrowserRenderer {
$renderedNewsletter = $this->shortcodes->replace($newsletterBody);
if (!$wpUserPreview && $queue && $subscriber && $this->isTrackingEnabled) {
$renderedNewsletter = Links::replaceSubscriberData(
$subscriber->id,
$subscriber->getId(),
$queue->id,
$renderedNewsletter
);
@ -97,8 +97,6 @@ class ViewInBrowserRenderer {
$sendingQueueRepository = ContainerWrapper::getInstance()->get(SendingQueuesRepository::class);
/** @var NewslettersRepository $newsletterRepository */
$newsletterRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class);
/** @var NewslettersRepository $newsletterRepository */
$subscribersRepository = ContainerWrapper::getInstance()->get(NewslettersRepository::class);
/** @var SubscribersRepository $subscribersRepository */
$subscribersRepository = ContainerWrapper::getInstance()->get(SubscribersRepository::class);

View File

@ -2,12 +2,14 @@
namespace MailPoet\WooCommerce;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\ConfirmationEmailMailer;
use MailPoet\Subscribers\Source;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\Util\Helpers;
use MailPoet\WP\Functions as WPFunctions;
@ -29,16 +31,21 @@ class Subscription {
/** @var ConfirmationEmailMailer */
private $confirmationEmailMailer;
/** @var SubscribersRepository */
private $subscribersRepository;
public function __construct(
SettingsController $settings,
ConfirmationEmailMailer $confirmationEmailMailer,
WPFunctions $wp,
Helper $wcHelper
Helper $wcHelper,
SubscribersRepository $subscribersRepository
) {
$this->settings = $settings;
$this->wp = $wp;
$this->wcHelper = $wcHelper;
$this->confirmationEmailMailer = $confirmationEmailMailer;
$this->subscribersRepository = $subscribersRepository;
}
public function extendWooCommerceCheckoutForm() {
@ -71,12 +78,12 @@ class Subscription {
}
private function isCurrentUserSubscribed() {
$subscriber = Subscriber::getCurrentWPUser();
if (!$subscriber instanceof Subscriber) {
$subscriber = $this->subscribersRepository->getCurrentWPUser();
if (!$subscriber instanceof SubscriberEntity) {
return false;
}
$wcSegment = Segment::getWooCommerceSegment();
$subscriberSegment = SubscriberSegment::where('subscriber_id', $subscriber->id)
$subscriberSegment = SubscriberSegment::where('subscriber_id', $subscriber->getId())
->where('segment_id', $wcSegment->id)
->findOne();
return $subscriberSegment instanceof SubscriberSegment