PluginProbe ʕ •ᴥ•ʔ
WP 2FA – Two-factor authentication for WordPress / 2.6.0
WP 2FA – Two-factor authentication for WordPress v2.6.0
4.0.0 1.7.1 2.0.0 2.0.1 2.1.0 2.2.0 2.2.1 2.3.0 2.4.0 2.4.1 2.4.2 2.5.0 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.8.0 2.9.0 2.9.1 2.9.2 2.9.3 3.0.0 3.0.1 3.1.0 3.1.1 3.1.1.2 trunk 1.2.0 1.3.0 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.6.0 1.6.1 1.6.2 1.7.0
wp-2fa / includes / classes / Utils / class-migration.php
wp-2fa / includes / classes / Utils Last commit date
class-abstract-migration.php 2 years ago class-date-time-utils.php 2 years ago class-debugging.php 2 years ago class-generate-modal.php 2 years ago class-migration.php 2 years ago class-request-utils.php 2 years ago class-settings-utils.php 2 years ago class-user-utils.php 2 years ago index.php 5 years ago
class-migration.php
344 lines
1 <?php
2 /**
3 * Responsible for plugin updates.
4 *
5 * @package wp2fa
6 * @subpackage utils
7 * @copyright %%YEAR%% Melapress
8 * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
9 * @link https://wordpress.org/plugins/wp-2fa/
10 */
11
12 declare(strict_types=1);
13
14 namespace WP2FA\Utils;
15
16 use WP2FA\Utils\Abstract_Migration;
17 use WP2FA\Utils\User_Utils;
18 use WP2FA\Utils\Settings_Utils;
19
20 defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
21
22 /**
23 * Migration class
24 */
25 if ( ! class_exists( '\WP2FA\Utils\Migration' ) ) {
26
27 /**
28 * Put all you migration methods here
29 *
30 * @package WP2FA\Utils
31 * @since 1.6
32 */
33 class Migration extends Abstract_Migration {
34
35 /**
36 * The name of the option from which we should extract version
37 * Note: version is expected in version format - 1.0.0; 1; 1.0; 1.0.0.0
38 * Note: only numbers will be processed
39 *
40 * @var string
41 *
42 * @since 1.6.0
43 */
44 protected static $version_option_name = WP_2FA_PREFIX . 'plugin_version';
45
46 /**
47 * The constant name where the plugin version is stored
48 * Note: version is expected in version format - 1.0.0; 1; 1.0; 1.0.0.0
49 * Note: only numbers will be processed
50 *
51 * @var string
52 *
53 * @since 1.6.0
54 */
55 protected static $const_name_of_plugin_version = 'WP_2FA_VERSION';
56
57 /**
58 * The name of the plugin settings
59 *
60 * @var string
61 */
62 private static $plugin_settings_name = WP_2FA_SETTINGS_NAME;
63
64 /**
65 * The name of the plugin policy settings
66 *
67 * @var string
68 */
69 private static $plugin_policy_name = WP_2FA_POLICY_SETTINGS_NAME;
70
71 /**
72 * The name of the plugin white label settings
73 *
74 * @var string
75 */
76 private static $plugin_white_label_name = WP_2FA_WHITE_LABEL_SETTINGS_NAME;
77
78 /**
79 * The name of the plugin email settings
80 *
81 * @var string
82 */
83 private static $plugin_email_settings_name = WP_2FA_EMAIL_SETTINGS_NAME;
84
85 /**
86 * Migration for version upto 1.6.0
87 *
88 * @return void
89 * @since 1.6.0
90 */
91 protected static function migrate_up_to_160() {
92 $settings = self::get_settings( self::$plugin_settings_name );
93 if ( ! is_array( $settings ) ) {
94 return;
95 }
96
97 $needs_update = false;
98
99 $settings_to_convert = array( 'enforced_roles', 'enforced_users', 'excluded_users', 'excluded_roles' );
100 foreach ( $settings_to_convert as $setting_name ) {
101 if ( array_key_exists( $setting_name, $settings ) && ! is_array( $settings[ $setting_name ] ) ) {
102 $settings[ $setting_name ] = array_filter(
103 explode( ',', $settings[ $setting_name ] )
104 );
105 $needs_update = true;
106 }
107 }
108
109 if ( ! isset( $settings['backup_codes_enabled'] ) ) {
110 $settings['backup_codes_enabled'] = 'yes';
111 $needs_update = true;
112 }
113
114 if ( $needs_update ) {
115 // Update settings.
116 self::set_settings( self::$plugin_settings_name, $settings );
117 }
118 }
119
120 /**
121 * Migration for version upto 1.6.2
122 *
123 * @return void
124 * @since 1.6.2
125 */
126 protected static function migrate_up_to_162() {
127 $settings = self::get_settings( self::$plugin_settings_name );
128 if ( ! is_array( $settings ) ) {
129 return;
130 }
131
132 $needs_update = false;
133
134 $settings_to_convert = array( 'excluded_sites' );
135 foreach ( $settings_to_convert as $setting_name ) {
136 if ( array_key_exists( $setting_name, $settings ) && ! is_array( $settings[ $setting_name ] ) ) {
137 $original_settings_split = array_filter(
138 explode( ',', $settings[ $setting_name ] )
139 );
140 $settings[ $setting_name ] = array();
141 foreach ( $original_settings_split as $value ) {
142 $settings[ $setting_name ][] = mb_substr( $value, mb_strrpos( $value, ':' ) + 1 );
143 }
144 $needs_update = true;
145 }
146 }
147
148 self::migrate_up_to_160();
149
150 if ( $needs_update ) {
151 // Update settings.
152 self::set_settings( self::$plugin_settings_name, $settings );
153 }
154 }
155
156 /**
157 * Migration for version upto 1.5.0
158 *
159 * @return void
160 */
161 protected static function migrate_up_to_150() {
162 $settings = self::get_settings( self::$plugin_settings_name );
163
164 if ( is_array( $settings ) && array_key_exists( 'enforcment-policy', $settings ) ) {
165 // Correct setting name.
166 $settings['enforcement-policy'] = $settings['enforcment-policy'];
167 // Remove old setting.
168 unset( $settings['enforcment-policy'] );
169 // Update settings.
170 self::set_settings( self::$plugin_settings_name, $settings );
171 }
172 }
173
174 /**
175 * Migration for version upto 1.7.0
176 *
177 * @return void
178 */
179 protected static function migrate_up_to_170() {
180 $settings = self::get_settings( self::$plugin_settings_name );
181
182 if ( is_array( $settings ) && array_key_exists( 'notify_users', $settings ) ) {
183 // Remove old setting.
184 unset( $settings['notify_users'] );
185 // Update settings.
186 self::set_settings( self::$plugin_settings_name, $settings );
187 }
188
189 $email_settings = self::get_settings( self::$plugin_email_settings_name );
190 $items_to_remove = array( 'send_enforced_email', 'enforced_email_subject', 'enforced_email_body' );
191
192 if ( is_array( $email_settings ) && User_Utils::in_array_all( $items_to_remove, $email_settings ) ) {
193 foreach ( $items_to_remove as $item ) {
194 if ( isset( $email_settings[ $item ] ) ) {
195 unset( $email_settings[ $item ] );
196 }
197 }
198 // Update settings.
199 self::set_settings( self::$plugin_email_settings_name, $email_settings );
200 }
201 }
202
203 /**
204 * Migration for version upto 2.0.0
205 * Separates the current settings into 3 different types of settings:
206 * - Policy
207 * - General
208 * - White label
209 *
210 * @return void
211 */
212 protected static function migrate_up_to_200() {
213 $settings = self::get_settings( self::$plugin_settings_name );
214
215 if ( is_array( $settings ) ) {
216
217 $new_settings_array = array_flip(
218 array(
219 'enable_grace_cron',
220 'limit_access',
221 'delete_data_upon_uninstall',
222 'enable_destroy_session',
223 )
224 );
225
226 $new_white_label_array = array_flip(
227 array(
228 'default-text-code-page',
229 )
230 );
231
232 $settings_array = array_intersect_key(
233 $settings,
234 $new_settings_array
235 );
236
237 $settings = array_diff_key( $settings, $new_settings_array );
238
239 self::set_settings( self::$plugin_settings_name, $settings_array );
240
241 $white_label_settings = array_intersect_key(
242 $settings,
243 $new_white_label_array
244 );
245
246 $settings = array_diff_key( $settings, $new_white_label_array );
247
248 self::set_settings( self::$plugin_white_label_name, $white_label_settings );
249
250 self::set_settings( self::$plugin_policy_name, $settings );
251 }
252 }
253
254 /**
255 * Migration for version upto 2.2.0
256 *
257 * @return void
258 */
259 protected static function migrate_up_to_220() {
260 global $wpdb;
261
262 $new_prefix = 'wp_2fa_trusted_device_';
263 $old_prefix = 'wp2fa_trusted_device_';
264
265 delete_transient( 'wp_2fa_config_file_hash' );
266
267 $wpdb->query(
268 $wpdb->prepare(
269 "
270 UPDATE $wpdb->usermeta
271 SET meta_key = REPLACE( meta_key, %s, %s )
272 WHERE meta_key LIKE %s
273 ",
274 array(
275 $old_prefix,
276 $new_prefix,
277 $old_prefix . '%',
278 )
279 )
280 );
281 }
282
283 /**
284 * Migration for version upto 2.3.0
285 *
286 * @return void
287 */
288 protected static function migrate_up_to_230() {
289
290 $version = self::get_settings( self::$version_option_name );
291
292 if ( $version && version_compare( $version, '2.2.1', '<=' ) ) {
293 $settings = self::get_settings( self::$plugin_white_label_name );
294
295 if ( isset( $settings['enable_wizard_styling'] ) ) {
296 $settings['enable_wizard_styling'] = false;
297 } else {
298 $settings = array();
299 $settings['enable_wizard_styling'] = false;
300 }
301
302 self::set_settings( self::$plugin_white_label_name, $settings );
303 }
304 }
305
306 /**
307 * Migration for version upto 2.4.0
308 *
309 * @return void
310 */
311 protected static function migrate_up_to_240() {
312
313 \delete_transient( 'wp_2fa_config_file_hash' );
314
315 if ( \wp_next_scheduled( 'wp_2fa_check_grace_period_status' ) ) {
316 \wp_clear_scheduled_hook( 'wp_2fa_check_grace_period_status' );
317 }
318 }
319
320 /**
321 * Returns the plugin settings by a given setting type
322 *
323 * @param mixed $setting_name - The setting which needs to be extracted.
324 *
325 * @return mixed
326 */
327 private static function get_settings( $setting_name ) {
328 return Settings_Utils::get_option( $setting_name );
329 }
330
331 /**
332 * Updates the plugin settings
333 *
334 * @param mixed $setting_name - The setting which needs to be updated.
335 * @param mixed $settings - The settings values.
336 *
337 * @return void
338 */
339 private static function set_settings( $setting_name, $settings ) {
340 Settings_Utils::update_option( $setting_name, $settings );
341 }
342 }
343 }
344