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