PluginProbe ʕ •ᴥ•ʔ
Transferito: WP Migration / 11.4.0
Transferito: WP Migration v11.4.0
trunk 11.4.0 12.0.0 13.1.0 14.0.0 14.0.11 14.0.7 14.1.0 14.1.1 14.1.2 14.1.3 14.1.4
transferito / src / Models / Settings / Setup.php
transferito / src / Models / Settings Last commit date
Setup.php 1 year ago Telemetry.php 1 year ago
Setup.php
454 lines
1 <?php
2
3 namespace Transferito\Models\Settings;
4
5 use Transferito\Models\Core\Api as TransferitoAPI;
6 use Transferito\Models\Core\Config;
7
8 class Setup {
9
10 /**
11 * Holds the values to be used in the fields callbacks
12 */
13 private $options;
14 private $emptyApiKeys;
15 private $api;
16
17 public function __construct()
18 {
19 if (current_user_can('activate_plugins')) {
20 add_action( 'admin_menu', array($this, "createMenuPage"));
21 add_action( 'admin_init', array($this, "createOptions"));
22 add_action( 'admin_enqueue_scripts', array($this, "loadTransferitoAssets"));
23 add_action( 'admin_notices', array($this, "userNotification") );
24 add_action( 'plugin_action_links_transferito/transferito.php', array($this, "actionLinks" ));
25
26
27 add_filter( 'script_loader_tag', array($this, "modifyScripts"), 10, 3 );
28 add_filter( 'plugin_row_meta', array($this, "upgradePluginMetaLink"), 100, 4 );
29
30 $this->api = new TransferitoAPI();
31 $this->options = get_option('transferito_settings_option');
32 $publicKey = isset($this->options['public_transferito_key']) ? $this->options['public_transferito_key'] : '';
33 $secretKey = isset($this->options['secret_transferito_key']) ? $this->options['secret_transferito_key'] : '';
34 $this->emptyApiKeys = filter_var(!($publicKey && $secretKey), FILTER_VALIDATE_BOOLEAN);
35
36 set_transient('transferito_empty_keys', $this->emptyApiKeys);
37 }
38 }
39
40 public function actionLinks($links)
41 {
42 $links = array_merge(
43 array(
44 '<a href="' . esc_url( admin_url( '/admin.php?page=transferito-main' ) ) . '">' . __( 'Start Migration', 'textdomain' ) . '</a>',
45 ),
46 $links
47 );
48
49 return $links;
50 }
51
52 public function upgradePluginMetaLink($plugin_meta, $plugin_file, $plugin_data, $status)
53 {
54 if ( false !== strpos($plugin_file, 'transferito.php') ) {
55 $pro_slug = plugin_basename( __FILE__ );
56 $installed_plugins = get_plugins();
57 $is_pro_installed = array_key_exists( $pro_slug, $installed_plugins ) || in_array( $pro_slug, $installed_plugins, true );
58
59 $plugin_meta[] = sprintf(
60 '<a style="color: #B30507; font-weight: bold;" href="https://transferito.com/pricing/" rel="noopener noreferrer" title="Go Pro" target="_blank">%1$s <span class="dashicons dashicons-external"></span></a>',
61 __('Upgrade to Premium', 'text_domain')
62 );
63 }
64 return $plugin_meta;
65 }
66
67 public function userNotification()
68 {
69 $showMessage = get_transient( 'transferito_settings_update_counter' );
70
71 if ($showMessage) {
72 ?>
73 <div class="notice notice-success is-dismissible">
74 <p>Your settings have been updated!</p>
75 </div>
76 <?php
77 }
78
79 delete_transient('transferito_settings_update_counter');
80 }
81
82 public function createMenuPage()
83 {
84 add_menu_page(
85 __( 'Transferito1', 'textdomain' ),
86 'Transferito',
87 'manage_options',
88 'transferito-main',
89 '',
90 'none',
91 26
92 );
93
94 add_submenu_page(
95 'transferito-main',
96 'Start Migration',
97 'Start Migration',
98 'manage_options',
99 'transferito-main',
100 array($this, 'createTransferHTML')
101 );
102
103 add_submenu_page(
104 'transferito-main',
105 'Settings',
106 'Settings',
107 'manage_options',
108 'transferito-settings',
109 array($this, 'settingsHTML')
110 );
111
112
113 }
114
115 public function createOptions()
116 {
117 register_setting(
118 'transferito_settings_group', // Option group
119 'transferito_settings_option', // Option name
120 array( $this, 'sanitize' ) // Sanitize
121 );
122
123 add_settings_section(
124 'transferito_settings_section', // ID
125 '', // Title
126 array( $this, 'settingSection' ), // Callback
127 'transferito-settings' // Page
128 );
129
130 /**
131 * API Keys fields
132 */
133 add_settings_field(
134 'public_transferito_key', // ID
135 'Public Key', // Title
136 array( $this, 'publicKeyField' ), // Callback
137 'transferito-settings', // Page
138 'transferito_settings_section'
139 );
140
141 add_settings_field(
142 'secret_transferito_key', // ID
143 'Secret Key', // Title
144 array( $this, 'secretKeyField' ), // Callback
145 'transferito-settings', // Page
146 'transferito_settings_section'
147 );
148
149 add_settings_field(
150 'transferito_chunk_size', // ID
151 'Set download chunk size', // Title
152 array( $this, 'chunkSizeField' ), // Callback
153 'transferito-settings', // Page
154 'transferito_settings_section'
155 );
156
157 add_settings_field(
158 'transferito_upload_chunk_size', // ID
159 'Set upload chunk size', // Title
160 array( $this, 'uploadChunkSizeField' ), // Callback
161 'transferito-settings', // Page
162 'transferito_settings_section'
163 );
164
165 add_settings_field(
166 'transferito_force_upload', // ID
167 'Always upload to our secure servers', // Title
168 array( $this, 'forceUploadField' ), // Callback
169 'transferito-settings', // Page
170 'transferito_settings_section'
171 );
172
173 add_settings_field(
174 'transferito_force_tar_backup', // ID
175 'Use TAR as default compression format', // Title
176 array( $this, 'forceTarArchive' ), // Callback
177 'transferito-settings', // Page
178 'transferito_settings_section'
179 );
180
181 add_settings_field(
182 'transferito_include_htaccess', // ID
183 'Include htaccess file', // Title
184 array( $this, 'includeHtaccess' ), // Callback
185 'transferito-settings', // Page
186 'transferito_settings_section'
187 );
188
189 add_settings_field(
190 'transferito_use_default_collation', // ID
191 'Use default database configuration', // Title
192 array( $this, 'useDefaultCollation' ), // Callback
193 'transferito-settings', // Page
194 'transferito_settings_section'
195 );
196
197 add_settings_field(
198 'transferito_bypass_exec_archive_creation', // ID
199 'Create backup file without using exec', // Title
200 array( $this, 'bypassExecArchiveCreation' ), // Callback
201 'transferito-settings', // Page
202 'transferito_settings_section'
203 );
204
205 add_settings_field(
206 'transferito_disable_wordpress_cache', // ID
207 'Disable WordPress object cache', // Title
208 array( $this, 'disableWordPressObjectCache' ), // Callback
209 'transferito-settings', // Page
210 'transferito_settings_section'
211 );
212
213 add_settings_field(
214 'transferito_malcare_waf_plugin_fix', // ID
215 'Disable Malcare WAF plugin', // Title
216 array( $this, 'malcareWAFPluginFix' ), // Callback
217 'transferito-settings', // Page
218 'transferito_settings_section'
219 );
220 }
221
222 public function modifyScripts($tag, $handle, $src)
223 {
224 if ($handle === 'transferito_sentry-js') {
225 return '<script src="' . $src . '" integrity="sha384-8WK0y5yz2y0ti+wMW84WAgeQI72MHZIGHN3B30ljAcDfexPZRbv3eQ+eqzPKDDqE" crossorigin="anonymous" id="' . $handle . '"></script>';
226 }
227
228 return $tag;
229 }
230
231 public function loadTransferitoAssets($hook)
232 {
233 $dashIconFont = plugins_url( '../Views/Assets/css/transferito-font.css', dirname(__FILE__));
234
235 /**
236 * To load the icon on every admin page
237 */
238 wp_register_style('transferito_font_css', $dashIconFont, false, TRANSFERITO_VERSION);
239 wp_enqueue_style( 'transferito_font_css' );
240
241 wp_enqueue_style(
242 'transferito-google-fonts',
243 'https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;600;700&family=Montserrat:wght@400;500;600;700&display=swap',
244 false
245 );
246
247
248 /**
249 * Display on all pages
250 */
251 if ($hook === 'transferito_page_transferito-settings' || $hook === 'toplevel_page_transferito-main') {
252 /**
253 * New Styles
254 */
255 $updatedStyles = plugins_url( '../Views/Assets/css/transferito-styles.min.css', dirname(__FILE__));
256
257 wp_register_style('transferito_updated_css', $updatedStyles, false, TRANSFERITO_VERSION);
258 wp_enqueue_style( 'transferito_updated_css' );
259 }
260
261 /**
262 * Only display on the create migration page
263 */
264 if ($hook === 'toplevel_page_transferito-main') {
265 $script = plugins_url( '../Views/Assets/js/transferito.js', dirname(__FILE__));
266 $fontAwesomeScript = 'https://kit.fontawesome.com/e5d967ae32.js';
267 $sentryScript = 'https://browser.sentry-cdn.com/7.40.0/bundle.replay.min.js';
268 $sentryImplementationScript = plugins_url( '../Views/Assets/js/transferito-sentry.js', dirname(__FILE__));
269
270 wp_register_script('transferito_js', $script, array ('jquery'), TRANSFERITO_VERSION, false);
271 wp_register_script('transferito_font-awesome-js', $fontAwesomeScript, array ('jquery'), TRANSFERITO_VERSION, false);
272 wp_register_script('transferito_sentry-js', $sentryScript, null, null, false);
273 wp_register_script('transferito_sentry-implement-js', $sentryImplementationScript, array('transferito_sentry-js'), null, false);
274
275 wp_enqueue_script( 'transferito_font-awesome-js' );
276 wp_enqueue_script( 'transferito_sentry-js' );
277 wp_enqueue_script( 'transferito_sentry-implement-js' );
278 wp_enqueue_script( 'transferito_js' );
279
280 wp_localize_script('transferito_js', 'transferitoData', [ 'baseUrl' => Config::getBaseApiUrl() ]);
281 }
282 }
283
284 public function sanitize( $input )
285 {
286 $new_input = array();
287
288 if( isset( $input['public_transferito_key'] ) ) {
289 $new_input['public_transferito_key'] = sanitize_text_field( $input['public_transferito_key'] );
290 }
291
292 if( isset( $input['secret_transferito_key'] ) ) {
293 $new_input['secret_transferito_key'] = sanitize_text_field( $input['secret_transferito_key'] );
294 }
295
296 if( isset( $input['transferito_chunk_size'] ) ) {
297 $new_input['transferito_chunk_size'] = sanitize_text_field( $input['transferito_chunk_size'] );
298 }
299
300 if( isset( $input['transferito_upload_chunk_size'] ) ) {
301 $new_input['transferito_upload_chunk_size'] = sanitize_text_field( $input['transferito_upload_chunk_size'] );
302 }
303
304 $new_input['transferito_force_upload'] = isset($input['transferito_force_upload']) && $input['transferito_force_upload'] == 'on' ? true : false;
305 $new_input['transferito_include_htaccess'] = isset($input['transferito_include_htaccess']) && $input['transferito_include_htaccess'] == 'on' ? true : false;
306 $new_input['transferito_force_tar_backup'] = isset($input['transferito_force_tar_backup']) && $input['transferito_force_tar_backup'] == 'on' ? true : false;
307 $new_input['transferito_use_default_collation'] = isset($input['transferito_use_default_collation']) && $input['transferito_use_default_collation'] == 'on' ? true : false;
308 $new_input['transferito_bypass_exec_archive_creation'] = isset($input['transferito_bypass_exec_archive_creation']) && $input['transferito_bypass_exec_archive_creation'] == 'on' ? true : false;
309 $new_input['transferito_disable_wordpress_cache'] = isset($input['transferito_disable_wordpress_cache']) && $input['transferito_disable_wordpress_cache'] == 'on' ? true : false;
310 $new_input['transferito_malcare_waf_plugin_fix'] = isset($input['transferito_malcare_waf_plugin_fix']) && $input['transferito_malcare_waf_plugin_fix'] == 'on' ? true : false;
311
312 set_transient( 'transferito_settings_update_counter', 1 );
313
314 return $new_input;
315 }
316
317 /**
318 * Print the Section text
319 */
320 public function settingSection()
321 {
322 print '';
323 }
324
325 /**
326 * Get the settings option array and print one of its values
327 */
328 public function publicKeyField()
329 {
330 printf(
331 '<input type="text" class="transferito-input__text-box transferito-form-element transferito-input__text-box--full-width transferito-input__text-box--thin" id="public_transferito_key" name="transferito_settings_option[public_transferito_key]" value="%s" />',
332 isset( $this->options['public_transferito_key'] ) ? esc_attr( $this->options['public_transferito_key']) : ''
333 );
334 }
335
336 public function secretKeyField()
337 {
338 printf(
339 '<input type="text" class="transferito-input__text-box transferito-form-element transferito-input__text-box--full-width transferito-input__text-box--thin" id="secret_transferito_key" name="transferito_settings_option[secret_transferito_key]" value="%s" />',
340 isset( $this->options['secret_transferito_key'] ) ? esc_attr( $this->options['secret_transferito_key']) : ''
341 );
342 }
343
344 public function chunkSizeField()
345 {
346 $chunkSize = isset( $this->options['transferito_chunk_size'] ) ? esc_attr( $this->options['transferito_chunk_size']) : '';
347
348 $html = '<select id="transferito_chunk_size" class="transferito-form-element transferito-input__dropdown transferito-input__dropdown--full-width transferito-input__dropdown--large" name="transferito_settings_option[transferito_chunk_size]">';
349 $html .= $chunkSize == "" ? '<option selected disabled>Use default Download Chunk Size</option>' : '<option disabled>Use default Download Chunk Size</option>';
350 $html .= $chunkSize == "1" ? '<option selected>1</option>' : '<option>1</option>';
351 $html .= $chunkSize == "5" ? '<option selected>5</option>' : '<option>5</option>';
352 $html .= $chunkSize == "10" ? '<option selected>10</option>' : '<option>10</option>';
353 $html .= $chunkSize == "25" ? '<option selected>25</option>' : '<option>25</option>';
354 $html .= $chunkSize == "50" ? '<option selected>50</option>' : '<option>50</option>';
355 $html .= $chunkSize == "100" ? '<option selected>100</option>' : '<option>100</option>';
356 $html .= $chunkSize == "250" ? '<option selected>250</option>' : '<option>250</option>';
357 $html .= '</select>';
358
359 echo $html;
360 }
361
362 public function uploadChunkSizeField()
363 {
364 $chunkSize = isset( $this->options['transferito_upload_chunk_size'] ) ? esc_attr( $this->options['transferito_upload_chunk_size']) : '';
365
366 $html = '<select id="transferito_upload_chunk_size" class="transferito-form-element transferito-input__dropdown transferito-input__dropdown--full-width transferito-input__dropdown--large" name="transferito_settings_option[transferito_upload_chunk_size]">';
367 $html .= $chunkSize == "" ? '<option selected disabled>Use default Upload Chunk Size</option>' : '<option disabled>Use default Upload Chunk Size</option>';
368 $html .= $chunkSize == "1" ? '<option selected>1</option>' : '<option>1</option>';
369 $html .= $chunkSize == "5" ? '<option selected>5</option>' : '<option>5</option>';
370 $html .= $chunkSize == "10" ? '<option selected>10</option>' : '<option>10</option>';
371 $html .= $chunkSize == "25" ? '<option selected>25</option>' : '<option>25</option>';
372 $html .= $chunkSize == "50" ? '<option selected>50</option>' : '<option>50</option>';
373 $html .= $chunkSize == "100" ? '<option selected>100</option>' : '<option>100</option>';
374 $html .= '</select>';
375
376 echo $html;
377 }
378
379 public function forceUploadField()
380 {
381 $checked = isset($this->options['transferito_force_upload']) && $this->options['transferito_force_upload'] ? 'checked' : '';
382 echo '<input type="checkbox" id="transferito_force_upload" name="transferito_settings_option[transferito_force_upload]"' . $checked . '/>';
383 }
384
385 public function includeHtaccess()
386 {
387 $checked = isset($this->options['transferito_include_htaccess']) && $this->options['transferito_include_htaccess'] ? 'checked' : '';
388 echo '<input type="checkbox" id="transferito_include_htaccess" name="transferito_settings_option[transferito_include_htaccess]"' . $checked . '/>';
389 }
390
391 public function forceTarArchive()
392 {
393 $checked = isset($this->options['transferito_force_tar_backup']) && $this->options['transferito_force_tar_backup'] ? 'checked' : '';
394 echo '<input type="checkbox" id="transferito_force_tar_backup" name="transferito_settings_option[transferito_force_tar_backup]"' . $checked . '/>';
395 }
396
397 public function useDefaultCollation()
398 {
399 $checked = isset($this->options['transferito_use_default_collation']) && $this->options['transferito_use_default_collation'] ? 'checked' : '';
400 echo '<input type="checkbox" id="transferito_use_default_collation" name="transferito_settings_option[transferito_use_default_collation]"' . $checked . '/>';
401 }
402
403 public function bypassExecArchiveCreation()
404 {
405 $checked = isset($this->options['transferito_bypass_exec_archive_creation']) && $this->options['transferito_bypass_exec_archive_creation'] ? 'checked' : '';
406 echo '<input type="checkbox" id="transferito_bypass_exec_archive_creation" name="transferito_settings_option[transferito_bypass_exec_archive_creation]"' . $checked . '/>';
407 }
408
409 public function disableWordPressObjectCache()
410 {
411 $checked = isset($this->options['transferito_disable_wordpress_cache']) && $this->options['transferito_disable_wordpress_cache'] ? 'checked' : '';
412 echo '<input type="checkbox" id="transferito_disable_wordpress_cache" name="transferito_settings_option[transferito_disable_wordpress_cache]"' . $checked . '/>';
413 }
414
415 public function malcareWAFPluginFix()
416 {
417 $checked = isset($this->options['transferito_malcare_waf_plugin_fix']) && $this->options['transferito_malcare_waf_plugin_fix'] ? 'checked' : '';
418 echo '<input type="checkbox" id="transferito_malcare_waf_plugin_fix" name="transferito_settings_option[transferito_malcare_waf_plugin_fix]"' . $checked . '/>';
419 }
420
421 public function settingsHTML()
422 {
423 $publicKey = isset($this->options['public_transferito_key']) ? $this->options['public_transferito_key'] : '';
424 $secretKey = isset($this->options['secret_transferito_key']) ? $this->options['secret_transferito_key'] : '';
425 echo loadTemplate("settings", array(
426 'publicKey' => $publicKey,
427 'secretKey' => $secretKey,
428 'hasAPIKeys' => $this->emptyApiKeys
429 ));
430 }
431
432 public function createTransferHTML()
433 {
434 /**
435 * Get logged in user's information
436 */
437 $userData = wp_get_current_user();
438 $name = (isset($userData->user_firstname) && $userData->user_firstname !== '')
439 ? $userData->user_firstname
440 : $userData->display_name;
441
442 /**
443 * Pass in the correct template array data
444 * If the user has api keys
445 */
446 $templateData = [
447 'userWithoutAPIKeys' => $this->emptyApiKeys,
448 'name' => $name,
449 ];
450 echo loadTemplate("create-transfer", $templateData);
451 }
452
453 }
454