PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / Subscription / SubscriptionUrlFactory.php
mailpoet / lib / Subscription Last commit date
AdminUserSubscription.php 2 months ago Blacklist.php 1 year ago Comment.php 2 months ago Form.php 2 weeks ago Manage.php 5 days ago ManageSubscriptionFormRenderer.php 5 days ago Pages.php 5 days ago Registration.php 2 months ago SubscriptionUrlFactory.php 5 days ago Throttling.php 2 months ago index.php 3 years ago
SubscriptionUrlFactory.php
145 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\Subscription;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\DI\ContainerWrapper;
9 use MailPoet\Entities\SubscriberEntity;
10 use MailPoet\Router\Endpoints\Subscription as SubscriptionEndpoint;
11 use MailPoet\Router\Router;
12 use MailPoet\Settings\Pages as SettingsPages;
13 use MailPoet\Settings\SettingsController;
14 use MailPoet\Subscribers\LinkTokens;
15 use MailPoet\WP\Functions as WPFunctions;
16
17 class SubscriptionUrlFactory {
18
19 /** @var SubscriptionUrlFactory */
20 private static $instance;
21
22 /** @var WPFunctions */
23 private $wp;
24
25 /** @var SettingsController */
26 private $settings;
27
28 /** @var LinkTokens */
29 private $linkTokens;
30
31 public function __construct(
32 WPFunctions $wp,
33 SettingsController $settings,
34 LinkTokens $linkTokens
35 ) {
36 $this->wp = $wp;
37 $this->settings = $settings;
38 $this->linkTokens = $linkTokens;
39 }
40
41 public function getConfirmationUrl(?SubscriberEntity $subscriber = null, ?int $confirmationPageId = null) {
42 $pageId = $confirmationPageId ?? $this->settings->get('subscription.pages.confirmation');
43 $post = $this->getPost($pageId);
44 return $this->getSubscriptionUrl($post, 'confirm', $subscriber);
45 }
46
47 public function getConfirmUnsubscribeUrl(?SubscriberEntity $subscriber = null, ?int $queueId = null) {
48 $post = $this->getPost($this->settings->get('subscription.pages.confirm_unsubscribe'));
49 $data = $queueId && $subscriber ? ['queueId' => $queueId] : null;
50 return $this->getSubscriptionUrl($post, 'confirm_unsubscribe', $subscriber, $data);
51 }
52
53 public function getManageUrl(?SubscriberEntity $subscriber = null) {
54 $post = $this->getPost($this->settings->get('subscription.pages.manage'));
55 return $this->getSubscriptionUrl($post, 'manage', $subscriber);
56 }
57
58 public function getUnsubscribeUrl(?SubscriberEntity $subscriber = null, ?int $queueId = null) {
59 $post = $this->getPost($this->settings->get('subscription.pages.unsubscribe'));
60 $data = $queueId && $subscriber ? ['queueId' => $queueId] : null;
61 return $this->getSubscriptionUrl($post, 'unsubscribe', $subscriber, $data);
62 }
63
64 public function getUnsubscribeReasonUrl(?SubscriberEntity $subscriber = null, ?int $queueId = null) {
65 $post = $this->getPost($this->settings->get('subscription.pages.unsubscribe'));
66 $data = $queueId && $subscriber ? ['queueId' => $queueId] : null;
67 return $this->getSubscriptionUrl($post, 'unsubscribe_reason', $subscriber, $data);
68 }
69
70 public function getTrackingOptOutUrl(?SubscriberEntity $subscriber = null) {
71 $post = $this->getPost($this->settings->get('subscription.pages.manage'));
72 return $this->getSubscriptionUrl($post, 'tracking_opt_out', $subscriber);
73 }
74
75 public function getReEngagementUrl(?SubscriberEntity $subscriber = null) {
76 $reEngagementSetting = $this->settings->get('reEngagement');
77 $postId = $reEngagementSetting['page'] ?? null;
78
79 $post = $this->getPost($postId);
80 return $this->getSubscriptionUrl($post, 're_engagement', $subscriber);
81 }
82
83 public function getSubscriptionUrl(
84 $post = null,
85 $action = null,
86 ?SubscriberEntity $subscriber = null,
87 $data = null
88 ) {
89 if ($post === null || $action === null) return;
90
91 $url = $this->wp->getPermalink($post);
92 if ($subscriber !== null) {
93 $subscriberData = [
94 'token' => $this->linkTokens->getToken($subscriber),
95 'email' => $subscriber->getEmail(),
96 ];
97 $data = array_merge($data ?? [], $subscriberData);
98 } elseif (is_null($data)) {
99 $data = [
100 'preview' => 1,
101 ];
102 }
103
104 $params = [
105 Router::NAME,
106 'endpoint=' . SubscriptionEndpoint::ENDPOINT,
107 'action=' . $action,
108 'data=' . Router::encodeRequestData($data),
109 ];
110
111 // add parameters
112 $url .= (parse_url($url, PHP_URL_QUERY) ? '&' : '?') . join('&', $params);
113
114 $urlParams = parse_url($url);
115 if (!is_array($urlParams) || empty($urlParams['scheme'])) {
116 $url = $this->wp->getBloginfo('url') . $url;
117 }
118
119 return $url;
120 }
121
122 /**
123 * @return SubscriptionUrlFactory
124 */
125 public static function getInstance() {
126 if (!self::$instance instanceof SubscriptionUrlFactory) {
127 $linkTokens = ContainerWrapper::getInstance()->get(LinkTokens::class);
128 self::$instance = new SubscriptionUrlFactory(new WPFunctions, SettingsController::getInstance(), $linkTokens);
129 }
130 return self::$instance;
131 }
132
133 private function getPost($post = null) {
134 if ($post) {
135 $postObject = $this->wp->getPost($post);
136 if ($postObject) {
137 return $postObject;
138 }
139 }
140 // Resort to a default MailPoet page if no page is selected
141 $pages = SettingsPages::getMailPoetPages();
142 return reset($pages);
143 }
144 }
145