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 / Config / ServicesChecker.php
mailpoet / lib / Config Last commit date
PopulatorData 2 months ago AccessControl.php 2 years ago Activator.php 2 months ago AssetsLoader.php 2 weeks ago Capabilities.php 2 months ago Changelog.php 2 months ago DeactivationPoll.php 3 years ago DeferredAdminNotices.php 2 months ago Env.php 6 months ago Hooks.php 4 weeks ago HooksWooCommerce.php 1 month ago Initializer.php 4 weeks ago Installer.php 10 months ago Localizer.php 3 years ago Menu.php 1 month ago PersonalDataErasers.php 1 month ago PersonalDataExporters.php 1 month ago PluginActivatedHook.php 3 years ago Populator.php 2 weeks ago PrivacyPolicy.php 1 month ago Renderer.php 1 year ago RendererFactory.php 3 years ago RequirementsChecker.php 2 months ago Router.php 2 months ago ServicesChecker.php 3 years ago Shortcodes.php 1 month ago SilentUpgraderSkin.php 3 years ago SubscriberChangesNotifier.php 2 months ago TranslationUpdater.php 3 months ago TwigEnvironment.php 1 year ago TwigFileSystemCache.php 3 years ago Updater.php 4 days ago index.php 3 years ago
ServicesChecker.php
199 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\Config;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\DI\ContainerWrapper;
9 use MailPoet\Services\Bridge;
10 use MailPoet\Settings\SettingsController;
11 use MailPoet\Util\Helpers;
12 use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
13 use MailPoet\Util\License\License;
14 use MailPoet\WP\DateTime;
15 use MailPoet\WP\Notice as WPNotice;
16
17 class ServicesChecker {
18
19 /** @var SettingsController */
20 private $settings;
21
22 /** @var SubscribersFeature */
23 private $subscribersFeature;
24
25 public function __construct() {
26 $this->settings = SettingsController::getInstance();
27 $this->subscribersFeature = ContainerWrapper::getInstance()->get(SubscribersFeature::class);
28 }
29
30 public function isPremiumPluginActive() {
31 return License::getLicense() ? true : false;
32 }
33
34 public function isMailPoetAPIKeyValid($displayErrorNotice = true, $forceCheck = false) {
35 if (!$forceCheck && !Bridge::isMPSendingServiceEnabled()) {
36 return null;
37 }
38
39 $mssKeySpecified = Bridge::isMSSKeySpecified();
40 $mssKey = $this->settings->get(Bridge::API_KEY_STATE_SETTING_NAME);
41
42 if (
43 !$mssKeySpecified
44 || empty($mssKey['state'])
45 || $mssKey['state'] == Bridge::KEY_INVALID
46 ) {
47 if ($displayErrorNotice) {
48 $error = '<h3>' . __('All sending is currently paused!', 'mailpoet') . '</h3>';
49 $error .= '<p>' . __('Your key to send with MailPoet is invalid.', 'mailpoet') . '</p>';
50 $error .= '<p><a '
51 . ' href="https://account.mailpoet.com?s=' . ($this->subscribersFeature->getSubscribersCount() + 1) . '"'
52 . ' class="button button-primary" '
53 . ' target="_blank"'
54 . '>' . __('Purchase a key', 'mailpoet') . '</a></p>';
55
56 WPNotice::displayError($error, '', '', false, false);
57 }
58 return false;
59 } elseif (
60 $mssKey['state'] == Bridge::KEY_EXPIRING
61 && !empty($mssKey['data']['expire_at'])
62 ) {
63 if ($displayErrorNotice) {
64 $dateTime = new DateTime();
65 $date = $dateTime->formatDate(strtotime($mssKey['data']['expire_at']));
66 $error = Helpers::replaceLinkTags(
67 // translators: %s is a date.
68 __("Your newsletters are awesome! Don't forget to [link]upgrade your MailPoet email plan[/link] by %s to keep sending them to your subscribers.", 'mailpoet'),
69 'https://account.mailpoet.com?s=' . $this->subscribersFeature->getSubscribersCount(),
70 ['target' => '_blank']
71 );
72 $error = sprintf($error, $date);
73 WPNotice::displayWarning($error);
74 }
75 return true;
76 } elseif ($mssKey['state'] == Bridge::KEY_VALID) {
77 return true;
78 }
79
80 return false;
81 }
82
83 public function isPremiumKeyValid($displayErrorNotice = true) {
84 $premiumKeySpecified = Bridge::isPremiumKeySpecified();
85 $premiumPluginActive = License::getLicense();
86 $premiumKey = $this->settings->get(Bridge::PREMIUM_KEY_STATE_SETTING_NAME);
87
88 if (!$premiumPluginActive) {
89 $displayErrorNotice = false;
90 }
91
92 if (
93 !$premiumKeySpecified
94 || empty($premiumKey['state'])
95 || $premiumKey['state'] === Bridge::KEY_INVALID
96 || $premiumKey['state'] === Bridge::KEY_ALREADY_USED
97 ) {
98 if ($displayErrorNotice) {
99 $errorString = __('[link1]Register[/link1] your copy of the MailPoet Premium plugin to receive access to automatic upgrades and support. Need a license key? [link2]Purchase one now.[/link2]', 'mailpoet');
100 $error = Helpers::replaceLinkTags(
101 $errorString,
102 'admin.php?page=mailpoet-settings#premium',
103 [],
104 'link1'
105 );
106 $error = Helpers::replaceLinkTags(
107 $error,
108 'admin.php?page=mailpoet-upgrade',
109 [],
110 'link2'
111 );
112 WPNotice::displayWarning($error);
113 }
114 return false;
115 } elseif (
116 $premiumKey['state'] === Bridge::KEY_EXPIRING
117 && !empty($premiumKey['data']['expire_at'])
118 ) {
119 if ($displayErrorNotice) {
120 $dateTime = new DateTime();
121 $date = $dateTime->formatDate(strtotime($premiumKey['data']['expire_at']));
122 $error = Helpers::replaceLinkTags(
123 // translators: %s is a date.
124 __("Your License Key for MailPoet is expiring! Don't forget to [link]renew your license[/link] by %s to keep enjoying automatic updates and Premium support.", 'mailpoet'),
125 'https://account.mailpoet.com',
126 ['target' => '_blank']
127 );
128 $error = sprintf($error, $date);
129 WPNotice::displayWarning($error);
130 }
131 return true;
132 } elseif ($premiumKey['state'] === Bridge::KEY_VALID) {
133 return true;
134 }
135
136 return false;
137 }
138
139 public function isBundledSubscription(): bool {
140 $subscriptionType = $this->settings->get(Bridge::SUBSCRIPTION_TYPE_SETTING_NAME);
141 return $subscriptionType === Bridge::WPCOM_BUNDLE_SUBSCRIPTION_TYPE;
142 }
143
144 public function isMailPoetAPIKeyPendingApproval(): bool {
145 $mssActive = Bridge::isMPSendingServiceEnabled();
146 $mssKeyValid = $this->isMailPoetAPIKeyValid();
147 $isApproved = $this->settings->get('mta.mailpoet_api_key_state.data.is_approved');
148 $mssKeyPendingApproval = $isApproved === false || $isApproved === 'false'; // API unfortunately saves this as a string
149 return $mssActive && $mssKeyValid && $mssKeyPendingApproval;
150 }
151
152 public function isUserActivelyPaying(): bool {
153 $isPremiumKeyValid = $this->isPremiumKeyValid(false);
154
155 $mssActive = Bridge::isMPSendingServiceEnabled();
156 $isMssKeyValid = $this->isMailPoetAPIKeyValid(false);
157
158 if (!$mssActive || ($isPremiumKeyValid && !$isMssKeyValid)) {
159 return $this->subscribersFeature->hasPremiumSupport();
160 } else {
161 return $this->subscribersFeature->hasMssPremiumSupport();
162 }
163 }
164
165 /**
166 * Return a key when it can be used for account administration purposes (stats report, auth. addresses or domains administration)
167 * Key can be used when it is valid for MSS or Premium, but also when it is valid but has no privileges for MSS or Premium (API returns 403).
168 */
169 public function getValidAccountKey(): ?string {
170 if ($this->isMailPoetAPIKeyValid(false, true)) {
171 return $this->settings->get(Bridge::API_KEY_SETTING_NAME);
172 }
173 $mssKeyState = $this->settings->get(Bridge::API_KEY_STATE_SETTING_NAME);
174 if (($mssKeyState['state'] ?? null) === Bridge::KEY_VALID_UNDERPRIVILEGED) {
175 return $this->settings->get(Bridge::API_KEY_SETTING_NAME);
176 }
177
178 if ($this->isPremiumKeyValid(false)) {
179 return $this->settings->get(Bridge::PREMIUM_KEY_SETTING_NAME);
180 }
181 $premiumKeyState = $this->settings->get(Bridge::PREMIUM_KEY_STATE_SETTING_NAME);
182 if (($premiumKeyState['state'] ?? null) === Bridge::KEY_VALID_UNDERPRIVILEGED) {
183 return $this->settings->get(Bridge::PREMIUM_KEY_SETTING_NAME);
184 }
185
186 return null;
187 }
188
189 public function generatePartialApiKey(): string {
190 $key = (string)($this->getValidAccountKey());
191 if ($key) {
192 $halfKeyLength = (int)(strlen($key) / 2);
193
194 return substr($key, 0, $halfKeyLength);
195 }
196 return '';
197 }
198 }
199