Version Description
Changed * Better mechanism when enumerating files on import
Fixed * Validation mechanism on export/import
Download this release
Release Info
Developer | bangelov |
Plugin | 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 +1 -1
- constants.php +1 -1
- exceptions.php +1 -0
- functions.php +21 -3
- lib/controller/class-ai1wm-export-controller.php +7 -8
- lib/controller/class-ai1wm-import-controller.php +7 -8
- lib/controller/class-ai1wm-main-controller.php +11 -17
- lib/controller/class-ai1wm-resolve-controller.php +6 -7
- lib/controller/class-ai1wm-status-controller.php +24 -1
- lib/vendor/servmask/archiver/class-ai1wm-extractor.php +62 -30
- readme.txt +24 -17
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.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.
|
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
|
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
|
|
|
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
|
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 =
|
44 |
}
|
45 |
|
46 |
// Set priority
|
@@ -55,12 +55,11 @@ class Ai1wm_Export_Controller {
|
|
55 |
$secret_key = $params['secret_key'];
|
56 |
}
|
57 |
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
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()
|
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 =
|
44 |
}
|
45 |
|
46 |
// Set priority
|
@@ -55,12 +55,11 @@ class Ai1wm_Import_Controller {
|
|
55 |
$secret_key = $params['secret_key'];
|
56 |
}
|
57 |
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
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()
|
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 |
-
//
|
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 =
|
33 |
}
|
34 |
|
35 |
// Set secret key
|
@@ -38,12 +38,11 @@ class Ai1wm_Resolve_Controller {
|
|
38 |
$secret_key = $params['secret_key'];
|
39 |
}
|
40 |
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
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 |
-
|
|
|
|
|
47 |
|
48 |
-
|
49 |
-
|
50 |
|
51 |
-
|
52 |
-
|
53 |
-
if ( $block === $this->eof ) {
|
54 |
-
continue;
|
55 |
-
}
|
56 |
|
57 |
-
|
58 |
-
|
|
|
|
|
|
|
59 |
|
60 |
-
|
61 |
-
|
62 |
|
63 |
-
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
|
|
|
|
79 |
|
80 |
-
|
81 |
-
|
82 |
|
83 |
-
|
84 |
-
|
85 |
-
if ( $block === $this->eof ) {
|
86 |
-
continue;
|
87 |
-
}
|
88 |
|
89 |
-
|
90 |
-
|
|
|
|
|
|
|
91 |
|
92 |
-
|
93 |
-
|
94 |
|
95 |
-
|
96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
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 |
-
**
|
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 |
-
**
|
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 |
-
**
|
97 |
* An issue on export/import when using HipHop for PHP
|
98 |
|
99 |
= 6.43 =
|
100 |
-
**
|
101 |
* Plugin tags and description
|
102 |
|
103 |
= 6.42 =
|
104 |
-
**
|
105 |
* Improved performance when exporting database
|
106 |
|
107 |
= 6.41 =
|
108 |
-
**
|
109 |
* Support Visual Composer plugin
|
110 |
* Support Jetpack Photon module
|
111 |
|
112 |
-
**
|
113 |
* Improved Maria DB support
|
114 |
* Disable WordPress authentication checking during migration
|
115 |
* Clean any temporary files after migration
|
116 |
|
117 |
= 6.40 =
|
118 |
-
**
|
119 |
* Separate action hook in advanced settings called "ai1wm_export_advanced_settings" to allow custom checkbox options on export
|
120 |
|
121 |
-
**
|
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 |
-
**
|
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 |
-
**
|
132 |
* Support for MariaDB
|
133 |
|
134 |
-
**
|
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 |
-
**
|
139 |
* An issue with unpacking archive on import
|
140 |
* An issue with inactivated plugins on import
|
141 |
|
142 |
= 6.38 =
|
143 |
-
**
|
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 |
-
**
|
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 |
-
**
|
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
|