Version Description
Download this release
Release Info
| Developer | bangelov |
| Plugin | |
| Version | 6.75 |
| Comparing to | |
| See all releases | |
Code changes from version 6.74 to 6.75
- all-in-one-wp-migration.php +1 -1
- constants.php +1 -1
- lib/controller/class-ai1wm-main-controller.php +1 -1
- lib/model/class-ai1wm-extensions.php +1 -1
- lib/model/class-ai1wm-feedback.php +1 -1
- lib/model/export/class-ai1wm-export-config-file.php +1 -1
- lib/model/export/class-ai1wm-export-content.php +6 -4
- lib/model/export/class-ai1wm-export-database-file.php +1 -1
- lib/model/export/class-ai1wm-export-database.php +1 -1
- lib/model/import/class-ai1wm-import-content.php +6 -4
- lib/model/import/class-ai1wm-import-database.php +1 -1
- lib/model/import/class-ai1wm-import-validate.php +1 -1
- lib/vendor/servmask/archiver/class-ai1wm-compressor.php +2 -3
- lib/vendor/servmask/archiver/class-ai1wm-extractor.php +7 -10
- lib/vendor/servmask/command/class-ai1wm-wp-cli-command.php +6 -0
- lib/vendor/servmask/database/class-ai1wm-database-utility.php +9 -8
- lib/vendor/servmask/database/class-ai1wm-database.php +4 -6
- lib/vendor/servmask/filesystem/class-ai1wm-file-webconfig.php +1 -0
- lib/view/assets/javascript/backups.min.js +9 -14
- lib/view/assets/javascript/export.min.js +9 -14
- lib/view/assets/javascript/feedback.min.js +9 -14
- lib/view/assets/javascript/import.min.js +9 -14
- lib/view/common/leave-feedback.php +2 -2
- readme.txt +9 -2
all-in-one-wp-migration.php
CHANGED
|
@@ -5,7 +5,7 @@
|
|
| 5 |
* Description: Migration tool for all your blog data. Import or Export your blog content with a single click.
|
| 6 |
* Author: ServMask
|
| 7 |
* Author URI: https://servmask.com/
|
| 8 |
-
* Version: 6.
|
| 9 |
* Text Domain: all-in-one-wp-migration
|
| 10 |
* Domain Path: /languages
|
| 11 |
* Network: True
|
| 5 |
* Description: Migration tool for all your blog data. Import or Export your blog content with a single click.
|
| 6 |
* Author: ServMask
|
| 7 |
* Author URI: https://servmask.com/
|
| 8 |
+
* Version: 6.75
|
| 9 |
* Text Domain: all-in-one-wp-migration
|
| 10 |
* Domain Path: /languages
|
| 11 |
* Network: True
|
constants.php
CHANGED
|
@@ -31,7 +31,7 @@ define( 'AI1WM_DEBUG', false );
|
|
| 31 |
// ==================
|
| 32 |
// = Plugin Version =
|
| 33 |
// ==================
|
| 34 |
-
define( 'AI1WM_VERSION', '6.
|
| 35 |
|
| 36 |
// ===============
|
| 37 |
// = Plugin Name =
|
| 31 |
// ==================
|
| 32 |
// = Plugin Version =
|
| 33 |
// ==================
|
| 34 |
+
define( 'AI1WM_VERSION', '6.75' );
|
| 35 |
|
| 36 |
// ===============
|
| 37 |
// = Plugin Name =
|
lib/controller/class-ai1wm-main-controller.php
CHANGED
|
@@ -840,7 +840,7 @@ class Ai1wm_Main_Controller {
|
|
| 840 |
),
|
| 841 |
) );
|
| 842 |
|
| 843 |
-
wp_localize_script( '
|
| 844 |
'check_for_updates' => __( 'Check for updates', AI1WM_PLUGIN_NAME ),
|
| 845 |
'invalid_purchase_id' => __( 'Your purchase ID is invalid, please <a href="mailto:support@servmask.com">contact us</a>', AI1WM_PLUGIN_NAME ),
|
| 846 |
) );
|
| 840 |
),
|
| 841 |
) );
|
| 842 |
|
| 843 |
+
wp_localize_script( 'ai1wm_updater', 'ai1wm_locale', array(
|
| 844 |
'check_for_updates' => __( 'Check for updates', AI1WM_PLUGIN_NAME ),
|
| 845 |
'invalid_purchase_id' => __( 'Your purchase ID is invalid, please <a href="mailto:support@servmask.com">contact us</a>', AI1WM_PLUGIN_NAME ),
|
| 846 |
) );
|
lib/model/class-ai1wm-extensions.php
CHANGED
|
@@ -148,7 +148,7 @@ class Ai1wm_Extensions {
|
|
| 148 |
'about' => AI1WMME_PLUGIN_ABOUT,
|
| 149 |
'basename' => AI1WMME_PLUGIN_BASENAME,
|
| 150 |
'version' => AI1WMME_VERSION,
|
| 151 |
-
'requires' => '3.
|
| 152 |
'short' => AI1WMME_PLUGIN_SHORT,
|
| 153 |
);
|
| 154 |
}
|
| 148 |
'about' => AI1WMME_PLUGIN_ABOUT,
|
| 149 |
'basename' => AI1WMME_PLUGIN_BASENAME,
|
| 150 |
'version' => AI1WMME_VERSION,
|
| 151 |
+
'requires' => '3.57',
|
| 152 |
'short' => AI1WMME_PLUGIN_SHORT,
|
| 153 |
);
|
| 154 |
}
|
lib/model/class-ai1wm-feedback.php
CHANGED
|
@@ -40,7 +40,7 @@ class Ai1wm_Feedback {
|
|
| 40 |
|
| 41 |
// Submit feedback to ServMask
|
| 42 |
if ( empty( $type ) ) {
|
| 43 |
-
$errors[] = __( 'Feedback type is
|
| 44 |
} elseif ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
|
| 45 |
$errors[] = __( 'Your email is not valid.', AI1WM_PLUGIN_NAME );
|
| 46 |
} elseif ( empty( $message ) ) {
|
| 40 |
|
| 41 |
// Submit feedback to ServMask
|
| 42 |
if ( empty( $type ) ) {
|
| 43 |
+
$errors[] = __( 'Feedback type is not valid.', AI1WM_PLUGIN_NAME );
|
| 44 |
} elseif ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
|
| 45 |
$errors[] = __( 'Your email is not valid.', AI1WM_PLUGIN_NAME );
|
| 46 |
} elseif ( empty( $message ) ) {
|
lib/model/export/class-ai1wm-export-config-file.php
CHANGED
|
@@ -63,7 +63,7 @@ class Ai1wm_Export_Config_File {
|
|
| 63 |
$archive->set_file_pointer( $archive_bytes_offset );
|
| 64 |
|
| 65 |
// Add package.json to archive
|
| 66 |
-
if ( $archive->add_file( ai1wm_package_path( $params ), AI1WM_PACKAGE_NAME, $package_bytes_written, $package_bytes_offset
|
| 67 |
|
| 68 |
// Set progress
|
| 69 |
Ai1wm_Status::info( __( 'Done archiving configuration file.', AI1WM_PLUGIN_NAME ) );
|
| 63 |
$archive->set_file_pointer( $archive_bytes_offset );
|
| 64 |
|
| 65 |
// Add package.json to archive
|
| 66 |
+
if ( $archive->add_file( ai1wm_package_path( $params ), AI1WM_PACKAGE_NAME, $package_bytes_written, $package_bytes_offset ) ) {
|
| 67 |
|
| 68 |
// Set progress
|
| 69 |
Ai1wm_Status::info( __( 'Done archiving configuration file.', AI1WM_PLUGIN_NAME ) );
|
lib/model/export/class-ai1wm-export-content.php
CHANGED
|
@@ -98,7 +98,7 @@ class Ai1wm_Export_Content {
|
|
| 98 |
$file_bytes_written = 0;
|
| 99 |
|
| 100 |
// Add file to archive
|
| 101 |
-
if ( ( $completed = $archive->add_file( WP_CONTENT_DIR . DIRECTORY_SEPARATOR . $path, $path, $file_bytes_written, $file_bytes_offset
|
| 102 |
$file_bytes_offset = 0;
|
| 103 |
|
| 104 |
// Get filemap bytes offset
|
|
@@ -115,9 +115,11 @@ class Ai1wm_Export_Content {
|
|
| 115 |
Ai1wm_Status::info( sprintf( __( 'Archiving %d files...<br />%d%% complete', AI1WM_PLUGIN_NAME ), $total_files_count, $progress ) );
|
| 116 |
|
| 117 |
// More than 10 seconds have passed, break and do another request
|
| 118 |
-
if ( (
|
| 119 |
-
$
|
| 120 |
-
|
|
|
|
|
|
|
| 121 |
}
|
| 122 |
}
|
| 123 |
|
| 98 |
$file_bytes_written = 0;
|
| 99 |
|
| 100 |
// Add file to archive
|
| 101 |
+
if ( ( $completed = $archive->add_file( WP_CONTENT_DIR . DIRECTORY_SEPARATOR . $path, $path, $file_bytes_written, $file_bytes_offset ) ) ) {
|
| 102 |
$file_bytes_offset = 0;
|
| 103 |
|
| 104 |
// Get filemap bytes offset
|
| 115 |
Ai1wm_Status::info( sprintf( __( 'Archiving %d files...<br />%d%% complete', AI1WM_PLUGIN_NAME ), $total_files_count, $progress ) );
|
| 116 |
|
| 117 |
// More than 10 seconds have passed, break and do another request
|
| 118 |
+
if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) {
|
| 119 |
+
if ( ( microtime( true ) - $start ) > $timeout ) {
|
| 120 |
+
$completed = false;
|
| 121 |
+
break;
|
| 122 |
+
}
|
| 123 |
}
|
| 124 |
}
|
| 125 |
|
lib/model/export/class-ai1wm-export-database-file.php
CHANGED
|
@@ -68,7 +68,7 @@ class Ai1wm_Export_Database_File {
|
|
| 68 |
$archive->set_file_pointer( $archive_bytes_offset );
|
| 69 |
|
| 70 |
// Add database.sql to archive
|
| 71 |
-
if ( $archive->add_file( ai1wm_database_path( $params ), AI1WM_DATABASE_NAME, $database_bytes_written, $database_bytes_offset
|
| 72 |
|
| 73 |
// Set progress
|
| 74 |
Ai1wm_Status::info( __( 'Done archiving database.', AI1WM_PLUGIN_NAME ) );
|
| 68 |
$archive->set_file_pointer( $archive_bytes_offset );
|
| 69 |
|
| 70 |
// Add database.sql to archive
|
| 71 |
+
if ( $archive->add_file( ai1wm_database_path( $params ), AI1WM_DATABASE_NAME, $database_bytes_written, $database_bytes_offset ) ) {
|
| 72 |
|
| 73 |
// Set progress
|
| 74 |
Ai1wm_Status::info( __( 'Done archiving database.', AI1WM_PLUGIN_NAME ) );
|
lib/model/export/class-ai1wm-export-database.php
CHANGED
|
@@ -133,7 +133,7 @@ class Ai1wm_Export_Database {
|
|
| 133 |
->set_table_prefix_columns( ai1wm_table_prefix() . 'usermeta', array( 'meta_key' ) );
|
| 134 |
|
| 135 |
// Export database
|
| 136 |
-
if ( $mysql->export( ai1wm_database_path( $params ), $table_index, $table_offset
|
| 137 |
|
| 138 |
// Set progress
|
| 139 |
Ai1wm_Status::info( __( 'Done exporting database.', AI1WM_PLUGIN_NAME ) );
|
| 133 |
->set_table_prefix_columns( ai1wm_table_prefix() . 'usermeta', array( 'meta_key' ) );
|
| 134 |
|
| 135 |
// Export database
|
| 136 |
+
if ( $mysql->export( ai1wm_database_path( $params ), $table_index, $table_offset ) ) {
|
| 137 |
|
| 138 |
// Set progress
|
| 139 |
Ai1wm_Status::info( __( 'Done exporting database.', AI1WM_PLUGIN_NAME ) );
|
lib/model/import/class-ai1wm-import-content.php
CHANGED
|
@@ -154,7 +154,7 @@ class Ai1wm_Import_Content {
|
|
| 154 |
) );
|
| 155 |
|
| 156 |
// Extract a file from archive to WP_CONTENT_DIR
|
| 157 |
-
if ( ( $completed = $archive->extract_one_file_to( WP_CONTENT_DIR, $exclude_files, $old_paths, $new_paths, $file_bytes_written, $file_bytes_offset
|
| 158 |
$file_bytes_offset = 0;
|
| 159 |
}
|
| 160 |
|
|
@@ -171,9 +171,11 @@ class Ai1wm_Import_Content {
|
|
| 171 |
Ai1wm_Status::info( sprintf( __( 'Restoring %d files...<br />%d%% complete', AI1WM_PLUGIN_NAME ), $total_files_count, $progress ) );
|
| 172 |
|
| 173 |
// More than 10 seconds have passed, break and do another request
|
| 174 |
-
if ( (
|
| 175 |
-
$
|
| 176 |
-
|
|
|
|
|
|
|
| 177 |
}
|
| 178 |
}
|
| 179 |
|
| 154 |
) );
|
| 155 |
|
| 156 |
// Extract a file from archive to WP_CONTENT_DIR
|
| 157 |
+
if ( ( $completed = $archive->extract_one_file_to( WP_CONTENT_DIR, $exclude_files, $old_paths, $new_paths, $file_bytes_written, $file_bytes_offset ) ) ) {
|
| 158 |
$file_bytes_offset = 0;
|
| 159 |
}
|
| 160 |
|
| 171 |
Ai1wm_Status::info( sprintf( __( 'Restoring %d files...<br />%d%% complete', AI1WM_PLUGIN_NAME ), $total_files_count, $progress ) );
|
| 172 |
|
| 173 |
// More than 10 seconds have passed, break and do another request
|
| 174 |
+
if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) {
|
| 175 |
+
if ( ( microtime( true ) - $start ) > $timeout ) {
|
| 176 |
+
$completed = false;
|
| 177 |
+
break;
|
| 178 |
+
}
|
| 179 |
}
|
| 180 |
}
|
| 181 |
|
lib/model/import/class-ai1wm-import-database.php
CHANGED
|
@@ -709,7 +709,7 @@ class Ai1wm_Import_Database {
|
|
| 709 |
$mysql->set_visual_composer( ! is_wp_error( validate_plugin( 'js_composer/js_composer.php' ) ) );
|
| 710 |
|
| 711 |
// Import database
|
| 712 |
-
if ( $mysql->import( ai1wm_database_path( $params ), $query_offset
|
| 713 |
|
| 714 |
// Set progress
|
| 715 |
Ai1wm_Status::info( __( 'Done restoring database.', AI1WM_PLUGIN_NAME ) );
|
| 709 |
$mysql->set_visual_composer( ! is_wp_error( validate_plugin( 'js_composer/js_composer.php' ) ) );
|
| 710 |
|
| 711 |
// Import database
|
| 712 |
+
if ( $mysql->import( ai1wm_database_path( $params ), $query_offset ) ) {
|
| 713 |
|
| 714 |
// Set progress
|
| 715 |
Ai1wm_Status::info( __( 'Done restoring database.', AI1WM_PLUGIN_NAME ) );
|
lib/model/import/class-ai1wm-import-validate.php
CHANGED
|
@@ -106,7 +106,7 @@ class Ai1wm_Import_Validate {
|
|
| 106 |
$file_bytes_written = 0;
|
| 107 |
|
| 108 |
// Unpack package.json, multisite.json and database.sql files
|
| 109 |
-
if ( ( $completed = $archive->extract_by_files_array( ai1wm_storage_path( $params ), array( AI1WM_PACKAGE_NAME, AI1WM_MULTISITE_NAME, AI1WM_DATABASE_NAME ), array(), $file_bytes_written, $file_bytes_offset
|
| 110 |
$file_bytes_offset = 0;
|
| 111 |
}
|
| 112 |
|
| 106 |
$file_bytes_written = 0;
|
| 107 |
|
| 108 |
// Unpack package.json, multisite.json and database.sql files
|
| 109 |
+
if ( ( $completed = $archive->extract_by_files_array( ai1wm_storage_path( $params ), array( AI1WM_PACKAGE_NAME, AI1WM_MULTISITE_NAME, AI1WM_DATABASE_NAME ), array(), $file_bytes_written, $file_bytes_offset ) ) ) {
|
| 110 |
$file_bytes_offset = 0;
|
| 111 |
}
|
| 112 |
|
lib/vendor/servmask/archiver/class-ai1wm-compressor.php
CHANGED
|
@@ -42,7 +42,6 @@ class Ai1wm_Compressor extends Ai1wm_Archiver {
|
|
| 42 |
* @param string $new_file_name Write the file with a different name
|
| 43 |
* @param int $file_written File written (in bytes)
|
| 44 |
* @param int $file_offset File offset (in bytes)
|
| 45 |
-
* @param int $timeout Process timeout (in seconds)
|
| 46 |
*
|
| 47 |
* @throws \Ai1wm_Not_Seekable_Exception
|
| 48 |
* @throws \Ai1wm_Not_Writable_Exception
|
|
@@ -50,7 +49,7 @@ class Ai1wm_Compressor extends Ai1wm_Archiver {
|
|
| 50 |
*
|
| 51 |
* @return bool
|
| 52 |
*/
|
| 53 |
-
public function add_file( $file_name, $new_file_name = '', &$file_written = 0, &$file_offset = 0
|
| 54 |
$file_written = 0;
|
| 55 |
|
| 56 |
// Replace forward slash with current directory separator in file name
|
|
@@ -104,7 +103,7 @@ class Ai1wm_Compressor extends Ai1wm_Archiver {
|
|
| 104 |
}
|
| 105 |
|
| 106 |
// Time elapsed
|
| 107 |
-
if ( $timeout ) {
|
| 108 |
if ( ( microtime( true ) - $start ) > $timeout ) {
|
| 109 |
$completed = false;
|
| 110 |
break;
|
| 42 |
* @param string $new_file_name Write the file with a different name
|
| 43 |
* @param int $file_written File written (in bytes)
|
| 44 |
* @param int $file_offset File offset (in bytes)
|
|
|
|
| 45 |
*
|
| 46 |
* @throws \Ai1wm_Not_Seekable_Exception
|
| 47 |
* @throws \Ai1wm_Not_Writable_Exception
|
| 49 |
*
|
| 50 |
* @return bool
|
| 51 |
*/
|
| 52 |
+
public function add_file( $file_name, $new_file_name = '', &$file_written = 0, &$file_offset = 0 ) {
|
| 53 |
$file_written = 0;
|
| 54 |
|
| 55 |
// Replace forward slash with current directory separator in file name
|
| 103 |
}
|
| 104 |
|
| 105 |
// Time elapsed
|
| 106 |
+
if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) {
|
| 107 |
if ( ( microtime( true ) - $start ) > $timeout ) {
|
| 108 |
$completed = false;
|
| 109 |
break;
|
lib/vendor/servmask/archiver/class-ai1wm-extractor.php
CHANGED
|
@@ -152,14 +152,13 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 152 |
* @param array $new_paths New replace paths
|
| 153 |
* @param int $file_written File written (in bytes)
|
| 154 |
* @param int $file_offset File offset (in bytes)
|
| 155 |
-
* @param int $timeout Process timeout (in seconds)
|
| 156 |
*
|
| 157 |
* @throws \Ai1wm_Not_Directory_Exception
|
| 158 |
* @throws \Ai1wm_Not_Seekable_Exception
|
| 159 |
*
|
| 160 |
* @return bool
|
| 161 |
*/
|
| 162 |
-
public function extract_one_file_to( $location, $exclude = array(), $old_paths = array(), $new_paths = array(), &$file_written = 0, &$file_offset = 0
|
| 163 |
if ( false === is_dir( $location ) ) {
|
| 164 |
throw new Ai1wm_Not_Directory_Exception( sprintf( 'Location is not a directory: %s', $location ) );
|
| 165 |
}
|
|
@@ -243,7 +242,7 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 243 |
$file_written = 0;
|
| 244 |
|
| 245 |
// We have a match, let's extract the file
|
| 246 |
-
if ( ( $completed = $this->extract_to( $file_name, $file_size, $file_mtime, $file_written, $file_offset
|
| 247 |
$file_offset = 0;
|
| 248 |
}
|
| 249 |
} else {
|
|
@@ -268,14 +267,13 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 268 |
* @param array $exclude Files to exclude
|
| 269 |
* @param int $file_written File written (in bytes)
|
| 270 |
* @param int $file_offset File offset (in bytes)
|
| 271 |
-
* @param int $timeout Process timeout (in seconds)
|
| 272 |
*
|
| 273 |
* @throws \Ai1wm_Not_Directory_Exception
|
| 274 |
* @throws \Ai1wm_Not_Seekable_Exception
|
| 275 |
*
|
| 276 |
* @return bool
|
| 277 |
*/
|
| 278 |
-
public function extract_by_files_array( $location, $files = array(), $exclude = array(), &$file_written = 0, &$file_offset = 0
|
| 279 |
if ( false === is_dir( $location ) ) {
|
| 280 |
throw new Ai1wm_Not_Directory_Exception( sprintf( 'Location is not a directory: %s', $location ) );
|
| 281 |
}
|
|
@@ -361,7 +359,7 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 361 |
$file_written = 0;
|
| 362 |
|
| 363 |
// We have a match, let's extract the file and remove it from the array
|
| 364 |
-
if ( ( $completed = $this->extract_to( $file_name, $file_size, $file_mtime, $file_written, $file_offset
|
| 365 |
$file_offset = 0;
|
| 366 |
}
|
| 367 |
} else {
|
|
@@ -373,7 +371,7 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 373 |
}
|
| 374 |
|
| 375 |
// Time elapsed
|
| 376 |
-
if ( $timeout ) {
|
| 377 |
if ( ( microtime( true ) - $start ) > $timeout ) {
|
| 378 |
$completed = false;
|
| 379 |
break;
|
|
@@ -394,7 +392,6 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 394 |
* @param array $file_mtime File modified time (in seconds)
|
| 395 |
* @param int $file_written File written (in bytes)
|
| 396 |
* @param int $file_offset File offset (in bytes)
|
| 397 |
-
* @param int $timeout Process timeout (in seconds)
|
| 398 |
*
|
| 399 |
* @throws \Ai1wm_Not_Seekable_Exception
|
| 400 |
* @throws \Ai1wm_Not_Readable_Exception
|
|
@@ -402,7 +399,7 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 402 |
*
|
| 403 |
* @return bool
|
| 404 |
*/
|
| 405 |
-
private function extract_to( $file_name, $file_size, $file_mtime, &$file_written = 0, &$file_offset = 0
|
| 406 |
$file_written = 0;
|
| 407 |
|
| 408 |
// Flag to hold if file data has been processed
|
|
@@ -455,7 +452,7 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 455 |
}
|
| 456 |
|
| 457 |
// Time elapsed
|
| 458 |
-
if ( $timeout ) {
|
| 459 |
if ( ( microtime( true ) - $start ) > $timeout ) {
|
| 460 |
$completed = false;
|
| 461 |
break;
|
| 152 |
* @param array $new_paths New replace paths
|
| 153 |
* @param int $file_written File written (in bytes)
|
| 154 |
* @param int $file_offset File offset (in bytes)
|
|
|
|
| 155 |
*
|
| 156 |
* @throws \Ai1wm_Not_Directory_Exception
|
| 157 |
* @throws \Ai1wm_Not_Seekable_Exception
|
| 158 |
*
|
| 159 |
* @return bool
|
| 160 |
*/
|
| 161 |
+
public function extract_one_file_to( $location, $exclude = array(), $old_paths = array(), $new_paths = array(), &$file_written = 0, &$file_offset = 0 ) {
|
| 162 |
if ( false === is_dir( $location ) ) {
|
| 163 |
throw new Ai1wm_Not_Directory_Exception( sprintf( 'Location is not a directory: %s', $location ) );
|
| 164 |
}
|
| 242 |
$file_written = 0;
|
| 243 |
|
| 244 |
// We have a match, let's extract the file
|
| 245 |
+
if ( ( $completed = $this->extract_to( $file_name, $file_size, $file_mtime, $file_written, $file_offset ) ) ) {
|
| 246 |
$file_offset = 0;
|
| 247 |
}
|
| 248 |
} else {
|
| 267 |
* @param array $exclude Files to exclude
|
| 268 |
* @param int $file_written File written (in bytes)
|
| 269 |
* @param int $file_offset File offset (in bytes)
|
|
|
|
| 270 |
*
|
| 271 |
* @throws \Ai1wm_Not_Directory_Exception
|
| 272 |
* @throws \Ai1wm_Not_Seekable_Exception
|
| 273 |
*
|
| 274 |
* @return bool
|
| 275 |
*/
|
| 276 |
+
public function extract_by_files_array( $location, $files = array(), $exclude = array(), &$file_written = 0, &$file_offset = 0 ) {
|
| 277 |
if ( false === is_dir( $location ) ) {
|
| 278 |
throw new Ai1wm_Not_Directory_Exception( sprintf( 'Location is not a directory: %s', $location ) );
|
| 279 |
}
|
| 359 |
$file_written = 0;
|
| 360 |
|
| 361 |
// We have a match, let's extract the file and remove it from the array
|
| 362 |
+
if ( ( $completed = $this->extract_to( $file_name, $file_size, $file_mtime, $file_written, $file_offset ) ) ) {
|
| 363 |
$file_offset = 0;
|
| 364 |
}
|
| 365 |
} else {
|
| 371 |
}
|
| 372 |
|
| 373 |
// Time elapsed
|
| 374 |
+
if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) {
|
| 375 |
if ( ( microtime( true ) - $start ) > $timeout ) {
|
| 376 |
$completed = false;
|
| 377 |
break;
|
| 392 |
* @param array $file_mtime File modified time (in seconds)
|
| 393 |
* @param int $file_written File written (in bytes)
|
| 394 |
* @param int $file_offset File offset (in bytes)
|
|
|
|
| 395 |
*
|
| 396 |
* @throws \Ai1wm_Not_Seekable_Exception
|
| 397 |
* @throws \Ai1wm_Not_Readable_Exception
|
| 399 |
*
|
| 400 |
* @return bool
|
| 401 |
*/
|
| 402 |
+
private function extract_to( $file_name, $file_size, $file_mtime, &$file_written = 0, &$file_offset = 0 ) {
|
| 403 |
$file_written = 0;
|
| 404 |
|
| 405 |
// Flag to hold if file data has been processed
|
| 452 |
}
|
| 453 |
|
| 454 |
// Time elapsed
|
| 455 |
+
if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) {
|
| 456 |
if ( ( microtime( true ) - $start ) > $timeout ) {
|
| 457 |
$completed = false;
|
| 458 |
break;
|
lib/vendor/servmask/command/class-ai1wm-wp-cli-command.php
CHANGED
|
@@ -187,6 +187,9 @@ if ( class_exists( 'WP_CLI_Command' ) ) {
|
|
| 187 |
|
| 188 |
try {
|
| 189 |
|
|
|
|
|
|
|
|
|
|
| 190 |
// Remove filters
|
| 191 |
remove_filter( 'ai1wm_export', 'Ai1wm_Export_Clean::execute', 300 );
|
| 192 |
|
|
@@ -248,6 +251,9 @@ if ( class_exists( 'WP_CLI_Command' ) ) {
|
|
| 248 |
|
| 249 |
try {
|
| 250 |
|
|
|
|
|
|
|
|
|
|
| 251 |
// Remove filters
|
| 252 |
remove_filter( 'ai1wm_import', 'Ai1wm_Import_Upload::execute', 5 );
|
| 253 |
remove_filter( 'ai1wm_import', 'Ai1wm_Import_Confirm::execute', 100 );
|
| 187 |
|
| 188 |
try {
|
| 189 |
|
| 190 |
+
// Disable completed timeout
|
| 191 |
+
add_filter( 'ai1wm_completed_timeout', '__return_zero' );
|
| 192 |
+
|
| 193 |
// Remove filters
|
| 194 |
remove_filter( 'ai1wm_export', 'Ai1wm_Export_Clean::execute', 300 );
|
| 195 |
|
| 251 |
|
| 252 |
try {
|
| 253 |
|
| 254 |
+
// Disable completed timeout
|
| 255 |
+
add_filter( 'ai1wm_completed_timeout', '__return_zero' );
|
| 256 |
+
|
| 257 |
// Remove filters
|
| 258 |
remove_filter( 'ai1wm_import', 'Ai1wm_Import_Upload::execute', 5 );
|
| 259 |
remove_filter( 'ai1wm_import', 'Ai1wm_Import_Confirm::execute', 100 );
|
lib/vendor/servmask/database/class-ai1wm-database-utility.php
CHANGED
|
@@ -68,14 +68,16 @@ class Ai1wm_Database_Utility {
|
|
| 68 |
$data = $tmp;
|
| 69 |
unset( $tmp );
|
| 70 |
} elseif ( is_object( $data ) ) {
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
|
|
|
| 76 |
|
| 77 |
-
|
| 78 |
-
|
|
|
|
| 79 |
} else {
|
| 80 |
if ( is_string( $data ) ) {
|
| 81 |
if ( ! empty( $from ) && ! empty( $to ) ) {
|
|
@@ -88,7 +90,6 @@ class Ai1wm_Database_Utility {
|
|
| 88 |
return serialize( $data );
|
| 89 |
}
|
| 90 |
} catch ( Exception $e ) {
|
| 91 |
-
// pass
|
| 92 |
}
|
| 93 |
|
| 94 |
return $data;
|
| 68 |
$data = $tmp;
|
| 69 |
unset( $tmp );
|
| 70 |
} elseif ( is_object( $data ) ) {
|
| 71 |
+
if ( ! ( $data instanceof __PHP_Incomplete_Class ) ) {
|
| 72 |
+
$tmp = $data;
|
| 73 |
+
$props = get_object_vars( $data );
|
| 74 |
+
foreach ( $props as $key => $value ) {
|
| 75 |
+
$tmp->$key = self::replace_serialized_values( $from, $to, $value, false );
|
| 76 |
+
}
|
| 77 |
|
| 78 |
+
$data = $tmp;
|
| 79 |
+
unset( $tmp );
|
| 80 |
+
}
|
| 81 |
} else {
|
| 82 |
if ( is_string( $data ) ) {
|
| 83 |
if ( ! empty( $from ) && ! empty( $to ) ) {
|
| 90 |
return serialize( $data );
|
| 91 |
}
|
| 92 |
} catch ( Exception $e ) {
|
|
|
|
| 93 |
}
|
| 94 |
|
| 95 |
return $data;
|
lib/vendor/servmask/database/class-ai1wm-database.php
CHANGED
|
@@ -530,10 +530,9 @@ abstract class Ai1wm_Database {
|
|
| 530 |
* @param string $file_name Name of file
|
| 531 |
* @param int $table_index Table index
|
| 532 |
* @param int $table_offset Table offset
|
| 533 |
-
* @param int $timeout Process timeout
|
| 534 |
* @return bool
|
| 535 |
*/
|
| 536 |
-
public function export( $file_name, &$table_index = 0, &$table_offset = 0
|
| 537 |
// Set file handler
|
| 538 |
$file_handler = ai1wm_open( $file_name, 'ab' );
|
| 539 |
|
|
@@ -708,7 +707,7 @@ abstract class Ai1wm_Database {
|
|
| 708 |
$this->free_result( $result );
|
| 709 |
|
| 710 |
// Time elapsed
|
| 711 |
-
if ( $timeout ) {
|
| 712 |
if ( ( microtime( true ) - $start ) > $timeout ) {
|
| 713 |
$completed = false;
|
| 714 |
break 2;
|
|
@@ -728,10 +727,9 @@ abstract class Ai1wm_Database {
|
|
| 728 |
*
|
| 729 |
* @param string $file_name Name of file
|
| 730 |
* @param int $query_offset Query offset
|
| 731 |
-
* @param int $timeout Process timeout
|
| 732 |
* @return bool
|
| 733 |
*/
|
| 734 |
-
public function import( $file_name, &$query_offset = 0
|
| 735 |
// Set max allowed packet
|
| 736 |
$max_allowed_packet = $this->get_max_allowed_packet();
|
| 737 |
|
|
@@ -794,7 +792,7 @@ abstract class Ai1wm_Database {
|
|
| 794 |
$query_offset = ftell( $file_handler );
|
| 795 |
|
| 796 |
// Time elapsed
|
| 797 |
-
if ( $timeout ) {
|
| 798 |
if ( ! $this->is_atomic_query( $query ) ) {
|
| 799 |
if ( ( microtime( true ) - $start ) > $timeout ) {
|
| 800 |
$completed = false;
|
| 530 |
* @param string $file_name Name of file
|
| 531 |
* @param int $table_index Table index
|
| 532 |
* @param int $table_offset Table offset
|
|
|
|
| 533 |
* @return bool
|
| 534 |
*/
|
| 535 |
+
public function export( $file_name, &$table_index = 0, &$table_offset = 0 ) {
|
| 536 |
// Set file handler
|
| 537 |
$file_handler = ai1wm_open( $file_name, 'ab' );
|
| 538 |
|
| 707 |
$this->free_result( $result );
|
| 708 |
|
| 709 |
// Time elapsed
|
| 710 |
+
if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) {
|
| 711 |
if ( ( microtime( true ) - $start ) > $timeout ) {
|
| 712 |
$completed = false;
|
| 713 |
break 2;
|
| 727 |
*
|
| 728 |
* @param string $file_name Name of file
|
| 729 |
* @param int $query_offset Query offset
|
|
|
|
| 730 |
* @return bool
|
| 731 |
*/
|
| 732 |
+
public function import( $file_name, &$query_offset = 0 ) {
|
| 733 |
// Set max allowed packet
|
| 734 |
$max_allowed_packet = $this->get_max_allowed_packet();
|
| 735 |
|
| 792 |
$query_offset = ftell( $file_handler );
|
| 793 |
|
| 794 |
// Time elapsed
|
| 795 |
+
if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) {
|
| 796 |
if ( ! $this->is_atomic_query( $query ) ) {
|
| 797 |
if ( ( microtime( true ) - $start ) > $timeout ) {
|
| 798 |
$completed = false;
|
lib/vendor/servmask/filesystem/class-ai1wm-file-webconfig.php
CHANGED
|
@@ -35,6 +35,7 @@ class Ai1wm_File_Webconfig {
|
|
| 35 |
return Ai1wm_File::create( $path, implode( PHP_EOL, array(
|
| 36 |
'<configuration>',
|
| 37 |
'<system.webServer>',
|
|
|
|
| 38 |
'<mimeMap fileExtension=".wpress" mimeType="application/octet-stream" />',
|
| 39 |
'</staticContent>',
|
| 40 |
'<defaultDocument>',
|
| 35 |
return Ai1wm_File::create( $path, implode( PHP_EOL, array(
|
| 36 |
'<configuration>',
|
| 37 |
'<system.webServer>',
|
| 38 |
+
'<staticContent>',
|
| 39 |
'<mimeMap fileExtension=".wpress" mimeType="application/octet-stream" />',
|
| 40 |
'</staticContent>',
|
| 41 |
'<defaultDocument>',
|
lib/view/assets/javascript/backups.min.js
CHANGED
|
@@ -887,11 +887,8 @@ module.exports = Modal;
|
|
| 887 |
jQuery(document).ready(function ($) {
|
| 888 |
'use strict';
|
| 889 |
|
| 890 |
-
// Reset feedback form
|
| 891 |
-
|
| 892 |
-
$('.ai1wm-feedback-type').attr('checked', false);
|
| 893 |
-
|
| 894 |
// Review
|
|
|
|
| 895 |
$('#ai1wm-feedback-type-link-1').click(function (e) {
|
| 896 |
var radio = $('#ai1wm-feedback-type-1');
|
| 897 |
if (radio.is(':checked')) {
|
|
@@ -901,16 +898,14 @@ jQuery(document).ready(function ($) {
|
|
| 901 |
}
|
| 902 |
});
|
| 903 |
|
| 904 |
-
//
|
| 905 |
-
$('#ai1wm-feedback-type-2').click(function () {
|
| 906 |
-
|
| 907 |
-
|
| 908 |
-
|
| 909 |
-
|
| 910 |
-
|
| 911 |
-
|
| 912 |
-
// Show feedback form
|
| 913 |
-
$('.ai1wm-feedback-form').fadeIn();
|
| 914 |
});
|
| 915 |
|
| 916 |
// Help
|
| 887 |
jQuery(document).ready(function ($) {
|
| 888 |
'use strict';
|
| 889 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 890 |
// Review
|
| 891 |
+
|
| 892 |
$('#ai1wm-feedback-type-link-1').click(function (e) {
|
| 893 |
var radio = $('#ai1wm-feedback-type-1');
|
| 894 |
if (radio.is(':checked')) {
|
| 898 |
}
|
| 899 |
});
|
| 900 |
|
| 901 |
+
// Idea
|
| 902 |
+
$('#ai1wm-feedback-type-link-2').click(function (e) {
|
| 903 |
+
var radio = $('#ai1wm-feedback-type-2');
|
| 904 |
+
if (radio.is(':checked')) {
|
| 905 |
+
radio.attr('checked', false);
|
| 906 |
+
} else {
|
| 907 |
+
radio.attr('checked', true);
|
| 908 |
+
}
|
|
|
|
|
|
|
| 909 |
});
|
| 910 |
|
| 911 |
// Help
|
lib/view/assets/javascript/export.min.js
CHANGED
|
@@ -126,11 +126,8 @@ module.exports = g;
|
|
| 126 |
jQuery(document).ready(function ($) {
|
| 127 |
'use strict';
|
| 128 |
|
| 129 |
-
// Reset feedback form
|
| 130 |
-
|
| 131 |
-
$('.ai1wm-feedback-type').attr('checked', false);
|
| 132 |
-
|
| 133 |
// Review
|
|
|
|
| 134 |
$('#ai1wm-feedback-type-link-1').click(function (e) {
|
| 135 |
var radio = $('#ai1wm-feedback-type-1');
|
| 136 |
if (radio.is(':checked')) {
|
|
@@ -140,16 +137,14 @@ jQuery(document).ready(function ($) {
|
|
| 140 |
}
|
| 141 |
});
|
| 142 |
|
| 143 |
-
//
|
| 144 |
-
$('#ai1wm-feedback-type-2').click(function () {
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
// Show feedback form
|
| 152 |
-
$('.ai1wm-feedback-form').fadeIn();
|
| 153 |
});
|
| 154 |
|
| 155 |
// Help
|
| 126 |
jQuery(document).ready(function ($) {
|
| 127 |
'use strict';
|
| 128 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 129 |
// Review
|
| 130 |
+
|
| 131 |
$('#ai1wm-feedback-type-link-1').click(function (e) {
|
| 132 |
var radio = $('#ai1wm-feedback-type-1');
|
| 133 |
if (radio.is(':checked')) {
|
| 137 |
}
|
| 138 |
});
|
| 139 |
|
| 140 |
+
// Idea
|
| 141 |
+
$('#ai1wm-feedback-type-link-2').click(function (e) {
|
| 142 |
+
var radio = $('#ai1wm-feedback-type-2');
|
| 143 |
+
if (radio.is(':checked')) {
|
| 144 |
+
radio.attr('checked', false);
|
| 145 |
+
} else {
|
| 146 |
+
radio.attr('checked', true);
|
| 147 |
+
}
|
|
|
|
|
|
|
| 148 |
});
|
| 149 |
|
| 150 |
// Help
|
lib/view/assets/javascript/feedback.min.js
CHANGED
|
@@ -126,11 +126,8 @@ module.exports = g;
|
|
| 126 |
jQuery(document).ready(function ($) {
|
| 127 |
'use strict';
|
| 128 |
|
| 129 |
-
// Reset feedback form
|
| 130 |
-
|
| 131 |
-
$('.ai1wm-feedback-type').attr('checked', false);
|
| 132 |
-
|
| 133 |
// Review
|
|
|
|
| 134 |
$('#ai1wm-feedback-type-link-1').click(function (e) {
|
| 135 |
var radio = $('#ai1wm-feedback-type-1');
|
| 136 |
if (radio.is(':checked')) {
|
|
@@ -140,16 +137,14 @@ jQuery(document).ready(function ($) {
|
|
| 140 |
}
|
| 141 |
});
|
| 142 |
|
| 143 |
-
//
|
| 144 |
-
$('#ai1wm-feedback-type-2').click(function () {
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
// Show feedback form
|
| 152 |
-
$('.ai1wm-feedback-form').fadeIn();
|
| 153 |
});
|
| 154 |
|
| 155 |
// Help
|
| 126 |
jQuery(document).ready(function ($) {
|
| 127 |
'use strict';
|
| 128 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 129 |
// Review
|
| 130 |
+
|
| 131 |
$('#ai1wm-feedback-type-link-1').click(function (e) {
|
| 132 |
var radio = $('#ai1wm-feedback-type-1');
|
| 133 |
if (radio.is(':checked')) {
|
| 137 |
}
|
| 138 |
});
|
| 139 |
|
| 140 |
+
// Idea
|
| 141 |
+
$('#ai1wm-feedback-type-link-2').click(function (e) {
|
| 142 |
+
var radio = $('#ai1wm-feedback-type-2');
|
| 143 |
+
if (radio.is(':checked')) {
|
| 144 |
+
radio.attr('checked', false);
|
| 145 |
+
} else {
|
| 146 |
+
radio.attr('checked', true);
|
| 147 |
+
}
|
|
|
|
|
|
|
| 148 |
});
|
| 149 |
|
| 150 |
// Help
|
lib/view/assets/javascript/import.min.js
CHANGED
|
@@ -153,11 +153,8 @@ if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
|
|
| 153 |
jQuery(document).ready(function ($) {
|
| 154 |
'use strict';
|
| 155 |
|
| 156 |
-
// Reset feedback form
|
| 157 |
-
|
| 158 |
-
$('.ai1wm-feedback-type').attr('checked', false);
|
| 159 |
-
|
| 160 |
// Review
|
|
|
|
| 161 |
$('#ai1wm-feedback-type-link-1').click(function (e) {
|
| 162 |
var radio = $('#ai1wm-feedback-type-1');
|
| 163 |
if (radio.is(':checked')) {
|
|
@@ -167,16 +164,14 @@ jQuery(document).ready(function ($) {
|
|
| 167 |
}
|
| 168 |
});
|
| 169 |
|
| 170 |
-
//
|
| 171 |
-
$('#ai1wm-feedback-type-2').click(function () {
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
// Show feedback form
|
| 179 |
-
$('.ai1wm-feedback-form').fadeIn();
|
| 180 |
});
|
| 181 |
|
| 182 |
// Help
|
| 153 |
jQuery(document).ready(function ($) {
|
| 154 |
'use strict';
|
| 155 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 156 |
// Review
|
| 157 |
+
|
| 158 |
$('#ai1wm-feedback-type-link-1').click(function (e) {
|
| 159 |
var radio = $('#ai1wm-feedback-type-1');
|
| 160 |
if (radio.is(':checked')) {
|
| 164 |
}
|
| 165 |
});
|
| 166 |
|
| 167 |
+
// Idea
|
| 168 |
+
$('#ai1wm-feedback-type-link-2').click(function (e) {
|
| 169 |
+
var radio = $('#ai1wm-feedback-type-2');
|
| 170 |
+
if (radio.is(':checked')) {
|
| 171 |
+
radio.attr('checked', false);
|
| 172 |
+
} else {
|
| 173 |
+
radio.attr('checked', true);
|
| 174 |
+
}
|
|
|
|
|
|
|
| 175 |
});
|
| 176 |
|
| 177 |
// Help
|
lib/view/common/leave-feedback.php
CHANGED
|
@@ -35,10 +35,10 @@
|
|
| 35 |
</li>
|
| 36 |
<li>
|
| 37 |
<input type="radio" class="ai1wm-flat-radio-button ai1wm-feedback-type" id="ai1wm-feedback-type-2" name="ai1wm_feedback_type" value="suggestions" />
|
| 38 |
-
<
|
| 39 |
<i></i>
|
| 40 |
<span><?php _e( 'I have ideas to improve this plugin', AI1WM_PLUGIN_NAME ); ?></span>
|
| 41 |
-
</
|
| 42 |
</li>
|
| 43 |
<li>
|
| 44 |
<input type="radio" class="ai1wm-flat-radio-button ai1wm-feedback-type" id="ai1wm-feedback-type-3" name="ai1wm_feedback_type" value="help-needed" />
|
| 35 |
</li>
|
| 36 |
<li>
|
| 37 |
<input type="radio" class="ai1wm-flat-radio-button ai1wm-feedback-type" id="ai1wm-feedback-type-2" name="ai1wm_feedback_type" value="suggestions" />
|
| 38 |
+
<a id="ai1wm-feedback-type-link-2" href="https://feedback.wp-migration.com" target="_blank">
|
| 39 |
<i></i>
|
| 40 |
<span><?php _e( 'I have ideas to improve this plugin', AI1WM_PLUGIN_NAME ); ?></span>
|
| 41 |
+
</a>
|
| 42 |
</li>
|
| 43 |
<li>
|
| 44 |
<input type="radio" class="ai1wm-flat-radio-button ai1wm-feedback-type" id="ai1wm-feedback-type-3" name="ai1wm_feedback_type" value="help-needed" />
|
readme.txt
CHANGED
|
@@ -4,7 +4,7 @@ Tags: move, transfer, copy, migrate, backup, clone, restore, db migration, wordp
|
|
| 4 |
Requires at least: 3.3
|
| 5 |
Tested up to: 4.9
|
| 6 |
Requires PHP: 5.2.17
|
| 7 |
-
Stable tag: 6.
|
| 8 |
License: GPLv2 or later
|
| 9 |
|
| 10 |
Move, transfer, copy, migrate, and backup a site with 1-click. Quick, easy, and reliable.
|
|
@@ -60,7 +60,7 @@ Mobile device compatible: All in One WP Plugin is the first plugin to offer true
|
|
| 60 |
* [Microsoft Azure Storage](https://servmask.com/products/microsoft-azure-storage-extension)
|
| 61 |
|
| 62 |
= Supported hosting providers =
|
| 63 |
-
**The plugin does not have any
|
| 64 |
|
| 65 |
* DigitalOcean
|
| 66 |
* Bluehost
|
|
@@ -103,6 +103,13 @@ Alternatively you can download the plugin using the download button on this page
|
|
| 103 |
All-in-One WP Migration **asks for your consent** to collect **requester's email address** when filling plugin's contact form. [GDPR Compliant Privacy Policy](https://www.iubenda.com/privacy-policy/946881)
|
| 104 |
|
| 105 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 106 |
= 6.74 =
|
| 107 |
**Added**
|
| 108 |
|
| 4 |
Requires at least: 3.3
|
| 5 |
Tested up to: 4.9
|
| 6 |
Requires PHP: 5.2.17
|
| 7 |
+
Stable tag: 6.75
|
| 8 |
License: GPLv2 or later
|
| 9 |
|
| 10 |
Move, transfer, copy, migrate, and backup a site with 1-click. Quick, easy, and reliable.
|
| 60 |
* [Microsoft Azure Storage](https://servmask.com/products/microsoft-azure-storage-extension)
|
| 61 |
|
| 62 |
= Supported hosting providers =
|
| 63 |
+
**The plugin does not have any dependencies, making it compatible with all PHP hosting providers. We support a vast range of hosting providers. Some of the most popular include:**
|
| 64 |
|
| 65 |
* DigitalOcean
|
| 66 |
* Bluehost
|
| 103 |
All-in-One WP Migration **asks for your consent** to collect **requester's email address** when filling plugin's contact form. [GDPR Compliant Privacy Policy](https://www.iubenda.com/privacy-policy/946881)
|
| 104 |
|
| 105 |
== Changelog ==
|
| 106 |
+
= 6.74 =
|
| 107 |
+
**Fixed**
|
| 108 |
+
|
| 109 |
+
* WP-CLI export/import missing data
|
| 110 |
+
* Serialization in PHP 7.2
|
| 111 |
+
* Missing <staticContent> entry in the web.config file
|
| 112 |
+
|
| 113 |
= 6.74 =
|
| 114 |
**Added**
|
| 115 |
|
