diff --git a/lib/AdminPages/Pages/NewsletterEditor.php b/lib/AdminPages/Pages/NewsletterEditor.php index 0fe22977df..111304fbdb 100644 --- a/lib/AdminPages/Pages/NewsletterEditor.php +++ b/lib/AdminPages/Pages/NewsletterEditor.php @@ -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(), + ]; + } } diff --git a/lib/Config/Shortcodes.php b/lib/Config/Shortcodes.php index 0d2304fc40..5757a50c96 100644 --- a/lib/Config/Shortcodes.php +++ b/lib/Config/Shortcodes.php @@ -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( diff --git a/lib/Newsletter/Preview/SendPreviewController.php b/lib/Newsletter/Preview/SendPreviewController.php index 66c1f481e8..b6f95dbbb9 100644 --- a/lib/Newsletter/Preview/SendPreviewController.php +++ b/lib/Newsletter/Preview/SendPreviewController.php @@ -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); diff --git a/lib/Newsletter/ViewInBrowser/ViewInBrowserController.php b/lib/Newsletter/ViewInBrowser/ViewInBrowserController.php index 91d21200e2..e0f3d16e3a 100644 --- a/lib/Newsletter/ViewInBrowser/ViewInBrowserController.php +++ b/lib/Newsletter/ViewInBrowser/ViewInBrowserController.php @@ -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"); } diff --git a/lib/Newsletter/ViewInBrowser/ViewInBrowserRenderer.php b/lib/Newsletter/ViewInBrowser/ViewInBrowserRenderer.php index 376203a1ed..52c436c475 100644 --- a/lib/Newsletter/ViewInBrowser/ViewInBrowserRenderer.php +++ b/lib/Newsletter/ViewInBrowser/ViewInBrowserRenderer.php @@ -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); diff --git a/lib/WooCommerce/Subscription.php b/lib/WooCommerce/Subscription.php index 1c96430648..e63fba3234 100644 --- a/lib/WooCommerce/Subscription.php +++ b/lib/WooCommerce/Subscription.php @@ -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