PluginProbe ʕ •ᴥ•ʔ
WP 2FA – Two-factor authentication for WordPress / 2.1.0
WP 2FA – Two-factor authentication for WordPress v2.1.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 / Migration.php
wp-2fa / includes / classes / Utils Last commit date
AbstractMigration.php 4 years ago DateTimeUtils.php 4 years ago Debugging.php 5 years ago GenerateModal.php 4 years ago Migration.php 4 years ago RequestUtils.php 4 years ago SettingsUtils.php 4 years ago UserUtils.php 4 years ago index.php 5 years ago
Migration.php
254 lines
1 <?php
2 namespace WP2FA\Utils;
3
4 use \WP2FA\Utils\UserUtils as UserUtils;
5 use WP2FA\Utils\SettingsUtils as SettingsUtils;
6
7 defined( 'ABSPATH' ) || exit; // Exit if accessed directly
8
9 /**
10 * Migration class
11 */
12 if ( ! class_exists( '\WP2FA\Utils\Migration' ) ) {
13
14 /**
15 * Put all you migration methods here
16 *
17 * @package WP2FA\Utils
18 * @since 1.6
19 */
20 class Migration extends AbstractMigration {
21
22 /**
23 * The name of the option from which we should extact version
24 * Note: version is expected in version format - 1.0.0; 1; 1.0; 1.0.0.0
25 * Note: only numbers will be processed
26 */
27 protected static $versionOptionName = WP_2FA_PREFIX . 'plugin_version';
28
29 /**
30 * The constant name where the plugin version is stored
31 * Note: version is expected in version format - 1.0.0; 1; 1.0; 1.0.0.0
32 * Note: only numbers will be processed
33 */
34 protected static $constNameOfPluginVersion = 'WP_2FA_VERSION';
35
36 /**
37 * The name of the plugin settings
38 *
39 * @var string
40 */
41 private static $pluginSettingsName = WP_2FA_SETTINGS_NAME;
42
43 /**
44 * The name of the plugin policy settings
45 *
46 * @var string
47 */
48 private static $pluginPolicyName = WP_2FA_POLICY_SETTINGS_NAME;
49
50 /**
51 * The name of the plugin white label settings
52 *
53 * @var string
54 */
55 private static $pluginWhiteLabelName = WP_2FA_WHITE_LABEL_SETTINGS_NAME;
56
57 /**
58 * The name of the plugin email settings
59 *
60 * @var string
61 */
62 private static $pluginEmailSettingsName = WP_2FA_EMAIL_SETTINGS_NAME;
63
64 /**
65 * Migration for version upto 1.6.0
66 *
67 * @return void
68 * @since 1.6.0
69 */
70 protected static function migrateUpTo_160() {
71 $settings = self::getSettings( self::$pluginSettingsName );
72 if ( ! is_array( $settings ) ) {
73 return;
74 }
75
76 $needsUpdate = false;
77
78 $settings_to_convert = [ 'enforced_roles', 'enforced_users', 'excluded_users', 'excluded_roles' ];
79 foreach ( $settings_to_convert as $setting_name ) {
80 if ( array_key_exists( $setting_name, $settings ) && ! is_array( $settings[ $setting_name ] ) ) {
81 $settings[ $setting_name ] = array_filter(
82 explode( ',', $settings[ $setting_name ] )
83 );
84 $needsUpdate = true;
85 }
86 }
87
88 if ( ! isset( $settings['backup_codes_enabled'] ) ) {
89 $settings['backup_codes_enabled'] = 'yes';
90 $needsUpdate = true;
91 }
92
93 if ( $needsUpdate ) {
94 // Update settings.
95 self::setSettings( self::$pluginSettingsName, $settings );
96 }
97 }
98
99 /**
100 * Migration for version upto 1.6.2
101 *
102 * @return void
103 * @since 1.6.2
104 */
105 protected static function migrateUpTo_162() {
106 $settings = self::getSettings( self::$pluginSettingsName );
107 if ( ! is_array( $settings ) ) {
108 return;
109 }
110
111 $needsUpdate = false;
112
113 $settings_to_convert = [ 'excluded_sites' ];
114 foreach ( $settings_to_convert as $setting_name ) {
115 if ( array_key_exists( $setting_name, $settings ) && ! is_array( $settings[ $setting_name ] ) ) {
116 $originalSettingsSplit = array_filter(
117 explode( ',', $settings[ $setting_name ] )
118 );
119 $settings[ $setting_name ] = [];
120 foreach ( $originalSettingsSplit as $value ) {
121 $settings[ $setting_name ][] = mb_substr( $value, mb_strrpos( $value, ':' ) + 1 );
122 }
123 $needsUpdate = true;
124 }
125 }
126
127 self::migrateUpTo_160();
128
129 if ( $needsUpdate ) {
130 // Update settings.
131 self::setSettings( self::$pluginSettingsName, $settings );
132 }
133 }
134
135 /**
136 * Migration for version upto 1.5.0
137 *
138 * @return void
139 */
140 protected static function migrateUpTo_150() {
141 $settings = self::getSettings( self::$pluginSettingsName );
142
143 if ( is_array( $settings ) && array_key_exists( 'enforcment-policy', $settings ) ) {
144 // Correct setting name.
145 $settings['enforcement-policy'] = $settings['enforcment-policy'];
146 // Remove old setting.
147 unset( $settings['enforcment-policy'] );
148 // Update settings.
149 self::setSettings( self::$pluginSettingsName, $settings );
150 }
151 }
152
153 /**
154 * Migration for version upto 1.7.0
155 *
156 * @return void
157 */
158 protected static function migrateUpTo_170() {
159 $settings = self::getSettings( self::$pluginSettingsName );
160
161 if ( is_array( $settings ) && array_key_exists( 'notify_users', $settings ) ) {
162 // Remove old setting.
163 unset( $settings['notify_users'] );
164 // Update settings.
165 self::setSettings( self::$pluginSettingsName, $settings );
166 }
167
168 $email_settings = self::getSettings( self::$pluginEmailSettingsName );
169 $items_to_remove = [ 'send_enforced_email', 'enforced_email_subject', 'enforced_email_body' ];
170
171 if ( is_array( $email_settings ) && UserUtils::in_array_all( $items_to_remove, $email_settings ) ) {
172 foreach ( $items_to_remove as $item ) {
173 if ( isset( $email_settings[ $item ] ) ) {
174 unset( $email_settings[ $item ] );
175 }
176 }
177 // Update settings.
178 self::setSettings( self::$pluginEmailSettingsName, $email_settings );
179 }
180 }
181
182 /**
183 * Migration for version upto 2.0.0
184 * Separates the current settings into 3 different types of settings:
185 * - Policy
186 * - General
187 * - White label
188 *
189 * @return void
190 */
191 protected static function migrateUpTo_200() {
192 $settings = self::getSettings( self::$pluginSettingsName );
193
194 if ( is_array( $settings ) ) {
195
196 $new_settings_array = array_flip(
197 array(
198 'enable_grace_cron',
199 'limit_access',
200 'delete_data_upon_uninstall',
201 'enable_destroy_session',
202 )
203 );
204
205 $new_white_label_array = array_flip(
206 array(
207 'default-text-code-page',
208 )
209 );
210
211 $settings_array = array_intersect_key(
212 $settings,
213 $new_settings_array
214 );
215
216 $settings = array_diff_key( $settings, $new_settings_array );
217
218 self::setSettings( self::$pluginSettingsName, $settings_array );
219
220 $white_label_settings = array_intersect_key(
221 $settings,
222 $new_white_label_array
223 );
224
225 $settings = array_diff_key( $settings, $new_white_label_array );
226
227 self::setSettings( self::$pluginWhiteLabelName, $white_label_settings );
228
229 self::setSettings( self::$pluginPolicyName, $settings );
230 }
231 }
232
233 /**
234 * Returns the plugin settings by a given setting type
235 *
236 * @return mixed
237 */
238 private static function getSettings( $setting_name ) {
239 return SettingsUtils::get_option( $setting_name );
240 }
241
242 /**
243 * Updates the plugin settings
244 *
245 * @param mixed $settings
246 *
247 * @return void
248 */
249 private static function setSettings( $setting_name, $settings ) {
250 SettingsUtils::update_option( $setting_name, $settings );
251 }
252 }
253 }
254