All-in-One WP Migration - Version 6.82

Version Description

Added

  • Support for PHP 7.3

Fixed

  • Feedback form on settings page
Download this release

Release Info

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

Code changes from version 6.81 to 6.82

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.81
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.82
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.81' );
35
 
36
  // ===============
37
  // = Plugin Name =
31
  // ==================
32
  // = Plugin Version =
33
  // ==================
34
+ define( 'AI1WM_VERSION', '6.82' );
35
 
36
  // ===============
37
  // = Plugin Name =
lib/controller/class-ai1wm-export-controller.php CHANGED
@@ -40,9 +40,8 @@ class Ai1wm_Export_Controller {
40
  }
41
 
42
  // Set priority
43
- $priority = 5;
44
- if ( isset( $params['priority'] ) ) {
45
- $priority = (int) $params['priority'];
46
  }
47
 
48
  // Set secret key
@@ -70,7 +69,7 @@ class Ai1wm_Export_Controller {
70
 
71
  // Loop over filters
72
  while ( $hooks = current( $filters ) ) {
73
- if ( $priority === key( $filters ) ) {
74
  foreach ( $hooks as $hook ) {
75
  try {
76
 
@@ -81,8 +80,12 @@ class Ai1wm_Export_Controller {
81
  Ai1wm_Log::export( $params );
82
 
83
  } catch ( Exception $e ) {
84
- Ai1wm_Status::error( __( 'Unable to export', AI1WM_PLUGIN_NAME ), $e->getMessage() );
85
- Ai1wm_Notification::error( __( 'Unable to export', AI1WM_PLUGIN_NAME ), $e->getMessage() );
 
 
 
 
86
  Ai1wm_Directory::delete( ai1wm_storage_path( $params ) );
87
  exit;
88
  }
@@ -96,6 +99,10 @@ class Ai1wm_Export_Controller {
96
 
97
  // Do request
98
  if ( $completed === false || ( $next = next( $filters ) ) && ( $params['priority'] = key( $filters ) ) ) {
 
 
 
 
99
  if ( isset( $params['ai1wm_manual_export'] ) ) {
100
  echo json_encode( $params );
101
  exit;
@@ -115,6 +122,7 @@ class Ai1wm_Export_Controller {
115
  next( $filters );
116
  }
117
  }
 
118
  }
119
 
120
  public static function buttons() {
40
  }
41
 
42
  // Set priority
43
+ if ( ! isset( $params['priority'] ) ) {
44
+ $params['priority'] = 5;
 
45
  }
46
 
47
  // Set secret key
69
 
70
  // Loop over filters
71
  while ( $hooks = current( $filters ) ) {
72
+ if ( intval( $params['priority'] ) === key( $filters ) ) {
73
  foreach ( $hooks as $hook ) {
74
  try {
75
 
80
  Ai1wm_Log::export( $params );
81
 
82
  } catch ( Exception $e ) {
83
+ if ( defined( 'WP_CLI' ) ) {
84
+ WP_CLI::error( sprintf( __( 'Unable to export: %s', AI1WM_PLUGIN_NAME ), $e->getMessage() ) );
85
+ } else {
86
+ Ai1wm_Status::error( __( 'Unable to export', AI1WM_PLUGIN_NAME ), $e->getMessage() );
87
+ Ai1wm_Notification::error( __( 'Unable to export', AI1WM_PLUGIN_NAME ), $e->getMessage() );
88
+ }
89
  Ai1wm_Directory::delete( ai1wm_storage_path( $params ) );
90
  exit;
91
  }
99
 
100
  // Do request
101
  if ( $completed === false || ( $next = next( $filters ) ) && ( $params['priority'] = key( $filters ) ) ) {
102
+ if ( defined( 'WP_CLI' ) ) {
103
+ continue;
104
+ }
105
+
106
  if ( isset( $params['ai1wm_manual_export'] ) ) {
107
  echo json_encode( $params );
108
  exit;
122
  next( $filters );
123
  }
124
  }
125
+ return $params;
126
  }
127
 
128
  public static function buttons() {
lib/controller/class-ai1wm-import-controller.php CHANGED
@@ -40,9 +40,8 @@ class Ai1wm_Import_Controller {
40
  }
41
 
42
  // Set priority
43
- $priority = 10;
44
- if ( isset( $params['priority'] ) ) {
45
- $priority = (int) $params['priority'];
46
  }
47
 
48
  // Set secret key
@@ -70,7 +69,7 @@ class Ai1wm_Import_Controller {
70
 
71
  // Loop over filters
72
  while ( $hooks = current( $filters ) ) {
73
- if ( $priority === key( $filters ) ) {
74
  foreach ( $hooks as $hook ) {
75
  try {
76
 
@@ -81,12 +80,20 @@ class Ai1wm_Import_Controller {
81
  Ai1wm_Log::import( $params );
82
 
83
  } catch ( Ai1wm_Import_Retry_Exception $e ) {
84
- status_header( $e->getCode() );
85
- echo json_encode( array( 'errors' => array( array( 'code' => $e->getCode(), 'message' => $e->getMessage() ) ) ) );
 
 
 
 
86
  exit;
87
  } catch ( Exception $e ) {
88
- Ai1wm_Status::error( __( 'Unable to import', AI1WM_PLUGIN_NAME ), $e->getMessage() );
89
- Ai1wm_Notification::error( __( 'Unable to import', AI1WM_PLUGIN_NAME ), $e->getMessage() );
 
 
 
 
90
  Ai1wm_Directory::delete( ai1wm_storage_path( $params ) );
91
  exit;
92
  }
@@ -100,6 +107,10 @@ class Ai1wm_Import_Controller {
100
 
101
  // Do request
102
  if ( $completed === false || ( $next = next( $filters ) ) && ( $params['priority'] = key( $filters ) ) ) {
 
 
 
 
103
  if ( isset( $params['ai1wm_manual_import'] ) || isset( $params['ai1wm_manual_restore'] ) ) {
104
  echo json_encode( $params );
105
  exit;
@@ -119,6 +130,7 @@ class Ai1wm_Import_Controller {
119
  next( $filters );
120
  }
121
  }
 
122
  }
123
 
124
  public static function buttons() {
40
  }
41
 
42
  // Set priority
43
+ if ( ! isset( $params['priority'] ) ) {
44
+ $params['priority'] = 10;
 
45
  }
46
 
47
  // Set secret key
69
 
70
  // Loop over filters
71
  while ( $hooks = current( $filters ) ) {
72
+ if ( intval( $params['priority'] ) === key( $filters ) ) {
73
  foreach ( $hooks as $hook ) {
74
  try {
75
 
80
  Ai1wm_Log::import( $params );
81
 
82
  } catch ( Ai1wm_Import_Retry_Exception $e ) {
83
+ if ( defined( 'WP_CLI' ) ) {
84
+ WP_CLI::error( sprintf( __( 'Unable to import. Error code: %s. %s', AI1WM_PLUGIN_NAME ), $e->getCode(), $e->getMessage() ) );
85
+ } else {
86
+ status_header( $e->getCode() );
87
+ echo json_encode( array( 'errors' => array( array( 'code' => $e->getCode(), 'message' => $e->getMessage() ) ) ) );
88
+ }
89
  exit;
90
  } catch ( Exception $e ) {
91
+ if ( defined( 'WP_CLI' ) ) {
92
+ WP_CLI::error( sprintf( __( 'Unable to import: %s', AI1WM_PLUGIN_NAME ), $e->getMessage() ) );
93
+ } else {
94
+ Ai1wm_Status::error( __( 'Unable to import', AI1WM_PLUGIN_NAME ), $e->getMessage() );
95
+ Ai1wm_Notification::error( __( 'Unable to import', AI1WM_PLUGIN_NAME ), $e->getMessage() );
96
+ }
97
  Ai1wm_Directory::delete( ai1wm_storage_path( $params ) );
98
  exit;
99
  }
107
 
108
  // Do request
109
  if ( $completed === false || ( $next = next( $filters ) ) && ( $params['priority'] = key( $filters ) ) ) {
110
+ if ( defined( 'WP_CLI' ) ) {
111
+ continue;
112
+ }
113
+
114
  if ( isset( $params['ai1wm_manual_import'] ) || isset( $params['ai1wm_manual_restore'] ) ) {
115
  echo json_encode( $params );
116
  exit;
130
  next( $filters );
131
  }
132
  }
133
+ return $params;
134
  }
135
 
136
  public static function buttons() {
lib/controller/class-ai1wm-main-controller.php CHANGED
@@ -555,16 +555,17 @@ class Ai1wm_Main_Controller {
555
  );
556
 
557
  wp_register_script(
558
- 'ai1wm_feedback',
559
- Ai1wm_Template::asset_link( 'javascript/feedback.min.js' ),
560
  array( 'ai1wm_util' )
561
  );
562
 
563
- wp_register_script(
564
- 'ai1wm_report',
565
- Ai1wm_Template::asset_link( 'javascript/report.min.js' ),
566
- array( 'ai1wm_util' )
567
- );
 
568
  }
569
 
570
  /**
@@ -719,7 +720,7 @@ class Ai1wm_Main_Controller {
719
  'unable_to_confirm_the_import' => __( 'Unable to confirm the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ),
720
  'unable_to_prepare_blogs_on_import' => __( 'Unable to prepare blogs on import. Refresh the page and try again', AI1WM_PLUGIN_NAME ),
721
  'unable_to_stop_the_import' => __( 'Unable to stop the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ),
722
- 'please_wait_stopping_the_export' => __( 'Please wait, stopping the import...', AI1WM_PLUGIN_NAME ),
723
  'close_import' => __( 'Close', AI1WM_PLUGIN_NAME ),
724
  'stop_import' => __( 'Stop import', AI1WM_PLUGIN_NAME ),
725
  'confirm_import' => __( 'Proceed', AI1WM_PLUGIN_NAME ),
@@ -836,7 +837,7 @@ class Ai1wm_Main_Controller {
836
  'unable_to_confirm_the_import' => __( 'Unable to confirm the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ),
837
  'unable_to_prepare_blogs_on_import' => __( 'Unable to prepare blogs on import. Refresh the page and try again', AI1WM_PLUGIN_NAME ),
838
  'unable_to_stop_the_import' => __( 'Unable to stop the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ),
839
- 'please_wait_stopping_the_export' => __( 'Please wait, stopping the import...', AI1WM_PLUGIN_NAME ),
840
  'close_import' => __( 'Close', AI1WM_PLUGIN_NAME ),
841
  'stop_import' => __( 'Stop import', AI1WM_PLUGIN_NAME ),
842
  'confirm_import' => __( 'Proceed', AI1WM_PLUGIN_NAME ),
555
  );
556
 
557
  wp_register_script(
558
+ 'ai1wm_settings',
559
+ Ai1wm_Template::asset_link( 'javascript/settings.min.js' ),
560
  array( 'ai1wm_util' )
561
  );
562
 
563
+ wp_localize_script( 'ai1wm_settings', 'ai1wm_locale', array(
564
+ 'leave_feedback' => __( 'Leave plugin developers any feedback here', AI1WM_PLUGIN_NAME ),
565
+ 'how_may_we_help_you' => __( 'How may we help you?', AI1WM_PLUGIN_NAME ),
566
+ 'thanks_for_submitting_your_feedback' => __( 'Thanks for submitting your feedback!', AI1WM_PLUGIN_NAME ),
567
+ 'thanks_for_submitting_your_request' => __( 'Thanks for submitting your request!', AI1WM_PLUGIN_NAME ),
568
+ ) );
569
  }
570
 
571
  /**
720
  'unable_to_confirm_the_import' => __( 'Unable to confirm the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ),
721
  'unable_to_prepare_blogs_on_import' => __( 'Unable to prepare blogs on import. Refresh the page and try again', AI1WM_PLUGIN_NAME ),
722
  'unable_to_stop_the_import' => __( 'Unable to stop the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ),
723
+ 'please_wait_stopping_the_import' => __( 'Please wait, stopping the import...', AI1WM_PLUGIN_NAME ),
724
  'close_import' => __( 'Close', AI1WM_PLUGIN_NAME ),
725
  'stop_import' => __( 'Stop import', AI1WM_PLUGIN_NAME ),
726
  'confirm_import' => __( 'Proceed', AI1WM_PLUGIN_NAME ),
837
  'unable_to_confirm_the_import' => __( 'Unable to confirm the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ),
838
  'unable_to_prepare_blogs_on_import' => __( 'Unable to prepare blogs on import. Refresh the page and try again', AI1WM_PLUGIN_NAME ),
839
  'unable_to_stop_the_import' => __( 'Unable to stop the import. Refresh the page and try again', AI1WM_PLUGIN_NAME ),
840
+ 'please_wait_stopping_the_import' => __( 'Please wait, stopping the import...', AI1WM_PLUGIN_NAME ),
841
  'close_import' => __( 'Close', AI1WM_PLUGIN_NAME ),
842
  'stop_import' => __( 'Stop import', AI1WM_PLUGIN_NAME ),
843
  'confirm_import' => __( 'Proceed', AI1WM_PLUGIN_NAME ),
lib/model/class-ai1wm-extensions.php CHANGED
@@ -41,7 +41,7 @@ class Ai1wm_Extensions {
41
  'about' => AI1WMZE_PLUGIN_ABOUT,
42
  'basename' => AI1WMZE_PLUGIN_BASENAME,
43
  'version' => AI1WMZE_VERSION,
44
- 'requires' => '1.1',
45
  'short' => AI1WMZE_PLUGIN_SHORT,
46
  );
47
  }
@@ -54,7 +54,7 @@ class Ai1wm_Extensions {
54
  'about' => AI1WMAE_PLUGIN_ABOUT,
55
  'basename' => AI1WMAE_PLUGIN_BASENAME,
56
  'version' => AI1WMAE_VERSION,
57
- 'requires' => '1.3',
58
  'short' => AI1WMAE_PLUGIN_SHORT,
59
  );
60
  }
@@ -67,7 +67,7 @@ class Ai1wm_Extensions {
67
  'about' => AI1WMBE_PLUGIN_ABOUT,
68
  'basename' => AI1WMBE_PLUGIN_BASENAME,
69
  'version' => AI1WMBE_VERSION,
70
- 'requires' => '1.13',
71
  'short' => AI1WMBE_PLUGIN_SHORT,
72
  );
73
  }
@@ -80,7 +80,7 @@ class Ai1wm_Extensions {
80
  'about' => AI1WMIE_PLUGIN_ABOUT,
81
  'basename' => AI1WMIE_PLUGIN_BASENAME,
82
  'version' => AI1WMIE_VERSION,
83
- 'requires' => '1.6',
84
  'short' => AI1WMIE_PLUGIN_SHORT,
85
  );
86
  }
@@ -93,7 +93,7 @@ class Ai1wm_Extensions {
93
  'about' => AI1WMDE_PLUGIN_ABOUT,
94
  'basename' => AI1WMDE_PLUGIN_BASENAME,
95
  'version' => AI1WMDE_VERSION,
96
- 'requires' => '3.33',
97
  'short' => AI1WMDE_PLUGIN_SHORT,
98
  );
99
  }
@@ -119,7 +119,7 @@ class Ai1wm_Extensions {
119
  'about' => AI1WMFE_PLUGIN_ABOUT,
120
  'basename' => AI1WMFE_PLUGIN_BASENAME,
121
  'version' => AI1WMFE_VERSION,
122
- 'requires' => '2.40',
123
  'short' => AI1WMFE_PLUGIN_SHORT,
124
  );
125
  }
@@ -132,7 +132,7 @@ class Ai1wm_Extensions {
132
  'about' => AI1WMCE_PLUGIN_ABOUT,
133
  'basename' => AI1WMCE_PLUGIN_BASENAME,
134
  'version' => AI1WMCE_VERSION,
135
- 'requires' => '1.0',
136
  'short' => AI1WMCE_PLUGIN_SHORT,
137
  );
138
  }
@@ -145,7 +145,7 @@ class Ai1wm_Extensions {
145
  'about' => AI1WMGE_PLUGIN_ABOUT,
146
  'basename' => AI1WMGE_PLUGIN_BASENAME,
147
  'version' => AI1WMGE_VERSION,
148
- 'requires' => '2.38',
149
  'short' => AI1WMGE_PLUGIN_SHORT,
150
  );
151
  }
@@ -158,7 +158,7 @@ class Ai1wm_Extensions {
158
  'about' => AI1WMRE_PLUGIN_ABOUT,
159
  'basename' => AI1WMRE_PLUGIN_BASENAME,
160
  'version' => AI1WMRE_VERSION,
161
- 'requires' => '1.0',
162
  'short' => AI1WMRE_PLUGIN_SHORT,
163
  );
164
  }
@@ -171,7 +171,7 @@ class Ai1wm_Extensions {
171
  'about' => AI1WMEE_PLUGIN_ABOUT,
172
  'basename' => AI1WMEE_PLUGIN_BASENAME,
173
  'version' => AI1WMEE_VERSION,
174
- 'requires' => '1.10',
175
  'short' => AI1WMEE_PLUGIN_SHORT,
176
  );
177
  }
@@ -184,7 +184,7 @@ class Ai1wm_Extensions {
184
  'about' => AI1WMME_PLUGIN_ABOUT,
185
  'basename' => AI1WMME_PLUGIN_BASENAME,
186
  'version' => AI1WMME_VERSION,
187
- 'requires' => '3.61',
188
  'short' => AI1WMME_PLUGIN_SHORT,
189
  );
190
  }
@@ -197,7 +197,7 @@ class Ai1wm_Extensions {
197
  'about' => AI1WMOE_PLUGIN_ABOUT,
198
  'basename' => AI1WMOE_PLUGIN_BASENAME,
199
  'version' => AI1WMOE_VERSION,
200
- 'requires' => '1.23',
201
  'short' => AI1WMOE_PLUGIN_SHORT,
202
  );
203
  }
@@ -210,7 +210,7 @@ class Ai1wm_Extensions {
210
  'about' => AI1WMPE_PLUGIN_ABOUT,
211
  'basename' => AI1WMPE_PLUGIN_BASENAME,
212
  'version' => AI1WMPE_VERSION,
213
- 'requires' => '1.0',
214
  'short' => AI1WMPE_PLUGIN_SHORT,
215
  );
216
  }
@@ -223,7 +223,7 @@ class Ai1wm_Extensions {
223
  'about' => AI1WMNE_PLUGIN_ABOUT,
224
  'basename' => AI1WMNE_PLUGIN_BASENAME,
225
  'version' => AI1WMNE_VERSION,
226
- 'requires' => '1.0',
227
  'short' => AI1WMNE_PLUGIN_SHORT,
228
  );
229
  }
@@ -236,7 +236,7 @@ class Ai1wm_Extensions {
236
  'about' => AI1WMSE_PLUGIN_ABOUT,
237
  'basename' => AI1WMSE_PLUGIN_BASENAME,
238
  'version' => AI1WMSE_VERSION,
239
- 'requires' => '3.27',
240
  'short' => AI1WMSE_PLUGIN_SHORT,
241
  );
242
  }
@@ -249,7 +249,7 @@ class Ai1wm_Extensions {
249
  'about' => AI1WMUE_PLUGIN_ABOUT,
250
  'basename' => AI1WMUE_PLUGIN_BASENAME,
251
  'version' => AI1WMUE_VERSION,
252
- 'requires' => '2.20',
253
  'short' => AI1WMUE_PLUGIN_SHORT,
254
  );
255
  }
@@ -262,7 +262,7 @@ class Ai1wm_Extensions {
262
  'about' => AI1WMLE_PLUGIN_ABOUT,
263
  'basename' => AI1WMLE_PLUGIN_BASENAME,
264
  'version' => AI1WMLE_VERSION,
265
- 'requires' => '2.29',
266
  'short' => AI1WMLE_PLUGIN_SHORT,
267
  );
268
  }
@@ -275,7 +275,7 @@ class Ai1wm_Extensions {
275
  'about' => AI1WMWE_PLUGIN_ABOUT,
276
  'basename' => AI1WMWE_PLUGIN_BASENAME,
277
  'version' => AI1WMWE_VERSION,
278
- 'requires' => '1.0',
279
  'short' => AI1WMWE_PLUGIN_SHORT,
280
  );
281
  }
41
  'about' => AI1WMZE_PLUGIN_ABOUT,
42
  'basename' => AI1WMZE_PLUGIN_BASENAME,
43
  'version' => AI1WMZE_VERSION,
44
+ 'requires' => '1.5',
45
  'short' => AI1WMZE_PLUGIN_SHORT,
46
  );
47
  }
54
  'about' => AI1WMAE_PLUGIN_ABOUT,
55
  'basename' => AI1WMAE_PLUGIN_BASENAME,
56
  'version' => AI1WMAE_VERSION,
57
+ 'requires' => '1.9',
58
  'short' => AI1WMAE_PLUGIN_SHORT,
59
  );
60
  }
67
  'about' => AI1WMBE_PLUGIN_ABOUT,
68
  'basename' => AI1WMBE_PLUGIN_BASENAME,
69
  'version' => AI1WMBE_VERSION,
70
+ 'requires' => '1.17',
71
  'short' => AI1WMBE_PLUGIN_SHORT,
72
  );
73
  }
80
  'about' => AI1WMIE_PLUGIN_ABOUT,
81
  'basename' => AI1WMIE_PLUGIN_BASENAME,
82
  'version' => AI1WMIE_VERSION,
83
+ 'requires' => '1.16',
84
  'short' => AI1WMIE_PLUGIN_SHORT,
85
  );
86
  }
93
  'about' => AI1WMDE_PLUGIN_ABOUT,
94
  'basename' => AI1WMDE_PLUGIN_BASENAME,
95
  'version' => AI1WMDE_VERSION,
96
+ 'requires' => '3.37',
97
  'short' => AI1WMDE_PLUGIN_SHORT,
98
  );
99
  }
119
  'about' => AI1WMFE_PLUGIN_ABOUT,
120
  'basename' => AI1WMFE_PLUGIN_BASENAME,
121
  'version' => AI1WMFE_VERSION,
122
+ 'requires' => '2.43',
123
  'short' => AI1WMFE_PLUGIN_SHORT,
124
  );
125
  }
132
  'about' => AI1WMCE_PLUGIN_ABOUT,
133
  'basename' => AI1WMCE_PLUGIN_BASENAME,
134
  'version' => AI1WMCE_VERSION,
135
+ 'requires' => '1.6',
136
  'short' => AI1WMCE_PLUGIN_SHORT,
137
  );
138
  }
145
  'about' => AI1WMGE_PLUGIN_ABOUT,
146
  'basename' => AI1WMGE_PLUGIN_BASENAME,
147
  'version' => AI1WMGE_VERSION,
148
+ 'requires' => '2.42',
149
  'short' => AI1WMGE_PLUGIN_SHORT,
150
  );
151
  }
158
  'about' => AI1WMRE_PLUGIN_ABOUT,
159
  'basename' => AI1WMRE_PLUGIN_BASENAME,
160
  'version' => AI1WMRE_VERSION,
161
+ 'requires' => '1.7',
162
  'short' => AI1WMRE_PLUGIN_SHORT,
163
  );
164
  }
171
  'about' => AI1WMEE_PLUGIN_ABOUT,
172
  'basename' => AI1WMEE_PLUGIN_BASENAME,
173
  'version' => AI1WMEE_VERSION,
174
+ 'requires' => '1.14',
175
  'short' => AI1WMEE_PLUGIN_SHORT,
176
  );
177
  }
184
  'about' => AI1WMME_PLUGIN_ABOUT,
185
  'basename' => AI1WMME_PLUGIN_BASENAME,
186
  'version' => AI1WMME_VERSION,
187
+ 'requires' => '3.64',
188
  'short' => AI1WMME_PLUGIN_SHORT,
189
  );
190
  }
197
  'about' => AI1WMOE_PLUGIN_ABOUT,
198
  'basename' => AI1WMOE_PLUGIN_BASENAME,
199
  'version' => AI1WMOE_VERSION,
200
+ 'requires' => '1.28',
201
  'short' => AI1WMOE_PLUGIN_SHORT,
202
  );
203
  }
210
  'about' => AI1WMPE_PLUGIN_ABOUT,
211
  'basename' => AI1WMPE_PLUGIN_BASENAME,
212
  'version' => AI1WMPE_VERSION,
213
+ 'requires' => '1.3',
214
  'short' => AI1WMPE_PLUGIN_SHORT,
215
  );
216
  }
223
  'about' => AI1WMNE_PLUGIN_ABOUT,
224
  'basename' => AI1WMNE_PLUGIN_BASENAME,
225
  'version' => AI1WMNE_VERSION,
226
+ 'requires' => '1.1',
227
  'short' => AI1WMNE_PLUGIN_SHORT,
228
  );
229
  }
236
  'about' => AI1WMSE_PLUGIN_ABOUT,
237
  'basename' => AI1WMSE_PLUGIN_BASENAME,
238
  'version' => AI1WMSE_VERSION,
239
+ 'requires' => '3.35',
240
  'short' => AI1WMSE_PLUGIN_SHORT,
241
  );
242
  }
249
  'about' => AI1WMUE_PLUGIN_ABOUT,
250
  'basename' => AI1WMUE_PLUGIN_BASENAME,
251
  'version' => AI1WMUE_VERSION,
252
+ 'requires' => '2.23',
253
  'short' => AI1WMUE_PLUGIN_SHORT,
254
  );
255
  }
262
  'about' => AI1WMLE_PLUGIN_ABOUT,
263
  'basename' => AI1WMLE_PLUGIN_BASENAME,
264
  'version' => AI1WMLE_VERSION,
265
+ 'requires' => '2.32',
266
  'short' => AI1WMLE_PLUGIN_SHORT,
267
  );
268
  }
275
  'about' => AI1WMWE_PLUGIN_ABOUT,
276
  'basename' => AI1WMWE_PLUGIN_BASENAME,
277
  'version' => AI1WMWE_VERSION,
278
+ 'requires' => '1.3',
279
  'short' => AI1WMWE_PLUGIN_SHORT,
280
  );
281
  }
lib/model/export/class-ai1wm-export-clean.php CHANGED
@@ -27,6 +27,9 @@ class Ai1wm_Export_Clean {
27
 
28
  public static function execute( $params ) {
29
  Ai1wm_Directory::delete( ai1wm_storage_path( $params ) );
 
 
 
30
  exit;
31
  }
32
  }
27
 
28
  public static function execute( $params ) {
29
  Ai1wm_Directory::delete( ai1wm_storage_path( $params ) );
30
+ if ( defined( 'WP_CLI' ) ) {
31
+ return $params;
32
+ }
33
  exit;
34
  }
35
  }
lib/model/export/class-ai1wm-export-enumerate.php CHANGED
@@ -108,9 +108,6 @@ class Ai1wm_Export_Enumerate {
108
  // Iterate over content directory
109
  $iterator = new Ai1wm_Recursive_Directory_Iterator( WP_CONTENT_DIR );
110
 
111
- // Exclude new line file names
112
- $iterator = new Ai1wm_Recursive_Newline_Filter( $iterator );
113
-
114
  // Exclude uploads, plugins or themes
115
  $iterator = new Ai1wm_Recursive_Exclude_Filter( $iterator, apply_filters( 'ai1wm_exclude_content_from_export', $exclude_filters ) );
116
 
108
  // Iterate over content directory
109
  $iterator = new Ai1wm_Recursive_Directory_Iterator( WP_CONTENT_DIR );
110
 
 
 
 
111
  // Exclude uploads, plugins or themes
112
  $iterator = new Ai1wm_Recursive_Exclude_Filter( $iterator, apply_filters( 'ai1wm_exclude_content_from_export', $exclude_filters ) );
113
 
lib/model/import/class-ai1wm-import-clean.php CHANGED
@@ -27,6 +27,9 @@ class Ai1wm_Import_Clean {
27
 
28
  public static function execute( $params ) {
29
  Ai1wm_Directory::delete( ai1wm_storage_path( $params ) );
 
 
 
30
  exit;
31
  }
32
  }
27
 
28
  public static function execute( $params ) {
29
  Ai1wm_Directory::delete( ai1wm_storage_path( $params ) );
30
+ if ( defined( 'WP_CLI' ) ) {
31
+ return $params;
32
+ }
33
  exit;
34
  }
35
  }
lib/model/import/class-ai1wm-import-confirm.php CHANGED
@@ -49,12 +49,34 @@ class Ai1wm_Import_Confirm {
49
  // Check compatibility of PHP versions
50
  if ( isset( $package['PHP']['Version'] ) ) {
51
  if ( version_compare( $package['PHP']['Version'], '7.0.0', '<' ) && version_compare( PHP_VERSION, '7.0.0', '>=' ) ) {
52
- $messages[] = __(
53
- '<i class="ai1wm-import-info">Your backup is from a PHP 5 but the site that you are importing to is PHP 7. ' .
54
- 'This could cause the import to fail. <a href="https://help.servmask.com/knowledgebase/migrate-wordpress-from-php-5-to-php-7/" target="_blank">Technical details</a></i>',
55
- AI1WM_PLUGIN_NAME
56
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  }
 
 
58
  }
59
 
60
  // Set progress
49
  // Check compatibility of PHP versions
50
  if ( isset( $package['PHP']['Version'] ) ) {
51
  if ( version_compare( $package['PHP']['Version'], '7.0.0', '<' ) && version_compare( PHP_VERSION, '7.0.0', '>=' ) ) {
52
+
53
+ if ( defined( 'WP_CLI' ) ) {
54
+ WP_CLI::log(
55
+ __( 'Your backup is from a PHP 5 but the site that you are importing to is PHP 7.', AI1WM_PLUGIN_NAME ) .
56
+ __( 'This could cause the import to fail. Technical details: https://help.servmask.com/knowledgebase/migrate-wordpress-from-php-5-to-php-7', AI1WM_PLUGIN_NAME )
57
+ );
58
+ } else {
59
+ $messages[] = __(
60
+ '<i class="ai1wm-import-info">Your backup is from a PHP 5 but the site that you are importing to is PHP 7. ' .
61
+ 'This could cause the import to fail. <a href="https://help.servmask.com/knowledgebase/migrate-wordpress-from-php-5-to-php-7/" target="_blank">Technical details</a></i>',
62
+ AI1WM_PLUGIN_NAME
63
+ );
64
+ }
65
+ }
66
+ }
67
+
68
+ if ( defined( 'WP_CLI' ) ) {
69
+ $message = __(
70
+ 'The import process will overwrite your website including the database, media, plugins, and themes. Are you sure to proceed?',
71
+ AI1WM_PLUGIN_NAME
72
+ );
73
+
74
+ $assoc_args = array();
75
+ if ( isset( $params['cli_args'] ) ) {
76
+ $assoc_args = $params['cli_args'];
77
  }
78
+ WP_CLI::confirm( $message, $assoc_args );
79
+ return $params;
80
  }
81
 
82
  // Set progress
lib/vendor/servmask/archiver/class-ai1wm-archiver.php CHANGED
@@ -191,17 +191,27 @@ abstract class Ai1wm_Archiver {
191
  * @return bool
192
  */
193
  public function is_valid() {
194
- if ( ( $offset = @ftell( $this->file_handle ) ) !== false ) {
195
- if ( @fseek( $this->file_handle, -4377, SEEK_END ) !== -1 ) {
196
- if ( @fread( $this->file_handle, 4377 ) === $this->eof ) {
197
- if ( @fseek( $this->file_handle, $offset, SEEK_SET ) !== -1 ) {
198
- return true;
199
- }
200
- }
201
- }
 
 
 
 
 
 
 
 
 
 
202
  }
203
 
204
- return false;
205
  }
206
 
207
  /**
191
  * @return bool
192
  */
193
  public function is_valid() {
194
+ // Failed detecting the current file pointer offset
195
+ if ( ( $offset = @ftell( $this->file_handle ) ) === false ) {
196
+ return false;
197
+ }
198
+
199
+ // Failed seeking the beginning of EOL block
200
+ if ( @fseek( $this->file_handle, -4377, SEEK_END ) === -1 ) {
201
+ return false;
202
+ }
203
+
204
+ // Trailing block does not match EOL: file is incomplete
205
+ if ( @fread( $this->file_handle, 4377 ) !== $this->eof ) {
206
+ return false;
207
+ }
208
+
209
+ // Failed returning to original offset
210
+ if ( @fseek( $this->file_handle, $offset, SEEK_SET ) === -1 ) {
211
+ return false;
212
  }
213
 
214
+ return true;
215
  }
216
 
217
  /**
lib/vendor/servmask/filter/class-ai1wm-recursive-exclude-filter.php CHANGED
@@ -35,7 +35,19 @@ class Ai1wm_Recursive_Exclude_Filter extends RecursiveFilterIterator {
35
  }
36
 
37
  public function accept() {
38
- return ! in_array( $this->getInnerIterator()->getSubPathname(), $this->exclude );
 
 
 
 
 
 
 
 
 
 
 
 
39
  }
40
 
41
  public function getChildren() {
35
  }
36
 
37
  public function accept() {
38
+ if ( in_array( $this->getInnerIterator()->getSubPathname(), $this->exclude ) ) {
39
+ return false;
40
+ }
41
+
42
+ if ( strpos( $this->getInnerIterator()->getSubPathname(), "\n" ) !== false ) {
43
+ return false;
44
+ }
45
+
46
+ if ( strpos( $this->getInnerIterator()->getSubPathname(), "\r" ) !== false ) {
47
+ return false;
48
+ }
49
+
50
+ return true;
51
  }
52
 
53
  public function getChildren() {
lib/vendor/servmask/filter/class-ai1wm-recursive-newline-filter.php DELETED
@@ -1,32 +0,0 @@
1
- <?php
2
- /**
3
- * Copyright (C) 2014-2018 ServMask Inc.
4
- *
5
- * This program is free software: you can redistribute it and/or modify
6
- * it under the terms of the GNU General Public License as published by
7
- * the Free Software Foundation, either version 3 of the License, or
8
- * (at your option) any later version.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU General Public License
16
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
- *
18
- * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗
19
- * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝
20
- * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝
21
- * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗
22
- * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗
23
- * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
24
- */
25
-
26
- class Ai1wm_Recursive_Newline_Filter extends RecursiveFilterIterator {
27
-
28
- public function accept() {
29
- return strpos( $this->getInnerIterator()->getSubPathname(), "\n" ) === false &&
30
- strpos( $this->getInnerIterator()->getSubPathname(), "\r" ) === false;
31
- }
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/view/assets/javascript/backups.min.js CHANGED
@@ -582,7 +582,7 @@ Import.prototype.clean = function (options, retries) {
582
  this.stopImport = true;
583
 
584
  // Set initial status
585
- this.setStatus({ type: 'info', message: ai1wm_locale.please_wait_stopping_the_export });
586
 
587
  // Set params
588
  var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 400 });
582
  this.stopImport = true;
583
 
584
  // Set initial status
585
+ this.setStatus({ type: 'info', message: ai1wm_locale.please_wait_stopping_the_import });
586
 
587
  // Set params
588
  var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 400 });
lib/view/assets/javascript/import.min.js CHANGED
@@ -60,7 +60,7 @@
60
  /******/ __webpack_require__.p = "";
61
  /******/
62
  /******/ // Load entry module and return exports
63
- /******/ return __webpack_require__(__webpack_require__.s = 13);
64
  /******/ })
65
  /************************************************************************/
66
  /******/ ([
@@ -582,7 +582,7 @@ Import.prototype.clean = function (options, retries) {
582
  this.stopImport = true;
583
 
584
  // Set initial status
585
- this.setStatus({ type: 'info', message: ai1wm_locale.please_wait_stopping_the_export });
586
 
587
  // Set params
588
  var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 400 });
@@ -1137,8 +1137,7 @@ module.exports = Modal;
1137
  /* 9 */,
1138
  /* 10 */,
1139
  /* 11 */,
1140
- /* 12 */,
1141
- /* 13 */
1142
  /***/ (function(module, exports, __webpack_require__) {
1143
 
1144
  "use strict";
@@ -1168,7 +1167,7 @@ module.exports = Modal;
1168
  * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
1169
  */
1170
 
1171
- var FileUploader = __webpack_require__(14),
1172
  Feedback = __webpack_require__(1),
1173
  Report = __webpack_require__(2),
1174
  Import = __webpack_require__(3);
@@ -1198,7 +1197,7 @@ global.Ai1wm = jQuery.extend({}, global.Ai1wm, { FileUploader: FileUploader, Fee
1198
  /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))
1199
 
1200
  /***/ }),
1201
- /* 14 */
1202
  /***/ (function(module, exports, __webpack_require__) {
1203
 
1204
  "use strict";
60
  /******/ __webpack_require__.p = "";
61
  /******/
62
  /******/ // Load entry module and return exports
63
+ /******/ return __webpack_require__(__webpack_require__.s = 12);
64
  /******/ })
65
  /************************************************************************/
66
  /******/ ([
582
  this.stopImport = true;
583
 
584
  // Set initial status
585
+ this.setStatus({ type: 'info', message: ai1wm_locale.please_wait_stopping_the_import });
586
 
587
  // Set params
588
  var params = this.params.concat({ name: 'secret_key', value: ai1wm_import.secret_key }).concat({ name: 'priority', value: 400 });
1137
  /* 9 */,
1138
  /* 10 */,
1139
  /* 11 */,
1140
+ /* 12 */
 
1141
  /***/ (function(module, exports, __webpack_require__) {
1142
 
1143
  "use strict";
1167
  * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
1168
  */
1169
 
1170
+ var FileUploader = __webpack_require__(13),
1171
  Feedback = __webpack_require__(1),
1172
  Report = __webpack_require__(2),
1173
  Import = __webpack_require__(3);
1197
  /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))
1198
 
1199
  /***/ }),
1200
+ /* 13 */
1201
  /***/ (function(module, exports, __webpack_require__) {
1202
 
1203
  "use strict";
lib/view/assets/javascript/settings.min.js ADDED
@@ -0,0 +1,370 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /******/ (function(modules) { // webpackBootstrap
2
+ /******/ // The module cache
3
+ /******/ var installedModules = {};
4
+ /******/
5
+ /******/ // The require function
6
+ /******/ function __webpack_require__(moduleId) {
7
+ /******/
8
+ /******/ // Check if module is in cache
9
+ /******/ if(installedModules[moduleId]) {
10
+ /******/ return installedModules[moduleId].exports;
11
+ /******/ }
12
+ /******/ // Create a new module (and put it into the cache)
13
+ /******/ var module = installedModules[moduleId] = {
14
+ /******/ i: moduleId,
15
+ /******/ l: false,
16
+ /******/ exports: {}
17
+ /******/ };
18
+ /******/
19
+ /******/ // Execute the module function
20
+ /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21
+ /******/
22
+ /******/ // Flag the module as loaded
23
+ /******/ module.l = true;
24
+ /******/
25
+ /******/ // Return the exports of the module
26
+ /******/ return module.exports;
27
+ /******/ }
28
+ /******/
29
+ /******/
30
+ /******/ // expose the modules object (__webpack_modules__)
31
+ /******/ __webpack_require__.m = modules;
32
+ /******/
33
+ /******/ // expose the module cache
34
+ /******/ __webpack_require__.c = installedModules;
35
+ /******/
36
+ /******/ // define getter function for harmony exports
37
+ /******/ __webpack_require__.d = function(exports, name, getter) {
38
+ /******/ if(!__webpack_require__.o(exports, name)) {
39
+ /******/ Object.defineProperty(exports, name, {
40
+ /******/ configurable: false,
41
+ /******/ enumerable: true,
42
+ /******/ get: getter
43
+ /******/ });
44
+ /******/ }
45
+ /******/ };
46
+ /******/
47
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
48
+ /******/ __webpack_require__.n = function(module) {
49
+ /******/ var getter = module && module.__esModule ?
50
+ /******/ function getDefault() { return module['default']; } :
51
+ /******/ function getModuleExports() { return module; };
52
+ /******/ __webpack_require__.d(getter, 'a', getter);
53
+ /******/ return getter;
54
+ /******/ };
55
+ /******/
56
+ /******/ // Object.prototype.hasOwnProperty.call
57
+ /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
58
+ /******/
59
+ /******/ // __webpack_public_path__
60
+ /******/ __webpack_require__.p = "";
61
+ /******/
62
+ /******/ // Load entry module and return exports
63
+ /******/ return __webpack_require__(__webpack_require__.s = 14);
64
+ /******/ })
65
+ /************************************************************************/
66
+ /******/ ({
67
+
68
+ /***/ 0:
69
+ /***/ (function(module, exports) {
70
+
71
+ var g;
72
+
73
+ // This works in non-strict mode
74
+ g = (function() {
75
+ return this;
76
+ })();
77
+
78
+ try {
79
+ // This works if eval is allowed (see CSP)
80
+ g = g || Function("return this")() || (1,eval)("this");
81
+ } catch(e) {
82
+ // This works if the window reference is available
83
+ if(typeof window === "object")
84
+ g = window;
85
+ }
86
+
87
+ // g can still be undefined, but nothing to do about it...
88
+ // We return undefined, instead of nothing here, so it's
89
+ // easier to handle this case. if(!global) { ...}
90
+
91
+ module.exports = g;
92
+
93
+
94
+ /***/ }),
95
+
96
+ /***/ 1:
97
+ /***/ (function(module, exports, __webpack_require__) {
98
+
99
+ "use strict";
100
+
101
+
102
+ /**
103
+ * Copyright (C) 2014-2018 ServMask Inc.
104
+ *
105
+ * This program is free software: you can redistribute it and/or modify
106
+ * it under the terms of the GNU General Public License as published by
107
+ * the Free Software Foundation, either version 3 of the License, or
108
+ * (at your option) any later version.
109
+ *
110
+ * This program is distributed in the hope that it will be useful,
111
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
112
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
113
+ * GNU General Public License for more details.
114
+ *
115
+ * You should have received a copy of the GNU General Public License
116
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
117
+ *
118
+ * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗
119
+ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝
120
+ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝
121
+ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗
122
+ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗
123
+ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
124
+ */
125
+
126
+ jQuery(document).ready(function ($) {
127
+ 'use strict';
128
+
129
+ // Review
130
+
131
+ $('#ai1wm-feedback-type-link-1').click(function (e) {
132
+ var radio = $('#ai1wm-feedback-type-1');
133
+ if (radio.is(':checked')) {
134
+ radio.attr('checked', false);
135
+ } else {
136
+ radio.attr('checked', true);
137
+ }
138
+ });
139
+
140
+ // Idea
141
+ $('#ai1wm-feedback-type-link-2').click(function (e) {
142
+ var radio = $('#ai1wm-feedback-type-2');
143
+ if (radio.is(':checked')) {
144
+ radio.attr('checked', false);
145
+ } else {
146
+ radio.attr('checked', true);
147
+ }
148
+ });
149
+
150
+ // Help
151
+ $('#ai1wm-feedback-type-3').click(function () {
152
+ // Hide other options
153
+ $('#ai1wm-feedback-type-1, #ai1wm-feedback-type-2').closest('li').hide();
154
+
155
+ // Change placeholder message
156
+ $('.ai1wm-feedback-form').find('.ai1wm-feedback-message').attr('placeholder', ai1wm_locale.how_may_we_help_you);
157
+
158
+ // Show feedback form
159
+ $('.ai1wm-feedback-form').fadeIn();
160
+ });
161
+
162
+ // Cancel feedback form
163
+ $('#ai1wm-feedback-cancel').click(function (e) {
164
+ $('.ai1wm-feedback-form').fadeOut(function () {
165
+ $('.ai1wm-feedback-type').attr('checked', false).closest('li').show();
166
+ });
167
+
168
+ e.preventDefault();
169
+ });
170
+
171
+ // Send feedback form
172
+ $('#ai1wm-feedback-submit').click(function (e) {
173
+ var self = $(this);
174
+
175
+ var spinner = self.next();
176
+ var type = $('.ai1wm-feedback-type:checked').val();
177
+ var email = $('.ai1wm-feedback-email').val();
178
+ var message = $('.ai1wm-feedback-message').val();
179
+ var terms = $('.ai1wm-feedback-terms').is(':checked');
180
+
181
+ self.attr('disabled', true);
182
+ spinner.css('visibility', 'visible');
183
+
184
+ $.ajax({
185
+ url: ai1wm_feedback.ajax.url,
186
+ type: 'POST',
187
+ dataType: 'json',
188
+ async: true,
189
+ data: {
190
+ 'secret_key': ai1wm_feedback.secret_key,
191
+ 'ai1wm_type': type,
192
+ 'ai1wm_email': email,
193
+ 'ai1wm_message': message,
194
+ 'ai1wm_terms': +terms
195
+ },
196
+ dataFilter: function dataFilter(data, type) {
197
+ return Ai1wm.Util.json(data);
198
+ }
199
+ }).done(function (data) {
200
+ self.attr('disabled', false);
201
+ spinner.css('visibility', 'hidden');
202
+
203
+ if (data.errors.length > 0) {
204
+ $('.ai1wm-feedback .ai1wm-message').remove();
205
+
206
+ var errorMessage = $('<div />').addClass('ai1wm-message ai1wm-error-message');
207
+ $.each(data.errors, function (key, value) {
208
+ errorMessage.append($('<p />').text(value));
209
+ });
210
+
211
+ $('.ai1wm-feedback').prepend(errorMessage);
212
+ } else {
213
+ var successMessage = $('<div />').addClass('ai1wm-message ai1wm-success-message');
214
+ successMessage.append($('<p />').text(ai1wm_locale.thanks_for_submitting_your_feedback));
215
+
216
+ $('.ai1wm-feedback').html(successMessage);
217
+ }
218
+ });
219
+
220
+ e.preventDefault();
221
+ });
222
+ });
223
+
224
+ /***/ }),
225
+
226
+ /***/ 14:
227
+ /***/ (function(module, exports, __webpack_require__) {
228
+
229
+ "use strict";
230
+ /* WEBPACK VAR INJECTION */(function(global) {
231
+
232
+ /**
233
+ * Copyright (C) 2014-2018 ServMask Inc.
234
+ *
235
+ * This program is free software: you can redistribute it and/or modify
236
+ * it under the terms of the GNU General Public License as published by
237
+ * the Free Software Foundation, either version 3 of the License, or
238
+ * (at your option) any later version.
239
+ *
240
+ * This program is distributed in the hope that it will be useful,
241
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
242
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
243
+ * GNU General Public License for more details.
244
+ *
245
+ * You should have received a copy of the GNU General Public License
246
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
247
+ *
248
+ * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗
249
+ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝
250
+ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝
251
+ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗
252
+ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗
253
+ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
254
+ */
255
+
256
+ var Feedback = __webpack_require__(1),
257
+ Report = __webpack_require__(2);
258
+
259
+ jQuery(document).ready(function ($) {
260
+ 'use strict';
261
+ });
262
+
263
+ global.Ai1wm = jQuery.extend({}, global.Ai1wm, { Feedback: Feedback, Report: Report });
264
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))
265
+
266
+ /***/ }),
267
+
268
+ /***/ 2:
269
+ /***/ (function(module, exports, __webpack_require__) {
270
+
271
+ "use strict";
272
+
273
+
274
+ /**
275
+ * Copyright (C) 2014-2018 ServMask Inc.
276
+ *
277
+ * This program is free software: you can redistribute it and/or modify
278
+ * it under the terms of the GNU General Public License as published by
279
+ * the Free Software Foundation, either version 3 of the License, or
280
+ * (at your option) any later version.
281
+ *
282
+ * This program is distributed in the hope that it will be useful,
283
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
284
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
285
+ * GNU General Public License for more details.
286
+ *
287
+ * You should have received a copy of the GNU General Public License
288
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
289
+ *
290
+ * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗
291
+ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝
292
+ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝
293
+ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗
294
+ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗
295
+ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
296
+ */
297
+
298
+ jQuery(document).ready(function ($) {
299
+ 'use strict';
300
+
301
+ $('#ai1wm-report-problem-button').click(function (e) {
302
+ $(this).next('.ai1wm-report-problem-dialog').toggleClass('ai1wm-report-active');
303
+
304
+ e.preventDefault();
305
+ });
306
+
307
+ $('#ai1wm-report-cancel').click(function (e) {
308
+ $(this).closest('.ai1wm-report-problem-dialog').removeClass('ai1wm-report-active');
309
+
310
+ e.preventDefault();
311
+ });
312
+
313
+ $('#ai1wm-report-submit').click(function (r) {
314
+ var self = $(this);
315
+
316
+ var spinner = self.next();
317
+ var email = $('.ai1wm-report-email').val();
318
+ var message = $('.ai1wm-report-message').val();
319
+ var terms = $('.ai1wm-report-terms').is(':checked');
320
+
321
+ self.attr('disabled', true);
322
+ spinner.css('visibility', 'visible');
323
+
324
+ $.ajax({
325
+ url: ai1wm_report.ajax.url,
326
+ type: 'POST',
327
+ dataType: 'json',
328
+ async: true,
329
+ data: {
330
+ 'secret_key': ai1wm_report.secret_key,
331
+ 'ai1wm_email': email,
332
+ 'ai1wm_message': message,
333
+ 'ai1wm_terms': +terms
334
+ },
335
+ dataFilter: function dataFilter(data, type) {
336
+ return Ai1wm.Util.json(data);
337
+ }
338
+ }).done(function (data) {
339
+ self.attr('disabled', false);
340
+ spinner.css('visibility', 'hidden');
341
+
342
+ if (data.errors.length > 0) {
343
+ $('.ai1wm-report-problem-dialog .ai1wm-message').remove();
344
+
345
+ var errorMessage = $('<div />').addClass('ai1wm-message ai1wm-error-message');
346
+ $.each(data.errors, function (key, value) {
347
+ errorMessage.append($('<p />').text(value));
348
+ });
349
+
350
+ $('.ai1wm-report-problem-dialog').prepend(errorMessage);
351
+ } else {
352
+ var successMessage = $('<div />').addClass('ai1wm-message ai1wm-success-message');
353
+ successMessage.append($('<p />').text(ai1wm_locale.thanks_for_submitting_your_request));
354
+
355
+ $('.ai1wm-report-problem-dialog').html(successMessage);
356
+
357
+ // Hide message
358
+ setTimeout(function () {
359
+ $('.ai1wm-report-problem-dialog').removeClass('ai1wm-report-active');
360
+ }, 2000);
361
+ }
362
+ });
363
+
364
+ e.preventDefault();
365
+ });
366
+ });
367
+
368
+ /***/ })
369
+
370
+ /******/ });
lib/view/assets/javascript/updater.min.js CHANGED
@@ -60,12 +60,12 @@
60
  /******/ __webpack_require__.p = "";
61
  /******/
62
  /******/ // Load entry module and return exports
63
- /******/ return __webpack_require__(__webpack_require__.s = 16);
64
  /******/ })
65
  /************************************************************************/
66
  /******/ ({
67
 
68
- /***/ 16:
69
  /***/ (function(module, exports, __webpack_require__) {
70
 
71
  "use strict";
60
  /******/ __webpack_require__.p = "";
61
  /******/
62
  /******/ // Load entry module and return exports
63
+ /******/ return __webpack_require__(__webpack_require__.s = 15);
64
  /******/ })
65
  /************************************************************************/
66
  /******/ ({
67
 
68
+ /***/ 15:
69
  /***/ (function(module, exports, __webpack_require__) {
70
 
71
  "use strict";
lib/view/assets/javascript/util.min.js CHANGED
@@ -60,7 +60,7 @@
60
  /******/ __webpack_require__.p = "";
61
  /******/
62
  /******/ // Load entry module and return exports
63
- /******/ return __webpack_require__(__webpack_require__.s = 17);
64
  /******/ })
65
  /************************************************************************/
66
  /******/ ({
@@ -93,7 +93,7 @@ module.exports = g;
93
 
94
  /***/ }),
95
 
96
- /***/ 17:
97
  /***/ (function(module, exports, __webpack_require__) {
98
 
99
  "use strict";
@@ -123,14 +123,14 @@ module.exports = g;
123
  * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
124
  */
125
 
126
- var Util = __webpack_require__(18);
127
 
128
  global.Ai1wm = jQuery.extend({}, global.Ai1wm, { Util: Util });
129
  /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))
130
 
131
  /***/ }),
132
 
133
- /***/ 18:
134
  /***/ (function(module, exports, __webpack_require__) {
135
 
136
  "use strict";
60
  /******/ __webpack_require__.p = "";
61
  /******/
62
  /******/ // Load entry module and return exports
63
+ /******/ return __webpack_require__(__webpack_require__.s = 16);
64
  /******/ })
65
  /************************************************************************/
66
  /******/ ({
93
 
94
  /***/ }),
95
 
96
+ /***/ 16:
97
  /***/ (function(module, exports, __webpack_require__) {
98
 
99
  "use strict";
123
  * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
124
  */
125
 
126
+ var Util = __webpack_require__(17);
127
 
128
  global.Ai1wm = jQuery.extend({}, global.Ai1wm, { Util: Util });
129
  /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))
130
 
131
  /***/ }),
132
 
133
+ /***/ 17:
134
  /***/ (function(module, exports, __webpack_require__) {
135
 
136
  "use strict";
loader.php CHANGED
@@ -125,14 +125,6 @@ require_once AI1WM_VENDOR_PATH .
125
  DIRECTORY_SEPARATOR .
126
  'class-ai1wm-recursive-exclude-filter.php';
127
 
128
- require_once AI1WM_VENDOR_PATH .
129
- DIRECTORY_SEPARATOR .
130
- 'servmask' .
131
- DIRECTORY_SEPARATOR .
132
- 'filter' .
133
- DIRECTORY_SEPARATOR .
134
- 'class-ai1wm-recursive-newline-filter.php';
135
-
136
  require_once AI1WM_VENDOR_PATH .
137
  DIRECTORY_SEPARATOR .
138
  'servmask' .
125
  DIRECTORY_SEPARATOR .
126
  'class-ai1wm-recursive-exclude-filter.php';
127
 
 
 
 
 
 
 
 
 
128
  require_once AI1WM_VENDOR_PATH .
129
  DIRECTORY_SEPARATOR .
130
  'servmask' .
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.0
6
  Requires PHP: 5.2.17
7
- Stable tag: 6.81
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,15 @@ 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
  = 6.81 =
112
  **Added**
113
 
4
  Requires at least: 3.3
5
  Tested up to: 5.0
6
  Requires PHP: 5.2.17
7
+ Stable tag: 6.82
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
+ = 6.82 =
112
+ **Added**
113
+
114
+ * Support for PHP 7.3
115
+
116
+ **Fixed**
117
+
118
+ * Feedback form on settings page
119
+
120
  = 6.81 =
121
  **Added**
122