All-in-One WP Migration - Version 7.33

Version Description

Added

  • Improved database export
Download this release

Release Info

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

Code changes from version 7.32 to 7.33

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: 7.32
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: 7.33
9
  * Text Domain: all-in-one-wp-migration
10
  * Domain Path: /languages
11
  * Network: True
constants.php CHANGED
@@ -35,7 +35,7 @@ define( 'AI1WM_DEBUG', false );
35
  // ==================
36
  // = Plugin Version =
37
  // ==================
38
- define( 'AI1WM_VERSION', '7.32' );
39
 
40
  // ===============
41
  // = Plugin Name =
@@ -439,6 +439,11 @@ define( 'AI1WM_BACKUPS_WEBCONFIG', AI1WM_BACKUPS_PATH . DIRECTORY_SEPARATOR . 'w
439
  // ============================
440
  define( 'AI1WM_WORDPRESS_HTACCESS', ABSPATH . DIRECTORY_SEPARATOR . '.htaccess' );
441
 
 
 
 
 
 
442
  // ================================
443
  // = WP Migration Plugin Base Dir =
444
  // ================================
35
  // ==================
36
  // = Plugin Version =
37
  // ==================
38
+ define( 'AI1WM_VERSION', '7.33' );
39
 
40
  // ===============
41
  // = Plugin Name =
439
  // ============================
440
  define( 'AI1WM_WORDPRESS_HTACCESS', ABSPATH . DIRECTORY_SEPARATOR . '.htaccess' );
441
 
442
+ // =============================
443
+ // = WordPress web.config File =
444
+ // =============================
445
+ define( 'AI1WM_WORDPRESS_WEBCONFIG', ABSPATH . DIRECTORY_SEPARATOR . 'web.config' );
446
+
447
  // ================================
448
  // = WP Migration Plugin Base Dir =
449
  // ================================
functions.php CHANGED
@@ -1827,3 +1827,25 @@ function ai1wm_got_url_permalinks() {
1827
 
1828
  return true;
1829
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1827
 
1828
  return true;
1829
  }
1830
+
1831
+ /**
1832
+ * Get .htaccess file content
1833
+ *
1834
+ * @return string
1835
+ */
1836
+ function ai1wm_get_htaccess() {
1837
+ if ( is_file( AI1WM_WORDPRESS_HTACCESS ) ) {
1838
+ return @file_get_contents( AI1WM_WORDPRESS_HTACCESS );
1839
+ }
1840
+ }
1841
+
1842
+ /**
1843
+ * Get web.config file content
1844
+ *
1845
+ * @return string
1846
+ */
1847
+ function ai1wm_get_webconfig() {
1848
+ if ( is_file( AI1WM_WORDPRESS_WEBCONFIG ) ) {
1849
+ return @file_get_contents( AI1WM_WORDPRESS_WEBCONFIG );
1850
+ }
1851
+ }
lib/model/class-ai1wm-extensions.php CHANGED
@@ -214,7 +214,7 @@ class Ai1wm_Extensions {
214
  'about' => AI1WMME_PLUGIN_ABOUT,
215
  'basename' => AI1WMME_PLUGIN_BASENAME,
216
  'version' => AI1WMME_VERSION,
217
- 'requires' => '4.0',
218
  'short' => AI1WMME_PLUGIN_SHORT,
219
  );
220
  }
214
  'about' => AI1WMME_PLUGIN_ABOUT,
215
  'basename' => AI1WMME_PLUGIN_BASENAME,
216
  'version' => AI1WMME_VERSION,
217
+ 'requires' => '4.3',
218
  'short' => AI1WMME_PLUGIN_SHORT,
219
  );
220
  }
lib/model/export/class-ai1wm-export-config.php CHANGED
@@ -155,6 +155,9 @@ class Ai1wm_Export_Config {
155
  // Set upload URL path
156
  $config['UploadsURL'] = get_option( 'upload_url_path' );
157
 
 
 
 
158
  // Save package.json file
159
  $handle = ai1wm_open( ai1wm_package_path( $params ), 'w' );
160
  ai1wm_write( $handle, json_encode( $config ) );
155
  // Set upload URL path
156
  $config['UploadsURL'] = get_option( 'upload_url_path' );
157
 
158
+ // Set server info
159
+ $config['Server'] = array( '.htaccess' => base64_encode( ai1wm_get_htaccess() ), 'web.config' => base64_encode( ai1wm_get_webconfig() ) );
160
+
161
  // Save package.json file
162
  $handle = ai1wm_open( ai1wm_package_path( $params ), 'w' );
163
  ai1wm_write( $handle, json_encode( $config ) );
lib/model/export/class-ai1wm-export-database.php CHANGED
@@ -37,6 +37,13 @@ class Ai1wm_Export_Database {
37
  return $params;
38
  }
39
 
 
 
 
 
 
 
 
40
  // Set table index
41
  if ( isset( $params['table_index'] ) ) {
42
  $table_index = (int) $params['table_index'];
@@ -149,11 +156,14 @@ class Ai1wm_Export_Database {
149
  ->set_table_prefix_columns( ai1wm_table_prefix() . 'usermeta', array( 'meta_key' ) );
150
 
151
  // Export database
152
- if ( $mysql->export( ai1wm_database_path( $params ), $table_index, $table_offset, $table_rows ) ) {
153
 
154
  // Set progress
155
  Ai1wm_Status::info( __( 'Done exporting database.', AI1WM_PLUGIN_NAME ) );
156
 
 
 
 
157
  // Unset table index
158
  unset( $params['table_index'] );
159
 
@@ -180,6 +190,9 @@ class Ai1wm_Export_Database {
180
  // Set progress
181
  Ai1wm_Status::info( sprintf( __( 'Exporting database...<br />%d%% complete<br />%s records saved', AI1WM_PLUGIN_NAME ), $progress, number_format_i18n( $table_rows ) ) );
182
 
 
 
 
183
  // Set table index
184
  $params['table_index'] = $table_index;
185
 
37
  return $params;
38
  }
39
 
40
+ // Set query offset
41
+ if ( isset( $params['query_offset'] ) ) {
42
+ $query_offset = (int) $params['query_offset'];
43
+ } else {
44
+ $query_offset = 0;
45
+ }
46
+
47
  // Set table index
48
  if ( isset( $params['table_index'] ) ) {
49
  $table_index = (int) $params['table_index'];
156
  ->set_table_prefix_columns( ai1wm_table_prefix() . 'usermeta', array( 'meta_key' ) );
157
 
158
  // Export database
159
+ if ( $mysql->export( ai1wm_database_path( $params ), $query_offset, $table_index, $table_offset, $table_rows ) ) {
160
 
161
  // Set progress
162
  Ai1wm_Status::info( __( 'Done exporting database.', AI1WM_PLUGIN_NAME ) );
163
 
164
+ // Unset query offset
165
+ unset( $params['query_offset'] );
166
+
167
  // Unset table index
168
  unset( $params['table_index'] );
169
 
190
  // Set progress
191
  Ai1wm_Status::info( sprintf( __( 'Exporting database...<br />%d%% complete<br />%s records saved', AI1WM_PLUGIN_NAME ), $progress, number_format_i18n( $table_rows ) ) );
192
 
193
+ // Set query offset
194
+ $params['query_offset'] = $query_offset;
195
+
196
  // Set table index
197
  $params['table_index'] = $table_index;
198
 
lib/vendor/servmask/database/class-ai1wm-database.php CHANGED
@@ -717,19 +717,15 @@ abstract class Ai1wm_Database {
717
  * Export database into a file
718
  *
719
  * @param string $file_name File name
 
720
  * @param integer $table_index Table index
721
  * @param integer $table_offset Table offset
722
  * @param integer $table_rows Table rows
723
  * @return boolean
724
  */
725
- public function export( $file_name, &$table_index = 0, &$table_offset = 0, &$table_rows = 0 ) {
726
  // Set file handler
727
- $file_handler = ai1wm_open( $file_name, 'ab' );
728
-
729
- // Write headers
730
- if ( $table_index === 0 ) {
731
- ai1wm_write( $file_handler, $this->get_header() );
732
- }
733
 
734
  // Start time
735
  $start = microtime( true );
@@ -746,217 +742,229 @@ abstract class Ai1wm_Database {
746
  // Get views
747
  $views = $this->get_views();
748
 
749
- // Export tables
750
- for ( ; $table_index < count( $tables ); ) {
751
 
752
- // Get table name
753
- $table_name = $tables[ $table_index ];
 
 
754
 
755
- // Replace table name prefixes
756
- $new_table_name = $this->replace_table_prefixes( $table_name, 0 );
757
 
758
- // Loop over tables and views
759
- if ( in_array( $table_name, $views ) ) {
760
 
761
- // Get create view statement
762
- if ( $table_offset === 0 ) {
763
 
764
- // Write view drop statement
765
- $drop_view = "\nDROP VIEW IF EXISTS `{$new_table_name}`;\n";
766
-
767
- // Write drop view statement
768
- ai1wm_write( $file_handler, $drop_view );
769
 
770
  // Get create view statement
771
- $create_view = $this->get_create_view( $table_name );
772
 
773
- // Replace create view name
774
- $create_view = $this->replace_view_name( $create_view, $table_name, $new_table_name );
775
 
776
- // Replace create view identifiers
777
- $create_view = $this->replace_view_identifiers( $create_view );
778
 
779
- // Replace create view options
780
- $create_view = $this->replace_view_options( $create_view );
781
 
782
- // Write create view statement
783
- ai1wm_write( $file_handler, $create_view );
784
 
785
- // Write end of statement
786
- ai1wm_write( $file_handler, ";\n\n" );
787
- }
788
 
789
- // Set curent table index
790
- $table_index++;
791
 
792
- // Set current table offset
793
- $table_offset = 0;
794
 
795
- } else {
 
 
796
 
797
- // Get create table statement
798
- if ( $table_offset === 0 ) {
799
 
800
- // Write table drop statement
801
- $drop_table = "\nDROP TABLE IF EXISTS `{$new_table_name}`;\n";
802
 
803
- // Write table statement
804
- ai1wm_write( $file_handler, $drop_table );
805
 
806
  // Get create table statement
807
- $create_table = $this->get_create_table( $table_name );
808
 
809
- // Replace create table name
810
- $create_table = $this->replace_table_name( $create_table, $table_name, $new_table_name );
811
 
812
- // Replace create table comments
813
- $create_table = $this->replace_table_comments( $create_table );
814
 
815
- // Replace create table constraints
816
- $create_table = $this->replace_table_constraints( $create_table );
817
 
818
- // Replace create table options
819
- $create_table = $this->replace_table_options( $create_table );
820
 
821
- // Write create table statement
822
- ai1wm_write( $file_handler, $create_table );
823
 
824
- // Write end of statement
825
- ai1wm_write( $file_handler, ";\n\n" );
826
- }
827
 
828
- // Get primary keys
829
- $primary_keys = $this->get_primary_keys( $table_name );
830
 
831
- // Get table columns
832
- $table_columns = $this->get_column_types( $table_name );
833
 
834
- // Get prefix columns
835
- $prefix_columns = $this->get_table_prefix_columns( $table_name );
 
836
 
837
- do {
 
838
 
839
- // Set query
840
- if ( $primary_keys ) {
841
 
842
- // Set table keys
843
- $table_keys = array();
844
- foreach ( $primary_keys as $key ) {
845
- $table_keys[] = sprintf( '`%s`', $key );
846
- }
847
 
848
- $table_keys = implode( ', ', $table_keys );
849
 
850
- // Set table where clauses
851
- $table_where = array( 1 );
852
- foreach ( $this->get_table_where_clauses( $table_name ) as $clause ) {
853
- $table_where[] = $clause;
854
- }
855
 
856
- $table_where = implode( ' AND ', $table_where );
 
 
 
 
857
 
858
- // Set query with offset and rows count
859
- $query = sprintf( 'SELECT t1.* FROM `%s` AS t1 JOIN (SELECT %s FROM `%s` WHERE %s ORDER BY %s LIMIT %d, %d) AS t2 USING (%s)', $table_name, $table_keys, $table_name, $table_where, $table_keys, $table_offset, AI1WM_MAX_SELECT_RECORDS, $table_keys );
860
 
861
- } else {
 
 
 
 
862
 
863
- // Set table keys
864
- $table_keys = 1;
865
 
866
- // Set table where clauses
867
- $table_where = array( 1 );
868
- foreach ( $this->get_table_where_clauses( $table_name ) as $clause ) {
869
- $table_where[] = $clause;
870
- }
871
 
872
- $table_where = implode( ' AND ', $table_where );
873
 
874
- // Set query with offset and rows count
875
- $query = sprintf( 'SELECT * FROM `%s` WHERE %s ORDER BY %s LIMIT %d, %d', $table_name, $table_where, $table_keys, $table_offset, AI1WM_MAX_SELECT_RECORDS );
876
- }
877
 
878
- // Run SQL query
879
- $result = $this->query( $query );
 
 
 
880
 
881
- // Repair table data
882
- if ( $this->errno() === 1194 ) {
883
 
884
- // Current table is marked as crashed and should be repaired
885
- $this->repair_table( $table_name );
 
886
 
887
  // Run SQL query
888
  $result = $this->query( $query );
889
- }
890
 
891
- // Generate insert statements
892
- if ( $num_rows = $this->num_rows( $result ) ) {
893
 
894
- // Loop over table rows
895
- while ( $row = $this->fetch_assoc( $result ) ) {
896
 
897
- // Write start transaction
898
- if ( $table_offset % AI1WM_MAX_TRANSACTION_QUERIES === 0 ) {
899
- ai1wm_write( $file_handler, "START TRANSACTION;\n" );
900
- }
 
 
901
 
902
- $items = array();
903
- foreach ( $row as $key => $value ) {
904
- // Replace table prefix columns
905
- if ( isset( $prefix_columns[ strtolower( $key ) ] ) ) {
906
- $value = $this->replace_column_prefixes( $value, 0 );
 
907
  }
908
 
909
- $items[] = $this->prepare_table_values( $value, $table_columns[ strtolower( $key ) ] );
910
- }
 
 
 
 
911
 
912
- // Set table values
913
- $table_values = implode( ',', $items );
914
 
915
- // Set insert statement
916
- $table_insert = "INSERT INTO `{$new_table_name}` VALUES ({$table_values});\n";
917
 
918
- // Write insert statement
919
- ai1wm_write( $file_handler, $table_insert );
920
 
921
- // Set current table offset
922
- $table_offset++;
 
 
 
923
 
924
- // Set current table rows
925
- $table_rows++;
 
 
 
 
 
 
 
926
 
927
  // Write end of transaction
928
- if ( $table_offset % AI1WM_MAX_TRANSACTION_QUERIES === 0 ) {
929
  ai1wm_write( $file_handler, "COMMIT;\n" );
930
  }
931
- }
932
- } else {
933
 
934
- // Write end of transaction
935
- if ( $table_offset % AI1WM_MAX_TRANSACTION_QUERIES !== 0 ) {
936
- ai1wm_write( $file_handler, "COMMIT;\n" );
937
- }
938
 
939
- // Set curent table index
940
- $table_index++;
941
-
942
- // Set current table offset
943
- $table_offset = 0;
944
- }
945
 
946
- // Close result cursor
947
- $this->free_result( $result );
948
 
949
- // Time elapsed
950
- if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) {
951
- if ( ( microtime( true ) - $start ) > $timeout ) {
952
- $completed = false;
953
- break 2;
 
954
  }
955
- }
956
- } while ( $num_rows > 0 );
957
  }
958
  }
959
 
 
 
 
960
  // Close file handler
961
  ai1wm_close( $file_handler );
962
 
@@ -975,7 +983,7 @@ abstract class Ai1wm_Database {
975
  $max_allowed_packet = $this->get_max_allowed_packet();
976
 
977
  // Set file handler
978
- $file_handler = ai1wm_open( $file_name, 'r' );
979
 
980
  // Start time
981
  $start = microtime( true );
@@ -1076,9 +1084,6 @@ abstract class Ai1wm_Database {
1076
  }
1077
  }
1078
 
1079
- // Set query offset
1080
- $query_offset = ftell( $file_handler );
1081
-
1082
  // Time elapsed
1083
  if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) {
1084
  if ( ! $this->is_atomic_query( $query ) ) {
@@ -1098,6 +1103,9 @@ abstract class Ai1wm_Database {
1098
  $this->query( 'COMMIT' );
1099
  }
1100
 
 
 
 
1101
  // Close file handler
1102
  ai1wm_close( $file_handler );
1103
 
717
  * Export database into a file
718
  *
719
  * @param string $file_name File name
720
+ * @param integer $query_offset Query offset
721
  * @param integer $table_index Table index
722
  * @param integer $table_offset Table offset
723
  * @param integer $table_rows Table rows
724
  * @return boolean
725
  */
726
+ public function export( $file_name, &$query_offset = 0, &$table_index = 0, &$table_offset = 0, &$table_rows = 0 ) {
727
  // Set file handler
728
+ $file_handler = ai1wm_open( $file_name, 'cb' );
 
 
 
 
 
729
 
730
  // Start time
731
  $start = microtime( true );
742
  // Get views
743
  $views = $this->get_views();
744
 
745
+ // Set file pointer at the query offset
746
+ if ( fseek( $file_handler, $query_offset ) !== -1 ) {
747
 
748
+ // Write headers
749
+ if ( $query_offset === 0 ) {
750
+ ai1wm_write( $file_handler, $this->get_header() );
751
+ }
752
 
753
+ // Export tables
754
+ for ( ; $table_index < count( $tables ); ) {
755
 
756
+ // Get table name
757
+ $table_name = $tables[ $table_index ];
758
 
759
+ // Replace table name prefixes
760
+ $new_table_name = $this->replace_table_prefixes( $table_name, 0 );
761
 
762
+ // Loop over tables and views
763
+ if ( in_array( $table_name, $views ) ) {
 
 
 
764
 
765
  // Get create view statement
766
+ if ( $table_offset === 0 ) {
767
 
768
+ // Write view drop statement
769
+ $drop_view = "\nDROP VIEW IF EXISTS `{$new_table_name}`;\n";
770
 
771
+ // Write drop view statement
772
+ ai1wm_write( $file_handler, $drop_view );
773
 
774
+ // Get create view statement
775
+ $create_view = $this->get_create_view( $table_name );
776
 
777
+ // Replace create view name
778
+ $create_view = $this->replace_view_name( $create_view, $table_name, $new_table_name );
779
 
780
+ // Replace create view identifiers
781
+ $create_view = $this->replace_view_identifiers( $create_view );
 
782
 
783
+ // Replace create view options
784
+ $create_view = $this->replace_view_options( $create_view );
785
 
786
+ // Write create view statement
787
+ ai1wm_write( $file_handler, $create_view );
788
 
789
+ // Write end of statement
790
+ ai1wm_write( $file_handler, ";\n\n" );
791
+ }
792
 
793
+ // Set curent table index
794
+ $table_index++;
795
 
796
+ // Set current table offset
797
+ $table_offset = 0;
798
 
799
+ } else {
 
800
 
801
  // Get create table statement
802
+ if ( $table_offset === 0 ) {
803
 
804
+ // Write table drop statement
805
+ $drop_table = "\nDROP TABLE IF EXISTS `{$new_table_name}`;\n";
806
 
807
+ // Write table statement
808
+ ai1wm_write( $file_handler, $drop_table );
809
 
810
+ // Get create table statement
811
+ $create_table = $this->get_create_table( $table_name );
812
 
813
+ // Replace create table name
814
+ $create_table = $this->replace_table_name( $create_table, $table_name, $new_table_name );
815
 
816
+ // Replace create table comments
817
+ $create_table = $this->replace_table_comments( $create_table );
818
 
819
+ // Replace create table constraints
820
+ $create_table = $this->replace_table_constraints( $create_table );
 
821
 
822
+ // Replace create table options
823
+ $create_table = $this->replace_table_options( $create_table );
824
 
825
+ // Write create table statement
826
+ ai1wm_write( $file_handler, $create_table );
827
 
828
+ // Write end of statement
829
+ ai1wm_write( $file_handler, ";\n\n" );
830
+ }
831
 
832
+ // Get primary keys
833
+ $primary_keys = $this->get_primary_keys( $table_name );
834
 
835
+ // Get table columns
836
+ $table_columns = $this->get_column_types( $table_name );
837
 
838
+ // Get prefix columns
839
+ $prefix_columns = $this->get_table_prefix_columns( $table_name );
 
 
 
840
 
841
+ do {
842
 
843
+ // Set query
844
+ if ( $primary_keys ) {
 
 
 
845
 
846
+ // Set table keys
847
+ $table_keys = array();
848
+ foreach ( $primary_keys as $key ) {
849
+ $table_keys[] = sprintf( '`%s`', $key );
850
+ }
851
 
852
+ $table_keys = implode( ', ', $table_keys );
 
853
 
854
+ // Set table where clauses
855
+ $table_where = array( 1 );
856
+ foreach ( $this->get_table_where_clauses( $table_name ) as $clause ) {
857
+ $table_where[] = $clause;
858
+ }
859
 
860
+ $table_where = implode( ' AND ', $table_where );
 
861
 
862
+ // Set query with offset and rows count
863
+ $query = sprintf( 'SELECT t1.* FROM `%s` AS t1 JOIN (SELECT %s FROM `%s` WHERE %s ORDER BY %s LIMIT %d, %d) AS t2 USING (%s)', $table_name, $table_keys, $table_name, $table_where, $table_keys, $table_offset, AI1WM_MAX_SELECT_RECORDS, $table_keys );
 
 
 
864
 
865
+ } else {
866
 
867
+ // Set table keys
868
+ $table_keys = 1;
 
869
 
870
+ // Set table where clauses
871
+ $table_where = array( 1 );
872
+ foreach ( $this->get_table_where_clauses( $table_name ) as $clause ) {
873
+ $table_where[] = $clause;
874
+ }
875
 
876
+ $table_where = implode( ' AND ', $table_where );
 
877
 
878
+ // Set query with offset and rows count
879
+ $query = sprintf( 'SELECT * FROM `%s` WHERE %s ORDER BY %s LIMIT %d, %d', $table_name, $table_where, $table_keys, $table_offset, AI1WM_MAX_SELECT_RECORDS );
880
+ }
881
 
882
  // Run SQL query
883
  $result = $this->query( $query );
 
884
 
885
+ // Repair table data
886
+ if ( $this->errno() === 1194 ) {
887
 
888
+ // Current table is marked as crashed and should be repaired
889
+ $this->repair_table( $table_name );
890
 
891
+ // Run SQL query
892
+ $result = $this->query( $query );
893
+ }
894
+
895
+ // Generate insert statements
896
+ if ( $num_rows = $this->num_rows( $result ) ) {
897
 
898
+ // Loop over table rows
899
+ while ( $row = $this->fetch_assoc( $result ) ) {
900
+
901
+ // Write start transaction
902
+ if ( $table_offset % AI1WM_MAX_TRANSACTION_QUERIES === 0 ) {
903
+ ai1wm_write( $file_handler, "START TRANSACTION;\n" );
904
  }
905
 
906
+ $items = array();
907
+ foreach ( $row as $key => $value ) {
908
+ // Replace table prefix columns
909
+ if ( isset( $prefix_columns[ strtolower( $key ) ] ) ) {
910
+ $value = $this->replace_column_prefixes( $value, 0 );
911
+ }
912
 
913
+ $items[] = $this->prepare_table_values( $value, $table_columns[ strtolower( $key ) ] );
914
+ }
915
 
916
+ // Set table values
917
+ $table_values = implode( ',', $items );
918
 
919
+ // Set insert statement
920
+ $table_insert = "INSERT INTO `{$new_table_name}` VALUES ({$table_values});\n";
921
 
922
+ // Write insert statement
923
+ ai1wm_write( $file_handler, $table_insert );
924
+
925
+ // Set current table offset
926
+ $table_offset++;
927
 
928
+ // Set current table rows
929
+ $table_rows++;
930
+
931
+ // Write end of transaction
932
+ if ( $table_offset % AI1WM_MAX_TRANSACTION_QUERIES === 0 ) {
933
+ ai1wm_write( $file_handler, "COMMIT;\n" );
934
+ }
935
+ }
936
+ } else {
937
 
938
  // Write end of transaction
939
+ if ( $table_offset % AI1WM_MAX_TRANSACTION_QUERIES !== 0 ) {
940
  ai1wm_write( $file_handler, "COMMIT;\n" );
941
  }
 
 
942
 
943
+ // Set curent table index
944
+ $table_index++;
 
 
945
 
946
+ // Set current table offset
947
+ $table_offset = 0;
948
+ }
 
 
 
949
 
950
+ // Close result cursor
951
+ $this->free_result( $result );
952
 
953
+ // Time elapsed
954
+ if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) {
955
+ if ( ( microtime( true ) - $start ) > $timeout ) {
956
+ $completed = false;
957
+ break 2;
958
+ }
959
  }
960
+ } while ( $num_rows > 0 );
961
+ }
962
  }
963
  }
964
 
965
+ // Set query offset
966
+ $query_offset = ftell( $file_handler );
967
+
968
  // Close file handler
969
  ai1wm_close( $file_handler );
970
 
983
  $max_allowed_packet = $this->get_max_allowed_packet();
984
 
985
  // Set file handler
986
+ $file_handler = ai1wm_open( $file_name, 'rb' );
987
 
988
  // Start time
989
  $start = microtime( true );
1084
  }
1085
  }
1086
 
 
 
 
1087
  // Time elapsed
1088
  if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) {
1089
  if ( ! $this->is_atomic_query( $query ) ) {
1103
  $this->query( 'COMMIT' );
1104
  }
1105
 
1106
+ // Set query offset
1107
+ $query_offset = ftell( $file_handler );
1108
+
1109
  // Close file handler
1110
  ai1wm_close( $file_handler );
1111
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: move, transfer, copy, migrate, backup, clone, restore, db migration, wordp
4
  Requires at least: 3.3
5
  Tested up to: 5.6
6
  Requires PHP: 5.2.17
7
- Stable tag: 7.32
8
  License: GPLv2 or later
9
 
10
  Move, transfer, copy, migrate, and backup a site with 1-click. Quick, easy, and reliable.
@@ -108,6 +108,11 @@ Alternatively you can download the plugin using the download button on this page
108
  All-in-One WP Migration **asks for your consent** to collect **requester's email address** when filling plugin's contact form. [GDPR Compliant Privacy Policy](https://www.iubenda.com/privacy-policy/946881)
109
 
110
  == Changelog ==
 
 
 
 
 
111
  = 7.32 =
112
  **Added**
113
 
4
  Requires at least: 3.3
5
  Tested up to: 5.6
6
  Requires PHP: 5.2.17
7
+ Stable tag: 7.33
8
  License: GPLv2 or later
9
 
10
  Move, transfer, copy, migrate, and backup a site with 1-click. Quick, easy, and reliable.
108
  All-in-One WP Migration **asks for your consent** to collect **requester's email address** when filling plugin's contact form. [GDPR Compliant Privacy Policy](https://www.iubenda.com/privacy-policy/946881)
109
 
110
  == Changelog ==
111
+ = 7.33 =
112
+ **Added**
113
+
114
+ * Improved database export
115
+
116
  = 7.32 =
117
  **Added**
118