Version Description
Changed * Better mechanism when enumerating files on import
Fixed * Validation mechanism on export/import
Download this release
Release Info
| Developer | bangelov |
| Plugin | |
| 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
|
