PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
5.36.0 5.35.1 5.35.0 5.34.3 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 / Migrations / App / Migration_20221028_105818_App.php
mailpoet / lib / Migrations / App Last commit date
Migration_20221028_105818_App.php 3 years ago Migration_20230109_144830.php 3 years ago Migration_20230131_121621.php 3 years ago Migration_20230419_080000.php 3 years ago Migration_20230425_211517.php 3 years ago Migration_20230712_180341.php 3 years ago Migration_20230803_200413_App.php 2 years ago Migration_20230825_093531_App.php 1 year ago Migration_20231128_120355_App.php 1 year ago Migration_20240202_130053_App.php 2 years ago Migration_20240207_105912_App.php 1 year ago Migration_20240322_110443_App.php 2 years ago Migration_20240730_212419_App.php 2 years ago Migration_20241015_105511_App.php 1 year ago Migration_20241128_114257_App.php 1 year ago Migration_20250120_094614_App.php 1 year ago Migration_20250501_114655_App.php 11 months ago Migration_20260421_155908_App.php 3 months ago Migration_20260515_120000_App.php 3 months ago Migration_20260623_120000_App.php 1 month ago Migration_20260805_120000_App.php 1 week ago index.php 3 years ago
Migration_20221028_105818_App.php
250 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Migrations\App;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Cron\CronTrigger;
9 use MailPoet\Cron\Workers\StatsNotifications\Worker;
10 use MailPoet\Entities\FormEntity;
11 use MailPoet\Form\FormsRepository;
12 use MailPoet\Migrator\AppMigration;
13 use MailPoet\Settings\SettingsChangeHandler;
14 use MailPoet\Settings\SettingsController;
15 use MailPoet\Settings\TrackingConfig;
16 use MailPoet\Util\Notices\ChangedTrackingNotice;
17 use MailPoet\WP\Functions as WPFunctions;
18
19 /**
20 * Extracted from original Migration_20221028_105818.php when separating Db and App migrations.
21 */
22 class Migration_20221028_105818_App extends AppMigration {
23 /** @var SettingsController */
24 private $settings;
25
26 /** @var SettingsChangeHandler */
27 private $settingsChangeHandler;
28
29 /** @var FormsRepository */
30 private $formsRepository;
31
32 /** @var WPFunctions */
33 private $wp;
34
35 public function run(): void {
36 $this->settings = $this->container->get(SettingsController::class);
37 $this->settingsChangeHandler = $this->container->get(SettingsChangeHandler::class);
38 $this->formsRepository = $this->container->get(FormsRepository::class);
39 $this->wp = $this->container->get(WPFunctions::class);
40
41 $this->updateDefaultInactiveSubscriberTimeRange();
42 $this->setDefaultValueForLoadingThirdPartyLibrariesForExistingInstalls();
43 $this->disableMailPoetCronTrigger();
44
45 // POPULATOR
46 $this->enableStatsNotificationsForAutomatedEmails();
47 $this->addPlacementStatusToForms();
48 $this->migrateFormPlacement();
49 $this->updateToUnifiedTrackingSettings();
50 }
51
52 private function updateDefaultInactiveSubscriberTimeRange(): bool {
53 // Skip if the installed version is newer than the release that preceded this migration, or if it's a fresh install
54 $currentlyInstalledVersion = (string)$this->settings->get('db_version', '3.78.1');
55 if (version_compare($currentlyInstalledVersion, '3.78.0', '>')) {
56 return false;
57 }
58
59 $currentValue = (int)$this->settings->get('deactivate_subscriber_after_inactive_days');
60 if ($currentValue === 180) {
61 $this->settings->set('deactivate_subscriber_after_inactive_days', 365);
62 $this->settingsChangeHandler->onInactiveSubscribersIntervalChange();
63 }
64
65 return true;
66 }
67
68 private function setDefaultValueForLoadingThirdPartyLibrariesForExistingInstalls(): bool {
69 // skip the migration if the DB version is higher than 3.91.1 or is not set (a new installation)
70 if (version_compare($this->settings->get('db_version', '3.91.2'), '3.91.1', '>')) {
71 return false;
72 }
73
74 $thirdPartyScriptsEnabled = $this->settings->get('3rd_party_libs');
75 if (is_null($thirdPartyScriptsEnabled)) {
76 // keep loading 3rd party libraries for existing users so the functionality is not broken
77 $this->settings->set('3rd_party_libs.enabled', '1');
78 }
79
80 return true;
81 }
82
83 private function enableStatsNotificationsForAutomatedEmails() {
84 if (version_compare((string)$this->settings->get('db_version', '3.31.2'), '3.31.1', '>')) {
85 return;
86 }
87 $settings = $this->settings->get(Worker::SETTINGS_KEY);
88 $settings['automated'] = true;
89 $this->settings->set(Worker::SETTINGS_KEY, $settings);
90 }
91
92 private function addPlacementStatusToForms() {
93 if (version_compare((string)$this->settings->get('db_version', '3.49.0'), '3.48.1', '>')) {
94 return;
95 }
96 $forms = $this->formsRepository->findAll();
97 foreach ($forms as $form) {
98 $settings = $form->getSettings();
99 if (
100 (isset($settings['place_form_bellow_all_posts']) && $settings['place_form_bellow_all_posts'] === '1')
101 || (isset($settings['place_form_bellow_all_pages']) && $settings['place_form_bellow_all_pages'] === '1')
102 ) {
103 $settings['form_placement_bellow_posts_enabled'] = '1';
104 } else {
105 $settings['form_placement_bellow_posts_enabled'] = '';
106 }
107 if (
108 (isset($settings['place_popup_form_on_all_posts']) && $settings['place_popup_form_on_all_posts'] === '1')
109 || (isset($settings['place_popup_form_on_all_pages']) && $settings['place_popup_form_on_all_pages'] === '1')
110 ) {
111 $settings['form_placement_popup_enabled'] = '1';
112 } else {
113 $settings['form_placement_popup_enabled'] = '';
114 }
115 if (
116 (isset($settings['place_fixed_bar_form_on_all_posts']) && $settings['place_fixed_bar_form_on_all_posts'] === '1')
117 || (isset($settings['place_fixed_bar_form_on_all_pages']) && $settings['place_fixed_bar_form_on_all_pages'] === '1')
118 ) {
119 $settings['form_placement_fixed_bar_enabled'] = '1';
120 } else {
121 $settings['form_placement_fixed_bar_enabled'] = '';
122 }
123 if (
124 (isset($settings['place_slide_in_form_on_all_posts']) && $settings['place_slide_in_form_on_all_posts'] === '1')
125 || (isset($settings['place_slide_in_form_on_all_pages']) && $settings['place_slide_in_form_on_all_pages'] === '1')
126 ) {
127 $settings['form_placement_slide_in_enabled'] = '1';
128 } else {
129 $settings['form_placement_slide_in_enabled'] = '';
130 }
131 $form->setSettings($settings);
132 }
133 $this->formsRepository->flush();
134 }
135
136 private function migrateFormPlacement() {
137 if (version_compare((string)$this->settings->get('db_version', '3.50.0'), '3.49.1', '>')) {
138 return;
139 }
140 $forms = $this->formsRepository->findAll();
141 foreach ($forms as $form) {
142 $settings = $form->getSettings();
143 if (!is_array($settings)) continue;
144 $settings['form_placement'] = [
145 FormEntity::DISPLAY_TYPE_POPUP => [
146 'enabled' => $settings['form_placement_popup_enabled'],
147 'delay' => $settings['popup_form_delay'] ?? 0,
148 'styles' => $settings['popup_styles'] ?? [],
149 'posts' => [
150 'all' => $settings['place_popup_form_on_all_posts'] ?? '',
151 ],
152 'pages' => [
153 'all' => $settings['place_popup_form_on_all_pages'] ?? '',
154 ],
155 ],
156 FormEntity::DISPLAY_TYPE_FIXED_BAR => [
157 'enabled' => $settings['form_placement_fixed_bar_enabled'],
158 'delay' => $settings['fixed_bar_form_delay'] ?? 0,
159 'styles' => $settings['fixed_bar_styles'] ?? [],
160 'position' => $settings['fixed_bar_form_position'] ?? 'top',
161 'posts' => [
162 'all' => $settings['place_fixed_bar_form_on_all_posts'] ?? '',
163 ],
164 'pages' => [
165 'all' => $settings['place_fixed_bar_form_on_all_pages'] ?? '',
166 ],
167 ],
168 FormEntity::DISPLAY_TYPE_BELOW_POST => [
169 'enabled' => $settings['form_placement_bellow_posts_enabled'],
170 'styles' => $settings['below_post_styles'] ?? [],
171 'posts' => [
172 'all' => $settings['place_form_bellow_all_posts'] ?? '',
173 ],
174 'pages' => [
175 'all' => $settings['place_form_bellow_all_pages'] ?? '',
176 ],
177 ],
178 FormEntity::DISPLAY_TYPE_SLIDE_IN => [
179 'enabled' => $settings['form_placement_slide_in_enabled'],
180 'delay' => $settings['slide_in_form_delay'] ?? 0,
181 'position' => $settings['slide_in_form_position'] ?? 'right',
182 'styles' => $settings['slide_in_styles'] ?? [],
183 'posts' => [
184 'all' => $settings['place_slide_in_form_on_all_posts'] ?? '',
185 ],
186 'pages' => [
187 'all' => $settings['place_slide_in_form_on_all_pages'] ?? '',
188 ],
189 ],
190 FormEntity::DISPLAY_TYPE_OTHERS => [
191 'styles' => $settings['other_styles'] ?? [],
192 ],
193 ];
194 if (isset($settings['form_placement_slide_in_enabled'])) unset($settings['form_placement_slide_in_enabled']);
195 if (isset($settings['form_placement_fixed_bar_enabled'])) unset($settings['form_placement_fixed_bar_enabled']);
196 if (isset($settings['form_placement_popup_enabled'])) unset($settings['form_placement_popup_enabled']);
197 if (isset($settings['form_placement_bellow_posts_enabled'])) unset($settings['form_placement_bellow_posts_enabled']);
198 if (isset($settings['place_form_bellow_all_pages'])) unset($settings['place_form_bellow_all_pages']);
199 if (isset($settings['place_form_bellow_all_posts'])) unset($settings['place_form_bellow_all_posts']);
200 if (isset($settings['place_popup_form_on_all_pages'])) unset($settings['place_popup_form_on_all_pages']);
201 if (isset($settings['place_popup_form_on_all_posts'])) unset($settings['place_popup_form_on_all_posts']);
202 if (isset($settings['popup_form_delay'])) unset($settings['popup_form_delay']);
203 if (isset($settings['place_fixed_bar_form_on_all_pages'])) unset($settings['place_fixed_bar_form_on_all_pages']);
204 if (isset($settings['place_fixed_bar_form_on_all_posts'])) unset($settings['place_fixed_bar_form_on_all_posts']);
205 if (isset($settings['fixed_bar_form_delay'])) unset($settings['fixed_bar_form_delay']);
206 if (isset($settings['fixed_bar_form_position'])) unset($settings['fixed_bar_form_position']);
207 if (isset($settings['place_slide_in_form_on_all_pages'])) unset($settings['place_slide_in_form_on_all_pages']);
208 if (isset($settings['place_slide_in_form_on_all_posts'])) unset($settings['place_slide_in_form_on_all_posts']);
209 if (isset($settings['slide_in_form_delay'])) unset($settings['slide_in_form_delay']);
210 if (isset($settings['slide_in_form_position'])) unset($settings['slide_in_form_position']);
211 if (isset($settings['other_styles'])) unset($settings['other_styles']);
212 if (isset($settings['slide_in_styles'])) unset($settings['slide_in_styles']);
213 if (isset($settings['below_post_styles'])) unset($settings['below_post_styles']);
214 if (isset($settings['fixed_bar_styles'])) unset($settings['fixed_bar_styles']);
215 if (isset($settings['popup_styles'])) unset($settings['popup_styles']);
216 $form->setSettings($settings);
217 }
218 $this->formsRepository->flush();
219 }
220
221 private function updateToUnifiedTrackingSettings() {
222 if (version_compare((string)$this->settings->get('db_version', '3.74.3'), '3.74.2', '>')) {
223 return;
224 }
225 $emailTracking = $this->settings->get('tracking.enabled', true);
226 $wooTrackingCookie = $this->settings->get('woocommerce.accept_cookie_revenue_tracking.enabled');
227 if ($wooTrackingCookie === null) { // No setting for WooCommerce Cookie Tracking - WooCommerce was not active
228 $trackingLevel = $emailTracking ? TrackingConfig::LEVEL_FULL : TrackingConfig::LEVEL_BASIC;
229 } elseif ($wooTrackingCookie) { // WooCommerce Cookie Tracking enabled
230 $trackingLevel = TrackingConfig::LEVEL_FULL;
231 // Cookie was enabled but tracking disabled and we are switching to full.
232 // So we activate an admin notice to let the user know that we activated tracking
233 if (!$emailTracking) {
234 $this->wp->setTransient(ChangedTrackingNotice::OPTION_NAME, true);
235 }
236 } else { // WooCommerce Tracking Cookie Disabled
237 $trackingLevel = $emailTracking ? TrackingConfig::LEVEL_PARTIAL : TrackingConfig::LEVEL_BASIC;
238 }
239 $this->settings->set('tracking.level', $trackingLevel);
240 }
241
242 private function disableMailPoetCronTrigger() {
243 $method = $this->settings->get(CronTrigger::SETTING_NAME . '.method');
244 if ($method !== 'MailPoet') {
245 return;
246 }
247 $this->settings->set(CronTrigger::SETTING_NAME . '.method', CronTrigger::METHOD_WORDPRESS);
248 }
249 }
250