Version Description
Added
- Percentage indicator on "Unpacking archive" step
- Chunking mechanism when adding database.sql to wpress file on export
Changed
- Display 2GB+ value if file size cannot be obtained on Backups page
- Move COMMIT condition after processing all table records
Fixed
- Directory separator of archiver on Windows
Download this release
Release Info
| Developer | bangelov |
| Plugin | |
| Version | 6.55 |
| Comparing to | |
| See all releases | |
Code changes from version 6.54 to 6.55
- all-in-one-wp-migration.php +1 -1
- constants.php +1 -1
- functions.php +26 -0
- lib/controller/class-ai1wm-main-controller.php +4 -3
- lib/model/class-ai1wm-backups.php +14 -6
- lib/model/class-ai1wm-extensions.php +1 -1
- lib/model/export/class-ai1wm-export-database-file.php +101 -0
- lib/model/export/class-ai1wm-export-database.php +1 -8
- lib/model/export/class-ai1wm-export-resolve.php +1 -1
- lib/model/import/class-ai1wm-import-blogs.php +1 -1
- lib/model/import/class-ai1wm-import-database.php +1 -1
- lib/model/import/class-ai1wm-import-mu-plugins.php +1 -1
- lib/model/import/class-ai1wm-import-resolve.php +1 -1
- lib/model/import/class-ai1wm-import-validate.php +35 -18
- lib/vendor/servmask/archiver/class-ai1wm-compressor.php +6 -0
- lib/vendor/servmask/archiver/class-ai1wm-extractor.php +27 -9
- lib/vendor/servmask/database/class-ai1wm-database.php +2 -2
- lib/view/backups/index.php +23 -25
- loader.php +4 -0
- readme.txt +16 -1
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.55
|
| 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.55' );
|
| 35 |
|
| 36 |
// ===============
|
| 37 |
// = Plugin Name =
|
functions.php
CHANGED
|
@@ -962,6 +962,32 @@ function ai1wm_find_smaller_number( Math_BigInteger $a, Math_BigInteger $b ) {
|
|
| 962 |
return $b;
|
| 963 |
}
|
| 964 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 965 |
/**
|
| 966 |
* Wrapper around fseek
|
| 967 |
*
|
| 962 |
return $b;
|
| 963 |
}
|
| 964 |
|
| 965 |
+
/**
|
| 966 |
+
* Check whether file size is supported by current PHP version
|
| 967 |
+
*
|
| 968 |
+
* @param string $file Path to file
|
| 969 |
+
* @param integer $php_int_size Size of PHP integer
|
| 970 |
+
* @return boolean $php_int_max Max value of PHP integer
|
| 971 |
+
*/
|
| 972 |
+
function ai1wm_is_filesize_supported( $file, $php_int_size = PHP_INT_SIZE, $php_int_max = PHP_INT_MAX ) {
|
| 973 |
+
$size_result = true;
|
| 974 |
+
|
| 975 |
+
// Check whether file size is less than 2GB in PHP 32bits
|
| 976 |
+
if ( $php_int_size === 4 ) {
|
| 977 |
+
if ( ( $file_handle = @fopen( $file, 'r' ) ) ) {
|
| 978 |
+
if ( @fseek( $file_handle, $php_int_max, SEEK_SET ) !== -1 ) {
|
| 979 |
+
if ( @fgetc( $file_handle ) !== false ) {
|
| 980 |
+
$size_result = false;
|
| 981 |
+
}
|
| 982 |
+
}
|
| 983 |
+
|
| 984 |
+
@fclose( $file_handle );
|
| 985 |
+
}
|
| 986 |
+
}
|
| 987 |
+
|
| 988 |
+
return $size_result;
|
| 989 |
+
}
|
| 990 |
+
|
| 991 |
/**
|
| 992 |
* Wrapper around fseek
|
| 993 |
*
|
lib/controller/class-ai1wm-main-controller.php
CHANGED
|
@@ -136,6 +136,7 @@ class Ai1wm_Main_Controller {
|
|
| 136 |
add_filter( 'ai1wm_export', 'Ai1wm_Export_Enumerate::execute', 100 );
|
| 137 |
add_filter( 'ai1wm_export', 'Ai1wm_Export_Content::execute', 150 );
|
| 138 |
add_filter( 'ai1wm_export', 'Ai1wm_Export_Database::execute', 200 );
|
|
|
|
| 139 |
add_filter( 'ai1wm_export', 'Ai1wm_Export_Download::execute', 250 );
|
| 140 |
add_filter( 'ai1wm_export', 'Ai1wm_Export_Clean::execute', 300 );
|
| 141 |
|
|
@@ -410,7 +411,7 @@ class Ai1wm_Main_Controller {
|
|
| 410 |
* @return void
|
| 411 |
*/
|
| 412 |
public function register_export_scripts_and_styles( $hook ) {
|
| 413 |
-
if ( 'toplevel_page_site-migration-export'
|
| 414 |
return;
|
| 415 |
}
|
| 416 |
|
|
@@ -460,7 +461,7 @@ class Ai1wm_Main_Controller {
|
|
| 460 |
* @return void
|
| 461 |
*/
|
| 462 |
public function register_import_scripts_and_styles( $hook ) {
|
| 463 |
-
if ( 'all-in-one-wp-migration_page_site-migration-import'
|
| 464 |
return;
|
| 465 |
}
|
| 466 |
|
|
@@ -545,7 +546,7 @@ class Ai1wm_Main_Controller {
|
|
| 545 |
* @return void
|
| 546 |
*/
|
| 547 |
public function register_backups_scripts_and_styles( $hook ) {
|
| 548 |
-
if ( 'all-in-one-wp-migration_page_site-migration-backups'
|
| 549 |
return;
|
| 550 |
}
|
| 551 |
|
| 136 |
add_filter( 'ai1wm_export', 'Ai1wm_Export_Enumerate::execute', 100 );
|
| 137 |
add_filter( 'ai1wm_export', 'Ai1wm_Export_Content::execute', 150 );
|
| 138 |
add_filter( 'ai1wm_export', 'Ai1wm_Export_Database::execute', 200 );
|
| 139 |
+
add_filter( 'ai1wm_export', 'Ai1wm_Export_Database_File::execute', 220 );
|
| 140 |
add_filter( 'ai1wm_export', 'Ai1wm_Export_Download::execute', 250 );
|
| 141 |
add_filter( 'ai1wm_export', 'Ai1wm_Export_Clean::execute', 300 );
|
| 142 |
|
| 411 |
* @return void
|
| 412 |
*/
|
| 413 |
public function register_export_scripts_and_styles( $hook ) {
|
| 414 |
+
if ( stripos( 'toplevel_page_site-migration-export', $hook ) === false ) {
|
| 415 |
return;
|
| 416 |
}
|
| 417 |
|
| 461 |
* @return void
|
| 462 |
*/
|
| 463 |
public function register_import_scripts_and_styles( $hook ) {
|
| 464 |
+
if ( stripos( 'all-in-one-wp-migration_page_site-migration-import', $hook ) === false ) {
|
| 465 |
return;
|
| 466 |
}
|
| 467 |
|
| 546 |
* @return void
|
| 547 |
*/
|
| 548 |
public function register_backups_scripts_and_styles( $hook ) {
|
| 549 |
+
if ( stripos( 'all-in-one-wp-migration_page_site-migration-backups', $hook ) === false ) {
|
| 550 |
return;
|
| 551 |
}
|
| 552 |
|
lib/model/class-ai1wm-backups.php
CHANGED
|
@@ -41,16 +41,24 @@ class Ai1wm_Backups {
|
|
| 41 |
|
| 42 |
foreach ( $iterator as $item ) {
|
| 43 |
try {
|
| 44 |
-
$
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
} catch ( Exception $e ) {
|
| 50 |
$backups[] = array(
|
| 51 |
'filename' => $item->getFilename(),
|
| 52 |
'mtime' => null,
|
| 53 |
-
'size' =>
|
| 54 |
);
|
| 55 |
}
|
| 56 |
}
|
| 41 |
|
| 42 |
foreach ( $iterator as $item ) {
|
| 43 |
try {
|
| 44 |
+
if ( ai1wm_is_filesize_supported( $item->getPathname() ) ) {
|
| 45 |
+
$backups[] = array(
|
| 46 |
+
'filename' => $item->getFilename(),
|
| 47 |
+
'mtime' => $item->getMTime(),
|
| 48 |
+
'size' => $item->getSize(),
|
| 49 |
+
);
|
| 50 |
+
} else {
|
| 51 |
+
$backups[] = array(
|
| 52 |
+
'filename' => $item->getFilename(),
|
| 53 |
+
'mtime' => $item->getMTime(),
|
| 54 |
+
'size' => null,
|
| 55 |
+
);
|
| 56 |
+
}
|
| 57 |
} catch ( Exception $e ) {
|
| 58 |
$backups[] = array(
|
| 59 |
'filename' => $item->getFilename(),
|
| 60 |
'mtime' => null,
|
| 61 |
+
'size' => null,
|
| 62 |
);
|
| 63 |
}
|
| 64 |
}
|
lib/model/class-ai1wm-extensions.php
CHANGED
|
@@ -76,7 +76,7 @@ class Ai1wm_Extensions {
|
|
| 76 |
'about' => AI1WMME_PLUGIN_ABOUT,
|
| 77 |
'basename' => AI1WMME_PLUGIN_BASENAME,
|
| 78 |
'version' => AI1WMME_VERSION,
|
| 79 |
-
'requires' => '3.
|
| 80 |
'short' => AI1WMME_PLUGIN_SHORT,
|
| 81 |
);
|
| 82 |
}
|
| 76 |
'about' => AI1WMME_PLUGIN_ABOUT,
|
| 77 |
'basename' => AI1WMME_PLUGIN_BASENAME,
|
| 78 |
'version' => AI1WMME_VERSION,
|
| 79 |
+
'requires' => '3.36',
|
| 80 |
'short' => AI1WMME_PLUGIN_SHORT,
|
| 81 |
);
|
| 82 |
}
|
lib/model/export/class-ai1wm-export-database-file.php
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Copyright (C) 2014-2017 ServMask Inc.
|
| 4 |
+
*
|
| 5 |
+
* This program is free software: you can redistribute it and/or modify
|
| 6 |
+
* it under the terms of the GNU General Public License as published by
|
| 7 |
+
* the Free Software Foundation, either version 3 of the License, or
|
| 8 |
+
* (at your option) any later version.
|
| 9 |
+
*
|
| 10 |
+
* This program is distributed in the hope that it will be useful,
|
| 11 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 12 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 13 |
+
* GNU General Public License for more details.
|
| 14 |
+
*
|
| 15 |
+
* You should have received a copy of the GNU General Public License
|
| 16 |
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
| 17 |
+
*
|
| 18 |
+
* ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗
|
| 19 |
+
* ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝
|
| 20 |
+
* ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝
|
| 21 |
+
* ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗
|
| 22 |
+
* ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗
|
| 23 |
+
* ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
|
| 24 |
+
*/
|
| 25 |
+
|
| 26 |
+
class Ai1wm_Export_Database_File {
|
| 27 |
+
|
| 28 |
+
public static function execute( $params ) {
|
| 29 |
+
|
| 30 |
+
// Set exclude database
|
| 31 |
+
if ( isset( $params['options']['no_database'] ) ) {
|
| 32 |
+
return $params;
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
$database_bytes_written = 0;
|
| 36 |
+
|
| 37 |
+
// Set database bytes offset
|
| 38 |
+
if ( isset( $params['database_bytes_offset'] ) ) {
|
| 39 |
+
$database_bytes_offset = (int) $params['database_bytes_offset'];
|
| 40 |
+
} else {
|
| 41 |
+
$database_bytes_offset = 0;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
// Get total database size
|
| 45 |
+
if ( isset( $params['total_database_size'] ) ) {
|
| 46 |
+
$total_database_size = (int) $params['total_database_size'];
|
| 47 |
+
} else {
|
| 48 |
+
$total_database_size = 1;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
// What percent of database have we processed?
|
| 52 |
+
$progress = (int) min( ( $database_bytes_offset / $total_database_size ) * 100, 100 );
|
| 53 |
+
|
| 54 |
+
// Set progress
|
| 55 |
+
Ai1wm_Status::info( sprintf( __( 'Archiving database...<br />%d%% complete', AI1WM_PLUGIN_NAME ), $progress ) );
|
| 56 |
+
|
| 57 |
+
// Get archive
|
| 58 |
+
$archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) );
|
| 59 |
+
|
| 60 |
+
// Add file to archive
|
| 61 |
+
if ( $archive->add_file( ai1wm_database_path( $params ), AI1WM_DATABASE_NAME, $database_bytes_written, $database_bytes_offset, 10 ) ) {
|
| 62 |
+
|
| 63 |
+
// Set progress
|
| 64 |
+
Ai1wm_Status::info( __( 'Done archiving database.', AI1WM_PLUGIN_NAME ) );
|
| 65 |
+
|
| 66 |
+
// Unset database bytes offset
|
| 67 |
+
unset( $params['database_bytes_offset'] );
|
| 68 |
+
|
| 69 |
+
// Unset total database size
|
| 70 |
+
unset( $params['total_database_size'] );
|
| 71 |
+
|
| 72 |
+
// Unset completed flag
|
| 73 |
+
unset( $params['completed'] );
|
| 74 |
+
|
| 75 |
+
} else {
|
| 76 |
+
|
| 77 |
+
// Get total database size
|
| 78 |
+
$total_database_size = ai1wm_database_bytes( $params );
|
| 79 |
+
|
| 80 |
+
// What percent of database have we processed?
|
| 81 |
+
$progress = (int) min( ( $database_bytes_offset / $total_database_size ) * 100, 100 );
|
| 82 |
+
|
| 83 |
+
// Set progress
|
| 84 |
+
Ai1wm_Status::info( sprintf( __( 'Archiving database...<br />%d%% complete', AI1WM_PLUGIN_NAME ), $progress ) );
|
| 85 |
+
|
| 86 |
+
// Set database bytes offset
|
| 87 |
+
$params['database_bytes_offset'] = $database_bytes_offset;
|
| 88 |
+
|
| 89 |
+
// Set total database size
|
| 90 |
+
$params['total_database_size'] = $total_database_size;
|
| 91 |
+
|
| 92 |
+
// Set completed flag
|
| 93 |
+
$params['completed'] = false;
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
// Close the archive file
|
| 97 |
+
$archive->close();
|
| 98 |
+
|
| 99 |
+
return $params;
|
| 100 |
+
}
|
| 101 |
+
}
|
lib/model/export/class-ai1wm-export-database.php
CHANGED
|
@@ -127,15 +127,8 @@ class Ai1wm_Export_Database {
|
|
| 127 |
// Export database
|
| 128 |
if ( $mysql->export( ai1wm_database_path( $params ), $table_index, $table_offset, 10 ) ) {
|
| 129 |
|
| 130 |
-
// Get archive file
|
| 131 |
-
$archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) );
|
| 132 |
-
|
| 133 |
-
// Add database to archive
|
| 134 |
-
$archive->add_file( ai1wm_database_path( $params ), AI1WM_DATABASE_NAME );
|
| 135 |
-
$archive->close();
|
| 136 |
-
|
| 137 |
// Set progress
|
| 138 |
-
Ai1wm_Status::info( __( 'Done exporting database
|
| 139 |
|
| 140 |
// Unset table index
|
| 141 |
unset( $params['table_index'] );
|
| 127 |
// Export database
|
| 128 |
if ( $mysql->export( ai1wm_database_path( $params ), $table_index, $table_offset, 10 ) ) {
|
| 129 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
// Set progress
|
| 131 |
+
Ai1wm_Status::info( __( 'Done exporting database.', AI1WM_PLUGIN_NAME ) );
|
| 132 |
|
| 133 |
// Unset table index
|
| 134 |
unset( $params['table_index'] );
|
lib/model/export/class-ai1wm-export-resolve.php
CHANGED
|
@@ -34,7 +34,7 @@ class Ai1wm_Export_Resolve {
|
|
| 34 |
Ai1wm_Http::resolve( admin_url( 'admin-ajax.php?action=ai1wm_resolve' ) );
|
| 35 |
|
| 36 |
// Set progress
|
| 37 |
-
Ai1wm_Status::info( __( 'Done resolving URL address
|
| 38 |
|
| 39 |
return $params;
|
| 40 |
}
|
| 34 |
Ai1wm_Http::resolve( admin_url( 'admin-ajax.php?action=ai1wm_resolve' ) );
|
| 35 |
|
| 36 |
// Set progress
|
| 37 |
+
Ai1wm_Status::info( __( 'Done resolving URL address.', AI1WM_PLUGIN_NAME ) );
|
| 38 |
|
| 39 |
return $params;
|
| 40 |
}
|
lib/model/import/class-ai1wm-import-blogs.php
CHANGED
|
@@ -121,7 +121,7 @@ class Ai1wm_Import_Blogs {
|
|
| 121 |
ai1wm_close( $handle );
|
| 122 |
|
| 123 |
// Set progress
|
| 124 |
-
Ai1wm_Status::info( __( 'Done preparing blogs
|
| 125 |
|
| 126 |
return $params;
|
| 127 |
}
|
| 121 |
ai1wm_close( $handle );
|
| 122 |
|
| 123 |
// Set progress
|
| 124 |
+
Ai1wm_Status::info( __( 'Done preparing blogs.', AI1WM_PLUGIN_NAME ) );
|
| 125 |
|
| 126 |
return $params;
|
| 127 |
}
|
lib/model/import/class-ai1wm-import-database.php
CHANGED
|
@@ -619,7 +619,7 @@ class Ai1wm_Import_Database {
|
|
| 619 |
if ( $mysql->import( ai1wm_database_path( $params ), $query_offset, 10 ) ) {
|
| 620 |
|
| 621 |
// Set progress
|
| 622 |
-
Ai1wm_Status::info( __( 'Done restoring database
|
| 623 |
|
| 624 |
// Unset query offset
|
| 625 |
unset( $params['query_offset'] );
|
| 619 |
if ( $mysql->import( ai1wm_database_path( $params ), $query_offset, 10 ) ) {
|
| 620 |
|
| 621 |
// Set progress
|
| 622 |
+
Ai1wm_Status::info( __( 'Done restoring database.', AI1WM_PLUGIN_NAME ) );
|
| 623 |
|
| 624 |
// Unset query offset
|
| 625 |
unset( $params['query_offset'] );
|
lib/model/import/class-ai1wm-import-mu-plugins.php
CHANGED
|
@@ -40,7 +40,7 @@ class Ai1wm_Import_Mu_Plugins {
|
|
| 40 |
$archive->close();
|
| 41 |
|
| 42 |
// Set progress
|
| 43 |
-
Ai1wm_Status::info( __( 'Done activating mu-plugins
|
| 44 |
|
| 45 |
return $params;
|
| 46 |
}
|
| 40 |
$archive->close();
|
| 41 |
|
| 42 |
// Set progress
|
| 43 |
+
Ai1wm_Status::info( __( 'Done activating mu-plugins.', AI1WM_PLUGIN_NAME ) );
|
| 44 |
|
| 45 |
return $params;
|
| 46 |
}
|
lib/model/import/class-ai1wm-import-resolve.php
CHANGED
|
@@ -34,7 +34,7 @@ class Ai1wm_Import_Resolve {
|
|
| 34 |
Ai1wm_Http::resolve( admin_url( 'admin-ajax.php?action=ai1wm_resolve' ) );
|
| 35 |
|
| 36 |
// Set progress
|
| 37 |
-
Ai1wm_Status::info( __( 'Done resolving URL address
|
| 38 |
|
| 39 |
return $params;
|
| 40 |
}
|
| 34 |
Ai1wm_Http::resolve( admin_url( 'admin-ajax.php?action=ai1wm_resolve' ) );
|
| 35 |
|
| 36 |
// Set progress
|
| 37 |
+
Ai1wm_Status::info( __( 'Done resolving URL address.', AI1WM_PLUGIN_NAME ) );
|
| 38 |
|
| 39 |
return $params;
|
| 40 |
}
|
lib/model/import/class-ai1wm-import-validate.php
CHANGED
|
@@ -27,6 +27,17 @@ class Ai1wm_Import_Validate {
|
|
| 27 |
|
| 28 |
public static function execute( $params ) {
|
| 29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
// Set file bytes offset
|
| 31 |
if ( isset( $params['file_bytes_offset'] ) ) {
|
| 32 |
$file_bytes_offset = (int) $params['file_bytes_offset'];
|
|
@@ -41,8 +52,14 @@ class Ai1wm_Import_Validate {
|
|
| 41 |
$archive_bytes_offset = 0;
|
| 42 |
}
|
| 43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
// Set progress
|
| 45 |
-
Ai1wm_Status::info( __( 'Unpacking archive
|
| 46 |
|
| 47 |
// Open the archive file for reading
|
| 48 |
$archive = new Ai1wm_Extractor( ai1wm_archive_path( $params ) );
|
|
@@ -54,30 +71,17 @@ class Ai1wm_Import_Validate {
|
|
| 54 |
if ( ! $archive->is_valid() ) {
|
| 55 |
throw new Ai1wm_Import_Exception(
|
| 56 |
__(
|
| 57 |
-
'The archive file is corrupted. Follow
|
| 58 |
-
'<a href="https://help.servmask.com/knowledgebase/corrupted-archive/" target="_blank">
|
| 59 |
AI1WM_PLUGIN_NAME
|
| 60 |
)
|
| 61 |
);
|
| 62 |
}
|
| 63 |
|
| 64 |
-
// Obtain the name of the archive
|
| 65 |
-
$name = ai1wm_archive_name( $params );
|
| 66 |
-
|
| 67 |
-
// Obtain the size of the archive
|
| 68 |
-
$size = ai1wm_archive_bytes( $params );
|
| 69 |
-
|
| 70 |
-
// Check file size of the archive
|
| 71 |
-
if ( false === $size ) {
|
| 72 |
-
throw new Ai1wm_Not_Accessible_Exception(
|
| 73 |
-
sprintf( __( 'Unable to get the file size of <strong>%s</strong>', AI1WM_PLUGIN_NAME ), $name )
|
| 74 |
-
);
|
| 75 |
-
}
|
| 76 |
-
|
| 77 |
$allowed_size = apply_filters( 'ai1wm_max_file_size', AI1WM_MAX_FILE_SIZE );
|
| 78 |
|
| 79 |
// Let's check the size of the file to make sure it is less than the maximum allowed
|
| 80 |
-
if ( ( $allowed_size > 0 ) && ( $
|
| 81 |
throw new Ai1wm_Import_Exception(
|
| 82 |
sprintf(
|
| 83 |
__(
|
|
@@ -112,10 +116,17 @@ class Ai1wm_Import_Validate {
|
|
| 112 |
// Check package.json file
|
| 113 |
if ( false === is_file( ai1wm_package_path( $params ) ) ) {
|
| 114 |
throw new Ai1wm_Import_Exception(
|
| 115 |
-
__(
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
);
|
| 117 |
}
|
| 118 |
|
|
|
|
|
|
|
|
|
|
| 119 |
// Unset file bytes offset
|
| 120 |
unset( $params['file_bytes_offset'] );
|
| 121 |
|
|
@@ -127,6 +138,12 @@ class Ai1wm_Import_Validate {
|
|
| 127 |
|
| 128 |
} else {
|
| 129 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
// Set file bytes offset
|
| 131 |
$params['file_bytes_offset'] = $file_bytes_offset;
|
| 132 |
|
| 27 |
|
| 28 |
public static function execute( $params ) {
|
| 29 |
|
| 30 |
+
// Verify file if size > 2GB and PHP = 32-bit
|
| 31 |
+
if ( ! ai1wm_is_filesize_supported( ai1wm_archive_path( $params ) ) ) {
|
| 32 |
+
throw new Ai1wm_Import_Exception(
|
| 33 |
+
__(
|
| 34 |
+
'Your PHP is 32-bit. In order to import your file, please change your PHP version to 64-bit and try again. ' .
|
| 35 |
+
'<a href="https://help.servmask.com/knowledgebase/php-32bit/" target="_blank">Technical details</a>',
|
| 36 |
+
AI1WM_PLUGIN_NAME
|
| 37 |
+
)
|
| 38 |
+
);
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
// Set file bytes offset
|
| 42 |
if ( isset( $params['file_bytes_offset'] ) ) {
|
| 43 |
$file_bytes_offset = (int) $params['file_bytes_offset'];
|
| 52 |
$archive_bytes_offset = 0;
|
| 53 |
}
|
| 54 |
|
| 55 |
+
// Obtain the size of the archive
|
| 56 |
+
$total_files_size = ai1wm_archive_bytes( $params );
|
| 57 |
+
|
| 58 |
+
// What percent of files have we processed?
|
| 59 |
+
$progress = (int) min( ( $archive_bytes_offset / $total_files_size ) * 100, 100 );
|
| 60 |
+
|
| 61 |
// Set progress
|
| 62 |
+
Ai1wm_Status::info( sprintf( __( 'Unpacking archive...<br />%d%% complete', AI1WM_PLUGIN_NAME ), $progress ) );
|
| 63 |
|
| 64 |
// Open the archive file for reading
|
| 65 |
$archive = new Ai1wm_Extractor( ai1wm_archive_path( $params ) );
|
| 71 |
if ( ! $archive->is_valid() ) {
|
| 72 |
throw new Ai1wm_Import_Exception(
|
| 73 |
__(
|
| 74 |
+
'The archive file is corrupted. Follow ' .
|
| 75 |
+
'<a href="https://help.servmask.com/knowledgebase/corrupted-archive/" target="_blank">this article</a> to resolve the problem.',
|
| 76 |
AI1WM_PLUGIN_NAME
|
| 77 |
)
|
| 78 |
);
|
| 79 |
}
|
| 80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 81 |
$allowed_size = apply_filters( 'ai1wm_max_file_size', AI1WM_MAX_FILE_SIZE );
|
| 82 |
|
| 83 |
// Let's check the size of the file to make sure it is less than the maximum allowed
|
| 84 |
+
if ( ( $allowed_size > 0 ) && ( $total_files_size > $allowed_size ) ) {
|
| 85 |
throw new Ai1wm_Import_Exception(
|
| 86 |
sprintf(
|
| 87 |
__(
|
| 116 |
// Check package.json file
|
| 117 |
if ( false === is_file( ai1wm_package_path( $params ) ) ) {
|
| 118 |
throw new Ai1wm_Import_Exception(
|
| 119 |
+
__(
|
| 120 |
+
'Please make sure that your file was exported using <strong>All-in-One WP Migration</strong> plugin. ' .
|
| 121 |
+
'<a href="https://help.servmask.com/knowledgebase/invalid-backup-file/" target="_blank">Technical details</a>',
|
| 122 |
+
AI1WM_PLUGIN_NAME
|
| 123 |
+
)
|
| 124 |
);
|
| 125 |
}
|
| 126 |
|
| 127 |
+
// Set progress
|
| 128 |
+
Ai1wm_Status::info( __( 'Done unpacking archive.', AI1WM_PLUGIN_NAME ) );
|
| 129 |
+
|
| 130 |
// Unset file bytes offset
|
| 131 |
unset( $params['file_bytes_offset'] );
|
| 132 |
|
| 138 |
|
| 139 |
} else {
|
| 140 |
|
| 141 |
+
// What percent of files have we processed?
|
| 142 |
+
$progress = (int) min( ( $archive_bytes_offset / $total_files_size ) * 100, 100 );
|
| 143 |
+
|
| 144 |
+
// Set progress
|
| 145 |
+
Ai1wm_Status::info( sprintf( __( 'Unpacking archive...<br />%d%% complete', AI1WM_PLUGIN_NAME ), $progress ) );
|
| 146 |
+
|
| 147 |
// Set file bytes offset
|
| 148 |
$params['file_bytes_offset'] = $file_bytes_offset;
|
| 149 |
|
lib/vendor/servmask/archiver/class-ai1wm-compressor.php
CHANGED
|
@@ -53,6 +53,12 @@ class Ai1wm_Compressor extends Ai1wm_Archiver {
|
|
| 53 |
public function add_file( $file_name, $new_file_name = '', &$file_written = 0, &$file_offset = 0, $timeout = 0 ) {
|
| 54 |
$file_written = 0;
|
| 55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
// Flag to hold if file data has been processed
|
| 57 |
$completed = true;
|
| 58 |
|
| 53 |
public function add_file( $file_name, $new_file_name = '', &$file_written = 0, &$file_offset = 0, $timeout = 0 ) {
|
| 54 |
$file_written = 0;
|
| 55 |
|
| 56 |
+
// Replace / with DIRECTORY_SEPARATOR in file name
|
| 57 |
+
$file_name = str_replace( '/', DIRECTORY_SEPARATOR, $file_name );
|
| 58 |
+
|
| 59 |
+
// Replace \ with \\ in file name (Windows)
|
| 60 |
+
$file_name = str_replace( '\\', '\\\\', $file_name );
|
| 61 |
+
|
| 62 |
// Flag to hold if file data has been processed
|
| 63 |
$completed = true;
|
| 64 |
|
lib/vendor/servmask/archiver/class-ai1wm-extractor.php
CHANGED
|
@@ -164,6 +164,9 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 164 |
throw new Ai1wm_Not_Directory_Exception( sprintf( 'Location is not a directory: %s', $location ) );
|
| 165 |
}
|
| 166 |
|
|
|
|
|
|
|
|
|
|
| 167 |
// Flag to hold if file data has been processed
|
| 168 |
$completed = true;
|
| 169 |
|
|
@@ -226,15 +229,21 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 226 |
}
|
| 227 |
}
|
| 228 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 229 |
// Check if location doesn't exist, then create it
|
| 230 |
-
if ( false === is_dir( $
|
| 231 |
-
@mkdir( $
|
| 232 |
}
|
| 233 |
|
| 234 |
$file_written = 0;
|
| 235 |
|
| 236 |
// We have a match, let's extract the file
|
| 237 |
-
if ( ( $completed = $this->extract_to( $
|
| 238 |
$file_offset = 0;
|
| 239 |
}
|
| 240 |
} else {
|
|
@@ -270,6 +279,9 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 270 |
throw new Ai1wm_Not_Directory_Exception( sprintf( 'Location is not a directory: %s', $location ) );
|
| 271 |
}
|
| 272 |
|
|
|
|
|
|
|
|
|
|
| 273 |
// Flag to hold if file data has been processed
|
| 274 |
$completed = true;
|
| 275 |
|
|
@@ -326,15 +338,21 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 326 |
// Do we have a match?
|
| 327 |
if ( $should_include_file === true ) {
|
| 328 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 329 |
// Check if location doesn't exist, then create it
|
| 330 |
-
if ( false === is_dir( $
|
| 331 |
-
@mkdir( $
|
| 332 |
}
|
| 333 |
|
| 334 |
$file_written = 0;
|
| 335 |
|
| 336 |
// We have a match, let's extract the file and remove it from the array
|
| 337 |
-
if ( ( $completed = $this->extract_to( $
|
| 338 |
$file_offset = 0;
|
| 339 |
}
|
| 340 |
} else {
|
|
@@ -491,12 +509,12 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
|
|
| 491 |
$data['filename'] = ( $data['path'] === '.' ? $data['filename'] : $data['path'] . DIRECTORY_SEPARATOR . $data['filename'] );
|
| 492 |
|
| 493 |
// Set file path
|
| 494 |
-
$data['path'] = ( $data['path'] === '.' ?
|
| 495 |
|
| 496 |
-
// Replace
|
| 497 |
$data['filename'] = str_replace( '/', DIRECTORY_SEPARATOR, $data['filename'] );
|
| 498 |
|
| 499 |
-
// Replace
|
| 500 |
$data['path'] = str_replace( '/', DIRECTORY_SEPARATOR, $data['path'] );
|
| 501 |
}
|
| 502 |
|
| 164 |
throw new Ai1wm_Not_Directory_Exception( sprintf( 'Location is not a directory: %s', $location ) );
|
| 165 |
}
|
| 166 |
|
| 167 |
+
// Replace / with DIRECTORY_SEPARATOR in location
|
| 168 |
+
$location = str_replace( '/', DIRECTORY_SEPARATOR, $location );
|
| 169 |
+
|
| 170 |
// Flag to hold if file data has been processed
|
| 171 |
$completed = true;
|
| 172 |
|
| 229 |
}
|
| 230 |
}
|
| 231 |
|
| 232 |
+
// Replace \ with \\ in file path (Windows)
|
| 233 |
+
$file_path = str_replace( '\\', '\\\\', $location . DIRECTORY_SEPARATOR . $file_path );
|
| 234 |
+
|
| 235 |
+
// Replace \ with \\ in file name (Windows)
|
| 236 |
+
$file_name = str_replace( '\\', '\\\\', $location . DIRECTORY_SEPARATOR . $file_name );
|
| 237 |
+
|
| 238 |
// Check if location doesn't exist, then create it
|
| 239 |
+
if ( false === is_dir( $file_path ) ) {
|
| 240 |
+
@mkdir( $file_path, $this->get_permissions_for_directory(), true );
|
| 241 |
}
|
| 242 |
|
| 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, $timeout ) ) ) {
|
| 247 |
$file_offset = 0;
|
| 248 |
}
|
| 249 |
} else {
|
| 279 |
throw new Ai1wm_Not_Directory_Exception( sprintf( 'Location is not a directory: %s', $location ) );
|
| 280 |
}
|
| 281 |
|
| 282 |
+
// Replace / with DIRECTORY_SEPARATOR in location
|
| 283 |
+
$location = str_replace( '/', DIRECTORY_SEPARATOR, $location );
|
| 284 |
+
|
| 285 |
// Flag to hold if file data has been processed
|
| 286 |
$completed = true;
|
| 287 |
|
| 338 |
// Do we have a match?
|
| 339 |
if ( $should_include_file === true ) {
|
| 340 |
|
| 341 |
+
// Replace \ with \\ in file path (Windows)
|
| 342 |
+
$file_path = str_replace( '\\', '\\\\', $location . DIRECTORY_SEPARATOR . $file_path );
|
| 343 |
+
|
| 344 |
+
// Replace \ with \\ in file name (Windows)
|
| 345 |
+
$file_name = str_replace( '\\', '\\\\', $location . DIRECTORY_SEPARATOR . $file_name );
|
| 346 |
+
|
| 347 |
// Check if location doesn't exist, then create it
|
| 348 |
+
if ( false === is_dir( $file_path ) ) {
|
| 349 |
+
@mkdir( $file_path, $this->get_permissions_for_directory(), true );
|
| 350 |
}
|
| 351 |
|
| 352 |
$file_written = 0;
|
| 353 |
|
| 354 |
// We have a match, let's extract the file and remove it from the array
|
| 355 |
+
if ( ( $completed = $this->extract_to( $file_name, $file_size, $file_mtime, $file_written, $file_offset, $timeout ) ) ) {
|
| 356 |
$file_offset = 0;
|
| 357 |
}
|
| 358 |
} else {
|
| 509 |
$data['filename'] = ( $data['path'] === '.' ? $data['filename'] : $data['path'] . DIRECTORY_SEPARATOR . $data['filename'] );
|
| 510 |
|
| 511 |
// Set file path
|
| 512 |
+
$data['path'] = ( $data['path'] === '.' ? '' : $data['path'] );
|
| 513 |
|
| 514 |
+
// Replace / with DIRECTORY_SEPARATOR in file name
|
| 515 |
$data['filename'] = str_replace( '/', DIRECTORY_SEPARATOR, $data['filename'] );
|
| 516 |
|
| 517 |
+
// Replace / with DIRECTORY_SEPARATOR in path
|
| 518 |
$data['path'] = str_replace( '/', DIRECTORY_SEPARATOR, $data['path'] );
|
| 519 |
}
|
| 520 |
|
lib/vendor/servmask/database/class-ai1wm-database.php
CHANGED
|
@@ -558,7 +558,7 @@ abstract class Ai1wm_Database {
|
|
| 558 |
$table_where = implode( ' AND ', $table_where );
|
| 559 |
|
| 560 |
// Set query with offset and rows count
|
| 561 |
-
$query = sprintf( 'SELECT t1.* FROM `%s` AS t1 JOIN (SELECT %s FROM `%s` ORDER BY %s LIMIT %d, %d) AS t2 USING (%s)
|
| 562 |
|
| 563 |
} else {
|
| 564 |
|
|
@@ -622,12 +622,12 @@ abstract class Ai1wm_Database {
|
|
| 622 |
ai1wm_write( $file_handler, "COMMIT;\n" );
|
| 623 |
}
|
| 624 |
}
|
|
|
|
| 625 |
|
| 626 |
// Write end of transaction
|
| 627 |
if ( $table_offset % Ai1wm_Database::QUERIES_PER_TRANSACTION !== 0 ) {
|
| 628 |
ai1wm_write( $file_handler, "COMMIT;\n" );
|
| 629 |
}
|
| 630 |
-
} else {
|
| 631 |
|
| 632 |
// Set current table offset
|
| 633 |
$table_offset = 0;
|
| 558 |
$table_where = implode( ' AND ', $table_where );
|
| 559 |
|
| 560 |
// Set query with offset and rows count
|
| 561 |
+
$query = sprintf( 'SELECT t1.* FROM `%s` AS t1 JOIN (SELECT %s FROM `%s` WHERE %s ORDER BY %s LIMIT %d, %d) AS t2 USING (%s)', $table_name, $table_keys, $table_name, $table_where, $table_keys, $table_offset, 1000, $table_keys );
|
| 562 |
|
| 563 |
} else {
|
| 564 |
|
| 622 |
ai1wm_write( $file_handler, "COMMIT;\n" );
|
| 623 |
}
|
| 624 |
}
|
| 625 |
+
} else {
|
| 626 |
|
| 627 |
// Write end of transaction
|
| 628 |
if ( $table_offset % Ai1wm_Database::QUERIES_PER_TRANSACTION !== 0 ) {
|
| 629 |
ai1wm_write( $file_handler, "COMMIT;\n" );
|
| 630 |
}
|
|
|
|
| 631 |
|
| 632 |
// Set current table offset
|
| 633 |
$table_offset = 0;
|
lib/view/backups/index.php
CHANGED
|
@@ -52,32 +52,30 @@
|
|
| 52 |
<i class="ai1wm-icon-file-zip"></i>
|
| 53 |
<?php echo esc_html( $backup['filename'] ); ?>
|
| 54 |
</td>
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
</td>
|
| 63 |
-
<td class="ai1wm-column-size">
|
| 64 |
<?php echo size_format( $backup['size'], 2 ); ?>
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
</
|
| 80 |
-
|
| 81 |
</tr>
|
| 82 |
<?php endforeach; ?>
|
| 83 |
</tbody>
|
| 52 |
<i class="ai1wm-icon-file-zip"></i>
|
| 53 |
<?php echo esc_html( $backup['filename'] ); ?>
|
| 54 |
</td>
|
| 55 |
+
<td class="ai1wm-column-date">
|
| 56 |
+
<?php echo human_time_diff( $backup['mtime'] ); ?> <?php _e( 'ago', AI1WM_PLUGIN_NAME ); ?>
|
| 57 |
+
</td>
|
| 58 |
+
<td class="ai1wm-column-size">
|
| 59 |
+
<?php if ( is_null( $backup['size'] ) ) : ?>
|
| 60 |
+
<?php _e( '2GB+', AI1WM_PLUGIN_NAME ); ?>
|
| 61 |
+
<?php else : ?>
|
|
|
|
|
|
|
| 62 |
<?php echo size_format( $backup['size'], 2 ); ?>
|
| 63 |
+
<?php endif; ?>
|
| 64 |
+
</td>
|
| 65 |
+
<td class="ai1wm-column-actions ai1wm-backup-actions">
|
| 66 |
+
<a href="<?php echo ai1wm_backups_url( array( 'archive' => esc_attr( $backup['filename'] ) ) ); ?>" class="ai1wm-button-green ai1wm-button-alone ai1wm-backup-download">
|
| 67 |
+
<i class="ai1wm-icon-arrow-down ai1wm-icon-alone"></i>
|
| 68 |
+
<span><?php _e( 'Download', AI1WM_PLUGIN_NAME ); ?></span>
|
| 69 |
+
</a>
|
| 70 |
+
<a href="#" data-archive="<?php echo esc_attr( $backup['filename'] ); ?>" class="ai1wm-button-gray ai1wm-button-alone ai1wm-backup-restore">
|
| 71 |
+
<i class="ai1wm-icon-cloud-upload ai1wm-icon-alone"></i>
|
| 72 |
+
<span><?php _e( 'Restore', AI1WM_PLUGIN_NAME ); ?></span>
|
| 73 |
+
</a>
|
| 74 |
+
<a href="#" data-archive="<?php echo esc_attr( $backup['filename'] ); ?>" class="ai1wm-button-red ai1wm-button-alone ai1wm-backup-delete">
|
| 75 |
+
<i class="ai1wm-icon-close ai1wm-icon-alone"></i>
|
| 76 |
+
<span><?php _e( 'Delete', AI1WM_PLUGIN_NAME ); ?></span>
|
| 77 |
+
</a>
|
| 78 |
+
</td>
|
| 79 |
</tr>
|
| 80 |
<?php endforeach; ?>
|
| 81 |
</tbody>
|
loader.php
CHANGED
|
@@ -236,6 +236,10 @@ require_once AI1WM_EXPORT_PATH .
|
|
| 236 |
DIRECTORY_SEPARATOR .
|
| 237 |
'class-ai1wm-export-database.php';
|
| 238 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 239 |
require_once AI1WM_EXPORT_PATH .
|
| 240 |
DIRECTORY_SEPARATOR .
|
| 241 |
'class-ai1wm-export-download.php';
|
| 236 |
DIRECTORY_SEPARATOR .
|
| 237 |
'class-ai1wm-export-database.php';
|
| 238 |
|
| 239 |
+
require_once AI1WM_EXPORT_PATH .
|
| 240 |
+
DIRECTORY_SEPARATOR .
|
| 241 |
+
'class-ai1wm-export-database-file.php';
|
| 242 |
+
|
| 243 |
require_once AI1WM_EXPORT_PATH .
|
| 244 |
DIRECTORY_SEPARATOR .
|
| 245 |
'class-ai1wm-export-download.php';
|
readme.txt
CHANGED
|
@@ -3,7 +3,7 @@ Contributors: yani.iliev, bangelov, pimjitsawang
|
|
| 3 |
Tags: move, transfer, copy, migrate, backup, clone, restore, db migration, wordpress migration, website migration, database export, database import, apoyo, sauvegarde, di riserva, バックアップ
|
| 4 |
Requires at least: 3.3
|
| 5 |
Tested up to: 4.8
|
| 6 |
-
Stable tag: 6.
|
| 7 |
License: GPLv2 or later
|
| 8 |
|
| 9 |
Move, transfer, copy, migrate, and backup a site with 1-click. Quick, easy, and reliable.
|
|
@@ -90,6 +90,21 @@ Alternatively you can download the plugin using the download button on this page
|
|
| 90 |
3. Plugin Menu
|
| 91 |
|
| 92 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 93 |
= 6.54 =
|
| 94 |
**Changed**
|
| 95 |
|
| 3 |
Tags: move, transfer, copy, migrate, backup, clone, restore, db migration, wordpress migration, website migration, database export, database import, apoyo, sauvegarde, di riserva, バックアップ
|
| 4 |
Requires at least: 3.3
|
| 5 |
Tested up to: 4.8
|
| 6 |
+
Stable tag: 6.55
|
| 7 |
License: GPLv2 or later
|
| 8 |
|
| 9 |
Move, transfer, copy, migrate, and backup a site with 1-click. Quick, easy, and reliable.
|
| 90 |
3. Plugin Menu
|
| 91 |
|
| 92 |
== Changelog ==
|
| 93 |
+
= 6.55 =
|
| 94 |
+
**Added**
|
| 95 |
+
|
| 96 |
+
* Percentage indicator on "Unpacking archive" step
|
| 97 |
+
* Chunking mechanism when adding database.sql to wpress file on export
|
| 98 |
+
|
| 99 |
+
**Changed**
|
| 100 |
+
|
| 101 |
+
* Display 2GB+ value if file size cannot be obtained on Backups page
|
| 102 |
+
* Move COMMIT condition after processing all table records
|
| 103 |
+
|
| 104 |
+
**Fixed**
|
| 105 |
+
|
| 106 |
+
* Directory separator of archiver on Windows
|
| 107 |
+
|
| 108 |
= 6.54 =
|
| 109 |
**Changed**
|
| 110 |
|
