PluginProbe ʕ •ᴥ•ʔ
WP Mail SMTP by WPForms – The Most Popular SMTP and Email Log Plugin / 4.9.0
WP Mail SMTP by WPForms – The Most Popular SMTP and Email Log Plugin v4.9.0
4.9.0 0.9.6 1.0.0 1.0.1 1.0.2 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.6.0 1.6.2 1.7.0 1.7.1 1.8.0 1.8.1 1.9.0 2.0.0 2.0.1 2.1.1 2.2.1 2.3.1 2.4.0 2.5.0 2.5.1 2.6.0 2.7.0 2.8.0 2.9.0 3.0.1 3.0.2 3.0.3 3.1.0 3.10.0 3.11.0 3.11.1 3.2.0 3.2.1 3.3.0 3.4.0 3.5.0 3.5.1 3.5.2 3.6.1 3.7.0 3.8.0 3.8.2 3.9.0 4.0.1 4.1.0 4.1.1 4.2.0 4.3.0 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.8.0 trunk 0.10.0 0.10.1 0.11.1 0.11.2 0.3.1 0.3.2 0.4 0.4.1 0.4.2 0.5.0 0.5.1 0.5.2 0.6 0.7 0.8 0.8.2 0.8.3 0.8.4 0.8.5 0.8.6 0.8.7 0.9.0 0.9.1 0.9.2 0.9.3 0.9.4 0.9.5
wp-mail-smtp / src / Migrations.php
wp-mail-smtp / src Last commit date
Abilities 5 days ago Admin 5 days ago Compatibility 5 days ago Helpers 5 days ago Integrations 5 days ago Providers 5 days ago Queue 5 days ago Reports 5 days ago Tasks 5 days ago TestEmail 5 days ago UsageTracking 5 days ago WPCLI 5 days ago AbstractConnection.php 5 days ago Conflicts.php 5 days ago Connect.php 5 days ago Connection.php 5 days ago ConnectionInterface.php 5 days ago ConnectionsManager.php 5 days ago Core.php 5 days ago DBRepair.php 5 days ago Debug.php 5 days ago EmailSendingDebug.php 5 days ago Geo.php 5 days ago MailCatcher.php 5 days ago MailCatcherInterface.php 5 days ago MailCatcherTrait.php 5 days ago MailCatcherV6.php 5 days ago Migration.php 5 days ago MigrationAbstract.php 5 days ago Migrations.php 5 days ago OptimizedEmailSending.php 5 days ago Options.php 5 days ago Processor.php 5 days ago SiteHealth.php 5 days ago Upgrade.php 5 days ago Uploads.php 5 days ago WP.php 5 days ago WPMailArgs.php 5 days ago WPMailInitiator.php 5 days ago
Migrations.php
186 lines
1 <?php
2
3 namespace WPMailSMTP;
4
5 use WP_Upgrader;
6 use WPMailSMTP\Admin\DebugEvents\Migration as DebugEventsMigration;
7 use WPMailSMTP\Admin\Recommendations\Migration as RecommendationsMigration;
8 use WPMailSMTP\Queue\Migration as QueueMigration;
9
10 /**
11 * Class Migrations.
12 *
13 * @since 4.0.0
14 */
15 class Migrations {
16
17 /**
18 * Register hooks.
19 *
20 * @since 4.0.0
21 */
22 public function hooks() {
23
24 // Initialize migrations during request in the admin panel only.
25 add_action( 'admin_init', [ $this, 'init_migrations_on_request' ] );
26
27 // Initialize migrations after plugin update.
28 add_action( 'upgrader_process_complete', [ $this, 'init_migrations_after_upgrade' ], PHP_INT_MAX, 2 );
29 add_action(
30 'wp_ajax_nopriv_wp_mail_smtp_init_migrations',
31 [ $this, 'init_migrations_ajax_handler' ]
32 );
33 }
34
35 /**
36 * Initialize DB migrations during request.
37 *
38 * @since 4.0.0
39 */
40 public function init_migrations_on_request() {
41
42 // Do not initialize migrations during AJAX and cron requests.
43 if ( WP::is_doing_ajax() || wp_doing_cron() ) {
44 return;
45 }
46
47 $this->init_migrations();
48 }
49
50 /**
51 * Initialize DB migrations.
52 *
53 * @since 4.0.0
54 */
55 private function init_migrations() {
56
57 $migrations = $this->get_migrations();
58
59 foreach ( $migrations as $migration ) {
60 if ( is_subclass_of( $migration, MigrationAbstract::class ) && $migration::is_enabled() ) {
61 ( new $migration() )->init();
62 }
63 }
64 }
65
66 /**
67 * Get migrations classes.
68 *
69 * @since 4.0.0
70 *
71 * @return array Migrations classes.
72 */
73 private function get_migrations() {
74
75 $migrations = [
76 Migration::class,
77 DebugEventsMigration::class,
78 QueueMigration::class,
79 RecommendationsMigration::class,
80 ];
81
82 /**
83 * Filters DB migrations classes.
84 *
85 * @deprecated 4.0.0
86 *
87 * @since 3.0.0
88 *
89 * @param array $migrations Migrations classes.
90 */
91 $migrations = apply_filters_deprecated(
92 'wp_mail_smtp_core_init_migrations',
93 [ $migrations ],
94 '3.10.0',
95 'wp_mail_smtp_migrations_get_migrations'
96 );
97
98 /**
99 * Filters DB migrations classes.
100 *
101 * @since 4.0.0
102 *
103 * @param array $migrations Migrations classes.
104 */
105 return apply_filters( 'wp_mail_smtp_migrations_get_migrations', $migrations );
106 }
107
108 /**
109 * Initialize DB migrations after plugin update.
110 * Initiate ajax call to perform the migration with the new plugin version code.
111 *
112 * @since 4.0.0
113 *
114 * @param WP_Upgrader $upgrader WP_Upgrader instance.
115 * @param array $options Array of update data.
116 */
117 public function init_migrations_after_upgrade( $upgrader, $options ) {
118
119 if (
120 // Skip if in admin panel.
121 ( is_admin() && ! wp_doing_ajax() ) ||
122 // Skip if it's update from plugins list page.
123 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
124 ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] === 'update-plugin' )
125 ) {
126 return;
127 }
128
129 $plugins = [];
130
131 if ( isset( $options['plugins'] ) && is_array( $options['plugins'] ) ) {
132 $plugins = $options['plugins'];
133 } elseif ( isset( $options['plugin'] ) && is_string( $options['plugin'] ) ) {
134 $plugins = [ $options['plugin'] ];
135 }
136
137 if (
138 ! in_array( 'wp-mail-smtp/wp_mail_smtp.php', $plugins, true ) &&
139 ! in_array( 'wp-mail-smtp-pro/wp_mail_smtp.php', $plugins, true )
140 ) {
141 return;
142 }
143
144 $secret = wp_hash( 'wp_mail_smtp_init_migrations' . wp_salt() );
145
146 $url = add_query_arg(
147 [
148 'action' => 'wp_mail_smtp_init_migrations',
149 ],
150 admin_url( 'admin-ajax.php' )
151 );
152
153 $timeout = (int) ini_get( 'max_execution_time' );
154
155 $args = [
156 'sslverify' => false,
157 'timeout' => $timeout ? $timeout : 30,
158 'body' => [
159 'secret' => $secret,
160 ],
161 ];
162
163 wp_remote_post( $url, $args );
164 }
165
166 /**
167 * Initialize migrations via AJAX request.
168 *
169 * @since 4.0.0
170 */
171 public function init_migrations_ajax_handler() {
172
173 // Verify the secret hash since this is a nopriv endpoint.
174 $secret = ! empty( $_POST['secret'] ) ? sanitize_text_field( wp_unslash( $_POST['secret'] ) ) : '';
175 $expected = wp_hash( 'wp_mail_smtp_init_migrations' . wp_salt() );
176
177 if ( ! hash_equals( $expected, $secret ) ) {
178 wp_send_json_error();
179 }
180
181 $this->init_migrations();
182
183 wp_send_json_success();
184 }
185 }
186