All-in-One WP Migration - Version 6.45

Version Description

Changed * Better mechanism when enumerating files on import

Fixed * Validation mechanism on export/import

Download this release

Release Info

Developer bangelov
Plugin Icon 128x128 All-in-One WP Migration
Version 6.45
Comparing to
See all releases

Code changes from version 6.44 to 6.45

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.44
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.45
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.44' );
35
36
// ===============
37
// = Plugin Name =
31
// ==================
32
// = Plugin Version =
33
// ==================
34
+ define( 'AI1WM_VERSION', '6.45' );
35
36
// ===============
37
// = Plugin Name =
exceptions.php CHANGED
@@ -34,4 +34,5 @@ class Ai1wm_Not_Found_Exception extends Exception {}
34
class Ai1wm_Not_Readable_Exception extends Exception {}
35
class Ai1wm_Not_Writable_Exception extends Exception {}
36
class Ai1wm_Quota_Exceeded_Exception extends Exception {}
37
class Ai1wm_Storage_Exception extends Exception {}
34
class Ai1wm_Not_Readable_Exception extends Exception {}
35
class Ai1wm_Not_Writable_Exception extends Exception {}
36
class Ai1wm_Quota_Exceeded_Exception extends Exception {}
37
+ class Ai1wm_Not_Valid_Secret_Key_Exception extends Exception {}
38
class Ai1wm_Storage_Exception extends Exception {}
functions.php CHANGED
@@ -769,7 +769,7 @@ function ai1wm_urldecode( $value ) {
769
* @param string $file Path to the file to open
770
* @param string $mode Mode in which to open the file
771
* @return resource
772
- * @throws Exception
773
*/
774
function ai1wm_open( $file, $mode ) {
775
$file_handle = fopen( $file, $mode );
@@ -786,7 +786,8 @@ function ai1wm_open( $file, $mode ) {
786
* @param resource $handle File handle to write to
787
* @param string $content Contents to write to the file
788
* @return int
789
- * @throws Exception
790
*/
791
function ai1wm_write( $handle, $content ) {
792
$write_result = fwrite( $handle, $content );
@@ -807,7 +808,7 @@ function ai1wm_write( $handle, $content ) {
807
* @param resource $handle File handle to read from
808
* @param string $filesize File size
809
* @return int
810
- * @throws Exception
811
*/
812
function ai1wm_read( $handle, $filesize ) {
813
$read_result = fread( $handle, $filesize );
@@ -929,3 +930,20 @@ function ai1wm_disable_jetpack_photon() {
929
update_option( AI1WM_JETPACK_ACTIVE_MODULES, array_values( array_diff( $jetpack, array( 'photon' ) ) ) );
930
}
931
}
769
* @param string $file Path to the file to open
770
* @param string $mode Mode in which to open the file
771
* @return resource
772
+ * @throws Ai1wm_Not_Accesible_Exception
773
*/
774
function ai1wm_open( $file, $mode ) {
775
$file_handle = fopen( $file, $mode );
786
* @param resource $handle File handle to write to
787
* @param string $content Contents to write to the file
788
* @return int
789
+ * @throws Ai1wm_Not_Writable_Exception
790
+ * @throws Ai1wm_Quota_Exceeded_Exception
791
*/
792
function ai1wm_write( $handle, $content ) {
793
$write_result = fwrite( $handle, $content );
808
* @param resource $handle File handle to read from
809
* @param string $filesize File size
810
* @return int
811
+ * @throws Ai1wm_Not_Readable_Exception
812
*/
813
function ai1wm_read( $handle, $filesize ) {
814
$read_result = fread( $handle, $filesize );
930
update_option( AI1WM_JETPACK_ACTIVE_MODULES, array_values( array_diff( $jetpack, array( 'photon' ) ) ) );
931
}
932
}
933
+
934
+ /**
935
+ * Verify secret key
936
+ *
937
+ * @param string $secret_key Secret key
938
+ * @return bool
939
+ * @throws Ai1wm_Not_Valid_Secret_Key_Exception
940
+ */
941
+ function ai1wm_verify_secret_key( $secret_key ) {
942
+ if ( $secret_key !== get_option( AI1WM_SECRET_KEY ) ) {
943
+ throw new Ai1wm_Not_Valid_Secret_Key_Exception(
944
+ sprintf( __( 'Unable to authenticate your request with secret_key = "%s"', AI1WM_PLUGIN_NAME ), $secret_key )
945
+ );
946
+ }
947
+
948
+ return true;
949
+ }
lib/controller/class-ai1wm-export-controller.php CHANGED
@@ -40,7 +40,7 @@ class Ai1wm_Export_Controller {
40
41
// Set params
42
if ( empty( $params ) ) {
43
- $params = ai1wm_urldecode( $_REQUEST );
44
}
45
46
// Set priority
@@ -55,12 +55,11 @@ class Ai1wm_Export_Controller {
55
$secret_key = $params['secret_key'];
56
}
57
58
- // Verify secret key by using the value in the database, not in cache
59
- if ( $secret_key !== get_option( AI1WM_SECRET_KEY ) ) {
60
- Ai1wm_Status::error(
61
- sprintf( __( 'Unable to authenticate your request with secret_key = "%s"', AI1WM_PLUGIN_NAME ), $secret_key ),
62
- __( 'Unable to export', AI1WM_PLUGIN_NAME )
63
- );
64
exit;
65
}
66
@@ -87,7 +86,7 @@ class Ai1wm_Export_Controller {
87
Ai1wm_Log::export( $params );
88
89
} catch ( Exception $e ) {
90
- Ai1wm_Status::error( $e->getMessage(), __( 'Unable to export', AI1WM_PLUGIN_NAME ) );
91
exit;
92
}
93
}
40
41
// Set params
42
if ( empty( $params ) ) {
43
+ $params = stripslashes_deep( $_REQUEST );
44
}
45
46
// Set priority
55
$secret_key = $params['secret_key'];
56
}
57
58
+ try {
59
+ // Ensure that unauthorized people cannot access export action
60
+ ai1wm_verify_secret_key( $secret_key );
61
+ } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) {
62
+ Ai1wm_Log::error( $e->getMessage() );
63
exit;
64
}
65
86
Ai1wm_Log::export( $params );
87
88
} catch ( Exception $e ) {
89
+ Ai1wm_Status::error( $e->getMessage() );
90
exit;
91
}
92
}
lib/controller/class-ai1wm-import-controller.php CHANGED
@@ -40,7 +40,7 @@ class Ai1wm_Import_Controller {
40
41
// Set params
42
if ( empty( $params ) ) {
43
- $params = ai1wm_urldecode( $_REQUEST );
44
}
45
46
// Set priority
@@ -55,12 +55,11 @@ class Ai1wm_Import_Controller {
55
$secret_key = $params['secret_key'];
56
}
57
58
- // Verify secret key by using the value in the database, not in cache
59
- if ( $secret_key !== get_option( AI1WM_SECRET_KEY ) ) {
60
- Ai1wm_Status::error(
61
- sprintf( __( 'Unable to authenticate your request with secret_key = "%s"', AI1WM_PLUGIN_NAME ), $secret_key ),
62
- __( 'Unable to import', AI1WM_PLUGIN_NAME )
63
- );
64
exit;
65
}
66
@@ -91,7 +90,7 @@ class Ai1wm_Import_Controller {
91
echo json_encode( array( 'errors' => array( array( 'code' => $e->getCode(), 'message' => $e->getMessage() ) ) ) );
92
exit;
93
} catch ( Exception $e ) {
94
- Ai1wm_Status::error( $e->getMessage(), __( 'Unable to import', AI1WM_PLUGIN_NAME ) );
95
exit;
96
}
97
}
40
41
// Set params
42
if ( empty( $params ) ) {
43
+ $params = stripslashes_deep( $_REQUEST );
44
}
45
46
// Set priority
55
$secret_key = $params['secret_key'];
56
}
57
58
+ try {
59
+ // Ensure that unauthorized people cannot access import action
60
+ ai1wm_verify_secret_key( $secret_key );
61
+ } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) {
62
+ Ai1wm_Log::error( $e->getMessage() );
63
exit;
64
}
65
90
echo json_encode( array( 'errors' => array( array( 'code' => $e->getCode(), 'message' => $e->getMessage() ) ) ) );
91
exit;
92
} catch ( Exception $e ) {
93
+ Ai1wm_Status::error( $e->getMessage() );
94
exit;
95
}
96
}
lib/controller/class-ai1wm-main-controller.php CHANGED
@@ -395,7 +395,7 @@ class Ai1wm_Main_Controller {
395
'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_export' ) ),
396
),
397
'status' => array(
398
- 'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_status' ) ),
399
),
400
'secret_key' => get_option( AI1WM_SECRET_KEY ),
401
) );
@@ -456,7 +456,7 @@ class Ai1wm_Main_Controller {
456
'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_import' ) ),
457
),
458
'status' => array(
459
- 'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_status' ) ),
460
),
461
'secret_key' => get_option( AI1WM_SECRET_KEY ),
462
'oversize' => sprintf(
@@ -531,7 +531,7 @@ class Ai1wm_Main_Controller {
531
'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_import' ) ),
532
),
533
'status' => array(
534
- 'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_status' ) ),
535
),
536
'secret_key' => get_option( AI1WM_SECRET_KEY ),
537
) );
@@ -614,34 +614,28 @@ class Ai1wm_Main_Controller {
614
* @return void
615
*/
616
public function router() {
617
- // Public
618
add_action( 'wp_ajax_nopriv_ai1wm_export', 'Ai1wm_Export_Controller::export' );
619
add_action( 'wp_ajax_nopriv_ai1wm_import', 'Ai1wm_Import_Controller::import' );
620
add_action( 'wp_ajax_nopriv_ai1wm_status', 'Ai1wm_Status_Controller::status' );
621
add_action( 'wp_ajax_nopriv_ai1wm_resolve', 'Ai1wm_Resolve_Controller::resolve' );
622
623
// Update
624
if ( current_user_can( 'update_plugins' ) ) {
625
add_action( 'wp_ajax_ai1wm_updater', 'Ai1wm_Updater_Controller::updater' );
626
}
627
628
- // Export
629
- if ( current_user_can( 'export' ) ) {
630
- add_action( 'wp_ajax_ai1wm_export', 'Ai1wm_Export_Controller::export' );
631
- }
632
-
633
- // Import
634
- if ( current_user_can( 'import' ) ) {
635
- add_action( 'wp_ajax_ai1wm_import', 'Ai1wm_Import_Controller::import' );
636
- }
637
-
638
- // Both
639
if ( current_user_can( 'export' ) || current_user_can( 'import' ) ) {
640
add_action( 'wp_ajax_ai1wm_backups', 'Ai1wm_Backups_Controller::delete' );
641
add_action( 'wp_ajax_ai1wm_feedback', 'Ai1wm_Feedback_Controller::feedback' );
642
add_action( 'wp_ajax_ai1wm_report', 'Ai1wm_Report_Controller::report' );
643
- add_action( 'wp_ajax_ai1wm_status', 'Ai1wm_Status_Controller::status' );
644
- add_action( 'wp_ajax_ai1wm_resolve', 'Ai1wm_Resolve_Controller::resolve' );
645
}
646
}
647
395
'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_export' ) ),
396
),
397
'status' => array(
398
+ 'url' => wp_make_link_relative( add_query_arg( array( 'secret_key' => get_option( AI1WM_SECRET_KEY ) ), admin_url( 'admin-ajax.php?action=ai1wm_status' ) ) ),
399
),
400
'secret_key' => get_option( AI1WM_SECRET_KEY ),
401
) );
456
'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_import' ) ),
457
),
458
'status' => array(
459
+ 'url' => wp_make_link_relative( add_query_arg( array( 'secret_key' => get_option( AI1WM_SECRET_KEY ) ), admin_url( 'admin-ajax.php?action=ai1wm_status' ) ) ),
460
),
461
'secret_key' => get_option( AI1WM_SECRET_KEY ),
462
'oversize' => sprintf(
531
'url' => wp_make_link_relative( admin_url( 'admin-ajax.php?action=ai1wm_import' ) ),
532
),
533
'status' => array(
534
+ 'url' => wp_make_link_relative( add_query_arg( array( 'secret_key' => get_option( AI1WM_SECRET_KEY ) ), admin_url( 'admin-ajax.php?action=ai1wm_status' ) ) ),
535
),
536
'secret_key' => get_option( AI1WM_SECRET_KEY ),
537
) );
614
* @return void
615
*/
616
public function router() {
617
+ // Public actions
618
add_action( 'wp_ajax_nopriv_ai1wm_export', 'Ai1wm_Export_Controller::export' );
619
add_action( 'wp_ajax_nopriv_ai1wm_import', 'Ai1wm_Import_Controller::import' );
620
add_action( 'wp_ajax_nopriv_ai1wm_status', 'Ai1wm_Status_Controller::status' );
621
add_action( 'wp_ajax_nopriv_ai1wm_resolve', 'Ai1wm_Resolve_Controller::resolve' );
622
623
+ // Private actions
624
+ add_action( 'wp_ajax_ai1wm_export', 'Ai1wm_Export_Controller::export' );
625
+ add_action( 'wp_ajax_ai1wm_import', 'Ai1wm_Import_Controller::import' );
626
+ add_action( 'wp_ajax_ai1wm_status', 'Ai1wm_Status_Controller::status' );
627
+ add_action( 'wp_ajax_ai1wm_resolve', 'Ai1wm_Resolve_Controller::resolve' );
628
+
629
// Update
630
if ( current_user_can( 'update_plugins' ) ) {
631
add_action( 'wp_ajax_ai1wm_updater', 'Ai1wm_Updater_Controller::updater' );
632
}
633
634
+ // Delete backup, send feedback and report problem
635
if ( current_user_can( 'export' ) || current_user_can( 'import' ) ) {
636
add_action( 'wp_ajax_ai1wm_backups', 'Ai1wm_Backups_Controller::delete' );
637
add_action( 'wp_ajax_ai1wm_feedback', 'Ai1wm_Feedback_Controller::feedback' );
638
add_action( 'wp_ajax_ai1wm_report', 'Ai1wm_Report_Controller::report' );
639
}
640
}
641
lib/controller/class-ai1wm-resolve-controller.php CHANGED
@@ -29,7 +29,7 @@ class Ai1wm_Resolve_Controller {
29
30
// Set params
31
if ( empty( $params ) ) {
32
- $params = ai1wm_urldecode( $_REQUEST );
33
}
34
35
// Set secret key
@@ -38,12 +38,11 @@ class Ai1wm_Resolve_Controller {
38
$secret_key = $params['secret_key'];
39
}
40
41
- // Verify secret key by using the value in the database, not in cache
42
- if ( $secret_key !== get_option( AI1WM_SECRET_KEY ) ) {
43
- Ai1wm_Status::error(
44
- sprintf( __( 'Unable to authenticate your request with secret_key = "%s"', AI1WM_PLUGIN_NAME ), $secret_key ),
45
- __( 'Unable to resolve', AI1WM_PLUGIN_NAME )
46
- );
47
exit;
48
}
49
29
30
// Set params
31
if ( empty( $params ) ) {
32
+ $params = stripslashes_deep( $_REQUEST );
33
}
34
35
// Set secret key
38
$secret_key = $params['secret_key'];
39
}
40
41
+ try {
42
+ // Ensure that unauthorized people cannot access resolve action
43
+ ai1wm_verify_secret_key( $secret_key );
44
+ } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) {
45
+ Ai1wm_Log::error( $e->getMessage() );
46
exit;
47
}
48
lib/controller/class-ai1wm-status-controller.php CHANGED
@@ -25,7 +25,30 @@
25
26
class Ai1wm_Status_Controller {
27
28
- public static function status() {
29
echo json_encode( get_option( AI1WM_STATUS, array() ) );
30
exit;
31
}
25
26
class Ai1wm_Status_Controller {
27
28
+ public static function status( $params = array() ) {
29
+
30
+ // Set params
31
+ if ( empty( $params ) ) {
32
+ $params = stripslashes_deep( $_REQUEST );
33
+ }
34
+
35
+ // Set secret key
36
+ $secret_key = null;
37
+ if ( isset( $params['secret_key'] ) ) {
38
+ $secret_key = $params['secret_key'];
39
+ }
40
+
41
+ try {
42
+ // Ensure that unauthorized people cannot access status action
43
+ ai1wm_verify_secret_key( $secret_key );
44
+ } catch ( Ai1wm_Not_Valid_Secret_Key_Exception $e ) {
45
+ echo json_encode( array(
46
+ 'type' => 'error',
47
+ 'message' => $e->getMessage(),
48
+ ) );
49
+ exit;
50
+ }
51
+
52
echo json_encode( get_option( AI1WM_STATUS, array() ) );
53
exit;
54
}
lib/vendor/servmask/archiver/class-ai1wm-extractor.php CHANGED
@@ -25,6 +25,20 @@
25
26
class Ai1wm_Extractor extends Ai1wm_Archiver {
27
28
/**
29
* Overloaded constructor that opens the passed file for reading
30
*
@@ -43,28 +57,37 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
43
* @throws \Ai1wm_Not_Readable_Exception
44
*/
45
public function get_total_files_count() {
46
- fseek( $this->file_handle, SEEK_SET, 0 );
47
48
- // total files count
49
- $total_files_count = 0;
50
51
- while ( $block = $this->read_from_handle( $this->file_handle, 4377 ) ) {
52
- // end block has been reached
53
- if ( $block === $this->eof ) {
54
- continue;
55
- }
56
57
- // get file data from the block
58
- $data = $this->get_data_from_block( $block );
59
60
- // we have a file, increment the counter
61
- $total_files_count++;
62
63
- // skip file content so we can move forward to the next file
64
- $this->set_file_pointer( $this->file_handle, $data['size'] );
65
}
66
67
- return $total_files_count;
68
}
69
70
/**
@@ -75,28 +98,37 @@ class Ai1wm_Extractor extends Ai1wm_Archiver {
75
* @throws \Ai1wm_Not_Readable_Exception
76
*/
77
public function get_total_files_size() {
78
- fseek( $this->file_handle, SEEK_SET, 0 );
79
80
- // total files size
81
- $total_files_size = 0;
82
83
- while ( $block = $this->read_from_handle( $this->file_handle, 4377 ) ) {
84
- // end block has been reached
85
- if ( $block === $this->eof ) {
86
- continue;
87
- }
88
89
- // get file data from the block
90
- $data = $this->get_data_from_block( $block );
91
92
- // we have a file, increment the counter
93
- $total_files_size += $data['size'];
94
95
- // skip file content so we can move forward to the next file
96
- $this->set_file_pointer( $this->file_handle, $data['size'] );
97
}
98
99
- return $total_files_size;
100
}
101
102
public function extract_one_file_to( $location, $exclude = array(), $old_paths = array(), $new_paths = array(), $offset = 0, $timeout = 0 ) {
25
26
class Ai1wm_Extractor extends Ai1wm_Archiver {
27
28
+ /**
29
+ * Total files count
30
+ *
31
+ * @type int
32
+ */
33
+ protected $total_files_count = null;
34
+
35
+ /**
36
+ * Total files size
37
+ *
38
+ * @type int
39
+ */
40
+ protected $total_files_size = null;
41
+
42
/**
43
* Overloaded constructor that opens the passed file for reading
44
*
57
* @throws \Ai1wm_Not_Readable_Exception
58
*/
59
public function get_total_files_count() {
60
+ if ( is_null( $this->total_files_count ) ) {
61
+ // set poisition to the beginning of the file
62
+ fseek( $this->file_handle, SEEK_SET, 0 );
63
64
+ // total files count
65
+ $this->total_files_count = 0;
66
67
+ // total files size
68
+ $this->total_files_size = 0;
69
70
+ while ( $block = $this->read_from_handle( $this->file_handle, 4377 ) ) {
71
+ // end block has been reached
72
+ if ( $block === $this->eof ) {
73
+ continue;
74
+ }
75
76
+ // get file data from the block
77
+ $data = $this->get_data_from_block( $block );
78
79
+ // we have a file, increment the count
80
+ $this->total_files_count += 1;
81
+
82
+ // we have a file, increment the size
83
+ $this->total_files_size += $data['size'];
84
+
85
+ // skip file content so we can move forward to the next file
86
+ $this->set_file_pointer( $this->file_handle, $data['size'] );
87
+ }
88
}
89
90
+ return $this->total_files_count;
91
}
92
93
/**
98
* @throws \Ai1wm_Not_Readable_Exception
99
*/
100
public function get_total_files_size() {
101
+ if ( is_null( $this->total_files_size ) ) {
102
+ // set poisition to the beginning of the file
103
+ fseek( $this->file_handle, SEEK_SET, 0 );
104
105
+ // total files count
106
+ $this->total_files_count = 0;
107
108
+ // total files size
109
+ $this->total_files_size = 0;
110
111
+ while ( $block = $this->read_from_handle( $this->file_handle, 4377 ) ) {
112
+ // end block has been reached
113
+ if ( $block === $this->eof ) {
114
+ continue;
115
+ }
116
117
+ // get file data from the block
118
+ $data = $this->get_data_from_block( $block );
119
120
+ // we have a file, increment the count
121
+ $this->total_files_count += 1;
122
+
123
+ // we have a file, increment the size
124
+ $this->total_files_size += $data['size'];
125
+
126
+ // skip file content so we can move forward to the next file
127
+ $this->set_file_pointer( $this->file_handle, $data['size'] );
128
+ }
129
}
130
131
+ return $this->total_files_size;
132
}
133
134
public function extract_one_file_to( $location, $exclude = array(), $old_paths = array(), $new_paths = array(), $offset = 0, $timeout = 0 ) {
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: yani.iliev, bangelov, pimjitsawang
3
Tags: move, transfer, copy, migrate, backup, clone, restore, db migration, migration, wordpress migration, website migration, database export, database import
4
Requires at least: 3.3
5
Tested up to: 4.7
6
- Stable tag: 6.44
7
License: GPLv2 or later
8
9
Move, transfer, copy, migrate, and backup a site with 1-click. Quick, easy, and reliable.
@@ -78,8 +78,15 @@ All in One WP Plugin is the first plugin to offer true mobile experience on Word
78
3. Plugin Menu
79
80
== Changelog ==
81
= 6.44 =
82
- ** Added **
83
* PHP and DB version metadata in package.json
84
* Find/Replace values in package.json
85
* Internal Site URL and Internal Home URL in package.json
@@ -87,71 +94,71 @@ All in One WP Plugin is the first plugin to offer true mobile experience on Word
87
* Progress indicator on database export/import
88
* Shutdown handler to catch fatal errors
89
90
- ** Changed **
91
* Replace TYPE with ENGINE keyword on database export
92
* Detect Site URL and Home URL in Find/Replace values
93
* Activate template and stylesheet on import
94
* Import database chunk by chunk to avoid timeout limitation
95
96
- ** Fixed **
97
* An issue on export/import when using HipHop for PHP
98
99
= 6.43 =
100
- ** Changed **
101
* Plugin tags and description
102
103
= 6.42 =
104
- ** Changed **
105
* Improved performance when exporting database
106
107
= 6.41 =
108
- ** Added **
109
* Support Visual Composer plugin
110
* Support Jetpack Photon module
111
112
- ** Changed **
113
* Improved Maria DB support
114
* Disable WordPress authentication checking during migration
115
* Clean any temporary files after migration
116
117
= 6.40 =
118
- ** Added **
119
* Separate action hook in advanced settings called "ai1wm_export_advanced_settings" to allow custom checkbox options on export
120
121
- ** Changed **
122
* Do not extract dropins files on import
123
* Do not exclude active plugins in package.json and multisite.json on export
124
* Do not show "Resolving URL address..." on export/import
125
126
- ** Fixed **
127
* An issue with large files on import
128
* An issue with inactive plugins option in advanced settings on export
129
130
= 6.39 =
131
- ** Added **
132
* Support for MariaDB
133
134
- ** Changed **
135
* Do not include package.json, multisite.json, blogs.json, database.sql and filemap.list files on export
136
* Remove HTTP Basic authentication from Backups page
137
138
- ** Fixed **
139
* An issue with unpacking archive on import
140
* An issue with inactivated plugins on import
141
142
= 6.38 =
143
- ** Added **
144
* Support for HyperDB plugin
145
* Support for RevSlider plugin
146
* Check available disk space during export/import
147
* Support very restricted hosting environments
148
* WPRESS mime-type to web.config when the server is IIS
149
150
- ** Changed **
151
* Switch to AJAX from cURL on export/import
152
* Respect WordPress constants FS_CHMOD_DIR and FS_CHMOD_FILE on import
153
* Remove misleading available disk space information on "Backups" page
154
155
- ** Fixed **
156
* An issue related to generating archive and folder names
157
* An issue related to CSS styles on export page
3
Tags: move, transfer, copy, migrate, backup, clone, restore, db migration, migration, wordpress migration, website migration, database export, database import
4
Requires at least: 3.3
5
Tested up to: 4.7
6
+ Stable tag: 6.45
7
License: GPLv2 or later
8
9
Move, transfer, copy, migrate, and backup a site with 1-click. Quick, easy, and reliable.
78
3. Plugin Menu
79
80
== Changelog ==
81
+ = 6.45 =
82
+ **Changed**
83
+ * Better mechanism when enumerating files on import
84
+
85
+ **Fixed**
86
+ * Validation mechanism on export/import
87
+
88
= 6.44 =
89
+ **Added**
90
* PHP and DB version metadata in package.json
91
* Find/Replace values in package.json
92
* Internal Site URL and Internal Home URL in package.json
94
* Progress indicator on database export/import
95
* Shutdown handler to catch fatal errors
96
97
+ **Changed**
98
* Replace TYPE with ENGINE keyword on database export
99
* Detect Site URL and Home URL in Find/Replace values
100
* Activate template and stylesheet on import
101
* Import database chunk by chunk to avoid timeout limitation
102
103
+ **Fixed**
104
* An issue on export/import when using HipHop for PHP
105
106
= 6.43 =
107
+ **Changed**
108
* Plugin tags and description
109
110
= 6.42 =
111
+ **Changed**
112
* Improved performance when exporting database
113
114
= 6.41 =
115
+ **Added**
116
* Support Visual Composer plugin
117
* Support Jetpack Photon module
118
119
+ **Changed**
120
* Improved Maria DB support
121
* Disable WordPress authentication checking during migration
122
* Clean any temporary files after migration
123
124
= 6.40 =
125
+ **Added**
126
* Separate action hook in advanced settings called "ai1wm_export_advanced_settings" to allow custom checkbox options on export
127
128
+ **Changed**
129
* Do not extract dropins files on import
130
* Do not exclude active plugins in package.json and multisite.json on export
131
* Do not show "Resolving URL address..." on export/import
132
133
+ **Fixed**
134
* An issue with large files on import
135
* An issue with inactive plugins option in advanced settings on export
136
137
= 6.39 =
138
+ **Added**
139
* Support for MariaDB
140
141
+ **Changed**
142
* Do not include package.json, multisite.json, blogs.json, database.sql and filemap.list files on export
143
* Remove HTTP Basic authentication from Backups page
144
145
+ **Fixed**
146
* An issue with unpacking archive on import
147
* An issue with inactivated plugins on import
148
149
= 6.38 =
150
+ **Added**
151
* Support for HyperDB plugin
152
* Support for RevSlider plugin
153
* Check available disk space during export/import
154
* Support very restricted hosting environments
155
* WPRESS mime-type to web.config when the server is IIS
156
157
+ **Changed**
158
* Switch to AJAX from cURL on export/import
159
* Respect WordPress constants FS_CHMOD_DIR and FS_CHMOD_FILE on import
160
* Remove misleading available disk space information on "Backups" page
161
162
+ **Fixed**
163
* An issue related to generating archive and folder names
164
* An issue related to CSS styles on export page