WP Staging – DB & File Duplicator & Migration - Version 2.8.9

Version Description

  • New: Show a summary of selected tables and plugins in the backup push selection
  • New: Ask user to allow sending non-personalized usage information for improving the backup & staginguser experience
  • New: Adding improved and dedicated WP STAGING debug log for backup and staging.
  • New: Better support for custom ( backup ) tables without a wp core table prefix. Allow cloning / backup of custom tables that do not begin with a WP table prefix to an external database #1304
  • New: Now you can create a staging / backup environment for your entire multisite network #1263
  • New: Add new logic for showing update notification for PRO version, compatible to staged rollout releases #1308
  • New: Show warning notice about not changing wp-content or uploads dir path on staging / backup site #1313
  • Tweak: Disable the notice about not messing with uploads or wp-content directories in backup site #1385
  • Tweak: Lower memory consumption on backup creation #1301
  • Tweak: Fix open staging / backup site button and text #1321
  • Tweak: Layout of database comparison modal #1332
  • Tweak: Make staging / upgrade site upgrade routine run always #1358
  • Fix: Feedback modal not opened after disabling the backup plugin #1373
  • Fix: Prevent cloning error by enclosing table name with backticks in CLONE / BACKUP and PUSH jobs #1388
  • Fix: Duplicate primary key error that could occur on Push a backup / staging site #1322
  • Fix: Dont rename themes/plugins with tmp prefix during push of staging / backup site if content cleaning option is enabled #1305
  • Fix: No search & replace of wp option db_version if table prefix is db_, during CLONE / BACKUP / PUSH #1307
  • Fix: Avoid upgrade error if wp option wpstg_staging_sites is empty or not an array not an array #1331
  • Fix: Show an error if table can not be copied for any reason on cloning / backup process #1302
  • Fix: CSS issue vertical center align finish label after push #1311
  • Fix: Use WordPress local timezone when logging for clone and backups #1323
  • Fix: Better support for custom plugin directories on the staging / backup site #1314
  • Fix: Not all cloning / backup settings are cleaned during uninstall #1325
  • Fix: Staging / backup site does not have orange admin bar after cloning #1329
  • Fix: Warning if array key offset does not exist on search & replace of a backup #1334
  • Fix: Disable WordFence plugin on the staging /backup site to prevent by renaming .user.ini to .user.ini.bak #1338
  • Fix: Prevent empty database prefix in staging / backup site options if site is cloned to external database #1340
  • Fix: List of staging / backup sites contains duplicate entries if staging sites were initially created with wp staging free 2.8.6, then upgraded to pro 4.0.3 and pro 4.0.5 #1349
  • Fix: Show error and stop cloning / backup process if unable to create staging / backup site destination folder #1348
  • Fix: Fix issue about checking rest url on backup / staging site #1354
  • Fix: Fix exclude condition for tables during PUSH of a staging / backup site #1364
  • Fix: Fix PUSH process when no table is selected #1387
  • Fix: Enclose table name with backticks during quering in CLONE / BAKUP and PUSH jobs #1388
Download this release

Release Info

Developer ReneHermi
Plugin Icon 128x128 WP Staging – DB & File Duplicator & Migration
Version 2.8.9
Comparing to
See all releases

Code changes from version 2.8.8 to 2.8.9

Files changed (105) hide show
  1. Backend/Administrator.php +61 -31
  2. Backend/Feedback/Feedback.php +4 -4
  3. Backend/Modules/Jobs/Cancel.php +6 -0
  4. Backend/Modules/Jobs/CancelUpdate.php +6 -0
  5. Backend/Modules/Jobs/Cloning.php +32 -8
  6. Backend/Modules/Jobs/Data.php +11 -199
  7. Backend/Modules/Jobs/Database.php +50 -25
  8. Backend/Modules/Jobs/Delete.php +31 -17
  9. Backend/Modules/Jobs/Files.php +2 -4
  10. Backend/Modules/Jobs/Finish.php +15 -0
  11. Backend/Modules/Jobs/Job.php +17 -3
  12. Backend/Modules/Jobs/SearchReplace.php +12 -11
  13. Backend/Modules/SystemInfo.php +20 -23
  14. Backend/Notices/DisabledItemsNotice.php +8 -2
  15. Backend/Notices/Notices.php +10 -1
  16. Backend/Notices/OutdatedWpStagingNotice.php +29 -3
  17. Backend/Notices/WarningsNotice.php +45 -0
  18. Backend/Optimizer/wp-staging-optimizer.php +1 -1
  19. Backend/Pluginmeta/Pluginmeta.php +1 -3
  20. Backend/Upgrade/Upgrade.php +2 -3
  21. Backend/views/_main/header.php +4 -2
  22. Backend/views/clone/ajax/delete-confirmation.php +15 -3
  23. Backend/views/clone/ajax/scan.php +11 -0
  24. Backend/views/clone/ajax/single-overview.php +1 -1
  25. Backend/views/clone/ajax/start.php +1 -1
  26. Backend/views/clone/index.php +1 -1
  27. Backend/views/notices/analytics-consent-failed.php +12 -0
  28. Backend/views/notices/analytics-consent-refused.php +5 -0
  29. Backend/views/notices/analytics-consent.php +18 -0
  30. Backend/views/notices/warnings-notice.php +25 -0
  31. Backend/views/settings/tabs/general.php +28 -2
  32. Backend/views/tools/tabs/system_info.php +8 -0
  33. Core/Utils/Htaccess.php +27 -0
  34. Core/Utils/Logger.php +3 -3
  35. Core/Utils/functions.php +1 -32
  36. Core/WPStaging.php +30 -0
  37. Framework/Adapter/Database/MysqlAdapter.php +1 -3
  38. Framework/Adapter/DateTimeAdapter.php +1 -1
  39. Framework/Adapter/Directory.php +1 -1
  40. Framework/Analytics/Actions/AnalyticsBackupCreate.php +40 -0
  41. Framework/Analytics/Actions/AnalyticsBackupRestore.php +33 -0
  42. Framework/Analytics/Actions/AnalyticsStagingCreate.php +56 -0
  43. Framework/Analytics/Actions/AnalyticsStagingPush.php +31 -0
  44. Framework/Analytics/Actions/AnalyticsStagingReset.php +26 -0
  45. Framework/Analytics/Actions/AnalyticsStagingUpdate.php +31 -0
  46. Framework/Analytics/AnalyticsCleanup.php +31 -0
  47. Framework/Analytics/AnalyticsConsent.php +212 -0
  48. Framework/Analytics/AnalyticsEventDto.php +209 -0
  49. Framework/Analytics/AnalyticsSender.php +163 -0
  50. Framework/Analytics/WithAnalyticsAPI.php +44 -0
  51. Framework/Analytics/WithAnalyticsSiteInfo.php +170 -0
  52. Framework/AnalyticsServiceProvider.php +91 -0
  53. Framework/Assets/Assets.php +25 -20
  54. Framework/BackgroundProcessing/Demo.php +2 -2
  55. Framework/BackgroundProcessing/Queue.php +9 -9
  56. Framework/BackgroundProcessing/WithQueueAwareness.php +1 -1
  57. Framework/CloningProcess/Data/CloningService.php +26 -1
  58. Framework/CloningProcess/Data/DBCloningService.php +29 -7
  59. Framework/CloningProcess/Data/DataCloningDto.php +46 -4
  60. Framework/CloningProcess/Data/Job.php +211 -0
  61. Framework/CloningProcess/Data/MultisiteAddNetworkAdministrators.php +5 -5
  62. Framework/CloningProcess/Data/MultisiteUpdateActivePlugins.php +0 -2
  63. Framework/CloningProcess/Data/ResetIndexPhp.php +0 -1
  64. Framework/CloningProcess/Data/UpdateSiteUrlAndHome.php +118 -8
  65. Framework/CloningProcess/Data/UpdateStagingOptionsTable.php +47 -8
  66. Framework/CloningProcess/Data/UpdateTablePrefix.php +13 -3
  67. Framework/CloningProcess/Data/UpdateWpConfigConstants.php +18 -6
  68. Framework/CloningProcess/Data/UpdateWpOptionsTablePrefix.php +50 -12
  69. Framework/CloningProcess/Database/DatabaseCloningService.php +132 -61
  70. Framework/CommonServiceProvider.php +15 -0
  71. Framework/DI/Container.php +1 -3
  72. Framework/Database/ExcludedTables.php +18 -5
  73. Framework/Database/QueryBuilder/SelectQuery.php +156 -0
  74. Framework/Database/SearchReplace.php +1 -1
  75. Framework/Filesystem/DebugLogReader.php +93 -0
  76. Framework/Filesystem/DirectoryListing.php +1 -3
  77. Framework/Filesystem/DiskWriteCheck.php +1 -1
  78. Framework/Filesystem/Filesystem.php +28 -3
  79. Framework/Filesystem/LogCleanup.php +7 -0
  80. Framework/Notices/DismissNotice.php +65 -0
  81. Framework/Queue/Storage/ArrayStorage.php +2 -2
  82. Framework/Rest/Rest.php +17 -4
  83. Framework/SiteInfo.php +6 -6
  84. Framework/Staging/CloneOptions.php +4 -3
  85. Framework/Staging/FirstRun.php +12 -3
  86. Framework/Staging/Sites.php +67 -12
  87. Framework/Support/ThirdParty/WordFence.php +18 -0
  88. Framework/Traits/DbRowsGeneratorTrait.php +3 -7
  89. Framework/Traits/DeveloperTimerTrait.php +1 -1
  90. Framework/Traits/HydrateTrait.php +1 -3
  91. Framework/Traits/MySQLRowsGeneratorTrait.php +7 -8
  92. Framework/Traits/ResourceTrait.php +1 -1
  93. Framework/Utils/Strings.php +17 -0
  94. Frontend/Frontend.php +1 -1
  95. Frontend/views/header.php +7 -0
  96. assets/css/dist/wpstg-admin.css +91 -5
  97. assets/css/dist/wpstg-admin.css.map +1 -1
  98. assets/css/dist/wpstg-admin.min.css +1 -1
  99. assets/css/dist/wpstg-admin.min.css.map +1 -1
  100. assets/js/dist/wpstg-admin-plugins.js +4 -4
  101. assets/js/dist/wpstg-admin-plugins.js.map +1 -1
  102. assets/js/dist/wpstg-admin-plugins.min.js +1 -1
  103. assets/js/dist/wpstg-admin-plugins.min.js.map +1 -1
  104. assets/js/dist/wpstg-admin.js +58 -21
  105. assets/js/dist/wpstg-admin.js.map +1 -1
Backend/Administrator.php CHANGED
@@ -4,6 +4,8 @@ namespace WPStaging\Backend;
4
 
5
  use WPStaging\Core\WPStaging;
6
  use WPStaging\Core\DTO\Settings;
 
 
7
  use WPStaging\Framework\Assets\Assets;
8
  use WPStaging\Framework\Database\DbInfo;
9
  use WPStaging\Framework\SiteInfo;
@@ -27,16 +29,14 @@ use WPStaging\Backend\Modules\Jobs\ProcessLock;
27
  use WPStaging\Backend\Modules\SystemInfo;
28
  use WPStaging\Backend\Modules\Views\Tabs\Tabs;
29
  use WPStaging\Backend\Notices\Notices;
30
- use WPStaging\Backend\Notices\DisabledItemsNotice;
31
  use WPStaging\Backend\Modules\Views\Forms\Settings as FormSettings;
32
  use WPStaging\Backend\Activation;
33
  use WPStaging\Backend\Feedback;
34
- use WPStaging\Backend\Pro\Notices\BackupsDifferentPrefixNotice;
35
  use WPStaging\Backend\Pro\Modules\Jobs\Processing;
36
  use WPStaging\Backend\Pro\Modules\Jobs\Backups\BackupUploadsDir;
37
  use WPStaging\Backend\Pluginmeta\Pluginmeta;
 
38
  use WPStaging\Framework\Staging\Sites;
39
- use WPStaging\Framework\Support\ThirdParty\WordFence;
40
 
41
  /**
42
  * Class Administrator
@@ -173,6 +173,7 @@ class Administrator
173
  add_action("wp_ajax_wpstg_edit_clone_data", [$this, "ajaxEditCloneData"]);
174
  add_action("wp_ajax_wpstg_save_clone_data", [$this, "ajaxSaveCloneData"]);
175
  add_action("wp_ajax_wpstg_scan", [$this, "ajaxPushScan"]);
 
176
  add_action("wp_ajax_wpstg_push_processing", [$this, "ajaxPushProcessing"]);
177
  add_action("wp_ajax_nopriv_wpstg_push_processing", [$this, "ajaxPushProcessing"]);
178
 
@@ -233,7 +234,7 @@ class Administrator
233
  {
234
  $error = false;
235
  // is_array() is required otherwise new clone will fail.
236
- if ($this->siteInfo->isStaging() && is_array($data)) {
237
  $isStagingCloneable = isset($data['isStagingSiteCloneable']) ? $data['isStagingSiteCloneable'] : 'false';
238
  unset($data['isStagingSiteCloneable']);
239
  $error = !$this->toggleStagingSiteCloning($isStagingCloneable === 'true');
@@ -612,7 +613,7 @@ class Administrator
612
  }
613
 
614
  // Check first if there is already a process running
615
- $response = (new ProcessLock())->ajaxIsRunning();
616
  if ($response !== false)
617
  {
618
  echo $response;
@@ -682,7 +683,7 @@ class Administrator
682
 
683
  return;
684
  }
685
-
686
  // Check if destination clone dir exists and that it is not empty
687
  if (!wpstg_is_empty_dir($cloneDestDir)) {
688
  echo wp_send_json([
@@ -722,6 +723,9 @@ class Administrator
722
  wp_die('Can not save clone data');
723
  }
724
 
 
 
 
725
  require_once "{$this->path}views/clone/ajax/update.php";
726
 
727
  wp_die();
@@ -742,6 +746,9 @@ class Administrator
742
  wp_die('can not save clone data');
743
  }
744
 
 
 
 
745
  require_once "{$this->path}views/clone/ajax/update.php";
746
  wp_die();
747
  }
@@ -893,7 +900,11 @@ class Administrator
893
  */
894
  public function messages()
895
  {
896
- (new Notices($this->path, $this->assets))->messages();
 
 
 
 
897
  }
898
 
899
  /**
@@ -954,25 +965,9 @@ class Administrator
954
  return;
955
  }
956
 
957
- // Dismiss backups prefix notice
958
- if ($_POST['wpstg_notice'] === 'backups_diff_prefix' && (new BackupsDifferentPrefixNotice())->disable() !== false) {
959
- wp_send_json(true);
960
- return;
961
- }
962
-
963
- // Dismiss disabled item notice
964
- if ($_POST['wpstg_notice'] === 'disabled_items' && (new DisabledItemsNotice())->disable() !== false) {
965
- wp_send_json(true);
966
- return;
967
- }
968
-
969
- // Dismiss wordfence user.ini renamed notice
970
- if ($_POST['wpstg_notice'] === WordFence::NOTICE_NAME && (new WordFence())->disable() !== false) {
971
- wp_send_json(true);
972
- return;
973
- }
974
-
975
- wp_send_json(null);
976
  }
977
 
978
  /**
@@ -1097,6 +1092,39 @@ class Administrator
1097
  wp_die();
1098
  }
1099
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1100
  /**
1101
  * Ajax Start Pushing. Needs WP Staging Pro
1102
  */
@@ -1188,12 +1216,14 @@ class Administrator
1188
  return;
1189
  }
1190
 
 
 
1191
  $args = $_POST;
1192
  $user = !empty($args['databaseUser']) ? $args['databaseUser'] : '';
1193
  $password = !empty($args['databasePassword']) ? $args['databasePassword'] : '';
1194
  $database = !empty($args['databaseDatabase']) ? $args['databaseDatabase'] : '';
1195
  $server = !empty($args['databaseServer']) ? $args['databaseServer'] : 'localhost';
1196
- $prefix = !empty($args['databasePrefix']) ? $args['databasePrefix'] : 'wp_';
1197
  // make sure prefix doesn't contains any invalid character
1198
  // same condition as in WordPress wpdb::set_prefix() method
1199
  if (preg_match('|[^a-z0-9_]|i', $prefix)) {
@@ -1206,9 +1236,9 @@ class Administrator
1206
 
1207
  $dbInfo = new DbInfo($server, $user, stripslashes($password), $database);
1208
  $wpdb = $dbInfo->connect();
1209
- $error = $dbInfo->getError();
1210
 
1211
  // Can not connect to mysql database
 
1212
  if ($error !== null) {
1213
  echo json_encode(['success' => 'false', 'errors' => $error]);
1214
  exit;
@@ -1263,7 +1293,7 @@ class Administrator
1263
 
1264
  /**
1265
  * Action to perform when error modal confirm button is clicked
1266
- *
1267
  * @todo use constants instead of hardcoded strings for error types
1268
  */
1269
  public function ajaxModalError()
@@ -1290,7 +1320,7 @@ class Administrator
1290
  return;
1291
  }
1292
 
1293
- $response = (new ProcessLock())->ajaxIsRunning();
1294
  if ($response !== false)
1295
  {
1296
  echo $response;
@@ -1369,7 +1399,7 @@ class Administrator
1369
  * Toggle staging site cloning
1370
  *
1371
  * @param bool $isCloneable
1372
- *
1373
  * @return bool
1374
  */
1375
  protected function toggleStagingSiteCloning($isCloneable)
4
 
5
  use WPStaging\Core\WPStaging;
6
  use WPStaging\Core\DTO\Settings;
7
+ use WPStaging\Framework\Analytics\Actions\AnalyticsStagingReset;
8
+ use WPStaging\Framework\Analytics\Actions\AnalyticsStagingUpdate;
9
  use WPStaging\Framework\Assets\Assets;
10
  use WPStaging\Framework\Database\DbInfo;
11
  use WPStaging\Framework\SiteInfo;
29
  use WPStaging\Backend\Modules\SystemInfo;
30
  use WPStaging\Backend\Modules\Views\Tabs\Tabs;
31
  use WPStaging\Backend\Notices\Notices;
 
32
  use WPStaging\Backend\Modules\Views\Forms\Settings as FormSettings;
33
  use WPStaging\Backend\Activation;
34
  use WPStaging\Backend\Feedback;
 
35
  use WPStaging\Backend\Pro\Modules\Jobs\Processing;
36
  use WPStaging\Backend\Pro\Modules\Jobs\Backups\BackupUploadsDir;
37
  use WPStaging\Backend\Pluginmeta\Pluginmeta;
38
+ use WPStaging\Framework\Notices\DismissNotice;
39
  use WPStaging\Framework\Staging\Sites;
 
40
 
41
  /**
42
  * Class Administrator
173
  add_action("wp_ajax_wpstg_edit_clone_data", [$this, "ajaxEditCloneData"]);
174
  add_action("wp_ajax_wpstg_save_clone_data", [$this, "ajaxSaveCloneData"]);
175
  add_action("wp_ajax_wpstg_scan", [$this, "ajaxPushScan"]);
176
+ add_action("wp_ajax_wpstg_push_tables", [$this, "ajaxPushTables"]);
177
  add_action("wp_ajax_wpstg_push_processing", [$this, "ajaxPushProcessing"]);
178
  add_action("wp_ajax_nopriv_wpstg_push_processing", [$this, "ajaxPushProcessing"]);
179
 
234
  {
235
  $error = false;
236
  // is_array() is required otherwise new clone will fail.
237
+ if ($this->siteInfo->isStagingSite() && is_array($data)) {
238
  $isStagingCloneable = isset($data['isStagingSiteCloneable']) ? $data['isStagingSiteCloneable'] : 'false';
239
  unset($data['isStagingSiteCloneable']);
240
  $error = !$this->toggleStagingSiteCloning($isStagingCloneable === 'true');
613
  }
614
 
615
  // Check first if there is already a process running
616
+ $response = (new ProcessLock())->ajaxIsRunning();
617
  if ($response !== false)
618
  {
619
  echo $response;
683
 
684
  return;
685
  }
686
+
687
  // Check if destination clone dir exists and that it is not empty
688
  if (!wpstg_is_empty_dir($cloneDestDir)) {
689
  echo wp_send_json([
723
  wp_die('Can not save clone data');
724
  }
725
 
726
+ $options = $cloning->getOptions();
727
+ WPStaging::make(AnalyticsStagingUpdate::class)->enqueueStartEvent($options->jobIdentifier, $options);
728
+
729
  require_once "{$this->path}views/clone/ajax/update.php";
730
 
731
  wp_die();
746
  wp_die('can not save clone data');
747
  }
748
 
749
+ $options = $cloning->getOptions();
750
+ WPStaging::make(AnalyticsStagingReset::class)->enqueueStartEvent($options->jobIdentifier, $options);
751
+
752
  require_once "{$this->path}views/clone/ajax/update.php";
753
  wp_die();
754
  }
900
  */
901
  public function messages()
902
  {
903
+ $notices = new Notices($this->path, $this->assets);
904
+ $notices->messages();
905
+
906
+ // Return this instance when we request it from the container
907
+ WPStaging::getInstance()->getContainer()->singleton(Notices::class, $notices);
908
  }
909
 
910
  /**
965
  return;
966
  }
967
 
968
+ /** @var DismissNotice */
969
+ $dismissNotice = WPStaging::make(DismissNotice::class);
970
+ $dismissNotice->dismiss($_POST['wpstg_notice']);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
971
  }
972
 
973
  /**
1092
  wp_die();
1093
  }
1094
 
1095
+ /**
1096
+ * Fetch all tables for push process
1097
+ */
1098
+ public function ajaxPushTables()
1099
+ {
1100
+ if (!$this->isAuthenticated()) {
1101
+ return false;
1102
+ }
1103
+
1104
+ if (!class_exists('WPStaging\Backend\Pro\Modules\Jobs\Scan')) {
1105
+ return false;
1106
+ }
1107
+
1108
+ // Scan
1109
+ $scan = new Pro\Modules\Jobs\Scan();
1110
+
1111
+ $scan->start();
1112
+
1113
+ $templateEngine = new TemplateEngine();
1114
+
1115
+ echo json_encode([
1116
+ 'success' => true,
1117
+ "content" => $templateEngine->render("/Backend/Pro/views/selections/tables.php", [
1118
+ 'isNetworkClone' => $scan->isNetworkClone(),
1119
+ 'options' => $scan->getOptions(),
1120
+ 'showAll' => true,
1121
+ 'selected' => isset($_POST['tables']) ? explode(',', $_POST['tables']) : false
1122
+ ])
1123
+ ]);
1124
+
1125
+ exit();
1126
+ }
1127
+
1128
  /**
1129
  * Ajax Start Pushing. Needs WP Staging Pro
1130
  */
1216
  return;
1217
  }
1218
 
1219
+ global $wpdb;
1220
+
1221
  $args = $_POST;
1222
  $user = !empty($args['databaseUser']) ? $args['databaseUser'] : '';
1223
  $password = !empty($args['databasePassword']) ? $args['databasePassword'] : '';
1224
  $database = !empty($args['databaseDatabase']) ? $args['databaseDatabase'] : '';
1225
  $server = !empty($args['databaseServer']) ? $args['databaseServer'] : 'localhost';
1226
+ $prefix = !empty($args['databasePrefix']) ? $args['databasePrefix'] : $wpdb->prefix;
1227
  // make sure prefix doesn't contains any invalid character
1228
  // same condition as in WordPress wpdb::set_prefix() method
1229
  if (preg_match('|[^a-z0-9_]|i', $prefix)) {
1236
 
1237
  $dbInfo = new DbInfo($server, $user, stripslashes($password), $database);
1238
  $wpdb = $dbInfo->connect();
 
1239
 
1240
  // Can not connect to mysql database
1241
+ $error = $dbInfo->getError();
1242
  if ($error !== null) {
1243
  echo json_encode(['success' => 'false', 'errors' => $error]);
1244
  exit;
1293
 
1294
  /**
1295
  * Action to perform when error modal confirm button is clicked
1296
+ *
1297
  * @todo use constants instead of hardcoded strings for error types
1298
  */
1299
  public function ajaxModalError()
1320
  return;
1321
  }
1322
 
1323
+ $response = (new ProcessLock())->ajaxIsRunning();
1324
  if ($response !== false)
1325
  {
1326
  echo $response;
1399
  * Toggle staging site cloning
1400
  *
1401
  * @param bool $isCloneable
1402
+ *
1403
  * @return bool
1404
  */
1405
  protected function toggleStagingSiteCloning($isCloneable)
Backend/Feedback/Feedback.php CHANGED
@@ -65,8 +65,8 @@ class Feedback
65
 
66
  $success = wp_mail('feedback@wp-staging.com', $subject, $text, $headers);
67
 
68
- //error_log(print_r($success, true));
69
- //error_log($from . $subject . var_dump($form));
70
 
71
  if ($success) {
72
  wp_die(1);
@@ -143,8 +143,8 @@ class Feedback
143
  // wp_die( 1 );
144
  // }
145
  // wp_die( 0 );
146
- // //error_log(print_r($success, true));
147
- // //error_log($from . $subject . var_dump($form));
148
  // die();
149
  //}
150
  //
65
 
66
  $success = wp_mail('feedback@wp-staging.com', $subject, $text, $headers);
67
 
68
+ //\WPStaging\functions\debug_log(print_r($success, true));
69
+ //\WPStaging\functions\debug_log($from . $subject . var_dump($form));
70
 
71
  if ($success) {
72
  wp_die(1);
143
  // wp_die( 1 );
144
  // }
145
  // wp_die( 0 );
146
+ // //\WPStaging\functions\debug_log(print_r($success, true));
147
+ // //\WPStaging\functions\debug_log($from . $subject . var_dump($form));
148
  // die();
149
  //}
150
  //
Backend/Modules/Jobs/Cancel.php CHANGED
@@ -2,6 +2,8 @@
2
 
3
  namespace WPStaging\Backend\Modules\Jobs;
4
 
 
 
5
  /**
6
  * Class Cancel Processing
7
  * @package WPStaging\Backend\Modules\Jobs
@@ -17,6 +19,10 @@ class Cancel extends Job
17
  {
18
  $cloneData = $this->createCloneData();
19
 
 
 
 
 
20
  if (empty($cloneData)) {
21
  return true;
22
  }
2
 
3
  namespace WPStaging\Backend\Modules\Jobs;
4
 
5
+ use WPStaging\Framework\Analytics\AnalyticsEventDto;
6
+
7
  /**
8
  * Class Cancel Processing
9
  * @package WPStaging\Backend\Modules\Jobs
19
  {
20
  $cloneData = $this->createCloneData();
21
 
22
+ if (!empty($this->options->jobIdentifier)) {
23
+ AnalyticsEventDto::enqueueCancelEvent($this->options->jobIdentifier);
24
+ }
25
+
26
  if (empty($cloneData)) {
27
  return true;
28
  }
Backend/Modules/Jobs/CancelUpdate.php CHANGED
@@ -2,6 +2,8 @@
2
 
3
  namespace WPStaging\Backend\Modules\Jobs;
4
 
 
 
5
  /**
6
  * Class Cancel Update Processing
7
  * @package WPStaging\Backend\Modules\Jobs
@@ -17,6 +19,10 @@ class CancelUpdate extends Job
17
  {
18
  $cloneData = $this->createCloneData();
19
 
 
 
 
 
20
  if (empty($cloneData)) {
21
  return true;
22
  }
2
 
3
  namespace WPStaging\Backend\Modules\Jobs;
4
 
5
+ use WPStaging\Framework\Analytics\AnalyticsEventDto;
6
+
7
  /**
8
  * Class Cancel Update Processing
9
  * @package WPStaging\Backend\Modules\Jobs
19
  {
20
  $cloneData = $this->createCloneData();
21
 
22
+ if (!empty($this->options->jobIdentifier)) {
23
+ AnalyticsEventDto::enqueueCancelEvent($this->options->jobIdentifier);
24
+ }
25
+
26
  if (empty($cloneData)) {
27
  return true;
28
  }
Backend/Modules/Jobs/Cloning.php CHANGED
@@ -5,6 +5,7 @@ namespace WPStaging\Backend\Modules\Jobs;
5
  use WPStaging\Backend\Modules\Jobs\Exceptions\JobNotFoundException;
6
  use WPStaging\Core\Utils\Helper;
7
  use WPStaging\Core\WPStaging;
 
8
  use WPStaging\Framework\Filesystem\Scanning\ScanConst;
9
  use WPStaging\Framework\Security\AccessToken;
10
  use WPStaging\Framework\Staging\Sites;
@@ -55,7 +56,7 @@ class Cloning extends Job
55
  // Generate Options
56
  // Clone ID -> timestamp (time at which this clone creation initiated)
57
  $this->options->clone = preg_replace("#\W+#", '-', strtolower($_POST["cloneID"]));
58
- // Clone Name -> Site name that user input, if user left it empty it will be Clone ID
59
  $this->options->cloneName = wpstg_urldecode($_POST["cloneName"]);
60
  // The slugified version of Clone Name (to use in directory creation)
61
  $this->options->cloneDirectoryName = preg_replace("#\W+#", '-', strtolower($this->options->cloneName));
@@ -150,26 +151,34 @@ class Cloning extends Job
150
  if (isset($_POST["databaseServer"]) && !empty($_POST["databaseServer"])) {
151
  $this->options->databaseServer = $_POST["databaseServer"];
152
  }
 
153
  $this->options->databaseUser = '';
154
  if (isset($_POST["databaseUser"]) && !empty($_POST["databaseUser"])) {
155
  $this->options->databaseUser = $_POST["databaseUser"];
156
  }
 
157
  $this->options->databasePassword = '';
158
  if (isset($_POST["databasePassword"]) && !empty($_POST["databasePassword"])) {
159
  $this->options->databasePassword = stripslashes($_POST["databasePassword"]);
160
  }
 
161
  $this->options->databaseDatabase = '';
162
  if (isset($_POST["databaseDatabase"]) && !empty($_POST["databaseDatabase"])) {
163
  $this->options->databaseDatabase = $_POST["databaseDatabase"];
164
  }
165
- $this->options->databasePrefix = '';
 
 
 
166
  if (isset($_POST["databasePrefix"]) && !empty($_POST["databasePrefix"])) {
167
  $this->options->databasePrefix = $this->appendUnderscore($_POST["databasePrefix"]);
168
  }
 
169
  $this->options->cloneDir = '';
170
  if (isset($_POST["cloneDir"]) && !empty($_POST["cloneDir"])) {
171
  $this->options->cloneDir = trailingslashit(wpstg_urldecode($_POST["cloneDir"]));
172
  }
 
173
  $this->options->cloneHostname = '';
174
  if (isset($_POST["cloneHostname"]) && !empty($_POST["cloneHostname"])) {
175
  $this->options->cloneHostname = trim($_POST["cloneHostname"]);
@@ -184,6 +193,11 @@ class Cloning extends Job
184
  );
185
  }
186
 
 
 
 
 
 
187
  $this->options->destinationHostname = $this->getDestinationHostname();
188
  $this->options->destinationDir = $this->getDestinationDir();
189
 
@@ -199,6 +213,8 @@ class Cloning extends Job
199
  // Save Clone data
200
  $this->saveClone();
201
 
 
 
202
  return $this->saveOptions();
203
  }
204
 
@@ -212,7 +228,7 @@ class Cloning extends Job
212
 
213
  /**
214
  * Save clone data initially
215
- * @return boolean
216
  */
217
  private function saveClone()
218
  {
@@ -242,14 +258,13 @@ class Cloning extends Job
242
  "excludeGlobRules" => $this->options->excludeGlobRules,
243
  "excludedDirectories" => $this->options->excludedDirectories,
244
  "extraDirectories" => $this->options->extraDirectories,
 
245
  ];
246
 
247
  if (update_option(Sites::STAGING_SITES_OPTION, $this->options->existingClones) === false) {
248
  $this->log("Cloning: Failed to save {$this->options->clone}'s clone job data to database'");
249
- return false;
250
  }
251
-
252
- return true;
253
  }
254
 
255
  /**
@@ -295,7 +310,7 @@ class Cloning extends Job
295
  private function getDestinationDir()
296
  {
297
  // Throw fatal error
298
- if (!empty($this->options->cloneDir) & (trailingslashit($this->options->cloneDir) === (string)trailingslashit(WPStaging::getWPpath()))) {
299
  $this->returnException('Error: Target Directory must be different from the root of the production website.');
300
  die();
301
  }
@@ -362,7 +377,7 @@ class Cloning extends Job
362
  $methodName = "job" . ucwords($this->options->currentJob);
363
 
364
  if (!method_exists($this, $methodName)) {
365
- $this->log("Can't execute job; Job's method {$methodName} is not found");
366
  throw new JobNotFoundException($methodName);
367
  }
368
 
@@ -378,6 +393,7 @@ class Cloning extends Job
378
  * @param object $response
379
  * @param string $nextJob
380
  * @return object
 
381
  */
382
  private function handleJobResponse($response, $nextJob)
383
  {
@@ -400,6 +416,7 @@ class Cloning extends Job
400
  /**
401
  * Copy data from staging site to temporary column to use it later
402
  * @return object
 
403
  */
404
  public function jobPreserveDataFirstStep()
405
  {
@@ -410,6 +427,7 @@ class Cloning extends Job
410
  /**
411
  * Clone Database
412
  * @return object
 
413
  */
414
  public function jobDatabase()
415
  {
@@ -420,6 +438,7 @@ class Cloning extends Job
420
  /**
421
  * Search & Replace
422
  * @return object
 
423
  */
424
  public function jobSearchReplace()
425
  {
@@ -430,6 +449,7 @@ class Cloning extends Job
430
  /**
431
  * Copy tmp data back to staging site
432
  * @return object
 
433
  */
434
  public function jobPreserveDataSecondStep()
435
  {
@@ -440,6 +460,7 @@ class Cloning extends Job
440
  /**
441
  * Get All Files From Selected Directories Recursively Into a File
442
  * @return object
 
443
  */
444
  public function jobDirectories()
445
  {
@@ -450,6 +471,7 @@ class Cloning extends Job
450
  /**
451
  * Copy Files
452
  * @return object
 
453
  */
454
  public function jobFiles()
455
  {
@@ -461,6 +483,7 @@ class Cloning extends Job
461
  /**
462
  * Replace Data
463
  * @return object
 
464
  */
465
  public function jobData()
466
  {
@@ -470,6 +493,7 @@ class Cloning extends Job
470
  /**
471
  * Save Clone Data
472
  * @return object
 
473
  */
474
  public function jobFinish()
475
  {
5
  use WPStaging\Backend\Modules\Jobs\Exceptions\JobNotFoundException;
6
  use WPStaging\Core\Utils\Helper;
7
  use WPStaging\Core\WPStaging;
8
+ use WPStaging\Framework\Analytics\Actions\AnalyticsStagingCreate;
9
  use WPStaging\Framework\Filesystem\Scanning\ScanConst;
10
  use WPStaging\Framework\Security\AccessToken;
11
  use WPStaging\Framework\Staging\Sites;
56
  // Generate Options
57
  // Clone ID -> timestamp (time at which this clone creation initiated)
58
  $this->options->clone = preg_replace("#\W+#", '-', strtolower($_POST["cloneID"]));
59
+ // Clone Name -> Site name that user input, if user left it empty it will be Clone ID
60
  $this->options->cloneName = wpstg_urldecode($_POST["cloneName"]);
61
  // The slugified version of Clone Name (to use in directory creation)
62
  $this->options->cloneDirectoryName = preg_replace("#\W+#", '-', strtolower($this->options->cloneName));
151
  if (isset($_POST["databaseServer"]) && !empty($_POST["databaseServer"])) {
152
  $this->options->databaseServer = $_POST["databaseServer"];
153
  }
154
+
155
  $this->options->databaseUser = '';
156
  if (isset($_POST["databaseUser"]) && !empty($_POST["databaseUser"])) {
157
  $this->options->databaseUser = $_POST["databaseUser"];
158
  }
159
+
160
  $this->options->databasePassword = '';
161
  if (isset($_POST["databasePassword"]) && !empty($_POST["databasePassword"])) {
162
  $this->options->databasePassword = stripslashes($_POST["databasePassword"]);
163
  }
164
+
165
  $this->options->databaseDatabase = '';
166
  if (isset($_POST["databaseDatabase"]) && !empty($_POST["databaseDatabase"])) {
167
  $this->options->databaseDatabase = $_POST["databaseDatabase"];
168
  }
169
+
170
+ // isExternalDatabase() depends upon databaseUser and databasePassword,
171
+ // Make sure they are set before calling this.
172
+ $this->options->databasePrefix = $this->isExternalDatabase() ? $this->db->prefix : '';
173
  if (isset($_POST["databasePrefix"]) && !empty($_POST["databasePrefix"])) {
174
  $this->options->databasePrefix = $this->appendUnderscore($_POST["databasePrefix"]);
175
  }
176
+
177
  $this->options->cloneDir = '';
178
  if (isset($_POST["cloneDir"]) && !empty($_POST["cloneDir"])) {
179
  $this->options->cloneDir = trailingslashit(wpstg_urldecode($_POST["cloneDir"]));
180
  }
181
+
182
  $this->options->cloneHostname = '';
183
  if (isset($_POST["cloneHostname"]) && !empty($_POST["cloneHostname"])) {
184
  $this->options->cloneHostname = trim($_POST["cloneHostname"]);
193
  );
194
  }
195
 
196
+ $this->options->networkClone = false;
197
+ if ($this->isMultisiteAndPro() && is_main_site()) {
198
+ $this->options->networkClone = isset($_POST['networkClone']) && $_POST['networkClone'] !== "false";
199
+ }
200
+
201
  $this->options->destinationHostname = $this->getDestinationHostname();
202
  $this->options->destinationDir = $this->getDestinationDir();
203
 
213
  // Save Clone data
214
  $this->saveClone();
215
 
216
+ WPStaging::make(AnalyticsStagingCreate::class)->enqueueStartEvent($this->options->jobIdentifier, $this->options);
217
+
218
  return $this->saveOptions();
219
  }
220
 
228
 
229
  /**
230
  * Save clone data initially
231
+ * @return void
232
  */
233
  private function saveClone()
234
  {
258
  "excludeGlobRules" => $this->options->excludeGlobRules,
259
  "excludedDirectories" => $this->options->excludedDirectories,
260
  "extraDirectories" => $this->options->extraDirectories,
261
+ "networkClone" => $this->isNetworkClone(),
262
  ];
263
 
264
  if (update_option(Sites::STAGING_SITES_OPTION, $this->options->existingClones) === false) {
265
  $this->log("Cloning: Failed to save {$this->options->clone}'s clone job data to database'");
266
+ return;
267
  }
 
 
268
  }
269
 
270
  /**
310
  private function getDestinationDir()
311
  {
312
  // Throw fatal error
313
+ if (!empty($this->options->cloneDir) & (trailingslashit($this->options->cloneDir) === trailingslashit(WPStaging::getWPpath()))) {
314
  $this->returnException('Error: Target Directory must be different from the root of the production website.');
315
  die();
316
  }
377
  $methodName = "job" . ucwords($this->options->currentJob);
378
 
379
  if (!method_exists($this, $methodName)) {
380
+ $this->log("Can't execute job; Job's method $methodName is not found");
381
  throw new JobNotFoundException($methodName);
382
  }
383
 
393
  * @param object $response
394
  * @param string $nextJob
395
  * @return object
396
+ * @throws \Exception
397
  */
398
  private function handleJobResponse($response, $nextJob)
399
  {
416
  /**
417
  * Copy data from staging site to temporary column to use it later
418
  * @return object
419
+ * @throws \Exception
420
  */
421
  public function jobPreserveDataFirstStep()
422
  {
427
  /**
428
  * Clone Database
429
  * @return object
430
+ * @throws \Exception
431
  */
432
  public function jobDatabase()
433
  {
438
  /**
439
  * Search & Replace
440
  * @return object
441
+ * @throws \Exception
442
  */
443
  public function jobSearchReplace()
444
  {
449
  /**
450
  * Copy tmp data back to staging site
451
  * @return object
452
+ * @throws \Exception
453
  */
454
  public function jobPreserveDataSecondStep()
455
  {
460
  /**
461
  * Get All Files From Selected Directories Recursively Into a File
462
  * @return object
463
+ * @throws \Exception
464
  */
465
  public function jobDirectories()
466
  {
471
  /**
472
  * Copy Files
473
  * @return object
474
+ * @throws \Exception
475
  */
476
  public function jobFiles()
477
  {
483
  /**
484
  * Replace Data
485
  * @return object
486
+ * @throws \Exception
487
  */
488
  public function jobData()
489
  {
493
  /**
494
  * Save Clone Data
495
  * @return object
496
+ * @throws \Exception
497
  */
498
  public function jobFinish()
499
  {
Backend/Modules/Jobs/Data.php CHANGED
@@ -3,8 +3,8 @@
3
  namespace WPStaging\Backend\Modules\Jobs;
4
 
5
  use WPStaging\Core\WPStaging;
6
- use WPStaging\Framework\CloningProcess\Data\DataCloningDto;
7
  use WPStaging\Framework\CloningProcess\Data\CopyWpConfig;
 
8
  use WPStaging\Framework\CloningProcess\Data\MultisiteAddNetworkAdministrators;
9
  use WPStaging\Framework\CloningProcess\Data\MultisiteUpdateActivePlugins;
10
  use WPStaging\Framework\CloningProcess\Data\ResetIndexPhp;
@@ -14,115 +14,27 @@ use WPStaging\Framework\CloningProcess\Data\UpdateWpConfigConstants;
14
  use WPStaging\Framework\CloningProcess\Data\UpdateWpConfigTablePrefix;
15
  use WPStaging\Framework\CloningProcess\Data\UpdateWpOptionsTablePrefix;
16
  use WPStaging\Framework\CloningProcess\Data\UpdateStagingOptionsTable;
17
- use WPStaging\Framework\SiteInfo;
18
  use WPStaging\Framework\Utils\Strings;
19
- use WPStaging\Framework\Utils\Urls;
20
- use WPStaging\Framework\Utils\WpDefaultDirectories;
21
 
22
  /**
23
  * Class Data
24
  * @package WPStaging\Backend\Modules\Jobs
25
  */
26
- class Data extends CloningProcess
27
  {
28
- /**
29
- * @var string
30
- */
31
- private $prefix;
32
-
33
- /**
34
- *
35
- * @var string
36
- */
37
- private $homeUrl;
38
-
39
- /**
40
- *
41
- * @var string
42
- */
43
- private $siteUrl;
44
-
45
- /**
46
- *
47
- * @var string
48
- */
49
- protected $baseUrl;
50
-
51
- /**
52
- * Tables e.g wpstg3_options
53
- * @var array
54
- */
55
- private $tables;
56
-
57
  /**
58
  * Initialize
59
  */
60
  public function initialize()
61
  {
62
- $this->initializeDbObjects();
63
-
64
- $this->prefix = $this->options->prefix;
65
-
66
  $this->getTables();
67
-
68
- $this->homeUrl = (new Urls())->getHomeUrl();
69
- $this->siteUrl = (new Urls())->getSiteUrl();
70
- $this->baseUrl = (new Urls())->getBaseUrl();
71
-
72
- // Reset current step
73
- if ($this->options->currentStep === 0) {
74
- $this->options->currentStep = 0;
75
- }
76
- }
77
-
78
- /**
79
- * Start Module
80
- * @return object
81
- */
82
- public function start()
83
- {
84
- // Execute steps
85
- $this->run();
86
-
87
- // Save option, progress
88
- $this->saveOptions();
89
-
90
- return (object)$this->response;
91
- }
92
-
93
- /**
94
- * @param int $stepNumber
95
- * @return DataCloningDto
96
- */
97
- protected function getCloningDto($stepNumber)
98
- {
99
- return new DataCloningDto(
100
- $this,
101
- $this->stagingDb,
102
- $this->productionDb,
103
- $this->isExternalDatabase(),
104
- $this->isMultisiteAndPro(),
105
- $this->isExternalDatabase() ? $this->options->databaseServer : null,
106
- $this->isExternalDatabase() ? $this->options->databaseUser : null,
107
- $this->isExternalDatabase() ? $this->options->databasePassword : null,
108
- $this->isExternalDatabase() ? $this->options->databaseDatabase : null,
109
- $stepNumber,
110
- $this->prefix,
111
- $this->tables,
112
- $this->getOptions()->destinationDir,
113
- $this->getStagingSiteUrl(),
114
- (new WpDefaultDirectories())->getRelativeUploadPath(),
115
- $this->settings,
116
- $this->homeUrl,
117
- $this->baseUrl,
118
- $this->options->mainJob
119
- );
120
  }
121
 
122
  /**
123
  * Get a list of tables to copy
124
  */
125
- private function getTables()
126
  {
127
  $strings = new Strings();
128
  $this->tables = [];
@@ -130,7 +42,7 @@ class Data extends CloningProcess
130
  $this->tables[] = $this->options->prefix . $strings->str_replace_first(WPStaging::getTablePrefix(), null, $table);
131
  }
132
 
133
- if ($this->isMultisiteAndPro()) {
134
  // Add extra global tables from main multisite (wpstg[x]_users and wpstg[x]_usermeta)
135
  $this->tables[] = $this->options->prefix . 'users';
136
  $this->tables[] = $this->options->prefix . 'usermeta';
@@ -138,64 +50,16 @@ class Data extends CloningProcess
138
  }
139
 
140
  /**
141
- * Calculate Total Steps in This Job and Assign It to $this->options->totalSteps
142
  * @return void
143
  */
144
  protected function calculateTotalSteps()
145
  {
146
- if ($this->isMultisiteAndPro()) {
147
- $this->options->totalSteps = 9;
148
- } else {
149
- $this->options->totalSteps = 7;
150
- }
151
- }
152
-
153
-
154
- /**
155
- * Execute the Current Step
156
- * Returns false when over threshold limits are hit or when the job is done, true otherwise
157
- * @return bool
158
- */
159
- protected function execute()
160
- {
161
- // Over limits threshold
162
- if ($this->isOverThreshold()) {
163
- // Prepare response and save current progress
164
- $this->prepareResponse(false, false);
165
- $this->saveOptions();
166
- return false;
167
- }
168
 
169
- // No more steps, finished
170
- if ($this->isFinished()) {
171
- $this->prepareResponse(true, false);
172
- return false;
173
- }
174
-
175
- // Execute step
176
- $stepMethodName = "step" . $this->options->currentStep;
177
- if (!$this->{$stepMethodName}()) {
178
- $this->prepareResponse(false, false);
179
- return false;
180
  }
181
-
182
- // Prepare Response
183
- $this->prepareResponse();
184
-
185
- // Not finished
186
- return true;
187
- }
188
-
189
- /**
190
- * Checks Whether There is Any Job to Execute or Not
191
- * @return bool
192
- */
193
- protected function isFinished()
194
- {
195
- return
196
- !$this->isRunning() ||
197
- $this->options->currentStep > $this->options->totalSteps ||
198
- !method_exists($this, "step" . $this->options->currentStep);
199
  }
200
 
201
  /**
@@ -281,7 +145,7 @@ class Data extends CloningProcess
281
  */
282
  protected function step8()
283
  {
284
- if ($this->isMultisiteAndPro()) {
285
  return (new MultisiteUpdateActivePlugins($this->getCloningDto(8)))->execute();
286
  }
287
 
@@ -295,62 +159,10 @@ class Data extends CloningProcess
295
  */
296
  protected function step9()
297
  {
298
- if ($this->isMultisiteAndPro()) {
299
  return (new MultisiteAddNetworkAdministrators($this->getCloningDto(9)))->execute();
300
  }
301
 
302
  return true;
303
  }
304
-
305
-
306
- /**
307
- * Check if WP is installed in subdir
308
- * @return boolean
309
- */
310
- protected function isSubDir()
311
- {
312
- return (new SiteInfo())->isInstalledInSubDir();
313
- }
314
-
315
- /**
316
- * Get the install sub directory if WP is installed in sub directory
317
- * @return string
318
- */
319
- protected function getInstallSubDir()
320
- {
321
- $home = get_option('home');
322
- $siteurl = get_option('siteurl');
323
-
324
- if (empty($home) || empty($siteurl)) {
325
- return '';
326
- }
327
-
328
- return str_replace([$home, '/'], '', $siteurl);
329
- }
330
-
331
- /**
332
- * Return URL of staging site
333
- * @return string
334
- */
335
- protected function getStagingSiteUrl()
336
- {
337
- if (!empty($this->options->cloneHostname)) {
338
- return $this->options->cloneHostname;
339
- }
340
- if ($this->isMultisiteAndPro()) {
341
- if ($this->isSubDir()) {
342
- return trailingslashit($this->baseUrl) . trailingslashit($this->getInstallSubDir()) . $this->options->cloneDirectoryName;
343
- }
344
-
345
- // Get the path to the main multisite without a trailingslash e.g. wordpress
346
- $multisitePath = defined('PATH_CURRENT_SITE') ? PATH_CURRENT_SITE : '/';
347
- return rtrim($this->baseUrl, '/\\') . $multisitePath . $this->options->cloneDirectoryName;
348
- }
349
-
350
- if ($this->isSubDir()) {
351
- return trailingslashit($this->homeUrl) . trailingslashit($this->getInstallSubDir()) . $this->options->cloneDirectoryName;
352
- }
353
-
354
- return trailingslashit($this->siteUrl) . $this->options->cloneDirectoryName;
355
- }
356
  }
3
  namespace WPStaging\Backend\Modules\Jobs;
4
 
5
  use WPStaging\Core\WPStaging;
 
6
  use WPStaging\Framework\CloningProcess\Data\CopyWpConfig;
7
+ use WPStaging\Framework\CloningProcess\Data\Job as DataJob;
8
  use WPStaging\Framework\CloningProcess\Data\MultisiteAddNetworkAdministrators;
9
  use WPStaging\Framework\CloningProcess\Data\MultisiteUpdateActivePlugins;
10
  use WPStaging\Framework\CloningProcess\Data\ResetIndexPhp;
14
  use WPStaging\Framework\CloningProcess\Data\UpdateWpConfigTablePrefix;
15
  use WPStaging\Framework\CloningProcess\Data\UpdateWpOptionsTablePrefix;
16
  use WPStaging\Framework\CloningProcess\Data\UpdateStagingOptionsTable;
 
17
  use WPStaging\Framework\Utils\Strings;
 
 
18
 
19
  /**
20
  * Class Data
21
  * @package WPStaging\Backend\Modules\Jobs
22
  */
23
+ class Data extends DataJob
24
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  /**
26
  * Initialize
27
  */
28
  public function initialize()
29
  {
30
+ parent::initialize();
 
 
 
31
  $this->getTables();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  }
33
 
34
  /**
35
  * Get a list of tables to copy
36
  */
37
+ protected function getTables()
38
  {
39
  $strings = new Strings();
40
  $this->tables = [];
42
  $this->tables[] = $this->options->prefix . $strings->str_replace_first(WPStaging::getTablePrefix(), null, $table);
43
  }
44
 
45
+ if ($this->isMultisiteAndPro() && !$this->isNetworkClone()) {
46
  // Add extra global tables from main multisite (wpstg[x]_users and wpstg[x]_usermeta)
47
  $this->tables[] = $this->options->prefix . 'users';
48
  $this->tables[] = $this->options->prefix . 'usermeta';
50
  }
51
 
52
  /**
53
+ * Calculate total steps in this job and assign it to $this->options->totalSteps
54
  * @return void
55
  */
56
  protected function calculateTotalSteps()
57
  {
58
+ $this->options->totalSteps = 7;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
+ if ($this->isMultisiteAndPro() && !$this->isNetworkClone()) {
61
+ $this->options->totalSteps = 9;
 
 
 
 
 
 
 
 
 
62
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  }
64
 
65
  /**
145
  */
146
  protected function step8()
147
  {
148
+ if ($this->isMultisiteAndPro() && !$this->isNetworkClone()) {
149
  return (new MultisiteUpdateActivePlugins($this->getCloningDto(8)))->execute();
150
  }
151
 
159
  */
160
  protected function step9()
161
  {
162
+ if ($this->isMultisiteAndPro() && !$this->isNetworkClone()) {
163
  return (new MultisiteAddNetworkAdministrators($this->getCloningDto(9)))->execute();
164
  }
165
 
166
  return true;
167
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  }
Backend/Modules/Jobs/Database.php CHANGED
@@ -9,6 +9,7 @@ use WPStaging\Framework\CloningProcess\CloningDto;
9
  use WPStaging\Framework\CloningProcess\Database\DatabaseCloningService;
10
  use WPStaging\Framework\Adapter\Database as DatabaseAdapter;
11
  use WPStaging\Framework\Database\TableService;
 
12
 
13
  /**
14
  * Class Database
@@ -35,6 +36,7 @@ class Database extends CloningProcess
35
  {
36
  $this->initializeDbObjects();
37
  $this->abortIfDirectoryNotEmpty();
 
38
  $this->abortIfPrefixContainsInvalidCharacter();
39
  if (!$this->isExternalDatabase()) {
40
  $this->abortIfStagingPrefixEqualsProdPrefix();
@@ -242,12 +244,12 @@ class Database extends CloningProcess
242
 
243
  /**
244
  * Copy data from old table to new table
245
- * @param string $new
246
- * @param string $old
247
  */
248
- private function copyData($new, $old)
249
  {
250
- $this->databaseCloningService->copyData($old, $new, $this->options->job->start, $this->settings->queryLimit);
251
  // Set new offset
252
  $this->options->job->start += $this->settings->queryLimit;
253
  }
@@ -256,38 +258,35 @@ class Database extends CloningProcess
256
  * @param mixed string|object $tableName
257
  * @return bool
258
  */
259
- private function copyTable($tableName)
260
  {
261
- $tableName = is_object($tableName) ? $tableName->name : $tableName;
262
- $newTableName = $this->getStagingPrefix() . $this->databaseCloningService->removeDBPrefix($tableName);
 
263
 
264
  if ($this->isMultisiteAndPro()) {
265
- // Get name table users from main site e.g. wp_users
266
- if ($this->databaseCloningService->removeDBPrefix($tableName) === 'users') {
267
- $tableName = $this->productionDb->base_prefix . 'users';
268
  }
269
- // Get name of table usermeta from main site e.g. wp_usermeta
270
- if ($this->databaseCloningService->removeDBPrefix($tableName) === 'usermeta') {
271
- $tableName = $this->productionDb->base_prefix . 'usermeta';
272
  }
273
  }
274
 
275
- if (!$this->isCopyProcessStarted() && $this->shouldAbortIfTableExist($newTableName)) {
276
- $this->returnException(sprintf(__("Can not proceed. Tables beginning with the prefix '%s' already exist in the database i.e. %s. Choose another table prefix and try again.", "wp-staging"), $this->getStagingPrefix(), $newTableName));
277
  return true;
278
  }
279
 
280
- if ($this->isTableExist($newTableName)) {
281
- $this->databaseCloningService->dropTable($newTableName);
282
- }
283
-
284
- $this->setJob($newTableName);
285
 
286
- if (!$this->startJob($newTableName, $tableName)) {
287
  return true;
288
  }
289
 
290
- $this->copyData($newTableName, $tableName);
291
 
292
  return $this->finishStep();
293
  }
@@ -307,7 +306,7 @@ class Database extends CloningProcess
307
  function ($tableName) {
308
  return $this->options->prefix . $tableName;
309
  },
310
- $this->excludedTableService->getExcludedTables()
311
  )
312
  )
313
  ) {
@@ -333,13 +332,13 @@ class Database extends CloningProcess
333
  return true;
334
  }
335
 
336
- if ($this->databaseCloningService->tableIsMissing($old)) {
337
  return true;
338
  }
339
 
340
  try {
341
  $this->options->job->total = 0;
342
- $this->options->job->total = $this->databaseCloningService->createTable($new, $old);
343
  } catch (FatalException $e) {
344
  $this->returnException($e->getMessage());
345
  return true;
@@ -423,6 +422,32 @@ class Database extends CloningProcess
423
  return false;
424
  }
425
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
426
  /**
427
  * Stop cloning if database prefix contains hypen
428
  * @return boolean
9
  use WPStaging\Framework\CloningProcess\Database\DatabaseCloningService;
10
  use WPStaging\Framework\Adapter\Database as DatabaseAdapter;
11
  use WPStaging\Framework\Database\TableService;
12
+ use WPStaging\Framework\Filesystem\Filesystem;
13
 
14
  /**
15
  * Class Database
36
  {
37
  $this->initializeDbObjects();
38
  $this->abortIfDirectoryNotEmpty();
39
+ $this->abortIfDirectoryNotCreated();
40
  $this->abortIfPrefixContainsInvalidCharacter();
41
  if (!$this->isExternalDatabase()) {
42
  $this->abortIfStagingPrefixEqualsProdPrefix();
244
 
245
  /**
246
  * Copy data from old table to new table
247
+ * @param string $newTableName
248
+ * @param string $oldTableName
249
  */
250
+ private function copyData($newTableName, $oldTableName)
251
  {
252
+ $this->databaseCloningService->copyData($oldTableName, $newTableName, $this->options->job->start, $this->settings->queryLimit);
253
  // Set new offset
254
  $this->options->job->start += $this->settings->queryLimit;
255
  }
258
  * @param mixed string|object $tableName
259
  * @return bool
260
  */
261
+ private function copyTable($srcTableName)
262
  {
263
+ $srcTableName = is_object($srcTableName) ? $srcTableName->name : $srcTableName;
264
+
265
+ $destTableName = $this->getStagingPrefix() . $this->databaseCloningService->removeDBPrefix($srcTableName);
266
 
267
  if ($this->isMultisiteAndPro()) {
268
+ // Build full name of table 'users' from main site e.g. wp_users
269
+ if ($this->databaseCloningService->removeDBPrefix($srcTableName) === 'users') {
270
+ $srcTableName = $this->productionDb->base_prefix . 'users';
271
  }
272
+ // Build full name of table 'usermeta' from main site e.g. wp_usermeta
273
+ if ($this->databaseCloningService->removeDBPrefix($srcTableName) === 'usermeta') {
274
+ $srcTableName = $this->productionDb->base_prefix . 'usermeta';
275
  }
276
  }
277
 
278
+ if (!$this->isCopyProcessStarted() && $this->shouldAbortIfTableExist($destTableName)) {
279
+ $this->returnException(sprintf(__("Can not proceed. Tables beginning with the prefix '%s' already exist in the database i.e. %s. Choose another table prefix and try again.", "wp-staging"), $this->getStagingPrefix(), $destTableName));
280
  return true;
281
  }
282
 
283
+ $this->setJob($destTableName);
 
 
 
 
284
 
285
+ if (!$this->startJob($destTableName, $srcTableName)) {
286
  return true;
287
  }
288
 
289
+ $this->copyData($destTableName, $srcTableName);
290
 
291
  return $this->finishStep();
292
  }
306
  function ($tableName) {
307
  return $this->options->prefix . $tableName;
308
  },
309
+ $this->excludedTableService->getExcludedTables($this->isNetworkClone())
310
  )
311
  )
312
  ) {
332
  return true;
333
  }
334
 
335
+ if ($this->databaseCloningService->isMissingTable($old)) {
336
  return true;
337
  }
338
 
339
  try {
340
  $this->options->job->total = 0;
341
+ $this->options->job->total = $this->databaseCloningService->createTable($old, $new);
342
  } catch (FatalException $e) {
343
  $this->returnException($e->getMessage());
344
  return true;
422
  return false;
423
  }
424
 
425
+ /**
426
+ * Return fatal error, if unable to create staging site directory
427
+ * @return boolean
428
+ */
429
+ private function abortIfDirectoryNotCreated()
430
+ {
431
+ // Early bail if not a new staging site
432
+ if (isset($this->options->mainJob) && ($this->options->mainJob === 'resetting' || $this->options->mainJob === 'updating')) {
433
+ return false;
434
+ }
435
+
436
+ // Early bail if directory already exists
437
+ $path = trailingslashit($this->options->cloneDir);
438
+ if (is_dir($path)) {
439
+ return false;
440
+ }
441
+
442
+ $fs = new Filesystem();
443
+ if ($fs->mkdir($path)) {
444
+ return false;
445
+ }
446
+
447
+ $this->returnException(" Unable to create the staging site directory. " . $fs->getLogs()[0]);
448
+ return true;
449
+ }
450
+
451
  /**
452
  * Stop cloning if database prefix contains hypen
453
  * @return boolean
Backend/Modules/Jobs/Delete.php CHANGED
@@ -31,7 +31,7 @@ class Delete extends Job
31
  * The path to delete
32
  * @var string
33
  */
34
- private $deleteDir = '';
35
 
36
  /**
37
  * @var null|object
@@ -46,7 +46,7 @@ class Delete extends Job
46
  /**
47
  * @var bool
48
  */
49
- private $forceDeleteDirectories = false;
50
 
51
  /**
52
  *
@@ -60,12 +60,16 @@ class Delete extends Job
60
  */
61
  private $isExternalDb;
62
 
 
 
 
63
  public function __construct($isExternal = false)
64
  {
65
  parent::__construct();
66
- $this->isExternalDb = $isExternal;
67
 
 
68
  $this->deleteDir = !empty($_POST['deleteDir']) ? urldecode($_POST['deleteDir']) : '';
 
69
  }
70
 
71
  /**
@@ -79,7 +83,7 @@ class Delete extends Job
79
  $this->getCloneRecords();
80
  } else {
81
  $this->clone = (object)$clone;
82
- $this->forceDeleteDirectories = true;
83
  }
84
 
85
  if (!$this->isExternalDatabase()) {
@@ -134,7 +138,6 @@ class Delete extends Job
134
  /**
135
  * Get clone
136
  * @param null|string $name
137
- * @throws CloneNotFoundException
138
  */
139
  private function getCloneRecords($name = null)
140
  {
@@ -150,8 +153,8 @@ class Delete extends Job
150
  $clones = get_option(Sites::STAGING_SITES_OPTION, []);
151
 
152
  if (empty($clones) || !isset($clones[$name])) {
153
- $this->log("Couldn't find clone name {$name} or no existing clone", Logger::TYPE_FATAL);
154
- $this->returnException("Couldn't find clone name {$name} or no existing clone");
155
  }
156
 
157
  $this->clone = $clones[$name];
@@ -168,12 +171,17 @@ class Delete extends Job
168
  private function getTableRecords()
169
  {
170
 
171
- $stagingPrefix = $this->getStagingPrefix($this->isExternalDatabase(), $this->clone);
172
 
173
  // Escape "_" to allow searching for that character
174
- $prefix = wpstg_replace_last_match('_', '\_', $stagingPrefix);
 
 
 
 
 
 
175
 
176
- $tables = $this->wpdb->get_results("SHOW TABLE STATUS LIKE '{$prefix}%'");
177
 
178
  $this->tables = [];
179
 
@@ -204,7 +212,7 @@ class Delete extends Job
204
  if (empty($this->clone->prefix)) {
205
  $path = ABSPATH . $this->clone->directoryName . "/wp-config.php";
206
  if (($content = @file_get_contents($path)) === false) {
207
- $this->log("Can not open {$path}. Can't read contents", Logger::TYPE_ERROR);
208
  }
209
 
210
  preg_match("/table_prefix\s*=\s*'(\w*)';/", $content, $matches);
@@ -212,7 +220,7 @@ class Delete extends Job
212
  if (!empty($matches[1])) {
213
  $this->clone->prefix = $matches[1];
214
  } else {
215
- $this->returnException("Fatal Error: Can not delete staging site. Can not find Prefix. '{$matches[1]}'. Stopping for security reasons. Creating a new staging site will likely resolve this the next time. Contact support@wp-staging.com");
216
  }
217
  }
218
 
@@ -249,6 +257,8 @@ class Delete extends Job
249
  * Start Module
250
  * @param null|array $clone
251
  * @return boolean
 
 
252
  */
253
  public function start($clone = null)
254
  {
@@ -272,6 +282,7 @@ class Delete extends Job
272
 
273
  /**
274
  * Get job data
 
275
  */
276
  private function getJob()
277
  {
@@ -294,6 +305,7 @@ class Delete extends Job
294
 
295
  /**
296
  * @return bool
 
297
  */
298
  private function updateJob()
299
  {
@@ -328,13 +340,14 @@ class Delete extends Job
328
  /**
329
  * Delete Tables
330
  *
 
331
  * @todo DRY the code by implementing through WPStaging\Framework\Database\TableService::deleteTablesStartWith
332
  */
333
  public function deleteTables()
334
  {
335
 
336
  if ($this->isOverThreshold()) {
337
- $this->log("Deleting: Is over threshold", Logger::TYPE_INFO);
338
  return;
339
  }
340
 
@@ -342,11 +355,11 @@ class Delete extends Job
342
 
343
  foreach ($tables as $table) {
344
  // PROTECTION: Never delete any table that beginns with wp prefix of live site
345
- if (!$this->isExternalDatabase() && (new Strings())->startsWith($table, $this->wpdb->prefix)) {
346
- $this->log("Fatal Error: Trying to delete table {$table} of main WP installation!", Logger::TYPE_CRITICAL);
347
  }
348
 
349
- $this->wpdb->query("DROP TABLE {$table}");
350
  }
351
 
352
  // Move on to the next
@@ -377,7 +390,7 @@ class Delete extends Job
377
  return;
378
  }
379
 
380
- $this->log("Delete staging site: " . $this->clone->path, Logger::TYPE_INFO);
381
 
382
  // Make sure the root dir is never deleted!
383
  if ($this->deleteDir === get_home_path()) {
@@ -453,6 +466,7 @@ class Delete extends Job
453
 
454
  /**
455
  * Finish / Update Existing Clones
 
456
  */
457
  public function deleteFinish()
458
  {
31
  * The path to delete
32
  * @var string
33
  */
34
+ private $deleteDir;
35
 
36
  /**
37
  * @var null|object
46
  /**
47
  * @var bool
48
  */
49
+ //private $forceDeleteDirectories = false;
50
 
51
  /**
52
  *
60
  */
61
  private $isExternalDb;
62
 
63
+ /** @var Strings */
64
+ private $strings;
65
+
66
  public function __construct($isExternal = false)
67
  {
68
  parent::__construct();
 
69
 
70
+ $this->isExternalDb = $isExternal;
71
  $this->deleteDir = !empty($_POST['deleteDir']) ? urldecode($_POST['deleteDir']) : '';
72
+ $this->strings = new Strings();
73
  }
74
 
75
  /**
83
  $this->getCloneRecords();
84
  } else {
85
  $this->clone = (object)$clone;
86
+ //$this->forceDeleteDirectories = true;
87
  }
88
 
89
  if (!$this->isExternalDatabase()) {
138
  /**
139
  * Get clone
140
  * @param null|string $name
 
141
  */
142
  private function getCloneRecords($name = null)
143
  {
153
  $clones = get_option(Sites::STAGING_SITES_OPTION, []);
154
 
155
  if (empty($clones) || !isset($clones[$name])) {
156
+ $this->log("Couldn't find clone name $name or no existing clone", Logger::TYPE_FATAL);
157
+ $this->returnException("Couldn't find clone name $name or no existing clone");
158
  }
159
 
160
  $this->clone = $clones[$name];
171
  private function getTableRecords()
172
  {
173
 
174
+ $stagingPrefix = $this->getStagingPrefix();
175
 
176
  // Escape "_" to allow searching for that character
177
+ $prefix = $this->strings->replaceLastMatch('_', '\_', $stagingPrefix);
178
+
179
+ if ($this->isExternalDatabase()) { // Show all tables if its an external database
180
+ $tables = $this->wpdb->get_results("SHOW TABLE STATUS");
181
+ } else {
182
+ $tables = $this->wpdb->get_results("SHOW TABLE STATUS LIKE '$prefix%'");
183
+ }
184
 
 
185
 
186
  $this->tables = [];
187
 
212
  if (empty($this->clone->prefix)) {
213
  $path = ABSPATH . $this->clone->directoryName . "/wp-config.php";
214
  if (($content = @file_get_contents($path)) === false) {
215
+ $this->log("Can not open $path. Can't read contents", Logger::TYPE_ERROR);
216
  }
217
 
218
  preg_match("/table_prefix\s*=\s*'(\w*)';/", $content, $matches);
220
  if (!empty($matches[1])) {
221
  $this->clone->prefix = $matches[1];
222
  } else {
223
+ $this->returnException("Fatal Error: Can not delete staging site. Can not find Prefix. '$matches[1]'. Stopping for security reasons. Creating a new staging site will likely resolve this the next time. Contact support@wp-staging.com");
224
  }
225
  }
226
 
257
  * Start Module
258
  * @param null|array $clone
259
  * @return boolean
260
+ * @throws CloneNotFoundException
261
+ * @throws Exception
262
  */
263
  public function start($clone = null)
264
  {
282
 
283
  /**
284
  * Get job data
285
+ * @throws Exception
286
  */
287
  private function getJob()
288
  {
305
 
306
  /**
307
  * @return bool
308
+ * @throws Exception
309
  */
310
  private function updateJob()
311
  {
340
  /**
341
  * Delete Tables
342
  *
343
+ * @throws Exception
344
  * @todo DRY the code by implementing through WPStaging\Framework\Database\TableService::deleteTablesStartWith
345
  */
346
  public function deleteTables()
347
  {
348
 
349
  if ($this->isOverThreshold()) {
350
+ $this->log("Deleting: Is over threshold");
351
  return;
352
  }
353
 
355
 
356
  foreach ($tables as $table) {
357
  // PROTECTION: Never delete any table that beginns with wp prefix of live site
358
+ if (!$this->isExternalDatabase() && $this->strings->startsWith($table, $this->wpdb->prefix)) {
359
+ $this->log("Fatal Error: Trying to delete table $table of main WP installation!", Logger::TYPE_CRITICAL);
360
  }
361
 
362
+ $this->wpdb->query("DROP TABLE $table");
363
  }
364
 
365
  // Move on to the next
390
  return;
391
  }
392
 
393
+ $this->log("Delete staging site: " . $this->clone->path);
394
 
395
  // Make sure the root dir is never deleted!
396
  if ($this->deleteDir === get_home_path()) {
466
 
467
  /**
468
  * Finish / Update Existing Clones
469
+ * @throws Exception
470
  */
471
  public function deleteFinish()
472
  {
Backend/Modules/Jobs/Files.php CHANGED
@@ -11,7 +11,6 @@ use WPStaging\Framework\Adapter\Directory;
11
  use WPStaging\Framework\Filesystem\Filesystem;
12
  use WPStaging\Framework\Filesystem\Permissions;
13
  use WPStaging\Framework\Filesystem\WpUploadsFolderSymlinker;
14
- use WPStaging\Framework\Utils\Strings;
15
  use WPStaging\Framework\Utils\WpDefaultDirectories;
16
 
17
  /**
@@ -152,9 +151,8 @@ class Files extends JobExecutable
152
 
153
  // Finished or path does not exist
154
  if (empty($this->destination) || !is_dir($this->destination)) {
155
- if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
156
- error_log('Destination is not a directory: ' . $this->destination);
157
- }
158
  $this->log(sprintf(__('Fail! Destination is not a directory! %s', 'wp-staging'), $this->destination));
159
  return true;
160
  }
11
  use WPStaging\Framework\Filesystem\Filesystem;
12
  use WPStaging\Framework\Filesystem\Permissions;
13
  use WPStaging\Framework\Filesystem\WpUploadsFolderSymlinker;
 
14
  use WPStaging\Framework\Utils\WpDefaultDirectories;
15
 
16
  /**
151
 
152
  // Finished or path does not exist
153
  if (empty($this->destination) || !is_dir($this->destination)) {
154
+ \WPStaging\functions\debug_log('Destination is not a directory: ' . $this->destination);
155
+
 
156
  $this->log(sprintf(__('Fail! Destination is not a directory! %s', 'wp-staging'), $this->destination));
157
  return true;
158
  }
Backend/Modules/Jobs/Finish.php CHANGED
@@ -4,6 +4,9 @@ namespace WPStaging\Backend\Modules\Jobs;
4
 
5
  use WPStaging\Core\WPStaging;
6
  use WPStaging\Core\Utils\Helper;
 
 
 
7
  use WPStaging\Framework\Staging\Sites;
8
 
9
  /**
@@ -49,6 +52,18 @@ class Finish extends Job
49
  "percentage" => 100
50
  ];
51
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  do_action('wpstg_cloning_complete', $this->options);
53
 
54
  return (object) $return;
4
 
5
  use WPStaging\Core\WPStaging;
6
  use WPStaging\Core\Utils\Helper;
7
+ use WPStaging\Framework\Analytics\Actions\AnalyticsStagingCreate;
8
+ use WPStaging\Framework\Analytics\Actions\AnalyticsStagingReset;
9
+ use WPStaging\Framework\Analytics\Actions\AnalyticsStagingUpdate;
10
  use WPStaging\Framework\Staging\Sites;
11
 
12
  /**
52
  "percentage" => 100
53
  ];
54
 
55
+ switch ($this->options->mainJob) {
56
+ case 'cloning':
57
+ WPStaging::make(AnalyticsStagingCreate::class)->enqueueFinishEvent($this->options->jobIdentifier, $this->options);
58
+ break;
59
+ case 'updating':
60
+ WPStaging::make(AnalyticsStagingUpdate::class)->enqueueFinishEvent($this->options->jobIdentifier, $this->options);
61
+ break;
62
+ case 'resetting':
63
+ WPStaging::make(AnalyticsStagingReset::class)->enqueueFinishEvent($this->options->jobIdentifier, $this->options);
64
+ break;
65
+ }
66
+
67
  do_action('wpstg_cloning_complete', $this->options);
68
 
69
  return (object) $return;
Backend/Modules/Jobs/Job.php CHANGED
@@ -112,9 +112,7 @@ abstract class Job implements ShutdownableInterface
112
 
113
  $this->logger->commit();
114
  } else {
115
- if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
116
- error_log('Tried to commit log, but $this->logger was not a logger.');
117
- }
118
  }
119
  }
120
 
@@ -133,6 +131,10 @@ abstract class Job implements ShutdownableInterface
133
  $now = new DateTime();
134
  $options->expiresAt = $now->add(new DateInterval('P1D'))->format('Y-m-d H:i:s');
135
 
 
 
 
 
136
  // Ensure that it is an object
137
  $options = json_decode(json_encode($options));
138
  return $this->cache->save('clone_options', $options);
@@ -293,6 +295,18 @@ abstract class Job implements ShutdownableInterface
293
  return defined('WPSTGPRO_VERSION') && is_multisite();
294
  }
295
 
 
 
 
 
 
 
 
 
 
 
 
 
296
  /**
297
  * Check if external database is used
298
  * @return boolean
112
 
113
  $this->logger->commit();
114
  } else {
115
+ \WPStaging\functions\debug_log('Tried to commit log, but $this->logger was not a logger.');
 
 
116
  }
117
  }
118
 
131
  $now = new DateTime();
132
  $options->expiresAt = $now->add(new DateInterval('P1D'))->format('Y-m-d H:i:s');
133
 
134
+ if (!property_exists($options, 'jobIdentifier')) {
135
+ $options->jobIdentifier = rand(0, 2147483647); // 32 bits int max
136
+ }
137
+
138
  // Ensure that it is an object
139
  $options = json_decode(json_encode($options));
140
  return $this->cache->save('clone_options', $options);
295
  return defined('WPSTGPRO_VERSION') && is_multisite();
296
  }
297
 
298
+ /**
299
+ * @return boolean
300
+ */
301
+ public function isNetworkClone()
302
+ {
303
+ if (!isset($this->options->networkClone)) {
304
+ return false;
305
+ }
306
+
307
+ return $this->isMultisiteAndPro() && $this->options->networkClone;
308
+ }
309
+
310
  /**
311
  * Check if external database is used
312
  * @return boolean
Backend/Modules/Jobs/SearchReplace.php CHANGED
@@ -246,9 +246,9 @@ class SearchReplace extends CloningProcess
246
  * @return array|false Either the primary key and columns structures, or `false` to indicate the query
247
  * failed or the table is not describe-able.
248
  */
249
- protected function get_columns($table)
250
  {
251
- $primary_key = null;
252
  $columns = [];
253
  $fields = $this->stagingDb->get_results('DESCRIBE ' . $table);
254
 
@@ -261,11 +261,12 @@ class SearchReplace extends CloningProcess
261
  foreach ($fields as $column) {
262
  $columns[] = $column->Field;
263
  if ($column->Key === 'PRI') {
264
- $primary_key = $column->Field;
265
  }
266
  }
267
  }
268
- return [$primary_key, $columns];
 
269
  }
270
 
271
  /**
@@ -296,7 +297,7 @@ class SearchReplace extends CloningProcess
296
  $args = apply_filters('wpstg_clone_searchreplace_params', $args);
297
 
298
  // Get columns and primary keys
299
- $primaryKeyAndColumns = $this->get_columns($table);
300
 
301
  if (false === $primaryKeyAndColumns) {
302
  // Stop here: for some reason the table cannot be described or there was an error.
@@ -304,7 +305,7 @@ class SearchReplace extends CloningProcess
304
  return false;
305
  }
306
 
307
- list($primary_key, $columns) = $primaryKeyAndColumns;
308
 
309
  if ($this->options->job->current !== $table) {
310
  $this->logDebug(sprintf('We are using the LIMITS of a table different than the table we are parsing now. Table being parsed: %s. Table that we are using "start" from: %s. Start: %s', $table, $this->options->job->current, $this->options->job->start));
@@ -342,6 +343,7 @@ class SearchReplace extends CloningProcess
342
  $processed = 0;
343
 
344
  /// DEBUG
 
345
  $this->logDebug(
346
  sprintf(
347
  'SearchReplace-beforeRowProcessing: max-memory-limit=%s; script-memory-limit=%s; memory-usage=%s; execution-time-limit=%s; running-time=%s; is-threshold=%s',
@@ -353,6 +355,7 @@ class SearchReplace extends CloningProcess
353
  ($this->isThreshold() ? 'yes' : 'no')
354
  )
355
  );
 
356
  /// DEBUG
357
 
358
  // Go through the table rows
@@ -391,7 +394,7 @@ class SearchReplace extends CloningProcess
391
  }
392
 
393
  // Skip primary key column
394
- if ($column === $primary_key) {
395
  $whereSql[] = $column . ' = "' . wpstg_mysql_escape_mimic($dataRow) . '"';
396
  continue;
397
  }
@@ -518,7 +521,7 @@ class SearchReplace extends CloningProcess
518
  private function isExcludedTable($table)
519
  {
520
 
521
- $tables = $this->excludedTableService->getExcludedTablesForSearchReplace();
522
 
523
  $excludedAllTables = [];
524
  foreach ($tables as $key => $value) {
@@ -609,8 +612,6 @@ class SearchReplace extends CloningProcess
609
 
610
  protected function logDebug($message)
611
  {
612
- if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
613
- error_log($message);
614
- }
615
  }
616
  }
246
  * @return array|false Either the primary key and columns structures, or `false` to indicate the query
247
  * failed or the table is not describe-able.
248
  */
249
+ protected function getColumns($table)
250
  {
251
+ $primaryKeys = [];
252
  $columns = [];
253
  $fields = $this->stagingDb->get_results('DESCRIBE ' . $table);
254
 
261
  foreach ($fields as $column) {
262
  $columns[] = $column->Field;
263
  if ($column->Key === 'PRI') {
264
+ $primaryKeys[] = $column->Field;
265
  }
266
  }
267
  }
268
+
269
+ return [$primaryKeys, $columns];
270
  }
271
 
272
  /**
297
  $args = apply_filters('wpstg_clone_searchreplace_params', $args);
298
 
299
  // Get columns and primary keys
300
+ $primaryKeyAndColumns = $this->getColumns($table);
301
 
302
  if (false === $primaryKeyAndColumns) {
303
  // Stop here: for some reason the table cannot be described or there was an error.
305
  return false;
306
  }
307
 
308
+ list($primaryKeys, $columns) = $primaryKeyAndColumns;
309
 
310
  if ($this->options->job->current !== $table) {
311
  $this->logDebug(sprintf('We are using the LIMITS of a table different than the table we are parsing now. Table being parsed: %s. Table that we are using "start" from: %s. Start: %s', $table, $this->options->job->current, $this->options->job->start));
343
  $processed = 0;
344
 
345
  /// DEBUG
346
+ /*
347
  $this->logDebug(
348
  sprintf(
349
  'SearchReplace-beforeRowProcessing: max-memory-limit=%s; script-memory-limit=%s; memory-usage=%s; execution-time-limit=%s; running-time=%s; is-threshold=%s',
355
  ($this->isThreshold() ? 'yes' : 'no')
356
  )
357
  );
358
+ */
359
  /// DEBUG
360
 
361
  // Go through the table rows
394
  }
395
 
396
  // Skip primary key column
397
+ if (in_array($column, $primaryKeys)) {
398
  $whereSql[] = $column . ' = "' . wpstg_mysql_escape_mimic($dataRow) . '"';
399
  continue;
400
  }
521
  private function isExcludedTable($table)
522
  {
523
 
524
+ $tables = $this->excludedTableService->getExcludedTablesForSearchReplace($this->isNetworkClone());
525
 
526
  $excludedAllTables = [];
527
  foreach ($tables as $key => $value) {
612
 
613
  protected function logDebug($message)
614
  {
615
+ \WPStaging\functions\debug_log($message, 'debug');
 
 
616
  }
617
  }
Backend/Modules/SystemInfo.php CHANGED
@@ -2,13 +2,12 @@
2
 
3
  namespace WPStaging\Backend\Modules;
4
 
5
- use WPStaging\Core\DI\InjectionAware;
6
  use WPStaging\Core\Utils\Browser;
7
  use WPStaging\Core\WPStaging;
8
  use WPStaging\Core\Utils;
9
  use WPStaging\Core\Utils\Multisite;
10
- use WPStaging\Core\Utils\Helper;
11
  use WPStaging\Framework\Staging\Sites;
 
12
 
13
  // No Direct Access
14
  if (!defined("WPINC")) {
@@ -29,7 +28,7 @@ class SystemInfo
29
 
30
  /**
31
  *
32
- * @var obj
33
  */
34
  private $helper;
35
 
@@ -145,7 +144,7 @@ class SystemInfo
145
 
146
  $multisite = new Multisite();
147
 
148
- $output = $this->info("Multisite:", ($this->isMultiSite ? "Yes" : "No"));
149
  $output .= $this->info("Multisite Blog ID:", get_current_blog_id());
150
  $output .= $this->info("MultiSite URL:", $multisite->getHomeURL());
151
  $output .= $this->info("MultiSite URL without scheme:", $multisite->getHomeUrlWithoutScheme());
@@ -163,14 +162,6 @@ class SystemInfo
163
  // Get wpstg settings
164
  $settings = (object)get_option('wpstg_settings', []);
165
 
166
- // Clones data < 1.1.6.x
167
- $clones = (object)get_option('wpstg_existing_clones', []);
168
- // Clones data version > 2.x
169
- // old name wpstg_existing_clones_beta
170
- // New name since version 4.0.3
171
- $stagingSites = get_option(Sites::STAGING_SITES_OPTION, []);
172
-
173
-
174
  $output = "-- WP Staging Settings" . PHP_EOL . PHP_EOL;
175
  $output .= $this->info("Query Limit:", isset($settings->queryLimit) ? $settings->queryLimit : 'undefined');
176
  $output .= $this->info("DB Search & Replace Limit:", isset($settings->querySRLimit) ? $settings->querySRLimit : 'undefined');
@@ -179,13 +170,19 @@ class SystemInfo
179
  $output .= $this->info("CPU Load:", isset($settings->cpuLoad) ? $settings->cpuLoad : 'undefined');
180
  $output .= $this->info("WP in Subdir:", $this->isSubDir() ? 'true' : 'false');
181
 
182
- $output .= PHP_EOL . PHP_EOL . "-- Available Sites Version < 1.1.6.x" . PHP_EOL . PHP_EOL;
183
 
 
 
184
  foreach ($clones as $key => $value) {
185
  $output .= $this->info("Site name & subfolder :", $value);
186
  }
187
- $output .= PHP_EOL . PHP_EOL . "-- Available Sites Version > 2.0.x" . PHP_EOL . PHP_EOL;
188
 
 
 
 
 
189
  foreach ($stagingSites as $key => $clone) {
190
  $path = !empty($clone['path']) ? $clone['path'] : 'undefined';
191
 
@@ -199,13 +196,15 @@ class SystemInfo
199
  $output .= $this->info("WP Version:", $this->getStagingWpVersion($path)) . PHP_EOL . PHP_EOL;
200
  }
201
 
 
 
202
 
203
- $output .= $this->info("Raw Clones Data:", json_encode(get_option(Sites::STAGING_SITES_OPTION, 'undefined')));
204
-
205
  $output .= '' . PHP_EOL;
206
 
 
 
207
 
208
- //$output .= PHP_EOL . PHP_EOL;
209
 
210
  $output .= $this->info("Plugin Pro Version:", get_option('wpstgpro_version', 'undefined'));
211
  $output .= $this->info("Plugin Pro License Key:", get_option('wpstg_license_key'));
@@ -213,7 +212,7 @@ class SystemInfo
213
  $output .= $this->info("Install Date:", get_option('wpstg_installDate', 'undefined'));
214
  $output .= $this->info("Upgraded from Pro:", get_option('wpstgpro_version_upgraded_from', 'undefined'));
215
  $output .= $this->info("Upgraded from Free:", get_option('wpstg_version_upgraded_from', 'undefined'));
216
- $output .= $this->info("Is Staging Site:", wpstg_is_stagingsite() ? 'true' : 'false') . PHP_EOL . PHP_EOL;
217
 
218
 
219
  return apply_filters("wpstg_sysinfo_after_wpstaging_info", $output);
@@ -294,8 +293,7 @@ class SystemInfo
294
  $output .= $this->info("Language:", (defined("WPLANG") && WPLANG) ? WPLANG : "en_US");
295
 
296
  $permalinkStructure = get_option("permalink_structure");
297
- ;
298
- $output .= $this->info("Permalink Structure:", ($permalinkStructure) ? $permalinkStructure : "Default");
299
 
300
  $output .= $this->info("Active Theme:", $this->theme());
301
  $output .= $this->info("Show On Front:", get_option("show_on_front"));
@@ -478,8 +476,7 @@ class SystemInfo
478
  }
479
 
480
  if (function_exists('exec') && @exec('echo EXEC') == 'EXEC') {
481
- $user = exec('whoami');
482
- return $user;
483
  }
484
 
485
  return $user;
@@ -586,7 +583,7 @@ class SystemInfo
586
  /**
587
  * Try to get the staging prefix from wp-config.php of staging site
588
  * @param array $clone
589
- * @return sting
590
  */
591
  private function getStagingPrefix($clone = [])
592
  {
2
 
3
  namespace WPStaging\Backend\Modules;
4
 
 
5
  use WPStaging\Core\Utils\Browser;
6
  use WPStaging\Core\WPStaging;
7
  use WPStaging\Core\Utils;
8
  use WPStaging\Core\Utils\Multisite;
 
9
  use WPStaging\Framework\Staging\Sites;
10
+ use WPStaging\Framework\SiteInfo;
11
 
12
  // No Direct Access
13
  if (!defined("WPINC")) {
28
 
29
  /**
30
  *
31
+ * @var object
32
  */
33
  private $helper;
34
 
144
 
145
  $multisite = new Multisite();
146
 
147
+ $output = $this->info("Multisite:", "Yes");
148
  $output .= $this->info("Multisite Blog ID:", get_current_blog_id());
149
  $output .= $this->info("MultiSite URL:", $multisite->getHomeURL());
150
  $output .= $this->info("MultiSite URL without scheme:", $multisite->getHomeUrlWithoutScheme());
162
  // Get wpstg settings
163
  $settings = (object)get_option('wpstg_settings', []);
164
 
 
 
 
 
 
 
 
 
165
  $output = "-- WP Staging Settings" . PHP_EOL . PHP_EOL;
166
  $output .= $this->info("Query Limit:", isset($settings->queryLimit) ? $settings->queryLimit : 'undefined');
167
  $output .= $this->info("DB Search & Replace Limit:", isset($settings->querySRLimit) ? $settings->querySRLimit : 'undefined');
170
  $output .= $this->info("CPU Load:", isset($settings->cpuLoad) ? $settings->cpuLoad : 'undefined');
171
  $output .= $this->info("WP in Subdir:", $this->isSubDir() ? 'true' : 'false');
172
 
173
+ $output .= PHP_EOL . PHP_EOL . "-- Available Sites. Version < 1.1.6.x" . PHP_EOL . PHP_EOL;
174
 
175
+ // Clones data < 1.1.6.x
176
+ $clones = (object)get_option('wpstg_existing_clones', []);
177
  foreach ($clones as $key => $value) {
178
  $output .= $this->info("Site name & subfolder :", $value);
179
  }
180
+ $output .= PHP_EOL . PHP_EOL . "-- Available Sites. Version > 2.0.x" . PHP_EOL . PHP_EOL;
181
 
182
+ // Clones data version > 2.x
183
+ // old name wpstg_existing_clones_beta
184
+ // New name since version 4.0.3 wpstg_staging_sites
185
+ $stagingSites = get_option(Sites::STAGING_SITES_OPTION, []);
186
  foreach ($stagingSites as $key => $clone) {
187
  $path = !empty($clone['path']) ? $clone['path'] : 'undefined';
188
 
196
  $output .= $this->info("WP Version:", $this->getStagingWpVersion($path)) . PHP_EOL . PHP_EOL;
197
  }
198
 
199
+ $output .= $this->info(Sites::STAGING_SITES_OPTION . ": ", serialize(get_option(Sites::STAGING_SITES_OPTION, [])));
200
+ $output .= '' . PHP_EOL;
201
 
202
+ $output .= $this->info(Sites::OLD_STAGING_SITES_OPTION . ": ", serialize(get_option(Sites::OLD_STAGING_SITES_OPTION, [])));
 
203
  $output .= '' . PHP_EOL;
204
 
205
+ $output .= $this->info(Sites::BACKUP_STAGING_SITES_OPTION . ": ", serialize(get_option(Sites::BACKUP_STAGING_SITES_OPTION, [])));
206
+ $output .= '' . PHP_EOL;
207
 
 
208
 
209
  $output .= $this->info("Plugin Pro Version:", get_option('wpstgpro_version', 'undefined'));
210
  $output .= $this->info("Plugin Pro License Key:", get_option('wpstg_license_key'));
212
  $output .= $this->info("Install Date:", get_option('wpstg_installDate', 'undefined'));
213
  $output .= $this->info("Upgraded from Pro:", get_option('wpstgpro_version_upgraded_from', 'undefined'));
214
  $output .= $this->info("Upgraded from Free:", get_option('wpstg_version_upgraded_from', 'undefined'));
215
+ $output .= $this->info("Is Staging Site:", (new SiteInfo())->isStagingSite() ? 'true' : 'false') . PHP_EOL . PHP_EOL;
216
 
217
 
218
  return apply_filters("wpstg_sysinfo_after_wpstaging_info", $output);
293
  $output .= $this->info("Language:", (defined("WPLANG") && WPLANG) ? WPLANG : "en_US");
294
 
295
  $permalinkStructure = get_option("permalink_structure");
296
+ $output .= $this->info("Permalink Structure:", ($permalinkStructure) ?: "Default");
 
297
 
298
  $output .= $this->info("Active Theme:", $this->theme());
299
  $output .= $this->info("Show On Front:", get_option("show_on_front"));
476
  }
477
 
478
  if (function_exists('exec') && @exec('echo EXEC') == 'EXEC') {
479
+ return exec('whoami');
 
480
  }
481
 
482
  return $user;
583
  /**
584
  * Try to get the staging prefix from wp-config.php of staging site
585
  * @param array $clone
586
+ * @return string
587
  */
588
  private function getStagingPrefix($clone = [])
589
  {
Backend/Notices/DisabledItemsNotice.php CHANGED
@@ -18,6 +18,13 @@ class DisabledItemsNotice extends BooleanNotice
18
  */
19
  const OPTION_NAME = 'wpstg_disabled_notice';
20
 
 
 
 
 
 
 
 
21
  public function getOptionName()
22
  {
23
  return self::OPTION_NAME;
@@ -30,9 +37,8 @@ class DisabledItemsNotice extends BooleanNotice
30
  */
31
  public function isEnabled()
32
  {
33
- // TODO: inject using DI
34
  // Early bail if not staging site
35
- if (!(new SiteInfo())->isStaging()) {
36
  return false;
37
  }
38
 
18
  */
19
  const OPTION_NAME = 'wpstg_disabled_notice';
20
 
21
+ private $siteInfo;
22
+
23
+ public function __construct(SiteInfo $siteInfo)
24
+ {
25
+ $this->siteInfo = $siteInfo;
26
+ }
27
+
28
  public function getOptionName()
29
  {
30
  return self::OPTION_NAME;
37
  */
38
  public function isEnabled()
39
  {
 
40
  // Early bail if not staging site
41
+ if (!$this->siteInfo->isStagingSite()) {
42
  return false;
43
  }
44
 
Backend/Notices/Notices.php CHANGED
@@ -158,8 +158,10 @@ class Notices
158
  $proNotices->getNotices();
159
  }
160
 
 
 
161
  // Show notice about what disabled in the staging site. (Show only on staging site)
162
- if (self::SHOW_ALL_NOTICES || ((new DisabledItemsNotice())->isEnabled())) {
163
  $excludedPlugins = (array)(new ExcludedPlugins())->getExcludedPlugins();
164
  // Show freemius notice if freemius options were deleted during cloning.
165
  $freemiusOptionsCleared = (new FreemiusScript())->isNoticeEnabled();
@@ -178,6 +180,13 @@ class Notices
178
  /** @var WordFence */
179
  WPStaging::make(WordFence::class)->showNotice($viewsNoticesPath);
180
 
 
 
 
 
 
 
 
181
  /**
182
  * Display all notices below this line in WP STAGING admin pages only and only to administrators!
183
  */
158
  $proNotices->getNotices();
159
  }
160
 
161
+ /** @var DisabledItemsNotice */
162
+ $disabledItemNotice = WPStaging::make(DisabledItemsNotice::class);
163
  // Show notice about what disabled in the staging site. (Show only on staging site)
164
+ if (self::SHOW_ALL_NOTICES || $disabledItemNotice->isEnabled()) {
165
  $excludedPlugins = (array)(new ExcludedPlugins())->getExcludedPlugins();
166
  // Show freemius notice if freemius options were deleted during cloning.
167
  $freemiusOptionsCleared = (new FreemiusScript())->isNoticeEnabled();
180
  /** @var WordFence */
181
  WPStaging::make(WordFence::class)->showNotice($viewsNoticesPath);
182
 
183
+ // Single dismissable notice to show all warning on staging sites
184
+ /** @var WarningsNotice */
185
+ $warningsNotice = WPStaging::make(WarningsNotice::class);
186
+ if ($warningsNotice->isEnabled()) {
187
+ require "{$viewsNoticesPath}warnings-notice.php";
188
+ }
189
+
190
  /**
191
  * Display all notices below this line in WP STAGING admin pages only and only to administrators!
192
  */
Backend/Notices/OutdatedWpStagingNotice.php CHANGED
@@ -7,7 +7,7 @@ use WPStaging\Core\WPStaging;
7
  /**
8
  * Class OutdatedWpStagingNotice
9
  *
10
- * Show a notification if installed WP STAGING free version is outdated and if there is a new plugin update available
11
  * @see \WPStaging\Backend\Notices\Notices
12
  */
13
  class OutdatedWpStagingNotice
@@ -24,7 +24,7 @@ class OutdatedWpStagingNotice
24
 
25
  public function showNotice($viewsNoticesPath)
26
  {
27
- // Early bail if PRO version and not an outdated version
28
  if (!Notices::SHOW_ALL_NOTICES && (WPStaging::isPro() || !$this->isOutdatedWpStagingVersion())) {
29
  return;
30
  }
@@ -56,6 +56,28 @@ class OutdatedWpStagingNotice
56
  return $this->latestWpstgVersion;
57
  }
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  /**
60
  * @param string $slug
61
  * @return null|string
@@ -63,6 +85,10 @@ class OutdatedWpStagingNotice
63
  private function getNewestVersionToUpdateBySlug($slug)
64
  {
65
  $plugins = get_site_transient('update_plugins');
 
 
 
 
66
  $plugins = $plugins->response;
67
  foreach ($plugins as $plugin) {
68
  if ($plugin->slug === $slug) {
@@ -75,7 +101,7 @@ class OutdatedWpStagingNotice
75
 
76
  private function isOutdatedWpStagingVersion()
77
  {
78
- // If latest version is not available that mean to update
79
  if ($this->getLatestWpstgVersion() === null) {
80
  return false;
81
  }
7
  /**
8
  * Class OutdatedWpStagingNotice
9
  *
10
+ * Show a notification if installed WP STAGING free or pro version is outdated and if there is a new plugin update available
11
  * @see \WPStaging\Backend\Notices\Notices
12
  */
13
  class OutdatedWpStagingNotice
24
 
25
  public function showNotice($viewsNoticesPath)
26
  {
27
+ // Early bail if it's PRO version and not an outdated version
28
  if (!Notices::SHOW_ALL_NOTICES && (WPStaging::isPro() || !$this->isOutdatedWpStagingVersion())) {
29
  return;
30
  }
56
  return $this->latestWpstgVersion;
57
  }
58
 
59
+ /**
60
+ * @return boolean
61
+ */
62
+ public function isOutdatedWpStagingProVersion()
63
+ {
64
+ // If latest pro version is not available there is no need to update
65
+ if ($this->getLatestWpstgProVersion() === null) {
66
+ return false;
67
+ }
68
+
69
+ return version_compare($this->getLatestWpstgProVersion(), $this->getCurrentWpstgVersion(), '>=') ? true : false;
70
+ }
71
+
72
+ /**
73
+ * Get the latest available WP STAGING PRO version
74
+ * @return string
75
+ */
76
+ public function getLatestWpstgProVersion()
77
+ {
78
+ return $this->getNewestVersionToUpdateBySlug('wp-staging-pro');
79
+ }
80
+
81
  /**
82
  * @param string $slug
83
  * @return null|string
85
  private function getNewestVersionToUpdateBySlug($slug)
86
  {
87
  $plugins = get_site_transient('update_plugins');
88
+ if (!is_object($plugins)) {
89
+ return null;
90
+ }
91
+
92
  $plugins = $plugins->response;
93
  foreach ($plugins as $plugin) {
94
  if ($plugin->slug === $slug) {
101
 
102
  private function isOutdatedWpStagingVersion()
103
  {
104
+ // If latest version is not available there is no need to update
105
  if ($this->getLatestWpstgVersion() === null) {
106
  return false;
107
  }
Backend/Notices/WarningsNotice.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Backend\Notices;
4
+
5
+ use WPStaging\Framework\SiteInfo;
6
+
7
+ /**
8
+ * Class WarningsNotice
9
+ *
10
+ * Single Dismissable Notice for showing all warnings on staging sites
11
+ *
12
+ * This notice is disabled for the moment as it was annoying to so many wp staging notices.
13
+ * @see \WPStaging\Backend\Notices\Notices
14
+ */
15
+ class WarningsNotice extends BooleanNotice
16
+ {
17
+ const OPTION_NAME = 'wpstg_warnings_notice';
18
+
19
+ private $siteInfo;
20
+
21
+ public function __construct(SiteInfo $siteInfo)
22
+ {
23
+ $this->siteInfo = $siteInfo;
24
+ }
25
+
26
+ public function getOptionName()
27
+ {
28
+ return self::OPTION_NAME;
29
+ }
30
+
31
+ /**
32
+ * This warning notice should be shown only on the staging site
33
+ *
34
+ * @return bool
35
+ */
36
+ public function isEnabled()
37
+ {
38
+ // Early bail if not staging site
39
+ if (!$this->siteInfo->isStagingSite()) {
40
+ return false;
41
+ }
42
+
43
+ return parent::isEnabled();
44
+ }
45
+ }
Backend/Optimizer/wp-staging-optimizer.php CHANGED
@@ -319,7 +319,7 @@ LOG_ENTRY;
319
  }
320
  } else {
321
  if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
322
- error_log("WPSTAGING: Could not override the wp_mail() function to disable e-mails on staging site, as it was already defined before the optimizer mu-plugin was loaded.");
323
  }
324
  }
325
  }
319
  }
320
  } else {
321
  if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
322
+ error_log("WP STAGING: Could not override the wp_mail() function to disable e-mails on staging site, as it was already defined before the optimizer mu-plugin was loaded.");
323
  }
324
  }
325
  }
Backend/Pluginmeta/Pluginmeta.php CHANGED
@@ -36,15 +36,13 @@ class Pluginmeta
36
  /**
37
  * Plugins row action links
38
  *
39
- * @author Michael Cannon <mc@aihr.us>
40
- * @since 0.9.0
41
  * @param array $links already defined action links
42
  * @param string $file plugin file path and name being processed
43
  * @return array $links
44
  */
45
  public function actionLinks($links, $file)
46
  {
47
- $upgrade_link = '<a style="color: #27ae60;" target="_blank" href="' . self::UPGRADE_LINK . '">' . esc_html__('Premium Upgrade', 'wp-staging') . '</a>';
48
  $freePlugins = [
49
  'wp-staging/wp-staging.php',
50
  'wp-staging-1/wp-staging.php'
36
  /**
37
  * Plugins row action links
38
  *
 
 
39
  * @param array $links already defined action links
40
  * @param string $file plugin file path and name being processed
41
  * @return array $links
42
  */
43
  public function actionLinks($links, $file)
44
  {
45
+ $upgrade_link = '<a style="color: #27ae60;" target="_blank" href="' . self::UPGRADE_LINK . '">' . esc_html__('Upgrade to Premium', 'wp-staging') . '</a>';
46
  $freePlugins = [
47
  'wp-staging/wp-staging.php',
48
  'wp-staging-1/wp-staging.php'
Backend/Upgrade/Upgrade.php CHANGED
@@ -74,9 +74,8 @@ class Upgrade
74
  */
75
  private function upgrade2_8_7()
76
  {
77
- if (version_compare($this->previousVersion, '2.8.7', '<')) {
78
- (new Sites())->upgradeStagingSitesOption();
79
- }
80
  }
81
 
82
  /**
74
  */
75
  private function upgrade2_8_7()
76
  {
77
+ $this->stagingSitesHelper->addMissingCloneNameUpgradeStructure();
78
+ $this->stagingSitesHelper->upgradeStagingSitesOption();
 
79
  }
80
 
81
  /**
Backend/views/_main/header.php CHANGED
@@ -18,7 +18,9 @@
18
  $display = 'none;';
19
 
20
  if (defined('WPSTGPRO_VERSION')) {
21
- if (!empty($latestReleasedVersion) && version_compare(WPStaging\Core\WPStaging::getVersion(), $latestReleasedVersion, '<')) {
 
 
22
  $display = 'block;';
23
  }
24
  }
@@ -31,4 +33,4 @@
31
 
32
  <?php } ?>
33
 
34
- </div>
18
  $display = 'none;';
19
 
20
  if (defined('WPSTGPRO_VERSION')) {
21
+ $outdatedVersionCheck = new WPStaging\Backend\Notices\OutdatedWpStagingNotice();
22
+ $latestReleasedVersion = $outdatedVersionCheck->getLatestWpstgProVersion();
23
+ if ($outdatedVersionCheck->isOutdatedWpStagingProVersion()) {
24
  $display = 'block;';
25
  }
26
  }
33
 
34
  <?php } ?>
35
 
36
+ </div>
Backend/views/clone/ajax/delete-confirmation.php CHANGED
@@ -1,4 +1,15 @@
1
- <?php if ($isDatabaseConnected) { ?>
 
 
 
 
 
 
 
 
 
 
 
2
  <div class="wpstg-notice-alert">
3
  <h3 class="wpstg-m-0 wpstg-pb-5px">
4
  <?php
@@ -48,7 +59,7 @@
48
  <!-- Database -->
49
  <div class="wpstg-tab-section" id="wpstg-scanning-db">
50
  <h4 class="wpstg-m-0">
51
- <?php _e("Unselect all database tables you do not want to delete:", "wp-staging")?>
52
  </h4>
53
  <div class="wpstg-my-6px">
54
  <a href="#" class="wpstg-button-unselect">
@@ -59,7 +70,8 @@
59
  <?php foreach ($delete->getTables() as $table) :?>
60
  <div class="wpstg-db-table">
61
  <label>
62
- <input class="wpstg-db-table-checkboxes" type="checkbox" name="<?php echo $table->name?>" checked>
 
63
  <?php echo $table->name?>
64
  </label>
65
  <span class="wpstg-size-info">
1
+ <?php
2
+
3
+ /**
4
+ * @see \WPStaging\Backend\Administrator::ajaxDeleteConfirmation()
5
+ * @var object $delete
6
+ * @var string $dbname
7
+ * @var object $clone
8
+ * @var bool $isDatabaseConnected
9
+ *
10
+ */
11
+
12
+ if ($isDatabaseConnected) { ?>
13
  <div class="wpstg-notice-alert">
14
  <h3 class="wpstg-m-0 wpstg-pb-5px">
15
  <?php
59
  <!-- Database -->
60
  <div class="wpstg-tab-section" id="wpstg-scanning-db">
61
  <h4 class="wpstg-m-0">
62
+ <?php _e("Select all database tables you want to delete:", "wp-staging")?>
63
  </h4>
64
  <div class="wpstg-my-6px">
65
  <a href="#" class="wpstg-button-unselect">
70
  <?php foreach ($delete->getTables() as $table) :?>
71
  <div class="wpstg-db-table">
72
  <label>
73
+ <?php $checkedProperty = (strpos($table->name, $clone->prefix) === 0) ? 'checked' : ''; ?>
74
+ <input class="wpstg-db-table-checkboxes" type="checkbox" name="<?php echo $table->name?>" <?php echo $checkedProperty ?>>
75
  <?php echo $table->name?>
76
  </label>
77
  <span class="wpstg-size-info">
Backend/views/clone/ajax/scan.php CHANGED
@@ -34,6 +34,17 @@ $isPro = defined('WPSTGPRO_VERSION');
34
  </span>
35
 
36
  <div class="wpstg-tabs-wrapper">
 
 
 
 
 
 
 
 
 
 
 
37
  <a href="#" class="wpstg-tab-header active" data-id="#wpstg-scanning-db">
38
  <span class="wpstg-tab-triangle"></span>
39
  <?php echo __("Database Tables", "wp-staging") ?>
34
  </span>
35
 
36
  <div class="wpstg-tabs-wrapper">
37
+ <?php if ($isPro && is_multisite() && is_main_site()) : ?>
38
+ <a href="#" class="wpstg-tab-header active expand" data-id="#wpstg-network-options">
39
+ <span class="wpstg-tab-triangle wpstg-rotate-90"></span>
40
+ <?php echo __("Network Options", "wp-staging") ?>
41
+ </a>
42
+
43
+ <fieldset class="wpstg-tab-section" id="wpstg-network-options" style="display: block;">
44
+ <?php require(WPSTG_PLUGIN_DIR . 'Backend/Pro/views/clone/ajax/network-options.php'); ?>
45
+ </fieldset>
46
+ <?php endif; ?>
47
+
48
  <a href="#" class="wpstg-tab-header active" data-id="#wpstg-scanning-db">
49
  <span class="wpstg-tab-triangle"></span>
50
  <?php echo __("Database Tables", "wp-staging") ?>
Backend/views/clone/ajax/single-overview.php CHANGED
@@ -62,7 +62,7 @@
62
  $prefix = ! empty($data['prefix']) ? $data['prefix'] : '';
63
  $cloneDir = ! empty($data['path']) ? $data['path'] : '';
64
  $url = ! empty($data['url']) ? sprintf('<a href="%1$s" target="_blank">%1$s</a>', $data['url']) : '';
65
- $datetime = ! empty($data['datetime']) ? date("D, d M Y H:i:s T", $data['datetime']) : '&nbsp;&nbsp;&nbsp;';
66
  $owner = ! empty($data['ownerId']) ? get_userdata($data['ownerId']) : null;
67
  $ownerName = ! empty($owner->user_login) ? $owner->user_login : 'N/A';
68
  $statusTooltip = "This clone is incomplete and does not work. Clone or update it again! \n\n" .
62
  $prefix = ! empty($data['prefix']) ? $data['prefix'] : '';
63
  $cloneDir = ! empty($data['path']) ? $data['path'] : '';
64
  $url = ! empty($data['url']) ? sprintf('<a href="%1$s" target="_blank">%1$s</a>', $data['url']) : '';
65
+ $datetime = ! empty($data['datetime']) ? get_date_from_gmt(date("Y-m-d H:i:s", $data['datetime']), "D, d M Y H:i:s T") : '&nbsp;&nbsp;&nbsp;';
66
  $owner = ! empty($data['ownerId']) ? get_userdata($data['ownerId']) : null;
67
  $ownerName = ! empty($owner->user_login) ? $owner->user_login : 'N/A';
68
  $statusTooltip = "This clone is incomplete and does not work. Clone or update it again! \n\n" .
Backend/views/clone/ajax/start.php CHANGED
@@ -49,7 +49,7 @@
49
  <?php echo __("BACK", "wp-staging")?>
50
  </a>
51
  <a href="<?php echo $url; ?>" id="wpstg-clone-url" target="_blank" class="wpstg-link-btn wpstg-blue-primary">
52
- <?php _e('Open Staging Site', 'wp-staging') ?><span style="wpstg-fs-10px"><?php _e('(Login with your admin credentials)', 'wp-staging') ?></span>
53
  </a>
54
  <div id="wpstg-success-notice">
55
  <h3>
49
  <?php echo __("BACK", "wp-staging")?>
50
  </a>
51
  <a href="<?php echo $url; ?>" id="wpstg-clone-url" target="_blank" class="wpstg-link-btn wpstg-blue-primary">
52
+ <?php _e('Open Staging Site', 'wp-staging') ?>
53
  </a>
54
  <div id="wpstg-success-notice">
55
  <h3>
Backend/views/clone/index.php CHANGED
@@ -36,7 +36,7 @@
36
  <?php _e('Backup & Migration', 'wp-staging') ?>
37
  </a>
38
  </li>
39
- <li>
40
  <span class="wpstg-loader"></span>
41
  </li>
42
  </ul>
36
  <?php _e('Backup & Migration', 'wp-staging') ?>
37
  </a>
38
  </li>
39
+ <li class="wpstg-tab-item--vert-center">
40
  <span class="wpstg-loader"></span>
41
  </li>
42
  </ul>
Backend/views/notices/analytics-consent-failed.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var \WPStaging\Framework\Analytics\AnalyticsConsent $this
4
+ */
5
+
6
+ ?>
7
+ <div class="notice notice-warning">
8
+ <p><strong><?php echo esc_html__('WP STAGING - Communication with WP STAGING server failed', 'wp-staging') ?></strong></p>
9
+ <p><?php echo esc_html__('We could not reach WP STAGING servers, so the usage information has been disabled automatically.', 'wp-staging') ?></p>
10
+ <p><?php echo esc_html__('No action is necessary on your part. You can always re-enable WP STAGING usage information sending in the Settings.', 'wp-staging') ?></p>
11
+ <p><?php echo esc_html__('This can be caused by a firewall, WordPress blocking external requests, a security plugin, or WP STAGING servers might be down.', 'wp-staging') ?></p>
12
+ </div>
Backend/views/notices/analytics-consent-refused.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <div class="notice notice-warning is-dismissible">
2
+ <p><strong><?php echo esc_html__('WP STAGING', 'wp-staging') ?></strong></p>
3
+ <p><?php echo wp_kses_post(__(sprintf('WP STAGING will not send usage information about how you use the plugin. If you want an improved technical support experience, you can always re-enable this on <a href="%s">WP STAGING Settings</a> page.', esc_url(admin_url('admin.php?page=wpstg-settings'))), 'wp-staging')) ?></p>
4
+ <p><?php echo esc_html__('Usage information allows us to provide a better support, as we can debug your issue faster when you reach out to our support.', 'wp-staging') ?></p>
5
+ </div>
Backend/views/notices/analytics-consent.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var \WPStaging\Framework\Analytics\AnalyticsConsent $this
4
+ */
5
+ ?>
6
+ <div class="notice notice-info">
7
+ <p><strong><?php echo esc_html__('Want to Improve WP STAGING?', 'wp-staging') ?></strong></p>
8
+ <p>
9
+ <?php echo esc_html__('Do you allow us sending some non-personal usage information to wp-staging.com? All data will be sent 100% encrypted. You can always disable this in the settings.', 'wp-staging') ?>
10
+ </p>
11
+ <?php echo esc_html__('We don’t collect any personal user information like your mail address or name and will not send you any marketing mails!', 'wp-staging') ?>
12
+ <p>
13
+ <a href="<?php echo esc_url($this->getConsentLink(true)) ?>" class="button-primary"><?php echo esc_html__('Yes, help us by sending usage information', 'wp-staging') ?></a>
14
+ <a href="<?php echo esc_url($this->getConsentLink(false)) ?>" class="button-cancel"><?php echo esc_html__('No, don\'t send any information', 'wp-staging') ?></a>
15
+ <a href="<?php echo esc_url($this->getRemindMeLaterConsentLink()) ?>" class="button-cancel"><?php echo esc_html__('Ask me later', 'wp-staging') ?></a>
16
+ </p>
17
+ <p><?php echo wp_kses_post(__(sprintf('<i>See the data we collect <a href="%s" target="_blank">here</a></i>', 'https://wp-staging.com/what-data-do-we-collect/')), 'wp-staging') ?></p>
18
+ </div>
Backend/views/notices/warnings-notice.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @var $this \WPStaging\Backend\Notices\Notices
5
+ * @var $viewsNoticesPath
6
+ * @see \WPStaging\Backend\Notices\Notices::messages
7
+ */
8
+
9
+ use WPStaging\Backend\Notices\Notices;
10
+
11
+ ?>
12
+ <div class="notice notice-warning wpstg-warning-notice">
13
+ <p><strong><?php _e('WP STAGING:', 'wp-staging'); ?></strong></p>
14
+ <p>
15
+ <?php _e('Renaming the folder <code>wp-content</code> or the <code>uploads</code> path can lead to missing images after the push process. If not absolutely necessary don\'t rename the default WordPress folders.', 'wp-staging') ?>
16
+ </p>
17
+ <p>
18
+ <?php Notices::renderNoticeDismissAction(
19
+ $viewsNoticesPath,
20
+ 'warnings_notice',
21
+ '.wpstg_dismiss_warning_notice',
22
+ '.wpstg-warning-notice'
23
+ ) ?>
24
+ </p>
25
+ </div>
Backend/views/settings/tabs/general.php CHANGED
@@ -402,6 +402,32 @@
402
  echo $form->render("wpstg_settings[adminBarColor]") ?>
403
  </td>
404
  </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
405
  <?php
406
  }
407
  ?>
@@ -411,7 +437,7 @@
411
  <?php
412
  endforeach;
413
  // show this option only on the staging site
414
- if ($this->siteInfo->isStaging()) :
415
  ?>
416
  <div class="wpstg-settings-row">
417
  <b class="wpstg-settings-title"><?php _e('Allow Cloning (Staging Site Only)', 'wp-staging') ?></b>
@@ -432,4 +458,4 @@
432
  unset($tabs);
433
  ?>
434
  </form>
435
- </div>
402
  echo $form->render("wpstg_settings[adminBarColor]") ?>
403
  </td>
404
  </tr>
405
+ <tr class="row">
406
+ <td class="row th">
407
+ <div class="col-title">
408
+ <strong><?php echo __('Usage Information', 'wp-staging') ?></strong>
409
+ <span class="description">
410
+ <?php
411
+ _e(
412
+ 'Allow WP STAGING to send usage information to wp-staging.com.</strong>',
413
+ 'wp-staging'
414
+ ); ?>
415
+ </span>
416
+ </div>
417
+ </td>
418
+ <td>
419
+ <?php
420
+ $analytics = WPStaging\Core\WPStaging::make(\WPStaging\Framework\Analytics\AnalyticsConsent::class);
421
+ $analyticsAllowed = $analytics->hasUserConsent();
422
+ $isAllowed = $analyticsAllowed;
423
+ $isDisallowed = !$analyticsAllowed && !is_null($analyticsAllowed); // "null" means didn't answer, "false" means declined
424
+ ?>
425
+ <div style="font-weight:<?php echo $isAllowed ? 'bold' : ''; ?>"><a href="<?php echo esc_url($analytics->getConsentLink(true)) ?>"><?php echo esc_html__('Yes, send usage information. I\'d like to help improving this plugin.', 'wp-staging') ?></a></div>
426
+ <div style="margin-top:10px;font-weight:<?php echo $isDisallowed ? 'bold' : ''; ?>"><a href="<?php echo esc_url($analytics->getConsentLink(false)) ?>"><?php echo esc_html__('No, Don\'t send any usage information.', 'wp-staging') ?></a></div>
427
+ <?php
428
+ ?>
429
+ </td>
430
+ </tr>
431
  <?php
432
  }
433
  ?>
437
  <?php
438
  endforeach;
439
  // show this option only on the staging site
440
+ if ($this->siteInfo->isStagingSite()) :
441
  ?>
442
  <div class="wpstg-settings-row">
443
  <b class="wpstg-settings-title"><?php _e('Allow Cloning (Staging Site Only)', 'wp-staging') ?></b>
458
  unset($tabs);
459
  ?>
460
  </form>
461
+ </div>
Backend/views/tools/tabs/system_info.php CHANGED
@@ -1,6 +1,14 @@
 
 
 
 
 
 
 
1
  <form action="<?php echo esc_url(admin_url("admin-post.php?action=wpstg_download_sysinfo"))?>" method="post" dir="ltr">
2
  <textarea class="wpstg-sysinfo" readonly="readonly" id="system-info-textarea" name="wpstg-sysinfo" title="To copy the system info, click below then press Ctrl + C (PC) or Cmd + C (Mac)."><?php echo \WPStaging\Core\WPStaging::getInstance()->get("systemInfo")?></textarea>
3
  <p class="submit">
4
  <?php submit_button("Download System Info File", "primary", "wpstg-download-sysinfo", false)?>
5
  </p>
 
6
  </form>
1
+ <?php
2
+
3
+ use WPStaging\Core\WPStaging;
4
+ use WPStaging\Framework\Filesystem\DebugLogReader;
5
+
6
+ ?>
7
+
8
  <form action="<?php echo esc_url(admin_url("admin-post.php?action=wpstg_download_sysinfo"))?>" method="post" dir="ltr">
9
  <textarea class="wpstg-sysinfo" readonly="readonly" id="system-info-textarea" name="wpstg-sysinfo" title="To copy the system info, click below then press Ctrl + C (PC) or Cmd + C (Mac)."><?php echo \WPStaging\Core\WPStaging::getInstance()->get("systemInfo")?></textarea>
10
  <p class="submit">
11
  <?php submit_button("Download System Info File", "primary", "wpstg-download-sysinfo", false)?>
12
  </p>
13
+ <textarea class="wpstg-sysinfo" readonly="readonly" id="debug-logs-textarea" name="wpstg-debug-logs"><?php echo esc_textarea(WPStaging::make(DebugLogReader::class)->getLastLogEntries(8 * KB_IN_BYTES)); ?></textarea>
14
  </form>
Core/Utils/Htaccess.php CHANGED
@@ -66,4 +66,31 @@ class Htaccess
66
  '</IfModule>',
67
  ]);
68
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  }
66
  '</IfModule>',
67
  ]);
68
  }
69
+
70
+ /**
71
+ * Create .htaccess file for staging network
72
+ *
73
+ * @param string $path Path to file
74
+ * @param string $baseDirectory of staging network
75
+ * @return boolean
76
+ */
77
+ public function createForStagingNetwork($path, $baseDirectory)
78
+ {
79
+ return $this->filesystem->create($path, implode(PHP_EOL, [
80
+ 'RewriteEngine On',
81
+ 'RewriteBase ' . trailingslashit($baseDirectory),
82
+ 'RewriteRule ^index\.php$ - [L]',
83
+ '',
84
+ '# add a trailing slash to /wp-admin',
85
+ 'RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]',
86
+ '',
87
+ 'RewriteCond %{REQUEST_FILENAME} -f [OR]',
88
+ 'RewriteCond %{REQUEST_FILENAME} -d',
89
+ 'RewriteRule ^ - [L]',
90
+ 'RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]',
91
+ 'RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]',
92
+ 'RewriteRule . index.php [L]',
93
+ '',
94
+ ]));
95
+ }
96
  }
Core/Utils/Logger.php CHANGED
@@ -99,8 +99,8 @@ class Logger implements LoggerInterface, ShutdownableInterface
99
  }
100
 
101
  /**
102
- * @param Strings $level
103
- * @param Strings $message
104
  * @param array $context
105
  *
106
  * @return void
@@ -118,7 +118,7 @@ class Logger implements LoggerInterface, ShutdownableInterface
118
  {
119
  $this->messages[] = [
120
  "type" => $type,
121
- "date" => date(self::LOG_DATETIME_FORMAT),
122
  "message" => $message
123
  ];
124
  }
99
  }
100
 
101
  /**
102
+ * @param string $level
103
+ * @param string $message
104
  * @param array $context
105
  *
106
  * @return void
118
  {
119
  $this->messages[] = [
120
  "type" => $type,
121
+ "date" => current_time(self::LOG_DATETIME_FORMAT),
122
  "message" => $message
123
  ];
124
  }
Core/Utils/functions.php CHANGED
@@ -10,7 +10,6 @@
10
  *
11
  */
12
 
13
- use WPStaging\Framework\SiteInfo;
14
  use WPStaging\Framework\Utils\WpDefaultDirectories;
15
 
16
  /**
@@ -50,7 +49,7 @@ function wpstg_replace_windows_directory_separator($path)
50
  * Mimics the mysql_real_escape_string function. Adapted from a post by 'feedr' on php.net.
51
  * @link http://php.net/manual/en/function.mysql-real-escape-string.php#101248
52
  * @access public
53
- * @param string $input The string to escape.
54
  * @return string
55
  */
56
  function wpstg_mysql_escape_mimic($input)
@@ -81,22 +80,6 @@ function wpstg_replace_first_match($needle, $replace, $haystack)
81
  return $result;
82
  }
83
 
84
- /**
85
- * Search & Replace last occurence of string in haystack
86
- * @param string $haystack
87
- * @param string $needle
88
- * @return string
89
- */
90
- function wpstg_replace_last_match($needle, $replace, $haystack)
91
- {
92
- $result = $haystack;
93
- $pos = strrpos($haystack, $needle);
94
- if ($pos !== false) {
95
- $result = substr_replace($haystack, $replace, $pos, strlen($needle));
96
- }
97
- return $result;
98
- }
99
-
100
  /**
101
  * Check if string is valid date
102
  * @param string $date
@@ -137,20 +120,6 @@ function wpstg_urldecode($data)
137
  return $data;
138
  }
139
 
140
- /**
141
- * Check if it is a staging site
142
- *
143
- * @deprecated
144
- * @see \WPStaging\Framework\SiteInfo::isStaging Removed in favor of this.
145
- * @todo Remove this in future versions.
146
- *
147
- * @return bool
148
- */
149
- function wpstg_is_stagingsite()
150
- {
151
- return (new SiteInfo())->isStaging();
152
- }
153
-
154
  /**
155
  * Invalidate constraints
156
  * @param string $query
10
  *
11
  */
12
 
 
13
  use WPStaging\Framework\Utils\WpDefaultDirectories;
14
 
15
  /**
49
  * Mimics the mysql_real_escape_string function. Adapted from a post by 'feedr' on php.net.
50
  * @link http://php.net/manual/en/function.mysql-real-escape-string.php#101248
51
  * @access public
52
+ * @param string | array $input The string to escape.
53
  * @return string
54
  */
55
  function wpstg_mysql_escape_mimic($input)
80
  return $result;
81
  }
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  /**
84
  * Check if string is valid date
85
  * @param string $date
120
  return $data;
121
  }
122
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  /**
124
  * Invalidate constraints
125
  * @param string $query
Core/WPStaging.php CHANGED
@@ -7,6 +7,7 @@ use WPStaging\Core\Cron\Cron;
7
  use WPStaging\Core\Utils\Cache;
8
  use WPStaging\Core\Utils\Logger;
9
  use WPStaging\Framework\Adapter\WpAdapter;
 
10
  use WPStaging\Framework\AssetServiceProvider;
11
  use WPStaging\Framework\CommonServiceProvider;
12
  use WPStaging\Framework\DI\Container;
@@ -58,6 +59,8 @@ final class WPStaging
58
 
59
  WPStaging::$startTime = microtime(true);
60
 
 
 
61
  $this->container->register(CoreServiceProvider::class);
62
 
63
  $this->loadDependencies();
@@ -70,6 +73,8 @@ final class WPStaging
70
  $this->initCron();
71
  $this->cloneSiteFirstRun();
72
 
 
 
73
  if (class_exists('\WPStaging\Pro\ProServiceProvider')) {
74
  $this->container->register(\WPStaging\Pro\ProServiceProvider::class);
75
  }
@@ -78,10 +83,35 @@ final class WPStaging
78
  $this->container->register(FrontendServiceProvider::class);
79
  }
80
 
 
81
  $this->handleCacheIssues();
82
  $this->preventDirectoryListing();
83
  }
84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  /**
86
  * Initialize cron jobs
87
  */
7
  use WPStaging\Core\Utils\Cache;
8
  use WPStaging\Core\Utils\Logger;
9
  use WPStaging\Framework\Adapter\WpAdapter;
10
+ use WPStaging\Framework\AnalyticsServiceProvider;
11
  use WPStaging\Framework\AssetServiceProvider;
12
  use WPStaging\Framework\CommonServiceProvider;
13
  use WPStaging\Framework\DI\Container;
59
 
60
  WPStaging::$startTime = microtime(true);
61
 
62
+ $this->setupDebugLog();
63
+
64
  $this->container->register(CoreServiceProvider::class);
65
 
66
  $this->loadDependencies();
73
  $this->initCron();
74
  $this->cloneSiteFirstRun();
75
 
76
+ $this->container->register(AnalyticsServiceProvider::class);
77
+
78
  if (class_exists('\WPStaging\Pro\ProServiceProvider')) {
79
  $this->container->register(\WPStaging\Pro\ProServiceProvider::class);
80
  }
83
  $this->container->register(FrontendServiceProvider::class);
84
  }
85
 
86
+
87
  $this->handleCacheIssues();
88
  $this->preventDirectoryListing();
89
  }
90
 
91
+ protected function setupDebugLog()
92
+ {
93
+ if (defined('WPSTG_DEBUG_LOG_FILE')) {
94
+ return;
95
+ }
96
+
97
+ $logsDirectory = trailingslashit(wp_upload_dir()['basedir']) . WPSTG_PLUGIN_DOMAIN . '/logs/';
98
+
99
+ if (!file_exists($logsDirectory)) {
100
+ (new Filesystem())->mkdir($logsDirectory, true);
101
+
102
+ $logsDirectoryExists = file_exists($logsDirectory) && is_writable($logsDirectory);
103
+ } else {
104
+ $logsDirectoryExists = is_writable($logsDirectory);
105
+ }
106
+
107
+ if ($logsDirectoryExists) {
108
+ // eg: wpstg_debug_907b4a01db8d244da272601a0491cd5c.log
109
+ $logFile = sanitize_file_name(sprintf('wpstg_debug_%s.log', strtolower(wp_hash(__FILE__))));
110
+
111
+ define('WPSTG_DEBUG_LOG_FILE', $logsDirectory . $logFile);
112
+ }
113
+ }
114
+
115
  /**
116
  * Initialize cron jobs
117
  */
Framework/Adapter/Database/MysqlAdapter.php CHANGED
@@ -39,9 +39,7 @@ class MysqlAdapter implements InterfaceDatabaseClient
39
 
40
  public function realQuery($query, $isExecOnly = false)
41
  {
42
- if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
43
- error_log('mysql_real_query() doesn\'t exist in PHP. However, mysqli_real_query() exists.');
44
- }
45
 
46
  return $this->query($query, $isExecOnly);
47
  }
39
 
40
  public function realQuery($query, $isExecOnly = false)
41
  {
42
+ \WPStaging\functions\debug_log('mysql_real_query() doesn\'t exist in PHP. However, mysqli_real_query() exists.');
 
 
43
 
44
  return $this->query($query, $isExecOnly);
45
  }
Framework/Adapter/DateTimeAdapter.php CHANGED
@@ -62,7 +62,7 @@ class DateTimeAdapter
62
  */
63
  public function transformToWpFormat(DateTime $dateTime)
64
  {
65
- return $dateTime->format($this->getDateTimeFormat());
66
  }
67
 
68
  /**
62
  */
63
  public function transformToWpFormat(DateTime $dateTime)
64
  {
65
+ return get_date_from_gmt($dateTime->format('Y-m-d H:i:s'), $this->getDateTimeFormat());
66
  }
67
 
68
  /**
Framework/Adapter/Directory.php CHANGED
@@ -99,7 +99,7 @@ class Directory
99
  return $this->logDirectory;
100
  }
101
 
102
- $this->logDirectory = trailingslashit(wp_normalize_path($this->getPluginUploadsDirectory() . WPSTG_PLUGIN_DOMAIN . 'logs'));
103
 
104
  return $this->logDirectory;
105
  }
99
  return $this->logDirectory;
100
  }
101
 
102
+ $this->logDirectory = trailingslashit(wp_normalize_path($this->getPluginUploadsDirectory() . 'logs'));
103
 
104
  return $this->logDirectory;
105
  }
Framework/Analytics/Actions/AnalyticsBackupCreate.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Analytics\Actions;
4
+
5
+ use WPStaging\Framework\Analytics\AnalyticsEventDto;
6
+ use WPStaging\Pro\Backup\Dto\Job\JobExportDataDto;
7
+
8
+ class AnalyticsBackupCreate extends AnalyticsEventDto
9
+ {
10
+ public function getEventAction()
11
+ {
12
+ return 'event_backup_create';
13
+ }
14
+
15
+ public function enqueueStartEvent($jobId, $eventData)
16
+ {
17
+ if (!$eventData instanceof JobExportDataDto) {
18
+ return;
19
+ }
20
+
21
+ $this->is_backup_database = $eventData->getIsExportingDatabase();
22
+ $this->is_backup_plugins = $eventData->getIsExportingPlugins();
23
+ $this->is_backup_themes = $eventData->getIsExportingThemes();
24
+ $this->is_backup_uploads = $eventData->getIsExportingUploads();
25
+ $this->is_backup_muplugins = $eventData->getIsExportingMuPlugins();
26
+ $this->is_backup_wp_content = $eventData->getIsExportingOtherWpContentFiles();
27
+ $this->automated_backup = (int)$eventData->getIsAutomatedBackup(); // int to convert null to zero
28
+
29
+ parent::enqueueStartEvent($jobId, $eventData);
30
+ }
31
+
32
+ public function enqueueFinishEvent($jobId, $eventData, $eventOverrides = [])
33
+ {
34
+ parent::enqueueFinishEvent($jobId, null, [
35
+ 'filesystem_size' => $eventData->getFilesystemSize(),
36
+ 'database_size' => $eventData->getDatabaseFileSize(),
37
+ 'discovered_files' => (int)$eventData->getDiscoveredFiles(), // int to convert null to zero
38
+ ]);
39
+ }
40
+ }
Framework/Analytics/Actions/AnalyticsBackupRestore.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Analytics\Actions;
4
+
5
+ use WPStaging\Framework\Analytics\AnalyticsEventDto;
6
+ use WPStaging\Pro\Backup\Dto\Job\JobImportDataDto;
7
+
8
+ class AnalyticsBackupRestore extends AnalyticsEventDto
9
+ {
10
+ public function getEventAction()
11
+ {
12
+ return 'event_backup_restore';
13
+ }
14
+
15
+ public function enqueueStartEvent($eventId, $eventData)
16
+ {
17
+ if (!$eventData instanceof JobImportDataDto) {
18
+ return;
19
+ }
20
+
21
+ $this->is_backup_database = $eventData->getBackupMetadata()->getIsExportingDatabase();
22
+ $this->is_backup_plugins = $eventData->getBackupMetadata()->getIsExportingPlugins();
23
+ $this->is_backup_themes = $eventData->getBackupMetadata()->getIsExportingThemes();
24
+ $this->is_backup_uploads = $eventData->getBackupMetadata()->getIsExportingUploads();
25
+ $this->is_backup_muplugins = $eventData->getBackupMetadata()->getIsExportingMuPlugins();
26
+ $this->is_backup_wp_content = $eventData->getBackupMetadata()->getIsExportingOtherWpContentFiles();
27
+ $this->database_size = $eventData->getBackupMetadata()->getDatabaseFileSize();
28
+ $this->requirement_fail_reason = $eventData->getRequirementFailReason();
29
+ $this->automated_backup = (int)$eventData->getBackupMetadata()->getIsAutomatedBackup(); // int to convert null to zero
30
+
31
+ parent::enqueueStartEvent($eventId, $eventData);
32
+ }
33
+ }
Framework/Analytics/Actions/AnalyticsStagingCreate.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Analytics\Actions;
4
+
5
+ use WPStaging\Framework\Analytics\AnalyticsEventDto;
6
+
7
+ class AnalyticsStagingCreate extends AnalyticsEventDto
8
+ {
9
+ public function getEventAction()
10
+ {
11
+ return 'event_staging_create';
12
+ }
13
+
14
+ public function enqueueStartEvent($eventId, $eventData)
15
+ {
16
+ /**
17
+ "cloneName" => $this->options->cloneName,
18
+ "directoryName" => $this->options->cloneDirectoryName,
19
+ "path" => trailingslashit($this->options->destinationDir),
20
+ "url" => $this->getDestinationUrl(),
21
+ "number" => $this->options->cloneNumber,
22
+ "version" => WPStaging::getVersion(),
23
+ "status" => "unfinished or broken (?)",
24
+ "prefix" => $this->options->prefix,
25
+ "datetime" => time(),
26
+ "databaseUser" => $this->options->databaseUser,
27
+ "databasePassword" => $this->options->databasePassword,
28
+ "databaseDatabase" => $this->options->databaseDatabase,
29
+ "databaseServer" => $this->options->databaseServer,
30
+ "databasePrefix" => $this->options->databasePrefix,
31
+ "emailsAllowed" => ,
32
+ "uploadsSymlinked" => ,
33
+ "ownerId" => $this->options->ownerId,
34
+ "includedTables" => $this->options->tables,
35
+ "excludeSizeRules" => $this->options->excludeSizeRules,
36
+ "excludeGlobRules" => $this->options->excludeGlobRules,
37
+ "excludedDirectories" => $this->options->excludedDirectories,
38
+ "extraDirectories" => $this->options->extraDirectories,
39
+ */
40
+
41
+ $this->is_allowing_email = (bool)$eventData->emailsAllowed;
42
+ $this->is_symlinking_uploads_folder = (bool)$eventData->uploadsSymlinked;
43
+ $this->is_external_database = !(empty($this->options->databaseUser) && empty($this->options->databasePassword));
44
+ $this->number_of_tables = count($eventData->tables);
45
+
46
+ parent::enqueueStartEvent($eventId, $eventData);
47
+ }
48
+
49
+ /**
50
+ * Overriding so that it's easier to find specific usages;
51
+ */
52
+ public function enqueueFinishEvent($jobId, $eventData, $eventOverrides = [])
53
+ {
54
+ parent::enqueueFinishEvent($jobId, $eventData, $eventOverrides);
55
+ }
56
+ }
Framework/Analytics/Actions/AnalyticsStagingPush.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Analytics\Actions;
4
+
5
+ use WPStaging\Framework\Analytics\AnalyticsEventDto;
6
+
7
+ class AnalyticsStagingPush extends AnalyticsEventDto
8
+ {
9
+ public function getEventAction()
10
+ {
11
+ return 'event_staging_push';
12
+ }
13
+
14
+ public function enqueueStartEvent($eventId, $eventData)
15
+ {
16
+ $this->create_backup_before_pushing = !empty($eventData->createBackupBeforePushing);
17
+ $this->delete_plugins_and_themes = !empty($eventData->deletePluginsAndThemes);
18
+ $this->delete_uploads_folder = !empty($eventData->deleteUploadsFolder);
19
+ $this->backup_uploads_folder = !empty($eventData->backupUploadsFolder);
20
+
21
+ parent::enqueueStartEvent($eventId, $eventData);
22
+ }
23
+
24
+ /**
25
+ * Overriding so that it's easier to find specific usages;
26
+ */
27
+ public function enqueueFinishEvent($jobId, $eventData, $eventOverrides = [])
28
+ {
29
+ parent::enqueueFinishEvent($jobId, $eventData, $eventOverrides);
30
+ }
31
+ }
Framework/Analytics/Actions/AnalyticsStagingReset.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Analytics\Actions;
4
+
5
+ use WPStaging\Framework\Analytics\AnalyticsEventDto;
6
+
7
+ class AnalyticsStagingReset extends AnalyticsEventDto
8
+ {
9
+ public function getEventAction()
10
+ {
11
+ return 'event_staging_reset';
12
+ }
13
+
14
+ public function enqueueStartEvent($eventId, $eventData)
15
+ {
16
+ parent::enqueueStartEvent($eventId, $eventData);
17
+ }
18
+
19
+ /**
20
+ * Overriding so that it's easier to find specific usages;
21
+ */
22
+ public function enqueueFinishEvent($jobId, $eventData, $eventOverrides = [])
23
+ {
24
+ parent::enqueueFinishEvent($jobId, $eventData, $eventOverrides);
25
+ }
26
+ }
Framework/Analytics/Actions/AnalyticsStagingUpdate.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Analytics\Actions;
4
+
5
+ use WPStaging\Framework\Analytics\AnalyticsEventDto;
6
+
7
+ class AnalyticsStagingUpdate extends AnalyticsEventDto
8
+ {
9
+ public function getEventAction()
10
+ {
11
+ return 'event_staging_update';
12
+ }
13
+
14
+ public function enqueueStartEvent($eventId, $eventData)
15
+ {
16
+ $this->emails_allowed = !empty($eventData->emailsAllowed);
17
+ $this->delete_plugins_and_themes = !empty($eventData->deletePluginsAndThemes);
18
+ $this->delete_uploads_folder = !empty($eventData->deleteUploadsFolder);
19
+ $this->backup_uploads_folder = !empty($eventData->backupUploadsFolder);
20
+
21
+ parent::enqueueStartEvent($eventId, $eventData);
22
+ }
23
+
24
+ /**
25
+ * Overriding so that it's easier to find specific usages;
26
+ */
27
+ public function enqueueFinishEvent($jobId, $eventData, $eventOverrides = [])
28
+ {
29
+ parent::enqueueFinishEvent($jobId, $eventData, $eventOverrides);
30
+ }
31
+ }
Framework/Analytics/AnalyticsCleanup.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Analytics;
4
+
5
+ class AnalyticsCleanup
6
+ {
7
+ public function cleanupOldAnalytics()
8
+ {
9
+ global $wpdb;
10
+
11
+ $results = $wpdb->get_results("SELECT `option_id`, `option_name` FROM $wpdb->options WHERE `option_name` LIKE 'wpstg_analytics_event_%' ORDER BY `option_id` ASC");
12
+
13
+ // No site should have more than 100 events in the database.
14
+ if (count($results) < 100) {
15
+ return;
16
+ }
17
+
18
+ // If they do, we will delete the first 20 events.
19
+ $idsToDelete = array_map(function ($option) {
20
+ return $option->option_id;
21
+ }, array_slice($results, 0, 20));
22
+
23
+ $idsToDelete = implode(',', $idsToDelete);
24
+
25
+ $deleteResult = $wpdb->query("DELETE FROM $wpdb->options WHERE `option_id` IN ($idsToDelete)");
26
+
27
+ if ($deleteResult != 20) {
28
+ \WPStaging\functions\debug_log(sprintf('WPSTAGING Analytics Cleanup tried to delete 20 events but couldn\'t. wpdb last query: %s wpdb last error: %s', $wpdb->last_query, $wpdb->last_error));
29
+ }
30
+ }
31
+ }
Framework/Analytics/AnalyticsConsent.php ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Analytics;
4
+
5
+ use WPStaging\Backend\Notices\Notices;
6
+ use WPStaging\Core\WPStaging;
7
+
8
+ class AnalyticsConsent
9
+ {
10
+ use WithAnalyticsAPI;
11
+
12
+ /**
13
+ * Shows the admin notice asking the user whether he consents to sending usage information to WP STAGNIG.
14
+ * @action admin_notices
15
+ */
16
+ public function maybeShowConsentNotice()
17
+ {
18
+ // Early bail: Not a WPSTAGING page
19
+ if (!WPStaging::make(Notices::class)->isAdminPage()) {
20
+ return;
21
+ }
22
+
23
+ // Early bail: User does not have enough access to consent, or has consented already.
24
+ if (!current_user_can('manage_options') || get_option('wpstg_analytics_notice_dismissed')) {
25
+ return;
26
+ }
27
+
28
+ $remindMe = get_option('wpstg_analytics_consent_remind_me');
29
+
30
+ if (!empty($remindMe) && time() < $remindMe) {
31
+ return;
32
+ }
33
+
34
+ $notice = WPSTG_PLUGIN_DIR . '/Backend/views/notices/analytics-consent.php';
35
+
36
+ if (!file_exists($notice)) {
37
+ return;
38
+ }
39
+
40
+ include_once $notice;
41
+ }
42
+
43
+ /**
44
+ * If the request that sends the consent fails, we show a notice to let the user know.
45
+ * @action admin_notices
46
+ */
47
+ public function maybeShowConsentFailureNotice()
48
+ {
49
+ // Early bail: Not a WPSTAGING page
50
+ if (!WPStaging::make(Notices::class)->isAdminPage()) {
51
+ return;
52
+ }
53
+
54
+ // Early bail
55
+ if (!isset($_GET['wpstgConsentFailed'])) {
56
+ return;
57
+ }
58
+
59
+ $notice = WPSTG_PLUGIN_DIR . '/Backend/views/notices/analytics-consent-failed.php';
60
+
61
+ if (!file_exists($notice)) {
62
+ return;
63
+ }
64
+
65
+ include_once $notice;
66
+ }
67
+
68
+ /**
69
+ * Listens for whether the user has given or denied consent to send usage information.
70
+ * @action admin_init
71
+ */
72
+ public function listenForConsent()
73
+ {
74
+ // Early bail: Not a consent request
75
+ if (!isset($_GET['wpstgConsent'])) {
76
+ return;
77
+ }
78
+
79
+ // Early bail: Not enough permissions
80
+ if (!current_user_can('manage_options')) {
81
+ return;
82
+ }
83
+
84
+ // Early bail: Invalid nonce
85
+ check_ajax_referer('wpstg_consent_nonce', 'wpstgConsentNonce');
86
+
87
+ if ($_GET['wpstgConsent'] == 'later') {
88
+ update_option('wpstg_analytics_consent_remind_me', strtotime('+7 days'), false);
89
+
90
+ return;
91
+ }
92
+
93
+ // Early bail: User has not consented
94
+ if ($_GET['wpstgConsent'] == 'no') {
95
+ update_option('wpstg_analytics_notice_dismissed', '1', false);
96
+ update_option('wpstg_analytics_has_consent', '0', false);
97
+ delete_option('wpstg_analytics_consent_remind_me');
98
+
99
+ add_action('admin_notices', [$this, 'showNoticeConsentRefused']);
100
+
101
+ return;
102
+ }
103
+
104
+ if ($_GET['wpstgConsent'] == 'yes') {
105
+ try {
106
+ $this->giveConsent();
107
+ } catch (\Exception $e) {
108
+ // Show notice informing the user
109
+ wp_redirect(add_query_arg([
110
+ 'wpstgConsentFailed' => true,
111
+ ], $this->getReturnUrl()));
112
+ exit;
113
+ }
114
+
115
+ update_option('wpstg_analytics_notice_dismissed', '1', false);
116
+ update_option('wpstg_analytics_has_consent', '1', false);
117
+ delete_option('wpstg_analytics_consent_remind_me');
118
+ }
119
+ }
120
+
121
+ public function showNoticeConsentRefused()
122
+ {
123
+ $notice = WPSTG_PLUGIN_DIR . '/Backend/views/notices/analytics-consent-refused.php';
124
+
125
+ if (!file_exists($notice)) {
126
+ return;
127
+ }
128
+
129
+ include_once $notice;
130
+ }
131
+
132
+ /**
133
+ * Registers the consent on the Analytics database
134
+ *
135
+ * @throws \Exception
136
+ */
137
+ public function giveConsent()
138
+ {
139
+ $url = $this->getApiUrl('consent');
140
+
141
+ $response = wp_remote_post($url, [
142
+ 'method' => 'POST',
143
+ 'headers' => ['Content-Type' => 'application/json; charset=utf-8'],
144
+ 'body' => json_encode([
145
+ 'site_hash' => $this->getSiteHash(),
146
+ 'site_url' => get_home_url(),
147
+ ]),
148
+ 'data_format' => 'body',
149
+ 'timeout' => 10,
150
+ 'redirection' => 5,
151
+ 'httpversion' => '1.0',
152
+ 'blocking' => true,
153
+ 'sslverify' => false,
154
+ ]);
155
+
156
+ // Early bail: Something went wrong with the consent request.
157
+ if (is_wp_error($response) || !in_array(wp_remote_retrieve_response_code($response), [201, 409])) {
158
+ $errorMessage = is_wp_error($response) ? $response->get_error_message() : wp_remote_retrieve_body($response);
159
+ \WPStaging\functions\debug_log('WP STAGING Analytics Send Error: ' . $errorMessage, 'debug');
160
+
161
+ // Dismiss the consent notice so that it doesn't appear anymore
162
+ update_option('wpstg_analytics_notice_dismissed', '1', false);
163
+
164
+ throw new \Exception();
165
+ }
166
+ }
167
+
168
+ /**
169
+ * @return bool|null Whether the user has consented to the Analytics. Null if didn't answer.
170
+ */
171
+ public function hasUserConsent()
172
+ {
173
+ return get_option('wpstg_analytics_has_consent', null);
174
+ }
175
+
176
+ /**
177
+ * Invalidate the fact that the user has consented.
178
+ */
179
+ public function invalidateConsent()
180
+ {
181
+ delete_option('wpstg_analytics_notice_dismissed');
182
+ delete_option('wpstg_analytics_has_consent');
183
+ }
184
+
185
+ protected function getReturnUrl()
186
+ {
187
+ global $pagenow, $plugin_page;
188
+
189
+ return add_query_arg('page', $plugin_page, admin_url($pagenow));
190
+ }
191
+
192
+ /**
193
+ * @param bool $agreeOrDecline True to generate a link that agrees to send usage information. False to generate a link that disagrees.
194
+ *
195
+ * @return string The link to either agree or decline analytics.
196
+ */
197
+ public function getConsentLink($agreeOrDecline)
198
+ {
199
+ return add_query_arg([
200
+ 'wpstgConsent' => $agreeOrDecline ? 'yes' : 'no',
201
+ 'wpstgConsentNonce' => wp_create_nonce('wpstg_consent_nonce'),
202
+ ], $this->getReturnUrl());
203
+ }
204
+
205
+ public function getRemindMeLaterConsentLink()
206
+ {
207
+ return add_query_arg([
208
+ 'wpstgConsent' => 'later',
209
+ 'wpstgConsentNonce' => wp_create_nonce('wpstg_consent_nonce'),
210
+ ], $this->getReturnUrl());
211
+ }
212
+ }
Framework/Analytics/AnalyticsEventDto.php ADDED
@@ -0,0 +1,209 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Analytics;
4
+
5
+ use WPStaging\Core\WPStaging;
6
+ use WPStaging\Framework\Filesystem\DebugLogReader;
7
+
8
+ abstract class AnalyticsEventDto implements \JsonSerializable
9
+ {
10
+ use WithAnalyticsSiteInfo;
11
+
12
+ /** @var string Which action is triggering this Analytics, eg: backup creation, staging push, etc */
13
+ protected $event;
14
+
15
+ /** @var string The Job ID or similar. */
16
+ protected $job_identifier;
17
+
18
+ /** @var string A unique hash that prevents duplicated events in a scenario where this database is restored in another site and the events are sent again. */
19
+ protected $event_hash;
20
+
21
+ /** @var bool Whether this job has naturally finished. Eg: Came to the expected ending. */
22
+ protected $is_finished = false;
23
+
24
+ /** @var bool Whether this job has started but did not finish during an expected time-frame. */
25
+ protected $is_stale = false;
26
+
27
+ /** @var bool Whether this job terminated in error. */
28
+ protected $is_error = false;
29
+
30
+ /** @var bool Whether this job has been cancelled by the user. */
31
+ protected $is_cancelled = false;
32
+
33
+ /** @var bool Whether the requirement check has failed for this job. */
34
+ protected $is_requirement_check_fail = false;
35
+
36
+ /** @var string The reason for the requirement check fail, if so. */
37
+ protected $requirement_fail_reason = '';
38
+
39
+ /** @var string The error message as shown in the front-end, if event terminated in error. */
40
+ protected $error_message;
41
+
42
+ /** @var string The last lines from the debug log file. */
43
+ protected $last_debug_logs;
44
+
45
+ /** @var bool An internal flag to check if this event is ready to be sent. */
46
+ protected $ready_to_send = false;
47
+
48
+ /** @var int A UNIX timestamp for when this event started. */
49
+ protected $start_time;
50
+
51
+ /** @var int A UNIX timestamp for when this event ended. */
52
+ protected $end_time;
53
+
54
+ /** @var int The duration in seconds between the start and end of the event. */
55
+ protected $duration;
56
+
57
+ /** @var array A collection of generic site information. */
58
+ protected $site_info;
59
+
60
+ public function __construct()
61
+ {
62
+ $this->event = $this->getEventAction();
63
+ $this->site_info = $this->getAnalyticsSiteInfo();
64
+ }
65
+
66
+ public function jsonSerialize()
67
+ {
68
+ return get_object_vars($this);
69
+ }
70
+
71
+ /**
72
+ * @return string The name of this analytics event.
73
+ */
74
+ abstract public function getEventAction();
75
+
76
+ public function enqueueStartEvent($jobId, $eventData)
77
+ {
78
+ $this->job_identifier = $jobId;
79
+ $this->start_time = time();
80
+ $this->event_hash = microtime(true) . rand();
81
+
82
+ try {
83
+ $this->saveEvent($jobId, $this);
84
+ } catch (\Exception $e) {
85
+ \WPStaging\functions\debug_log("WP STAGING: Could not register start event analytics data for job ID $jobId.", 'debug');
86
+ }
87
+ }
88
+
89
+ public function enqueueFinishEvent($jobId, $eventData, $eventOverrides = [])
90
+ {
91
+ try {
92
+ $event = $this->getEventByJobId($jobId);
93
+ } catch (\Exception $e) {
94
+ \WPStaging\functions\debug_log("WP STAGING: Could not register finish event analytics data for job ID $jobId", 'debug');
95
+
96
+ return;
97
+ }
98
+
99
+ $event->is_finished = true;
100
+ $event->end_time = time();
101
+ $event->duration = time() - $event->start_time;
102
+ $event->ready_to_send = true;
103
+
104
+ // Allow concrete instances of this abstract class to modify this event.
105
+ foreach ($eventOverrides as $key => $value) {
106
+ $event->$key = $value;
107
+ }
108
+
109
+ try {
110
+ $this->saveEvent($jobId, $event);
111
+ } catch (\Exception $e) {
112
+ \WPStaging\functions\debug_log("WP STAGING: Could not save finish event analytics data for job ID $jobId.", 'debug');
113
+ }
114
+ }
115
+
116
+ /**
117
+ * Cancel event is static as it's a generic event not related to any specific type of event.
118
+ */
119
+ public static function enqueueCancelEvent($jobId)
120
+ {
121
+ try {
122
+ $event = static::getEventByJobId($jobId);
123
+ } catch (\Exception $e) {
124
+ \WPStaging\functions\debug_log("WP STAGING: Could not register cancel event analytics data for job ID $jobId", 'debug');
125
+
126
+ return;
127
+ }
128
+
129
+ // Early bail: Already cancelled
130
+ if ($event->is_cancelled) {
131
+ return;
132
+ }
133
+
134
+ /*
135
+ * The Cancel routine may be called automatically when an error occurs
136
+ * to perform cleanup tasks, so let's not register the cancel event
137
+ * if this event is being triggered by a job that already has an error.
138
+ */
139
+ if ($event->is_error) {
140
+ return;
141
+ }
142
+
143
+ $event->is_finished = false;
144
+ $event->is_cancelled = true;
145
+ $event->end_time = time();
146
+ $event->duration = time() - $event->start_time;
147
+ $event->ready_to_send = true;
148
+
149
+ try {
150
+ static::saveEvent($jobId, $event);
151
+ } catch (\Exception $e) {
152
+ \WPStaging\functions\debug_log("WP STAGING: Could not save cancel event analytics data for job ID $jobId.", 'debug');
153
+ }
154
+ }
155
+
156
+ /**
157
+ * Error event is static as it's a generic event not related to any specific type of event.
158
+ */
159
+ public static function enqueueErrorEvent($jobId, $errorMessage)
160
+ {
161
+ try {
162
+ $event = static::getEventByJobId($jobId);
163
+ } catch (\Exception $e) {
164
+ \WPStaging\functions\debug_log("WP STAGING: Could not register cancel event analytics data for job ID $jobId", 'debug');
165
+
166
+ return;
167
+ }
168
+
169
+ $lastDebugLogErrors = WPStaging::make(DebugLogReader::class)->getLastLogEntries(8 * KB_IN_BYTES);
170
+
171
+ $event->is_finished = false;
172
+ $event->is_error = true;
173
+ $event->error_message = $errorMessage;
174
+ $event->last_debug_logs = $lastDebugLogErrors;
175
+ $event->end_time = time();
176
+ $event->duration = time() - $event->start_time;
177
+ $event->ready_to_send = true;
178
+
179
+ try {
180
+ static::saveEvent($jobId, $event);
181
+ } catch (\Exception $e) {
182
+ \WPStaging\functions\debug_log("WP STAGING: Could not save cancel event analytics data for job ID $jobId.", 'debug');
183
+ }
184
+ }
185
+
186
+ protected static function getEventByJobId($jobId)
187
+ {
188
+ if (!$event = get_option("wpstg_analytics_event_$jobId")) {
189
+ throw new \UnexpectedValueException();
190
+ }
191
+
192
+ $event = json_decode($event);
193
+
194
+ if (empty($event) || !is_object($event)) {
195
+ throw new \UnexpectedValueException();
196
+ }
197
+
198
+ return $event;
199
+ }
200
+
201
+ protected static function saveEvent($jobId, $event)
202
+ {
203
+ $event = wp_json_encode($event);
204
+
205
+ if (!update_option("wpstg_analytics_event_$jobId", $event, false)) {
206
+ throw new \UnexpectedValueException();
207
+ }
208
+ }
209
+ }
Framework/Analytics/AnalyticsSender.php ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Analytics;
4
+
5
+ class AnalyticsSender
6
+ {
7
+ use WithAnalyticsAPI;
8
+
9
+ protected $consent;
10
+
11
+ public function __construct(AnalyticsConsent $consent)
12
+ {
13
+ $this->consent = $consent;
14
+ }
15
+
16
+ public function maybeSend()
17
+ {
18
+ // Early bail: Do not run on AJAX requests.
19
+ if (defined('DOING_AJAX') && DOING_AJAX) {
20
+ return;
21
+ }
22
+
23
+ // We store the analytics sending time at "wpstg_settings"
24
+ // since this runs on every request, and it's an autoloaded option.
25
+ // Also, the value we need to store in it is small.
26
+ $settings = get_option("wpstg_settings", []);
27
+
28
+ // Interval to wait before sending events.
29
+ $interval = 15 * MINUTE_IN_SECONDS;
30
+
31
+ // Early bail: Sent not so long ago.
32
+ if (isset($settings['lastAnalyticsSend']) && time() - $settings['lastAnalyticsSend'] - $interval < 0) {
33
+ return;
34
+ }
35
+
36
+ $settings['lastAnalyticsSend'] = time();
37
+
38
+ if (!update_option('wpstg_settings', $settings)) {
39
+ \WPStaging\functions\debug_log('WP STAGING: Could not update Analytics last sent time.', 'debug');
40
+ };
41
+
42
+ $this->sendAnalytics();
43
+ }
44
+
45
+ public function sendAnalytics()
46
+ {
47
+ global $wpdb;
48
+
49
+ $eventOptions = $wpdb->get_results("SELECT * FROM $wpdb->options WHERE `option_name` LIKE 'wpstg_analytics_event_%' LIMIT 0, 20");
50
+
51
+ // Nothing to send.
52
+ if (empty($eventOptions)) {
53
+ return;
54
+ }
55
+
56
+ // Early bail: User has not given consent to send analytics
57
+ if (!$this->consent->hasUserConsent()) {
58
+ return;
59
+ }
60
+
61
+ // Format the events to the expected format
62
+ $events = array_map(function ($eventOption) {
63
+ return json_decode($eventOption->option_value);
64
+ }, $eventOptions);
65
+
66
+ $this->setStaleEvents($events);
67
+
68
+ // Filter the events to send only those that are ready to be sent
69
+ $events = array_filter($events, function ($event) {
70
+ return $event->ready_to_send;
71
+ });
72
+
73
+ // Early bail: No events ready to be sent
74
+ if (empty($events)) {
75
+ return;
76
+ }
77
+
78
+ // Convert true to 1 and false to 0 for MySQL TinyInt
79
+ foreach ($events as &$event) {
80
+ foreach ($event as $property => &$value) {
81
+ if (is_bool($value)) {
82
+ $event->$property = (int)$value;
83
+ } elseif ($property === 'site_info') {
84
+ $siteInfo = &$value;
85
+
86
+ foreach ($siteInfo as $siteInfoProperty => &$siteInfoValue) {
87
+ if (is_bool($siteInfoValue)) {
88
+ $siteInfo->$siteInfoProperty = (int)$siteInfoValue;
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }
94
+
95
+ // Delete the events, regardless of whether it succeeded or failed to send.
96
+ // This prevents events from hanging and being sent every time if they are in an invalid format or something goes wrong.
97
+ $idsToDelete = implode(',', array_map(function ($eventOption) {
98
+ return $eventOption->option_id;
99
+ }, $eventOptions));
100
+
101
+ if (!$wpdb->query("DELETE FROM $wpdb->options WHERE `option_id` IN ($idsToDelete)")) {
102
+ \WPStaging\functions\debug_log('WP STAGING Analytics Delete Sent Events Error: ' . $wpdb->last_error);
103
+ }
104
+
105
+ $body = wp_json_encode([
106
+ 'events' => $events,
107
+ 'site_hash' => $this->getSiteHash(),
108
+ ]);
109
+
110
+ $url = $this->getApiUrl('events');
111
+
112
+ // Early bail: Do not dispatch events when in dev mode, unless allowed.
113
+ if (defined('WPSTG_DEV') && WPSTG_DEV) {
114
+ if (!defined('WPSTG_DEV_SEND_ANALYTICS') || defined('WPSTG_DEV_SEND_ANALYTICS') && !WPSTG_DEV_SEND_ANALYTICS) {
115
+ return;
116
+ }
117
+ }
118
+ $response = wp_remote_post($url, [
119
+ 'method' => 'POST',
120
+ 'headers' => ['Content-Type' => 'application/json; charset=utf-8'],
121
+ 'body' => $body,
122
+ 'data_format' => 'body',
123
+ 'timeout' => 10,
124
+ 'redirection' => 5,
125
+ 'httpversion' => '1.0',
126
+ 'blocking' => true,
127
+ 'sslverify' => false,
128
+ ]);
129
+
130
+ if (is_wp_error($response) || wp_remote_retrieve_response_code($response) !== 200) {
131
+ if (wp_remote_retrieve_response_code($response) == 412) {
132
+ // The site hash does not exist in the Analytics database. We need to ask for consent again.
133
+ if ($this->consent->hasUserConsent()) {
134
+ try {
135
+ $this->consent->giveConsent();
136
+ } catch (\Exception $e) {
137
+ // We could not re-validate the consent.
138
+ // Let's ask it again to the user, which will handle notices and a scenario of connection failure.
139
+ $this->consent->invalidateConsent();
140
+ }
141
+ }
142
+ }
143
+
144
+ $errorMessage = is_wp_error($response) ? $response->get_error_message() : wp_remote_retrieve_body($response);
145
+ \WPStaging\functions\debug_log('WP STAGING Analytics Send Error: ' . $errorMessage);
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Mark as stale the events that started longer than 1 day ago but isn't ready to send yet
151
+ *
152
+ * @param $events
153
+ */
154
+ protected function setStaleEvents(&$events)
155
+ {
156
+ foreach ($events as &$event) {
157
+ if (!$event->ready_to_send && $event->start_time < time() - 1 * DAY_IN_SECONDS) {
158
+ $event->ready_to_send = true;
159
+ $event->is_stale = true;
160
+ }
161
+ }
162
+ }
163
+ }
Framework/Analytics/WithAnalyticsAPI.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Analytics;
4
+
5
+ trait WithAnalyticsAPI
6
+ {
7
+ protected function getApiUrl($endpoint)
8
+ {
9
+ if (defined('WPSTG_DEV') && WPSTG_DEV) {
10
+ $url = 'http://analytics.local:8080';
11
+ } else {
12
+ $url = 'https://analytics.wp-staging.com';
13
+ }
14
+
15
+ return $url . '/' . $endpoint;
16
+ }
17
+
18
+ /**
19
+ * We use the hash of the salt as the identifier, this will only change if the salts changes.
20
+ *
21
+ * @return string
22
+ */
23
+ protected function getSiteHash()
24
+ {
25
+ $hostName = parse_url(get_site_url());
26
+
27
+ if (is_array($hostName) && array_key_exists('host', $hostName)) {
28
+ $hostName = $hostName['host'];
29
+ } else {
30
+ $hostName = '';
31
+ }
32
+
33
+ if (defined('AUTH_SALT') && !empty(AUTH_SALT) && AUTH_SALT !== 'put your unique phrase here') {
34
+ $authSalt = AUTH_SALT;
35
+ } else {
36
+ if (!$authSalt = get_option('wpstg_analytics_fallback_site_hash')) {
37
+ $authSalt = wp_generate_password(32);
38
+ update_option('wpstg_analytics_fallback_site_hash', $authSalt);
39
+ }
40
+ }
41
+
42
+ return wp_hash($authSalt . $hostName);
43
+ }
44
+ }
Framework/Analytics/WithAnalyticsSiteInfo.php ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Analytics;
4
+
5
+ use WPStaging\Core\WPStaging;
6
+ use WPStaging\Framework\SiteInfo;
7
+
8
+ trait WithAnalyticsSiteInfo
9
+ {
10
+ public function getAnalyticsSiteInfo()
11
+ {
12
+ /**
13
+ * @var string $wp_version
14
+ * @var int $wp_db_version
15
+ */
16
+ include ABSPATH . WPINC . '/version.php';
17
+ global $wpdb;
18
+
19
+ // eg: 10.4.19-MariaDB-1:10.4.19+maria~focal
20
+ $mysqlInfo = $wpdb->get_var('SELECT VERSION();');
21
+
22
+ preg_match('/^[0-9.]+/', $mysqlInfo, $mySqlVersionNumber);
23
+
24
+ if (!empty($mySqlVersionNumber)) {
25
+ $mySqlVersionNumber = array_shift($mySqlVersionNumber);
26
+ } else {
27
+ $mySqlVersionNumber = 'UNDEFINED';
28
+ }
29
+
30
+ // Normalized engine name, allows us to query them regardless of the raw format.
31
+ if (stripos($mysqlInfo, 'mysql')) {
32
+ $engine = 'MYSQL';
33
+ } elseif (stripos($mysqlInfo, 'mariadb')) {
34
+ $engine = 'MARIADB';
35
+ } elseif (stripos($mysqlInfo, 'azure')) {
36
+ $engine = 'AZURE';
37
+ } elseif (stripos($mysqlInfo, 'postgre')) {
38
+ $engine = 'POSTGRE';
39
+ } elseif (stripos(preg_replace('[^\w]', '', $mysqlInfo), 'microsoftsqlserver')) {
40
+ $engine = 'MICROSOFTSQLSERVER';
41
+ } elseif (stripos($mysqlInfo, 'percona')) {
42
+ $engine = 'PERCONA';
43
+ } elseif (stripos($mysqlInfo, 'oracle')) {
44
+ $engine = 'ORACLE';
45
+ } else {
46
+ $engine = 'UNDEFINED';
47
+ }
48
+
49
+ $wpstgSettings = get_option('wpstg_settings', []);
50
+
51
+ if (!is_array($wpstgSettings)) {
52
+ $wpstgSettings = [];
53
+ }
54
+
55
+ $plugins = $this->getActivePlugins();
56
+
57
+ $systemInfo = [
58
+ 'is_staging_site' => (int)WPStaging::make(SiteInfo::class)->isStagingSite(),
59
+
60
+ 'db_copy_query_limit' => !empty($wpstgSettings['queryLimit']) ? $wpstgSettings['queryLimit'] : null,
61
+ 'db_sr_limit' => !empty($wpstgSettings['querySRLimit']) ? $wpstgSettings['querySRLimit'] : null,
62
+ 'file_copy_limit' => !empty($wpstgSettings['fileLimit']) ? $wpstgSettings['fileLimit'] : null,
63
+ 'cpu_priority' => !empty($wpstgSettings['cpuLoad']) ? $wpstgSettings['cpuLoad'] : null,
64
+ 'file_copy_batch_size' => !empty($wpstgSettings['batchSize']) ? $wpstgSettings['batchSize'] : null,
65
+ 'max_file_size' => !empty($wpstgSettings['maxFileSize']) ? $wpstgSettings['maxFileSize'] : null,
66
+ 'optimizer' => !empty($wpstgSettings['optimizer']) ? $wpstgSettings['optimizer'] : null,
67
+
68
+ // WP STAGING Settings that are null by default, if they are not present, they are evaluated as FALSY/EMPTY:
69
+ 'keep_permalinks' => !empty($wpstgSettings['keepPermalinks']) ? $wpstgSettings['keepPermalinks'] : false,
70
+ 'disable_admin_login' => !empty($wpstgSettings['disableAdminLogin']) ? $wpstgSettings['disableAdminLogin'] : false,
71
+ 'delay_between_requests' => !empty($wpstgSettings['delayRequests']) ? $wpstgSettings['delayRequests'] : 0,
72
+ 'debug_mode' => !empty($wpstgSettings['debugMode']) ? $wpstgSettings['debugMode'] : false,
73
+ 'remove_data_on_uninstall' => !empty($wpstgSettings['unInstallOnDelete']) ? $wpstgSettings['unInstallOnDelete'] : false,
74
+ 'check_directory_size' => !empty($wpstgSettings['checkDirectorySize']) ? $wpstgSettings['checkDirectorySize'] : false,
75
+ 'access_permission' => !empty($wpstgSettings['userRoles']) ? $wpstgSettings['userRoles'] : [],
76
+ 'users_with_staging_access' => !empty($wpstgSettings['usersWithStagingAccess']) ? $wpstgSettings['usersWithStagingAccess'] : '',
77
+
78
+ 'php_version' => phpversion(),
79
+ 'blog_id' => get_current_blog_id(),
80
+ 'network_id' => get_current_network_id(),
81
+ 'single_or_multi' => is_multisite() ? 'multi' : 'single',
82
+ 'wpstaging_free_or_pro' => WPStaging::isPro() ? 'pro' : 'free',
83
+ 'wpstaging_version' => WPStaging::getVersion(),
84
+ 'operating_system_family' => stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : 'UNIX',
85
+ 'operating_system_family_raw' => PHP_OS,
86
+ 'active_theme' => get_option('stylesheet') ?: 'UNDEFINED',
87
+ 'wordpress_version' => $wp_version,
88
+ 'wpdb_version' => $wp_db_version,
89
+ 'db_collate' => $wpdb->collate,
90
+ 'db_charset' => $wpdb->charset,
91
+ 'sql_server_version_number' => $mySqlVersionNumber,
92
+ 'sql_server_version_engine' => $engine,
93
+ 'sql_server_version_engine_raw' => $mysqlInfo,
94
+ 'site_active_plugins' => $plugins['siteActive'],
95
+ 'mu_plugins' => $plugins['muPlugins'],
96
+ 'network_active_plugins' => $plugins['networkActive'],
97
+ 'php_extensions' => $this->getPhpExtensions(),
98
+ ];
99
+
100
+ return $systemInfo;
101
+ }
102
+
103
+ protected function getActivePlugins()
104
+ {
105
+ $plugins = [
106
+ 'siteActive' => [],
107
+ 'muPlugins' => [],
108
+ 'networkActive' => [],
109
+ ];
110
+
111
+ $callback = function () {
112
+ return [];
113
+ };
114
+
115
+ $wpPluginDir = wp_normalize_path(WP_PLUGIN_DIR);
116
+ $wpmuPluginDir = wp_normalize_path(WPMU_PLUGIN_DIR);
117
+
118
+ // plugins
119
+ add_filter('pre_site_option_active_sitewide_plugins', $callback);
120
+ foreach (wp_get_active_and_valid_plugins() ?: [] as $activePlugin) {
121
+ $pluginData = get_plugin_data($activePlugin);
122
+ $version = array_key_exists('Version', $pluginData) ? $pluginData['Version'] : 'UNDEFINED';
123
+ $name = str_replace($wpPluginDir, '', wp_normalize_path($activePlugin));
124
+ $name = trim($name, '/\\');
125
+
126
+ $plugins['siteActive'][$name] = $version;
127
+ }
128
+ remove_filter('pre_site_option_active_sitewide_plugins', $callback);
129
+
130
+ // mu-plugins
131
+ foreach (get_mu_plugins() ?: [] as $activeMuPlugin => $pluginData) {
132
+ $version = array_key_exists('Version', $pluginData) ? $pluginData['Version'] : 'UNDEFINED';
133
+ $name = str_replace($wpmuPluginDir, '', wp_normalize_path($activeMuPlugin));
134
+ $name = trim($name, '/\\');
135
+
136
+ $plugins['muPlugins'][$name] = $version;
137
+ }
138
+
139
+ // networkwide plugins
140
+ if (function_exists('wp_get_active_network_plugins')) {
141
+ foreach (wp_get_active_network_plugins() ?: [] as $activePlugin) {
142
+ $pluginData = get_plugin_data($activePlugin);
143
+ $version = array_key_exists('Version', $pluginData) ? $pluginData['Version'] : 'UNDEFINED';
144
+ $name = str_replace($wpPluginDir, '', wp_normalize_path($activePlugin));
145
+ $name = trim($name, '/\\');
146
+
147
+ $plugins['networkActive'][$name] = $version;
148
+ }
149
+ }
150
+
151
+ return $plugins;
152
+ }
153
+
154
+ protected function getPhpExtensions()
155
+ {
156
+ // Early bail: Not callable
157
+ if (!is_callable('get_loaded_extensions')) {
158
+ return [];
159
+ }
160
+
161
+ $phpExtensions = @get_loaded_extensions();
162
+
163
+ // Early bail: Unexpected value
164
+ if (!is_array($phpExtensions)) {
165
+ return [];
166
+ }
167
+
168
+ return $phpExtensions;
169
+ }
170
+ }
Framework/AnalyticsServiceProvider.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework;
4
+
5
+ use WPStaging\Core\Utils\Cache;
6
+ use WPStaging\Core\WPStaging;
7
+ use WPStaging\Framework\Analytics\AnalyticsConsent;
8
+ use WPStaging\Framework\Analytics\AnalyticsEventDto;
9
+ use WPStaging\Framework\Analytics\AnalyticsSender;
10
+ use WPStaging\Framework\DI\FeatureServiceProvider;
11
+
12
+ class AnalyticsServiceProvider extends FeatureServiceProvider
13
+ {
14
+ public static function getFeatureTrigger()
15
+ {
16
+ return 'WPSTG_FEATURE_ANALYTICS';
17
+ }
18
+
19
+ protected function registerClasses()
20
+ {
21
+ $this->container->singleton(AnalyticsConsent::class);
22
+ $this->container->singleton(AnalyticsSender::class);
23
+ }
24
+
25
+ protected function addHooks()
26
+ {
27
+ add_action('admin_notices', $this->container->callback(AnalyticsConsent::class, 'maybeShowConsentNotice'));
28
+ add_action('admin_notices', $this->container->callback(AnalyticsConsent::class, 'maybeShowConsentFailureNotice'));
29
+ add_action('admin_init', $this->container->callback(AnalyticsConsent::class, 'listenForConsent'));
30
+
31
+ /*
32
+ * Analytics error detection for Backup actions
33
+ *
34
+ * The AJAX event name avoids using "analytics_error" on purpose to
35
+ * avoid ad blocks from blocking the request from happening.
36
+ *
37
+ * "analytics" should never be mentioned in JavaScript, only on server-side.
38
+ */
39
+ add_action("wp_ajax_wpstg_job_error", function () {
40
+ if (empty($_POST)) {
41
+ return;
42
+ }
43
+
44
+ foreach (['error_message', 'job_id'] as $requiredKeys) {
45
+ if (!isset($_POST[$requiredKeys])) {
46
+ return;
47
+ }
48
+ }
49
+
50
+ $errorMessage = html_entity_decode($_POST['error_message']);
51
+ $errorMessage = sanitize_text_field($errorMessage);
52
+
53
+ $jobId = html_entity_decode($_POST['job_id']);
54
+ $jobId = sanitize_text_field($jobId);
55
+
56
+ AnalyticsEventDto::enqueueErrorEvent($jobId, $errorMessage);
57
+ });
58
+
59
+ // Analytics error detection for Staging actions
60
+ add_action("wp_ajax_wpstg_staging_job_error", function () {
61
+ if (empty($_POST)) {
62
+ return;
63
+ }
64
+
65
+ foreach (['error_message'] as $requiredKeys) {
66
+ if (!isset($_POST[$requiredKeys])) {
67
+ return;
68
+ }
69
+ }
70
+
71
+ $errorMessage = html_entity_decode($_POST['error_message']);
72
+ // prevent emptying HTML string, as Staging errors might be returned in HTML (?)
73
+ $errorMessage = wp_kses_post($errorMessage);
74
+
75
+ /**
76
+ * Get the "options" object from cache
77
+ * @see \WPStaging\Backend\Modules\Jobs\Job::__construct
78
+ */
79
+ $cache = new Cache(-1, WPStaging::getContentDir());
80
+ $options = $cache->get("clone_options");
81
+
82
+ if (is_object($options) && property_exists($options, 'jobIdentifier')) {
83
+ $jobId = $options->jobIdentifier;
84
+ }
85
+
86
+ AnalyticsEventDto::enqueueErrorEvent($jobId, $errorMessage);
87
+ });
88
+
89
+ $this->container->make(AnalyticsSender::class)->maybeSend();
90
+ }
91
+ }
Framework/Assets/Assets.php CHANGED
@@ -8,6 +8,7 @@ use WPStaging\Framework\Filesystem\Scanning\ScanConst;
8
  use WPStaging\Framework\Security\AccessToken;
9
  use WPStaging\Framework\Security\Nonce;
10
  use WPStaging\Framework\Traits\ResourceTrait;
 
11
 
12
  class Assets
13
  {
@@ -30,7 +31,7 @@ class Assets
30
  }
31
 
32
  /**
33
- * Prepand the URL to the assets to the given file
34
  *
35
  * @param string $assetsFile optional
36
  * @return string
@@ -44,7 +45,7 @@ class Assets
44
  * Get the version the given file. Use for caching
45
  *
46
  * @param string $assetsFile
47
- * @param string $assetsVersion, use WPStaging::getVersion() instead if not given
48
  * @return string
49
  */
50
  public function getAssetsUrlWithVersion($assetsFile, $assetsVersion = '')
@@ -55,7 +56,7 @@ class Assets
55
  }
56
 
57
  /**
58
- * Prepand the Path to the assets to the given file
59
  *
60
  * @param string $assetsFile optional
61
  * @return string
@@ -92,7 +93,7 @@ class Assets
92
  {
93
 
94
  // Load this css file on frontend and backend on all pages if current site is a staging site
95
- if (wpstg_is_stagingsite()) {
96
  wp_register_style('wpstg-admin-bar', false);
97
  wp_enqueue_style('wpstg-admin-bar');
98
  wp_add_inline_style('wpstg-admin-bar', $this->getStagingAdminBarColor());
@@ -273,6 +274,10 @@ class Assets
273
  'resetClone' => esc_html__('Reset Staging Site', 'wp-staging'),
274
  'showLogs' => esc_html__('Show Logs', 'wp-staging'),
275
  'hideLogs' => esc_html__('Hide Logs', 'wp-staging'),
 
 
 
 
276
  ],
277
  ]);
278
  }
@@ -291,10 +296,10 @@ class Assets
291
  // The real limit, read from the PHP context.
292
  $limit = min($maxPostSize, $uploadMaxFileSize) * 0.90;
293
 
294
- // Do not allow to go over upper limit.
295
  $limit = min($limit, $upperLimit);
296
 
297
- // Do not allow to go under lower limit.
298
  $limit = max($lowerLimit, $limit);
299
 
300
  return (int)$limit;
@@ -330,23 +335,11 @@ class Assets
330
  return !in_array($page, $availablePages) || !is_admin();
331
  }
332
 
333
- /**
334
- * Check if current page is plugins.php
335
- * @global array $pagenow
336
- * @return bool
337
- */
338
- private function isPluginsPage()
339
- {
340
- global $pagenow;
341
-
342
- return ($pagenow === 'plugins.php');
343
- }
344
-
345
-
346
  /**
347
  * Remove heartbeat api and user login check
348
  *
349
  * @action admin_enqueue_scripts 100 1
 
350
  *
351
  * @param bool $hook
352
  */
@@ -365,7 +358,19 @@ class Assets
365
  }
366
 
367
  /**
368
- * @return array|mixed|object
 
 
 
 
 
 
 
 
 
 
 
 
369
  */
370
  public function getDelay()
371
  {
8
  use WPStaging\Framework\Security\AccessToken;
9
  use WPStaging\Framework\Security\Nonce;
10
  use WPStaging\Framework\Traits\ResourceTrait;
11
+ use WPStaging\Framework\SiteInfo;
12
 
13
  class Assets
14
  {
31
  }
32
 
33
  /**
34
+ * Prepend the URL to the assets to the given file
35
  *
36
  * @param string $assetsFile optional
37
  * @return string
45
  * Get the version the given file. Use for caching
46
  *
47
  * @param string $assetsFile
48
+ * @param string $assetsVersion use WPStaging::getVersion() instead if not given
49
  * @return string
50
  */
51
  public function getAssetsUrlWithVersion($assetsFile, $assetsVersion = '')
56
  }
57
 
58
  /**
59
+ * Prepend the Path to the assets to the given file
60
  *
61
  * @param string $assetsFile optional
62
  * @return string
93
  {
94
 
95
  // Load this css file on frontend and backend on all pages if current site is a staging site
96
+ if ((new SiteInfo())->isStagingSite()) {
97
  wp_register_style('wpstg-admin-bar', false);
98
  wp_enqueue_style('wpstg-admin-bar');
99
  wp_add_inline_style('wpstg-admin-bar', $this->getStagingAdminBarColor());
274
  'resetClone' => esc_html__('Reset Staging Site', 'wp-staging'),
275
  'showLogs' => esc_html__('Show Logs', 'wp-staging'),
276
  'hideLogs' => esc_html__('Hide Logs', 'wp-staging'),
277
+ 'noTableSelected' => esc_html__('No table selected', 'wp-staging'),
278
+ 'tablesSelected' => esc_html__('{d} tables(s) selected', 'wp-staging'),
279
+ 'noFileSelected' => esc_html__('No file selected', 'wp-staging'),
280
+ 'filesSelected' => esc_html__('{t} theme(s), {p} plugin(s) selected', 'wp-staging'),
281
  ],
282
  ]);
283
  }
296
  // The real limit, read from the PHP context.
297
  $limit = min($maxPostSize, $uploadMaxFileSize) * 0.90;
298
 
299
+ // Do not allow going over upper limit.
300
  $limit = min($limit, $upperLimit);
301
 
302
+ // Do not allow going under lower limit.
303
  $limit = max($lowerLimit, $limit);
304
 
305
  return (int)$limit;
335
  return !in_array($page, $availablePages) || !is_admin();
336
  }
337
 
 
 
 
 
 
 
 
 
 
 
 
 
 
338
  /**
339
  * Remove heartbeat api and user login check
340
  *
341
  * @action admin_enqueue_scripts 100 1
342
+ * @see AssetServiceProvider.php
343
  *
344
  * @param bool $hook
345
  */
358
  }
359
 
360
  /**
361
+ * Check if current page is plugins.php
362
+ * @global array $pagenow
363
+ * @return bool
364
+ */
365
+ private function isPluginsPage()
366
+ {
367
+ global $pagenow;
368
+
369
+ return ($pagenow === 'plugins.php');
370
+ }
371
+
372
+ /**
373
+ * @return int
374
  */
375
  public function getDelay()
376
  {
Framework/BackgroundProcessing/Demo.php CHANGED
@@ -24,7 +24,7 @@ class Demo
24
 
25
  foreach (range(1, $count) as $k) {
26
  $queue->enqueueAction(self::class . '::' . 'writeToLog', [$k]);
27
- error_log("Enqueued Action {$k}");
28
  }
29
  }
30
 
@@ -33,6 +33,6 @@ class Demo
33
  $interval = mt_rand(0, 2);
34
  sleep($interval);
35
  $pid = getmypid();
36
- error_log("Action {$k} done [PID {$pid}]!");
37
  }
38
  }
24
 
25
  foreach (range(1, $count) as $k) {
26
  $queue->enqueueAction(self::class . '::' . 'writeToLog', [$k]);
27
+ \WPStaging\functions\debug_log("Enqueued Action {$k}");
28
  }
29
  }
30
 
33
  $interval = mt_rand(0, 2);
34
  sleep($interval);
35
  $pid = getmypid();
36
+ \WPStaging\functions\debug_log("Action {$k} done [PID {$pid}]!");
37
  }
38
  }
Framework/BackgroundProcessing/Queue.php CHANGED
@@ -160,7 +160,7 @@ class Queue
160
  $result = $this->database->query($query, true);
161
 
162
  if (empty($result)) {
163
- error_log(json_encode([
164
  'root' => 'Error while trying insert Action information.',
165
  'class' => get_class($this),
166
  'query' => $query,
@@ -173,7 +173,7 @@ class Queue
173
  $id = $this->database->insertId();
174
 
175
  if (empty($id)) {
176
- error_log(json_encode([
177
  'root' => 'Error while trying to fetch last inserted Action ID.',
178
  'class' => get_class($this),
179
  'query' => $query,
@@ -391,7 +391,7 @@ class Queue
391
  $result = $this->database->query($query);
392
 
393
  if (false === $result) {
394
- error_log(json_encode([
395
  'root' => 'Error while trying to fetch Actions information.',
396
  'class' => get_class($this),
397
  'query' => $query,
@@ -536,7 +536,7 @@ class Queue
536
  $error = $this->database->error();
537
 
538
  if (!empty($error)) {
539
- error_log(json_encode([
540
  'root' => 'Error while trying to count Actions.',
541
  'class' => get_class($this),
542
  'query' => $countQuery,
@@ -594,7 +594,7 @@ class Queue
594
  $updated = $this->database->query($statusUpdateQuery, true);
595
 
596
  if (!$updated) {
597
- error_log(json_encode([
598
  'root' => 'Error while trying to update Action status.',
599
  'class' => get_class($this),
600
  'query' => $statusUpdateQuery,
@@ -789,7 +789,7 @@ class Queue
789
  $markResult = $this->database->query($markQuery, true);
790
 
791
  if ($markResult === false) {
792
- error_log(json_encode([
793
  'root' => 'Error while trying to mark dangling Actions.',
794
  'class' => get_class($this),
795
  'query' => $markQuery,
@@ -868,7 +868,7 @@ class Queue
868
  $cancelResult = $this->database->query($cancelQuery, true);
869
 
870
  if ($cancelResult === false) {
871
- error_log(json_encode([
872
  'root' => 'Error while trying to cancel Actions.',
873
  'class' => get_class($this),
874
  'query' => $cancelQuery,
@@ -950,7 +950,7 @@ class Queue
950
  $updated = $this->database->query($statusUpdateQuery, true);
951
 
952
  if (!$updated) {
953
- error_log(json_encode([
954
  'root' => 'Error while trying to update Action field.',
955
  'class' => get_class($this),
956
  'query' => $statusUpdateQuery,
@@ -1059,7 +1059,7 @@ class Queue
1059
  $cleanupResult = $this->database->query($clenupQuery, true);
1060
 
1061
  if ($cleanupResult === false) {
1062
- error_log(json_encode([
1063
  'root' => 'Error while trying to cleanup Actions.',
1064
  'class' => get_class($this),
1065
  'query' => $clenupQuery,
160
  $result = $this->database->query($query, true);
161
 
162
  if (empty($result)) {
163
+ \WPStaging\functions\debug_log(json_encode([
164
  'root' => 'Error while trying insert Action information.',
165
  'class' => get_class($this),
166
  'query' => $query,
173
  $id = $this->database->insertId();
174
 
175
  if (empty($id)) {
176
+ \WPStaging\functions\debug_log(json_encode([
177
  'root' => 'Error while trying to fetch last inserted Action ID.',
178
  'class' => get_class($this),
179
  'query' => $query,
391
  $result = $this->database->query($query);
392
 
393
  if (false === $result) {
394
+ \WPStaging\functions\debug_log(json_encode([
395
  'root' => 'Error while trying to fetch Actions information.',
396
  'class' => get_class($this),
397
  'query' => $query,
536
  $error = $this->database->error();
537
 
538
  if (!empty($error)) {
539
+ \WPStaging\functions\debug_log(json_encode([
540
  'root' => 'Error while trying to count Actions.',
541
  'class' => get_class($this),
542
  'query' => $countQuery,
594
  $updated = $this->database->query($statusUpdateQuery, true);
595
 
596
  if (!$updated) {
597
+ \WPStaging\functions\debug_log(json_encode([
598
  'root' => 'Error while trying to update Action status.',
599
  'class' => get_class($this),
600
  'query' => $statusUpdateQuery,
789
  $markResult = $this->database->query($markQuery, true);
790
 
791
  if ($markResult === false) {
792
+ \WPStaging\functions\debug_log(json_encode([
793
  'root' => 'Error while trying to mark dangling Actions.',
794
  'class' => get_class($this),
795
  'query' => $markQuery,
868
  $cancelResult = $this->database->query($cancelQuery, true);
869
 
870
  if ($cancelResult === false) {
871
+ \WPStaging\functions\debug_log(json_encode([
872
  'root' => 'Error while trying to cancel Actions.',
873
  'class' => get_class($this),
874
  'query' => $cancelQuery,
950
  $updated = $this->database->query($statusUpdateQuery, true);
951
 
952
  if (!$updated) {
953
+ \WPStaging\functions\debug_log(json_encode([
954
  'root' => 'Error while trying to update Action field.',
955
  'class' => get_class($this),
956
  'query' => $statusUpdateQuery,
1059
  $cleanupResult = $this->database->query($clenupQuery, true);
1060
 
1061
  if ($cleanupResult === false) {
1062
+ \WPStaging\functions\debug_log(json_encode([
1063
  'root' => 'Error while trying to cleanup Actions.',
1064
  'class' => get_class($this),
1065
  'query' => $clenupQuery,
Framework/BackgroundProcessing/WithQueueAwareness.php CHANGED
@@ -77,7 +77,7 @@ trait WithQueueAwareness
77
  * a good response without waiting for it to be processed from the server.
78
  */
79
  if ($response instanceof WP_Error) {
80
- error_log(json_encode([
81
  'root' => 'Queue processing admin-ajax request failed.',
82
  'class' => get_class($this),
83
  'code' => $response->get_error_code(),
77
  * a good response without waiting for it to be processed from the server.
78
  */
79
  if ($response instanceof WP_Error) {
80
+ \WPStaging\functions\debug_log(json_encode([
81
  'root' => 'Queue processing admin-ajax request failed.',
82
  'class' => get_class($this),
83
  'code' => $response->get_error_code(),
Framework/CloningProcess/Data/CloningService.php CHANGED
@@ -48,7 +48,7 @@ abstract class CloningService
48
  */
49
  protected function log($message, $type = Logger::TYPE_INFO)
50
  {
51
- $this->dto->getJob()->log("DB Data Step" . $this->dto->getStepNumber() . ": " . $message, $type);
52
  }
53
 
54
  /**
@@ -77,4 +77,29 @@ abstract class CloningService
77
  {
78
  return "/define\s*\(\s*['\"]" . $string . "['\"]\s*,\s*(.*)\s*\);/";
79
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  }
48
  */
49
  protected function log($message, $type = Logger::TYPE_INFO)
50
  {
51
+ $this->dto->getJob()->log("DB Data Step " . $this->dto->getStepNumber() . ": " . $message, $type);
52
  }
53
 
54
  /**
77
  {
78
  return "/define\s*\(\s*['\"]" . $string . "['\"]\s*,\s*(.*)\s*\);/";
79
  }
80
+
81
+ /**
82
+ * Get Option Table Without Base Prefix
83
+ *
84
+ * @param string $blogID
85
+ * @return string
86
+ */
87
+ protected function getOptionTableWithoutBasePrefix($blogID)
88
+ {
89
+ if ($blogID === '0' || $blogID === '1') {
90
+ return 'options';
91
+ }
92
+
93
+ return $blogID . '_options';
94
+ }
95
+
96
+ /**
97
+ * Undocumented function
98
+ *
99
+ * @return boolean
100
+ */
101
+ protected function isNetworkClone()
102
+ {
103
+ return $this->dto->getJob()->isNetworkClone();
104
+ }
105
  }
Framework/CloningProcess/Data/DBCloningService.php CHANGED
@@ -4,6 +4,13 @@ namespace WPStaging\Framework\CloningProcess\Data;
4
 
5
  abstract class DBCloningService extends CloningService
6
  {
 
 
 
 
 
 
 
7
  /**
8
  * Check if table exists
9
  * @param string $table
@@ -72,7 +79,7 @@ abstract class DBCloningService extends CloningService
72
  */
73
  protected function skipOptionsTable()
74
  {
75
- return $this->skipTable('options');
76
  }
77
 
78
  /**
@@ -82,19 +89,29 @@ abstract class DBCloningService extends CloningService
82
  */
83
  protected function updateDbOption($name, $value)
84
  {
85
- return $this->dto->getStagingDb()->query(
 
 
 
86
  $this->dto->getStagingDb()->prepare(
87
- "UPDATE {$this->dto->getPrefix()}options SET option_value = %s WHERE option_name = %s",
88
  $value,
89
  $name
90
  )
91
  );
 
 
 
 
 
 
 
92
  }
93
 
94
  /**
95
  * @param $name
96
  * @param $value
97
- * @return bool|int
98
  */
99
  protected function insertDbOption($name, $value)
100
  {
@@ -105,15 +122,20 @@ abstract class DBCloningService extends CloningService
105
  // can be messed up and do not have any indexes. This would led to duplicate entries and further issues
106
  // Instead we remove first and add the row from scratch
107
 
 
 
108
  $db->query(
109
  $db->prepare(
110
- "DELETE FROM `{$prefix}options` WHERE `option_name` = %s;",
111
  $name
112
  )
113
  );
 
 
 
114
  return $db->query(
115
  $db->prepare(
116
- "INSERT INTO {$prefix}options (option_name,option_value) VALUES (%s,%s)",
117
  $name,
118
  $value
119
  )
@@ -130,7 +152,7 @@ abstract class DBCloningService extends CloningService
130
 
131
  return $db->query(
132
  $db->prepare(
133
- "DELETE FROM `{$this->dto->getPrefix()}options` WHERE `option_name` = %s;",
134
  $name
135
  )
136
  );
4
 
5
  abstract class DBCloningService extends CloningService
6
  {
7
+ private $optionTable = 'options';
8
+
9
+ protected function setOptionTable($tableName = 'options')
10
+ {
11
+ $this->optionTable = $tableName;
12
+ }
13
+
14
  /**
15
  * Check if table exists
16
  * @param string $table
79
  */
80
  protected function skipOptionsTable()
81
  {
82
+ return $this->skipTable($this->optionTable);
83
  }
84
 
85
  /**
89
  */
90
  protected function updateDbOption($name, $value)
91
  {
92
+ $logMessage = "DBCloningService->updateDbOption() SQL: UPDATE FROM {$this->dto->getPrefix()}{$this->optionTable} SET option_value = $value WHERE option_name = $name";
93
+ $this->debugLog($logMessage);
94
+
95
+ $result = $this->dto->getStagingDb()->query(
96
  $this->dto->getStagingDb()->prepare(
97
+ "UPDATE {$this->dto->getPrefix()}{$this->optionTable} SET option_value = %s WHERE option_name = %s",
98
  $value,
99
  $name
100
  )
101
  );
102
+
103
+ if ($result === false) {
104
+ $this->log("DBCloningService->updateDbOption() Error! SQL: " . $logMessage);
105
+ return false;
106
+ }
107
+
108
+ return true;
109
  }
110
 
111
  /**
112
  * @param $name
113
  * @param $value
114
+ * @return bool|int Returns false if there is an error. Otherwise the number of inserted tables. Note: It can be 0
115
  */
116
  protected function insertDbOption($name, $value)
117
  {
122
  // can be messed up and do not have any indexes. This would led to duplicate entries and further issues
123
  // Instead we remove first and add the row from scratch
124
 
125
+ $this->debugLog("DBCloningService->insertDbOption() SQL: DELETE FROM {$prefix}{$this->optionTable} WHERE option_name = $name");
126
+
127
  $db->query(
128
  $db->prepare(
129
+ "DELETE FROM `{$prefix}{$this->optionTable}` WHERE `option_name` = %s;",
130
  $name
131
  )
132
  );
133
+
134
+ $this->debugLog("DBCloningService->insertDbOption() SQL: INSERT INTO {$prefix}{$this->optionTable} ($name, $value)");
135
+
136
  return $db->query(
137
  $db->prepare(
138
+ "INSERT INTO {$prefix}{$this->optionTable} (option_name,option_value) VALUES (%s,%s)",
139
  $name,
140
  $value
141
  )
152
 
153
  return $db->query(
154
  $db->prepare(
155
+ "DELETE FROM `{$this->dto->getPrefix()}{$this->optionTable}` WHERE `option_name` = %s;",
156
  $name
157
  )
158
  );
Framework/CloningProcess/Data/DataCloningDto.php CHANGED
@@ -2,13 +2,13 @@
2
 
3
  namespace WPStaging\Framework\CloningProcess\Data;
4
 
5
- use WPStaging\Backend\Modules\Jobs\Job;
6
  use WPStaging\Framework\CloningProcess\CloningDto;
7
 
8
  class DataCloningDto extends CloningDto
9
  {
10
  /**
11
- * @var Job
12
  */
13
  protected $job;
14
 
@@ -38,6 +38,16 @@ class DataCloningDto extends CloningDto
38
  */
39
  protected $stagingSiteUrl;
40
 
 
 
 
 
 
 
 
 
 
 
41
  /**
42
  * @var string
43
  */
@@ -65,7 +75,7 @@ class DataCloningDto extends CloningDto
65
 
66
  /**
67
  * DataCloningDto constructor.
68
- * @param Job $job
69
  * @param \wpdb $stagingDb
70
  * @param \wpdb $productionDb
71
  * @param bool $isExternal
@@ -86,7 +96,7 @@ class DataCloningDto extends CloningDto
86
  * @param string $mainJob
87
  */
88
  public function __construct(
89
- Job $job,
90
  \wpdb $stagingDb,
91
  \wpdb $productionDb,
92
  $isExternal,
@@ -117,6 +127,8 @@ class DataCloningDto extends CloningDto
117
  $this->homeUrl = $homeUrl;
118
  $this->baseUrl = $baseUrl;
119
  $this->mainJob = $mainJob;
 
 
120
  }
121
 
122
  /**
@@ -167,6 +179,36 @@ class DataCloningDto extends CloningDto
167
  return $this->stagingSiteUrl;
168
  }
169
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  /**
171
  * @return string
172
  */
2
 
3
  namespace WPStaging\Framework\CloningProcess\Data;
4
 
5
+ use WPStaging\Backend\Modules\Jobs\Job as CloningJob;
6
  use WPStaging\Framework\CloningProcess\CloningDto;
7
 
8
  class DataCloningDto extends CloningDto
9
  {
10
  /**
11
+ * @var CloningJob
12
  */
13
  protected $job;
14
 
38
  */
39
  protected $stagingSiteUrl;
40
 
41
+ /**
42
+ * @var string
43
+ */
44
+ protected $stagingSiteDomain;
45
+
46
+ /**
47
+ * @var string
48
+ */
49
+ protected $stagingSitePath;
50
+
51
  /**
52
  * @var string
53
  */
75
 
76
  /**
77
  * DataCloningDto constructor.
78
+ * @param CloningJob $job
79
  * @param \wpdb $stagingDb
80
  * @param \wpdb $productionDb
81
  * @param bool $isExternal
96
  * @param string $mainJob
97
  */
98
  public function __construct(
99
+ CloningJob $job,
100
  \wpdb $stagingDb,
101
  \wpdb $productionDb,
102
  $isExternal,
127
  $this->homeUrl = $homeUrl;
128
  $this->baseUrl = $baseUrl;
129
  $this->mainJob = $mainJob;
130
+ $this->stagingSiteDomain = '';
131
+ $this->stagingSitePath = '';
132
  }
133
 
134
  /**
179
  return $this->stagingSiteUrl;
180
  }
181
 
182
+ /**
183
+ * @return string
184
+ */
185
+ public function getStagingSiteDomain()
186
+ {
187
+ if (!isset($this->stagingSiteDomain) || $this->stagingSiteDomain === '') {
188
+ $this->stagingSiteDomain = parse_url($this->getStagingSiteUrl())['host'];
189
+ }
190
+
191
+ return $this->stagingSiteDomain;
192
+ }
193
+
194
+ /**
195
+ * @return string
196
+ */
197
+ public function getStagingSitePath()
198
+ {
199
+ if (!isset($this->stagingSitePath) || $this->stagingSitePath === '') {
200
+ $parsedUrl = parse_url($this->getStagingSiteUrl());
201
+
202
+ if (isset($parsedUrl['path'])) {
203
+ $this->stagingSitePath = $parsedUrl['path'];
204
+ } else {
205
+ $this->stagingSitePath = '';
206
+ }
207
+ }
208
+
209
+ return $this->stagingSitePath;
210
+ }
211
+
212
  /**
213
  * @return string
214
  */
Framework/CloningProcess/Data/Job.php ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\CloningProcess\Data;
4
+
5
+ use WPStaging\Backend\Modules\Jobs\CloningProcess;
6
+ use WPStaging\Framework\CloningProcess\Data\DataCloningDto;
7
+ use WPStaging\Framework\SiteInfo;
8
+ use WPStaging\Framework\Utils\Urls;
9
+ use WPStaging\Framework\Utils\WpDefaultDirectories;
10
+
11
+ /**
12
+ * Class Job
13
+ * @package WPStaging\Framework\CloningProcess\Data
14
+ */
15
+ abstract class Job extends CloningProcess
16
+ {
17
+ /**
18
+ * @var string
19
+ */
20
+ private $prefix;
21
+
22
+ /**
23
+ *
24
+ * @var string
25
+ */
26
+ private $homeUrl;
27
+
28
+ /**
29
+ *
30
+ * @var string
31
+ */
32
+ private $siteUrl;
33
+
34
+ /**
35
+ *
36
+ * @var string
37
+ */
38
+ protected $baseUrl;
39
+
40
+ /**
41
+ * Tables e.g wpstg3_options
42
+ * @var array
43
+ */
44
+ protected $tables;
45
+
46
+ /**
47
+ * Initialize
48
+ */
49
+ public function initialize()
50
+ {
51
+ $this->initializeDbObjects();
52
+
53
+ $this->prefix = $this->options->prefix;
54
+
55
+ $this->homeUrl = (new Urls())->getHomeUrl();
56
+ $this->siteUrl = (new Urls())->getSiteUrl();
57
+ $this->baseUrl = (new Urls())->getBaseUrl();
58
+
59
+ // Reset current step
60
+ if ($this->options->currentStep === 0) {
61
+ $this->options->currentStep = 0;
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Start Module
67
+ * @return object
68
+ */
69
+ public function start()
70
+ {
71
+ // Execute steps
72
+ $this->run();
73
+
74
+ // Save option, progress
75
+ $this->saveOptions();
76
+
77
+ return (object)$this->response;
78
+ }
79
+
80
+ /**
81
+ * @param int $stepNumber
82
+ * @return DataCloningDto
83
+ */
84
+ protected function getCloningDto($stepNumber)
85
+ {
86
+ return new DataCloningDto(
87
+ $this,
88
+ $this->stagingDb,
89
+ $this->productionDb,
90
+ $this->isExternalDatabase(),
91
+ $this->isMultisiteAndPro(),
92
+ $this->isExternalDatabase() ? $this->options->databaseServer : null,
93
+ $this->isExternalDatabase() ? $this->options->databaseUser : null,
94
+ $this->isExternalDatabase() ? $this->options->databasePassword : null,
95
+ $this->isExternalDatabase() ? $this->options->databaseDatabase : null,
96
+ $stepNumber,
97
+ $this->prefix,
98
+ $this->tables,
99
+ $this->getOptions()->destinationDir,
100
+ $this->getStagingSiteUrl(),
101
+ (new WpDefaultDirectories())->getRelativeUploadPath(),
102
+ $this->settings,
103
+ $this->homeUrl,
104
+ $this->baseUrl,
105
+ $this->options->mainJob
106
+ );
107
+ }
108
+
109
+ /**
110
+ * Execute the Current Step
111
+ * Returns false when over threshold limits are hit or when the job is done, true otherwise
112
+ * @return bool
113
+ */
114
+ protected function execute()
115
+ {
116
+ // Over limits threshold
117
+ if ($this->isOverThreshold()) {
118
+ // Prepare response and save current progress
119
+ $this->prepareResponse(false, false);
120
+ $this->saveOptions();
121
+ return false;
122
+ }
123
+
124
+ // No more steps, finished
125
+ if ($this->isFinished()) {
126
+ $this->prepareResponse(true, false);
127
+ return false;
128
+ }
129
+
130
+ // Execute step
131
+ $stepMethodName = "step" . $this->options->currentStep;
132
+ if (!$this->{$stepMethodName}()) {
133
+ $this->prepareResponse(false, false);
134
+ return false;
135
+ }
136
+
137
+ // Prepare Response
138
+ $this->prepareResponse();
139
+
140
+ // Not finished
141
+ return true;
142
+ }
143
+
144
+ /**
145
+ * Checks Whether There is Any Job to Execute or Not
146
+ * @return bool
147
+ */
148
+ protected function isFinished()
149
+ {
150
+ return
151
+ !$this->isRunning() ||
152
+ $this->options->currentStep > $this->options->totalSteps ||
153
+ !method_exists($this, "step" . $this->options->currentStep);
154
+ }
155
+
156
+ /**
157
+ * Check if WP is installed in subdir
158
+ * @return boolean
159
+ */
160
+ protected function isSubDir()
161
+ {
162
+ return (new SiteInfo())->isInstalledInSubDir();
163
+ }
164
+
165
+ /**
166
+ * Get the install sub directory if WP is installed in sub directory
167
+ * @return string
168
+ */
169
+ protected function getInstallSubDir()
170
+ {
171
+ $home = get_option('home');
172
+ $siteurl = get_option('siteurl');
173
+
174
+ if (empty($home) || empty($siteurl)) {
175
+ return '';
176
+ }
177
+
178
+ return str_replace([$home, '/'], '', $siteurl);
179
+ }
180
+
181
+ /**
182
+ * Return URL of staging site
183
+ * @return string
184
+ */
185
+ protected function getStagingSiteUrl()
186
+ {
187
+ if (isset($this->options->url)) {
188
+ return $this->options->url;
189
+ }
190
+
191
+ if (!empty($this->options->cloneHostname)) {
192
+ return $this->options->cloneHostname;
193
+ }
194
+
195
+ if ($this->isMultisiteAndPro()) {
196
+ if ($this->isSubDir()) {
197
+ return trailingslashit($this->baseUrl) . trailingslashit($this->getInstallSubDir()) . $this->options->cloneDirectoryName;
198
+ }
199
+
200
+ // Get the path to the main multisite without a trailingslash e.g. wordpress
201
+ $multisitePath = defined('PATH_CURRENT_SITE') ? PATH_CURRENT_SITE : '/';
202
+ return rtrim($this->baseUrl, '/\\') . $multisitePath . $this->options->cloneDirectoryName;
203
+ }
204
+
205
+ if ($this->isSubDir()) {
206
+ return trailingslashit($this->homeUrl) . trailingslashit($this->getInstallSubDir()) . $this->options->cloneDirectoryName;
207
+ }
208
+
209
+ return trailingslashit($this->siteUrl) . $this->options->cloneDirectoryName;
210
+ }
211
+ }
Framework/CloningProcess/Data/MultisiteAddNetworkAdministrators.php CHANGED
@@ -12,7 +12,7 @@ class MultisiteAddNetworkAdministrators extends DBCloningService
12
  protected function internalExecute()
13
  {
14
  $productionDb = $this->dto->getProductionDb();
15
- $db = $this->dto->getStagingDb();
16
  $prefix = $this->dto->getPrefix();
17
 
18
  $this->log("Adding network administrators");
@@ -30,7 +30,7 @@ class MultisiteAddNetworkAdministrators extends DBCloningService
30
  $userId = $productionDb->get_var("SELECT ID FROM {$productionDb->base_prefix}users WHERE user_login = '{$username}' ");
31
 
32
  // Check if user capability already exists
33
- $capabilityExists = $db->get_var("SELECT user_id FROM {$prefix}usermeta WHERE user_id = '{$userId}' AND meta_key = '{$prefix}capabilities' ");
34
 
35
  // Do nothing if already exists
36
  if (!empty($capabilityExists)) {
@@ -38,7 +38,7 @@ class MultisiteAddNetworkAdministrators extends DBCloningService
38
  }
39
 
40
  // Add new capability
41
- $sql .= $db->prepare(
42
  "INSERT INTO `{$prefix}usermeta` ( `umeta_id`, `user_id`, `meta_key`, `meta_value` ) VALUES ( NULL , %s, %s, %s );\n",
43
  $userId,
44
  $prefix . 'capabilities',
@@ -62,11 +62,11 @@ class MultisiteAddNetworkAdministrators extends DBCloningService
62
  */
63
  protected function executeSql($sqlbatch)
64
  {
65
- $db = $this->dto->getStagingDb();
66
  $queries = array_filter(explode(";\n", $sqlbatch));
67
 
68
  foreach ($queries as $query) {
69
- if ($db->query($query) === false) {
70
  $this->log("Could not execute query {$query}", Logger::TYPE_WARNING);
71
  }
72
  }
12
  protected function internalExecute()
13
  {
14
  $productionDb = $this->dto->getProductionDb();
15
+ $stagingDb = $this->dto->getStagingDb();
16
  $prefix = $this->dto->getPrefix();
17
 
18
  $this->log("Adding network administrators");
30
  $userId = $productionDb->get_var("SELECT ID FROM {$productionDb->base_prefix}users WHERE user_login = '{$username}' ");
31
 
32
  // Check if user capability already exists
33
+ $capabilityExists = $stagingDb->get_var("SELECT user_id FROM {$prefix}usermeta WHERE user_id = '{$userId}' AND meta_key = '{$prefix}capabilities' ");
34
 
35
  // Do nothing if already exists
36
  if (!empty($capabilityExists)) {
38
  }
39
 
40
  // Add new capability
41
+ $sql .= $stagingDb->prepare(
42
  "INSERT INTO `{$prefix}usermeta` ( `umeta_id`, `user_id`, `meta_key`, `meta_value` ) VALUES ( NULL , %s, %s, %s );\n",
43
  $userId,
44
  $prefix . 'capabilities',
62
  */
63
  protected function executeSql($sqlbatch)
64
  {
65
+ $stagingDb = $this->dto->getStagingDb();
66
  $queries = array_filter(explode(";\n", $sqlbatch));
67
 
68
  foreach ($queries as $query) {
69
+ if ($stagingDb->query($query) === false) {
70
  $this->log("Could not execute query {$query}", Logger::TYPE_WARNING);
71
  }
72
  }
Framework/CloningProcess/Data/MultisiteUpdateActivePlugins.php CHANGED
@@ -3,7 +3,6 @@
3
  namespace WPStaging\Framework\CloningProcess\Data;
4
 
5
  use WPStaging\Backend\Modules\Jobs\Exceptions\FatalException;
6
- use WPStaging\Core\Utils\Logger;
7
 
8
  class MultisiteUpdateActivePlugins extends DBCloningService
9
  {
@@ -38,7 +37,6 @@ class MultisiteUpdateActivePlugins extends DBCloningService
38
  throw new FatalException("Can not update option active_plugins in {$this->dto->getPrefix()}options");
39
  }
40
 
41
- //$this->log("Done");
42
  return true;
43
  }
44
  }
3
  namespace WPStaging\Framework\CloningProcess\Data;
4
 
5
  use WPStaging\Backend\Modules\Jobs\Exceptions\FatalException;
 
6
 
7
  class MultisiteUpdateActivePlugins extends DBCloningService
8
  {
37
  throw new FatalException("Can not update option active_plugins in {$this->dto->getPrefix()}options");
38
  }
39
 
 
40
  return true;
41
  }
42
  }
Framework/CloningProcess/Data/ResetIndexPhp.php CHANGED
@@ -36,7 +36,6 @@ class ResetIndexPhp extends FileCloningService
36
 
37
  $this->writeFile('index.php', $content);
38
 
39
- //$this->log("Done");
40
  return true;
41
  }
42
  }
36
 
37
  $this->writeFile('index.php', $content);
38
 
 
39
  return true;
40
  }
41
  }
Framework/CloningProcess/Data/UpdateSiteUrlAndHome.php CHANGED
@@ -3,34 +3,144 @@
3
  namespace WPStaging\Framework\CloningProcess\Data;
4
 
5
  use WPStaging\Backend\Modules\Jobs\Exceptions\FatalException;
 
6
 
7
  class UpdateSiteUrlAndHome extends DBCloningService
8
  {
9
  /**
10
  * Replace "siteurl" and "home"
 
11
  * @return bool
12
  */
13
  protected function internalExecute()
14
  {
15
- if ($this->skipOptionsTable()) {
16
- $this->log('Skipped');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  return true;
18
  }
19
 
20
- $this->log("Updating siteurl and homeurl in {$this->dto->getPrefix()}options to " . $this->dto->getStagingSiteUrl());
21
  // Replace URLs
22
  $result = $this->dto->getStagingDb()->query(
23
  $this->dto->getStagingDb()->prepare(
24
- "UPDATE {$this->dto->getPrefix()}options SET option_value = %s WHERE option_name = 'siteurl' or option_name='home'",
25
- $this->dto->getStagingSiteUrl()
26
  )
27
  );
28
 
29
  if ($result === false) {
30
- throw new FatalException("Failed to update siteurl and homeurl in {$this->dto->getPrefix()}options. {$this->dto->getStagingDb()->last_error}");
31
- } else {
32
- //$this->log("Done");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  return true;
35
  }
36
  }
3
  namespace WPStaging\Framework\CloningProcess\Data;
4
 
5
  use WPStaging\Backend\Modules\Jobs\Exceptions\FatalException;
6
+ use WPStaging\Framework\Utils\Strings;
7
 
8
  class UpdateSiteUrlAndHome extends DBCloningService
9
  {
10
  /**
11
  * Replace "siteurl" and "home"
12
+ * If complete network clone also update "domain" and "path" in "blogs" and "site" table
13
  * @return bool
14
  */
15
  protected function internalExecute()
16
  {
17
+ if ($this->isNetworkClone()) {
18
+ $this->updateSiteTable();
19
+ return $this->updateAllOptionsTables();
20
+ }
21
+
22
+ return $this->updateOptionsTable('options', $this->dto->getStagingSiteUrl());
23
+ }
24
+
25
+ /**
26
+ * @return boolean
27
+ */
28
+ private function updateAllOptionsTables()
29
+ {
30
+ $baseDomain = DOMAIN_CURRENT_SITE;
31
+ $basePath = trailingslashit(PATH_CURRENT_SITE);
32
+ $stagingSiteDomain = $this->dto->getStagingSiteDomain();
33
+ $stagingSitePath = trailingslashit($this->dto->getStagingSitePath());
34
+ $str = new Strings();
35
+ foreach (get_sites() as $site) {
36
+ $tableName = $this->getOptionTableWithoutBasePrefix($site->blog_id);
37
+
38
+ $stagingDomain = $str->str_replace_first($baseDomain, $stagingSiteDomain, $site->domain);
39
+ $stagingPath = $str->str_replace_first($basePath, $stagingSitePath, $site->path);
40
+ $this->updateBlogsTable($site->blog_id, $stagingDomain, $stagingPath);
41
+
42
+ $siteUrl = parse_url(site_url())["scheme"] . "://" . $stagingDomain . $stagingPath;
43
+
44
+ $this->updateOptionsTable($tableName, $siteUrl);
45
+ }
46
+
47
+ return true;
48
+ }
49
+
50
+ /**
51
+ * @param string $tableName
52
+ * @param string $siteUrl
53
+ * @return boolean
54
+ *
55
+ * @throws FatalException
56
+ */
57
+ private function updateOptionsTable($tableName, $siteUrl)
58
+ {
59
+ if ($this->skipTable($tableName)) {
60
+ $this->log("{$this->dto->getPrefix()}{$tableName} Skipped");
61
  return true;
62
  }
63
 
64
+ $this->log("Updating siteurl and homeurl in {$this->dto->getPrefix()}{$tableName} to " . $siteUrl);
65
  // Replace URLs
66
  $result = $this->dto->getStagingDb()->query(
67
  $this->dto->getStagingDb()->prepare(
68
+ "UPDATE {$this->dto->getPrefix()}{$tableName} SET option_value = %s WHERE option_name = 'siteurl' or option_name='home'",
69
+ $siteUrl
70
  )
71
  );
72
 
73
  if ($result === false) {
74
+ throw new FatalException("Failed to update siteurl and homeurl in {$this->dto->getPrefix()}{$tableName}. {$this->dto->getStagingDb()->last_error}");
75
+ }
76
+
77
+ return true;
78
+ }
79
+
80
+ /**
81
+ * Update Multisite Site Table
82
+ * @return boolean
83
+ *
84
+ * @throws FatalException
85
+ */
86
+ private function updateSiteTable()
87
+ {
88
+ $tableName = 'site';
89
+ $domain = $this->dto->getStagingSiteDomain();
90
+ $path = trailingslashit($this->dto->getStagingSitePath());
91
+ if ($this->skipTable($tableName)) {
92
+ $this->log("{$this->dto->getPrefix()}{$tableName} Skipped");
93
+ return true;
94
  }
95
+
96
+ $this->log("Updating domain and path in {$this->dto->getPrefix()}{$tableName} to " . $domain . " and " . $path . " respectively");
97
+ // Replace URLs
98
+ $result = $this->dto->getStagingDb()->query(
99
+ $this->dto->getStagingDb()->prepare(
100
+ "UPDATE {$this->dto->getPrefix()}{$tableName} SET domain = %s, path = %s",
101
+ $domain,
102
+ $path
103
+ )
104
+ );
105
+
106
+ if ($result === false) {
107
+ throw new FatalException("Failed to update domain and path in {$this->dto->getPrefix()}{$tableName}. {$this->dto->getStagingDb()->last_error}");
108
+ }
109
+
110
+ return true;
111
+ }
112
+
113
+ /**
114
+ * @param int $blogID
115
+ * @param string $domain
116
+ * @param string $path
117
+ * @return boolean
118
+ *
119
+ * @throws FatalException
120
+ */
121
+ private function updateBlogsTable($blogID, $domain, $path)
122
+ {
123
+ $tableName = 'blogs';
124
+ if ($this->skipTable($tableName)) {
125
+ $this->log("{$this->dto->getPrefix()}{$tableName} Skipped");
126
+ return true;
127
+ }
128
+
129
+ $this->log("Updating domain in {$this->dto->getPrefix()}{$tableName} to " . $domain . " and " . $path . " respectively");
130
+ // Replace URLs
131
+ $result = $this->dto->getStagingDb()->query(
132
+ $this->dto->getStagingDb()->prepare(
133
+ "UPDATE {$this->dto->getPrefix()}{$tableName} SET domain = %s, path = %s WHERE blog_id = %s",
134
+ $domain,
135
+ $path,
136
+ $blogID
137
+ )
138
+ );
139
+
140
+ if ($result === false) {
141
+ throw new FatalException("Failed to update domain and path in {$this->dto->getPrefix()}{$tableName}. {$this->dto->getStagingDb()->last_error}");
142
+ }
143
+
144
  return true;
145
  }
146
  }
Framework/CloningProcess/Data/UpdateStagingOptionsTable.php CHANGED
@@ -16,24 +16,63 @@ class UpdateStagingOptionsTable extends DBCloningService
16
  */
17
  protected function internalExecute()
18
  {
19
- $this->log("Updating {$this->dto->getPrefix()}options {$this->dto->getStagingDb()->last_error}");
20
- if ($this->skipOptionsTable()) {
21
- return true;
22
  }
23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  $updateOrInsert = [
25
  'wpstg_is_staging_site' => 'true',
26
  'wpstg_rmpermalinks_executed' => ' ',
27
  'blog_public' => 0,
28
  FirstRun::FIRST_RUN_KEY => 'true',
29
  ];
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  // only insert or update clone option if job is not updating
31
  // during update this data will be preserved
32
  if ($this->dto->getMainJob() !== 'updating') {
33
- $updateOrInsert[CloneOptions::WPSTG_CLONE_SETTINGS_KEY] = serialize((object) [
34
- FirstRun::MAILS_DISABLED_KEY => !((bool) $this->dto->getJob()->getOptions()->emailsAllowed),
35
- ExcludedPlugins::EXCLUDED_PLUGINS_KEY => (new ExcludedPlugins())->getFilteredPluginsToExclude(),
36
- ]);
37
  }
38
 
39
  if (!$this->keepPermalinks()) {
@@ -76,7 +115,7 @@ class UpdateStagingOptionsTable extends DBCloningService
76
  {
77
  foreach ($options as $name => $value) {
78
  $this->debugLog("Updating/inserting $name to $value");
79
- if (!$this->insertDbOption($name, $value)) {
80
  $this->log("Failed to update/insert $name {$this->dto->getStagingDb()->last_error}", Logger::TYPE_WARNING);
81
  }
82
  }
16
  */
17
  protected function internalExecute()
18
  {
19
+ if ($this->isNetworkClone()) {
20
+ return $this->updateAllOptionsTables();
 
21
  }
22
 
23
+ return $this->updateOptionsTable();
24
+ }
25
+
26
+ /**
27
+ * @return boolean
28
+ */
29
+ private function updateAllOptionsTables()
30
+ {
31
+ foreach (get_sites() as $site) {
32
+ $tableName = $this->getOptionTableWithoutBasePrefix($site->blog_id);
33
+ $this->setOptionTable($tableName);
34
+
35
+ $this->log("Updating {$this->dto->getPrefix()}{$tableName} {$this->dto->getStagingDb()->last_error}");
36
+ if ($this->skipOptionsTable()) {
37
+ continue;
38
+ }
39
+
40
+ $this->updateOptionsTable(is_main_site($site->blog_id));
41
+ }
42
+
43
+ return true;
44
+ }
45
+
46
+ /**
47
+ * @param boolean $isMainSite
48
+ *
49
+ * @return boolean
50
+ */
51
+ private function updateOptionsTable($isMainSite = false)
52
+ {
53
  $updateOrInsert = [
54
  'wpstg_is_staging_site' => 'true',
55
  'wpstg_rmpermalinks_executed' => ' ',
56
  'blog_public' => 0,
57
  FirstRun::FIRST_RUN_KEY => 'true',
58
  ];
59
+
60
+ $cloneOptions = [
61
+ FirstRun::MAILS_DISABLED_KEY => !((bool) $this->dto->getJob()->getOptions()->emailsAllowed),
62
+ ExcludedPlugins::EXCLUDED_PLUGINS_KEY => (new ExcludedPlugins())->getFilteredPluginsToExclude(),
63
+ ];
64
+
65
+ // Add the base directory path and is network clone when cloning into network
66
+ // Required to generate .htaccess file on the staging network.
67
+ if ($this->dto->getJob()->isNetworkClone() && $isMainSite) {
68
+ $cloneOptions[\WPStaging\Pro\Staging\NetworkClone::NEW_NETWORK_CLONE_KEY] = 'true';
69
+ $cloneOptions[\WPStaging\Pro\Staging\NetworkClone::NETWORK_BASE_DIR_KEY] = $this->dto->getStagingSitePath();
70
+ }
71
+
72
  // only insert or update clone option if job is not updating
73
  // during update this data will be preserved
74
  if ($this->dto->getMainJob() !== 'updating') {
75
+ $updateOrInsert[CloneOptions::WPSTG_CLONE_SETTINGS_KEY] = serialize((object) $cloneOptions);
 
 
 
76
  }
77
 
78
  if (!$this->keepPermalinks()) {
115
  {
116
  foreach ($options as $name => $value) {
117
  $this->debugLog("Updating/inserting $name to $value");
118
+ if ($this->insertDbOption($name, $value) === false) {
119
  $this->log("Failed to update/insert $name {$this->dto->getStagingDb()->last_error}", Logger::TYPE_WARNING);
120
  }
121
  }
Framework/CloningProcess/Data/UpdateTablePrefix.php CHANGED
@@ -15,6 +15,10 @@ class UpdateTablePrefix extends DBCloningService
15
  $db = $this->dto->getStagingDb();
16
  //On non-external jobs, $productionDb is same as $db
17
  $productionDb = $this->dto->getProductionDb();
 
 
 
 
18
 
19
  $this->log("Updating db prefix in {$prefix}usermeta.");
20
 
@@ -22,14 +26,20 @@ class UpdateTablePrefix extends DBCloningService
22
  return true;
23
  }
24
 
25
- $this->debugLog("SQL: UPDATE {$prefix}usermeta SET meta_key = replace(meta_key, {$productionDb->prefix}, {$prefix}) WHERE meta_key LIKE {$productionDb->prefix}%");
 
 
 
 
 
 
26
 
27
  $update = $db->query(
28
  $db->prepare(
29
  "UPDATE {$prefix}usermeta SET meta_key = replace(meta_key, %s, %s) WHERE meta_key LIKE %s",
30
- $productionDb->prefix,
31
  $prefix,
32
- $productionDb->prefix . "%"
33
  )
34
  );
35
 
15
  $db = $this->dto->getStagingDb();
16
  //On non-external jobs, $productionDb is same as $db
17
  $productionDb = $this->dto->getProductionDb();
18
+ $productionPrefix = $productionDb->prefix;
19
+ if ($this->isNetworkClone()) {
20
+ $productionPrefix = $productionDb->base_prefix;
21
+ }
22
 
23
  $this->log("Updating db prefix in {$prefix}usermeta.");
24
 
26
  return true;
27
  }
28
 
29
+ // Skip, prefixes are identical. No change needed
30
+ if ($productionPrefix === $prefix) {
31
+ $this->log("Prefix already the same - skipping");
32
+ return true;
33
+ }
34
+
35
+ $this->debugLog("SQL: UPDATE {$prefix}usermeta SET meta_key = replace(meta_key, {$productionPrefix}, {$prefix}) WHERE meta_key LIKE {$productionPrefix}%");
36
 
37
  $update = $db->query(
38
  $db->prepare(
39
  "UPDATE {$prefix}usermeta SET meta_key = replace(meta_key, %s, %s) WHERE meta_key LIKE %s",
40
+ $productionPrefix,
41
  $prefix,
42
+ $productionPrefix . "%"
43
  )
44
  );
45
 
Framework/CloningProcess/Data/UpdateWpConfigConstants.php CHANGED
@@ -2,6 +2,9 @@
2
 
3
  namespace WPStaging\Framework\CloningProcess\Data;
4
 
 
 
 
5
  class UpdateWpConfigConstants extends FileCloningService
6
  {
7
  protected $abspathRegex = "/if\s*\(\s*\s*!\s*defined\s*\(\s*['\"]ABSPATH['\"]\s*(.*)\s*\)\s*\)/";
@@ -17,7 +20,8 @@ class UpdateWpConfigConstants extends FileCloningService
17
 
18
  $replaceOrAdd = [
19
  "UPLOADS" => sprintf("'%s'", $this->escapeSingleQuotes($this->dto->getUploadFolder())),
20
- "WP_PLUGIN_DIR" => '__DIR__ . "/wp-content/plugins"',
 
21
  "WP_LANG_DIR" => '__DIR__ . "/wp-content/languages"',
22
  "WP_HOME" => sprintf("'%s'", $this->escapeSingleQuotes($this->dto->getStagingSiteUrl())),
23
  "WP_SITEURL" => sprintf("'%s'", $this->escapeSingleQuotes($this->dto->getStagingSiteUrl())),
@@ -30,11 +34,19 @@ class UpdateWpConfigConstants extends FileCloningService
30
  $replaceOrAdd['DB_PASSWORD'] = sprintf("'%s'", $this->escapeSingleQuotes($this->dto->getExternalDatabasePassword()));
31
  $replaceOrAdd['DB_NAME'] = sprintf("'%s'", $this->escapeSingleQuotes($this->dto->getExternalDatabaseName()));
32
  }
33
- //It's OK to attempt replacing multi-site constants even in single-site jobs as they will not be present in a single-site wp-config.php
34
- $replaceOrSkip = [
35
- "WP_ALLOW_MULTISITE" => 'false',
36
- "MULTISITE" => 'false',
37
- ];
 
 
 
 
 
 
 
 
38
  //In the old job structure, these were deleted for the single-site non-external job only. Now they are deleted everywhere
39
  $delete = [
40
  "WP_CONTENT_DIR",
2
 
3
  namespace WPStaging\Framework\CloningProcess\Data;
4
 
5
+ use WPStaging\Framework\Utils\SlashMode;
6
+ use WPStaging\Framework\Utils\WpDefaultDirectories;
7
+
8
  class UpdateWpConfigConstants extends FileCloningService
9
  {
10
  protected $abspathRegex = "/if\s*\(\s*\s*!\s*defined\s*\(\s*['\"]ABSPATH['\"]\s*(.*)\s*\)\s*\)/";
20
 
21
  $replaceOrAdd = [
22
  "UPLOADS" => sprintf("'%s'", $this->escapeSingleQuotes($this->dto->getUploadFolder())),
23
+ "WP_PLUGIN_DIR" => '__DIR__ . "' . (new WpDefaultDirectories())->getRelativePluginPath(SlashMode::LEADING_SLASH) . '"',
24
+ "WP_PLUGIN_URL" => sprintf("'%s'", $this->escapeSingleQuotes($this->dto->getStagingSiteUrl() . (new WpDefaultDirectories())->getRelativePluginPath(SlashMode::LEADING_SLASH))),
25
  "WP_LANG_DIR" => '__DIR__ . "/wp-content/languages"',
26
  "WP_HOME" => sprintf("'%s'", $this->escapeSingleQuotes($this->dto->getStagingSiteUrl())),
27
  "WP_SITEURL" => sprintf("'%s'", $this->escapeSingleQuotes($this->dto->getStagingSiteUrl())),
34
  $replaceOrAdd['DB_PASSWORD'] = sprintf("'%s'", $this->escapeSingleQuotes($this->dto->getExternalDatabasePassword()));
35
  $replaceOrAdd['DB_NAME'] = sprintf("'%s'", $this->escapeSingleQuotes($this->dto->getExternalDatabaseName()));
36
  }
37
+
38
+ if ($this->isNetworkClone()) {
39
+ $replaceOrAdd['DOMAIN_CURRENT_SITE'] = sprintf("'%s'", $this->escapeSingleQuotes($this->dto->getStagingSiteDomain()));
40
+ $replaceOrAdd['PATH_CURRENT_SITE'] = sprintf("'%s'", trailingslashit($this->escapeSingleQuotes($this->dto->getStagingSitePath())));
41
+ }
42
+
43
+ $replaceOrSkip = [];
44
+ if (!$this->isNetworkClone()) {
45
+ //It's OK to attempt replacing multi-site constants even in single-site jobs as they will not be present in a single-site wp-config.php
46
+ $replaceOrSkip["WP_ALLOW_MULTISITE"] = 'false';
47
+ $replaceOrSkip["MULTISITE"] = 'false';
48
+ }
49
+
50
  //In the old job structure, these were deleted for the single-site non-external job only. Now they are deleted everywhere
51
  $delete = [
52
  "WP_CONTENT_DIR",
Framework/CloningProcess/Data/UpdateWpOptionsTablePrefix.php CHANGED
@@ -9,18 +9,55 @@ class UpdateWpOptionsTablePrefix extends DBCloningService
9
  {
10
  protected function internalExecute()
11
  {
12
- $prefix = $this->dto->getPrefix();
13
  $stagingDb = $this->dto->getStagingDb();
14
  $productionDb = $this->dto->getProductionDb();
15
- $this->log("Updating db prefix in {$prefix}options.");
16
 
17
- if ($this->skipOptionsTable()) {
 
 
18
  return true;
19
  }
20
 
21
- // Skip, prefixes are identical. No change needed
22
- if ($productionDb->prefix === $prefix) {
23
- $this->log("Prefix already the same - skipping");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  return true;
25
  }
26
 
@@ -29,6 +66,7 @@ class UpdateWpOptionsTablePrefix extends DBCloningService
29
  'wp_mail_smtp',
30
  'wp_mail_smtp_version',
31
  'wp_mail_smtp_debug',
 
32
  ];
33
 
34
  $filters = apply_filters('wpstg_data_excl_rows', $filters);
@@ -42,16 +80,16 @@ class UpdateWpOptionsTablePrefix extends DBCloningService
42
 
43
  $updateOptions = $stagingDb->query(
44
  $stagingDb->prepare(
45
- "UPDATE IGNORE {$prefix}options SET option_name= replace(option_name, %s, %s) WHERE option_name LIKE %s" . $where,
46
- $productionDb->prefix,
47
- $prefix,
48
- $productionDb->prefix . "%"
49
  )
50
  );
51
 
52
  if ($updateOptions === false) {
53
- $this->log("Error on Query: UPDATE IGNORE {$prefix}options SET option_name= replace(option_name, {$productionDb->prefix}, {$prefix}) WHERE option_name LIKE {$productionDb->prefix} {$where}", Logger::TYPE_ERROR);
54
- throw new FatalException("Failed to update db option_names in {$prefix}options. Error: {$productionDb->last_error}");
55
  }
56
 
57
  return true;
9
  {
10
  protected function internalExecute()
11
  {
12
+ $stagingPrefix = $this->dto->getPrefix();
13
  $stagingDb = $this->dto->getStagingDb();
14
  $productionDb = $this->dto->getProductionDb();
 
15
 
16
+ // Skip, prefixes are identical. No change needed
17
+ if ($productionDb->prefix === $stagingPrefix) {
18
+ $this->log("Prefix already the same - skipping");
19
  return true;
20
  }
21
 
22
+ if ($this->isNetworkClone()) {
23
+ return $this->updateAllOptionsTables($stagingPrefix, $productionDb, $stagingDb);
24
+ }
25
+
26
+ return $this->updateOptionsTable('options', $stagingPrefix, $productionDb->prefix, $stagingDb);
27
+ }
28
+
29
+ /**
30
+ * @param string $stagingPrefix
31
+ * @param wpdb $productionDb
32
+ * @param wpdb $stagingDb
33
+ * @return boolean
34
+ */
35
+ private function updateAllOptionsTables($stagingPrefix, $productionDb, $stagingDb)
36
+ {
37
+ $basePrefix = $productionDb->base_prefix;
38
+ $sites = get_sites();
39
+ foreach ($sites as $site) {
40
+ $tableName = $this->getOptionTableWithoutBasePrefix($site->blog_id);
41
+ $this->updateOptionsTable($tableName, $stagingPrefix, $basePrefix, $stagingDb);
42
+ }
43
+
44
+ return true;
45
+ }
46
+
47
+ /**
48
+ * @param string $tableName
49
+ * @param string $stagingPrefix
50
+ * @param string $productionPrefix
51
+ * @param wpdb $stagingDb
52
+ * @return boolean
53
+ *
54
+ * @throws FatalException
55
+ */
56
+ private function updateOptionsTable($tableName, $stagingPrefix, $productionPrefix, $stagingDb)
57
+ {
58
+ $this->log("Updating db prefix in {$stagingPrefix}{$tableName}.");
59
+
60
+ if ($this->skipTable($tableName)) {
61
  return true;
62
  }
63
 
66
  'wp_mail_smtp',
67
  'wp_mail_smtp_version',
68
  'wp_mail_smtp_debug',
69
+ 'db_version',
70
  ];
71
 
72
  $filters = apply_filters('wpstg_data_excl_rows', $filters);
80
 
81
  $updateOptions = $stagingDb->query(
82
  $stagingDb->prepare(
83
+ "UPDATE IGNORE {$stagingPrefix}{$tableName} SET option_name= replace(option_name, %s, %s) WHERE option_name LIKE %s" . $where,
84
+ $productionPrefix,
85
+ $stagingPrefix,
86
+ $productionPrefix . "%"
87
  )
88
  );
89
 
90
  if ($updateOptions === false) {
91
+ $this->log("Error on Query: UPDATE IGNORE {$stagingPrefix}{$tableName} SET option_name= replace(option_name, {$productionPrefix}, {$stagingPrefix}) WHERE option_name LIKE {$productionPrefix} {$where}", Logger::TYPE_ERROR);
92
+ throw new FatalException("Failed to update db option_names in {$stagingPrefix}{$tableName}. Error: {$stagingDb->last_error}");
93
  }
94
 
95
  return true;
Framework/CloningProcess/Database/DatabaseCloningService.php CHANGED
@@ -2,10 +2,11 @@
2
 
3
  namespace WPStaging\Framework\CloningProcess\Database;
4
 
5
- use WPStaging\Backend\Modules\Jobs\Exceptions\FatalException;
6
  use WPStaging\Core\Utils\Logger;
7
  use WPStaging\Core\WPStaging;
 
8
  use WPStaging\Framework\CloningProcess\CloningDto;
 
9
  use WPStaging\Framework\Utils\Strings;
10
 
11
  class DatabaseCloningService
@@ -15,6 +16,11 @@ class DatabaseCloningService
15
  */
16
  protected $dto;
17
 
 
 
 
 
 
18
  /**
19
  * DatabaseCloningService constructor.
20
  * @param CloningDto $dto
@@ -22,28 +28,41 @@ class DatabaseCloningService
22
  public function __construct(CloningDto $dto)
23
  {
24
  $this->dto = $dto;
 
 
25
  }
26
 
27
  /**
28
- * @param string $old
29
- * @param string $new
30
  * @param int $offset
31
  * @param int $limit
32
  */
33
- public function copyData($old, $new, $offset, $limit)
34
  {
35
- $rows = $offset + $limit;
36
- $limitation = '';
37
- if ((int)$limit > 0) {
38
- $limitation = " LIMIT {$limit} OFFSET {$offset}";
39
  }
 
 
 
 
 
 
40
  if ($this->dto->isExternal()) {
41
  $stagingDb = $this->dto->getStagingDb();
42
  $this->log(
43
- "INSERT {$this->dto->getProductionDb()->dbname}.{$old} as {$this->dto->getExternalDatabaseName()}.{$new} from {$offset} to {$rows} records"
44
  );
 
 
 
 
 
 
45
  // Get data from production site
46
- $rows = $this->dto->getProductionDb()->get_results("SELECT * FROM `{$old}` {$limitation}", ARRAY_A);
47
  // Start transaction
48
  $stagingDb->query('SET autocommit=0;');
49
  $stagingDb->query('SET FOREIGN_KEY_CHECKS=0;');
@@ -52,100 +71,151 @@ class DatabaseCloningService
52
  foreach ($rows as $row) {
53
  $escaped_values = $this->mysqlEscapeMimic(array_values($row));
54
  $values = implode("', '", $escaped_values);
55
- $query = "INSERT INTO `{$new}` VALUES ('{$values}')";
56
  if ($stagingDb->query($query) === false) {
57
- $this->log("Can not insert data into table {$new}");
58
- $this->debugLog("Failed Query: " . $query . " Error: " . $stagingDb->last_error);
59
  }
60
  }
61
  // Commit transaction
62
  $this->dto->getStagingDb()->query('COMMIT;');
63
  $this->dto->getStagingDb()->query('SET autocommit=1;');
64
  } else {
65
- $this->log(
66
- "{$old} as {$new} from {$offset} to {$rows} records"
67
- );
68
 
69
  $this->dto->getStagingDb()->query("SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO'");
70
 
71
- $result = $this->dto->getStagingDb()->query(
72
- "INSERT INTO {$new} SELECT * FROM {$old} {$limitation}"
73
- );
 
 
 
74
 
75
  if (!$result) {
76
- $this->log($this->dto->getStagingDb()->last_error, Logger::TYPE_WARNING);
77
  }
78
  }
79
  }
80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  /**
82
  * Drop table from database
83
- * @param string $name
 
 
84
  */
85
- public function dropTable($name)
86
  {
 
 
 
 
87
  $stagingDb = $this->dto->getStagingDb();
88
- $this->log("{$name} already exists, dropping it first");
89
  $stagingDb->query("SET FOREIGN_KEY_CHECKS=0");
90
- $stagingDb->query("DROP TABLE {$name}");
91
  $stagingDb->query("SET FOREIGN_KEY_CHECKS=1");
92
  }
93
 
94
  /**
95
- * @param string $tableName
96
- *
97
- * @return boolean
98
  */
99
- public function tableIsMissing($tableName)
100
  {
101
- $result = $this->dto->getProductionDb()->query("SHOW TABLES LIKE '{$tableName}'");
102
- if ($result === false || $result === 0) {
103
- $this->log("Table {$this->dto->getExternalDatabaseName()}.{$tableName} doesn't exist. Skipping");
104
  return true;
105
  }
106
-
107
  return false;
108
  }
109
 
110
  /**
111
- * @param string $new
112
- * @param string $old
113
- * @return int Number of rows in old table
 
 
 
 
 
 
 
 
 
 
 
 
114
  */
115
- public function createTable($new, $old)
116
  {
 
 
 
 
117
  $stagingDb = $this->dto->getStagingDb();
118
  $productionDb = $this->dto->getProductionDb();
119
  if ($this->dto->isExternal()) {
120
- $this->log("CREATE table {$this->dto->getExternalDatabaseName()}.{$new}");
121
- $sql = $this->getTableCreateStatement($old);
122
- if ($this->dto->isMultisite()) {
123
- $search = '';
124
- // Get name table users from main site e.g. wp_users
125
- if ($this->removeDBBasePrefix($old) === 'users') {
126
- $search = $productionDb->prefix . 'users';
127
- }
128
- // Get name of table usermeta from main site e.g. wp_usermeta
129
- if ($this->removeDBBasePrefix($old) === 'usermeta') {
130
- $search = $productionDb->prefix . 'usermeta';
131
- }
132
- // Replace table prefix to the destination prefix
133
- $sql = str_replace("CREATE TABLE `{$search}`", "CREATE TABLE `{$new}`", $sql);
134
  }
135
- // Fix missing underscore issue #251. Replace whole table name. Prevents bug where $old table prefix contains no underscore
136
- $sql = str_replace("CREATE TABLE `{$old}`", "CREATE TABLE `{$new}`", $sql);
137
  // Make constraint unique to prevent error:(errno: 121 "Duplicate key on write or update")
138
  $sql = wpstg_unique_constraint($sql);
139
  $stagingDb->query('SET FOREIGN_KEY_CHECKS=0;');
 
140
  if ($stagingDb->query($sql) === false) {
141
- throw new FatalException("DB External Copy - Fatal Error: {$stagingDb->last_error} Query: {$sql}");
142
  }
143
  } else {
144
- $this->log("Creating table {$new}");
145
- $stagingDb->query("CREATE TABLE {$new} LIKE {$old}");
 
 
 
146
  }
147
- $rowsInTable = (int)$productionDb->get_var("SELECT COUNT(1) FROM `{$productionDb->dbname}`.`{$old}`");
148
- $this->log("Table {$old} contains {$rowsInTable} rows ");
149
  return $rowsInTable;
150
  }
151
 
@@ -217,8 +287,9 @@ class DatabaseCloningService
217
  private function getTableCreateStatement($tableName)
218
  {
219
  $productionDb = $this->dto->getProductionDb();
 
220
  // Get the CREATE statement from production table
221
- $statement = $productionDb->get_results("SHOW CREATE TABLE `{$tableName}`", 'ARRAY_A')[0];
222
 
223
  if ($this->dto->isMultisite()) {
224
  // Convert prefix and entire table name to lowercase to prevent capitalization issues:
@@ -229,17 +300,17 @@ class DatabaseCloningService
229
  // Keep this here for historical purposes and to make sure no one tries to implement this again!
230
  //$row[0] = str_replace($tableName, strtolower($tableName), $row[0]);
231
 
232
- // Get name table users from main site e.g. wp_users
233
  if ($this->removeDBBasePrefix($tableName) === 'users') {
234
  $statement = str_replace($tableName, $productionDb->prefix . 'users', $statement);
235
  }
236
- // Get name of table usermeta from main site e.g. wp_usermeta
237
  if ($this->removeDBBasePrefix($tableName) === 'usermeta') {
238
  $statement = str_replace($tableName, $productionDb->prefix . 'usermeta', $statement);
239
  }
240
  }
241
 
242
- // Get create table
243
  if (isset($statement['Create Table'])) {
244
  return $statement['Create Table'];
245
  }
2
 
3
  namespace WPStaging\Framework\CloningProcess\Database;
4
 
 
5
  use WPStaging\Core\Utils\Logger;
6
  use WPStaging\Core\WPStaging;
7
+ use WPStaging\Backend\Modules\Jobs\Exceptions\FatalException;
8
  use WPStaging\Framework\CloningProcess\CloningDto;
9
+ use WPStaging\Framework\Database\QueryBuilder\SelectQuery;
10
  use WPStaging\Framework\Utils\Strings;
11
 
12
  class DatabaseCloningService
16
  */
17
  protected $dto;
18
 
19
+ /**
20
+ * @var SelectQuery
21
+ */
22
+ protected $selectQueryBuilder;
23
+
24
  /**
25
  * DatabaseCloningService constructor.
26
  * @param CloningDto $dto
28
  public function __construct(CloningDto $dto)
29
  {
30
  $this->dto = $dto;
31
+
32
+ $this->selectQueryBuilder = new SelectQuery();
33
  }
34
 
35
  /**
36
+ * @param string $srcTableName
37
+ * @param string $destTableName
38
  * @param int $offset
39
  * @param int $limit
40
  */
41
+ public function copyData($srcTableName, $destTableName, $offset, $limit)
42
  {
43
+ // Don't replace the table name if the table prefix is a custom one and if it is cloned into external database
44
+ if (!$this->shouldRenameTable($srcTableName)) {
45
+ $destTableName = $srcTableName;
 
46
  }
47
+
48
+ $rows = $offset + $limit;
49
+
50
+ $selectQuery = $this->selectQueryBuilder->prepareQueryWithFilter($srcTableName, $limit, $offset);
51
+ $preparedValues = $this->selectQueryBuilder->getPreparedValues();
52
+
53
  if ($this->dto->isExternal()) {
54
  $stagingDb = $this->dto->getStagingDb();
55
  $this->log(
56
+ "INSERT {$this->dto->getProductionDb()->dbname}.$srcTableName as {$this->dto->getExternalDatabaseName()}.$destTableName from $offset to $rows records"
57
  );
58
+
59
+ $preparedQuery = $selectQuery;
60
+ if (count($preparedValues) > 0) {
61
+ $preparedQuery = $this->dto->getProductionDb()->prepare($preparedQuery, $preparedValues);
62
+ }
63
+
64
  // Get data from production site
65
+ $rows = $this->dto->getProductionDb()->get_results($preparedQuery, ARRAY_A);
66
  // Start transaction
67
  $stagingDb->query('SET autocommit=0;');
68
  $stagingDb->query('SET FOREIGN_KEY_CHECKS=0;');
71
  foreach ($rows as $row) {
72
  $escaped_values = $this->mysqlEscapeMimic(array_values($row));
73
  $values = implode("', '", $escaped_values);
74
+ $query = "INSERT INTO `$destTableName` VALUES ('$values')";
75
  if ($stagingDb->query($query) === false) {
76
+ $this->log("Can not insert data into table $destTableName");
77
+ $this->debugLog("Failed Query: " . $query . " Error: " . $stagingDb->last_error);
78
  }
79
  }
80
  // Commit transaction
81
  $this->dto->getStagingDb()->query('COMMIT;');
82
  $this->dto->getStagingDb()->query('SET autocommit=1;');
83
  } else {
84
+ $this->log("Copy data from $srcTableName to $destTableName - $offset to $rows records");
 
 
85
 
86
  $this->dto->getStagingDb()->query("SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO'");
87
 
88
+ $preparedQuery = "INSERT INTO `$destTableName` $selectQuery";
89
+ if (count($preparedValues) > 0) {
90
+ $preparedQuery = $this->dto->getStagingDb()->prepare($preparedQuery, $preparedValues);
91
+ }
92
+
93
+ $result = $this->dto->getStagingDb()->query($preparedQuery);
94
 
95
  if (!$result) {
96
+ $this->log("DB Data Copy Error:" . $this->dto->getStagingDb()->last_error, Logger::TYPE_WARNING);
97
  }
98
  }
99
  }
100
 
101
+ /**
102
+ * @param string $tableName
103
+ *
104
+ * @return boolean
105
+ */
106
+ public function isMissingTable($tableName)
107
+ {
108
+ $result = $this->dto->getProductionDb()->query("SHOW TABLES LIKE '$tableName'");
109
+ if ($result === false || $result === 0) {
110
+ $this->log("Table {$this->dto->getExternalDatabaseName()}.{$tableName} doesn't exist. Skipping");
111
+ return true;
112
+ }
113
+
114
+ return false;
115
+ }
116
+
117
+ /**
118
+ * Check if table already exists
119
+ * @param $srcTableName
120
+ * @param $destTableName
121
+ * @return bool
122
+ */
123
+ private function isDestTableExist($srcTableName, $destTableName)
124
+ {
125
+ if (!$this->shouldRenameTable($srcTableName)) {
126
+ $destTableName = $srcTableName;
127
+ }
128
+
129
+ $stagingDb = $this->dto->getStagingDb();
130
+ $existingTable = $stagingDb->get_var($stagingDb->prepare("SHOW TABLES LIKE %s", $destTableName));
131
+
132
+ return ($destTableName === $existingTable);
133
+ }
134
+
135
  /**
136
  * Drop table from database
137
+ *
138
+ * @param string $srcTableName
139
+ * @param string $destTableName
140
  */
141
+ private function dropDestTable($srcTableName, $destTableName)
142
  {
143
+ if (!$this->shouldRenameTable($srcTableName)) {
144
+ $destTableName = $srcTableName;
145
+ }
146
+
147
  $stagingDb = $this->dto->getStagingDb();
148
+ $this->log("Table $destTableName already exists, dropping it first");
149
  $stagingDb->query("SET FOREIGN_KEY_CHECKS=0");
150
+ $stagingDb->query("DROP TABLE {$destTableName}");
151
  $stagingDb->query("SET FOREIGN_KEY_CHECKS=1");
152
  }
153
 
154
  /**
155
+ * @param $srcTable
156
+ * @return bool
 
157
  */
158
+ private function beginsWithWordPressPrefix($srcTable)
159
  {
160
+ $productionDb = $this->dto->getProductionDb();
161
+ if (strpos($srcTable, $productionDb->prefix) === 0) {
 
162
  return true;
163
  }
 
164
  return false;
165
  }
166
 
167
  /**
168
+ * @param string
169
+ * @return bool
170
+ */
171
+ private function shouldRenameTable($srcTable)
172
+ {
173
+ if ($this->dto->isExternal() && !$this->beginsWithWordPressPrefix($srcTable)) {
174
+ return false;
175
+ }
176
+ return true;
177
+ }
178
+
179
+ /**
180
+ * @param string $destTableName
181
+ * @param string $srcTableName
182
+ * @return int Number of rows in source table
183
  */
184
+ public function createTable($srcTableName, $destTableName)
185
  {
186
+ if ($this->isDestTableExist($srcTableName, $destTableName)) {
187
+ $this->dropDestTable($srcTableName, $destTableName);
188
+ }
189
+
190
  $stagingDb = $this->dto->getStagingDb();
191
  $productionDb = $this->dto->getProductionDb();
192
  if ($this->dto->isExternal()) {
193
+ $this->log("COPY table {$this->dto->getExternalDatabaseName()}.$srcTableName");
194
+ $sql = $this->getTableCreateStatement($srcTableName);
195
+
196
+ // Replace whole table name if it begins with WordPress prefix.
197
+ // Don't replace it if it's a custom table beginning with another prefix #1303
198
+ // Prevents bug where $old table prefix contains no underscore | Fix missing underscore issue #251.
199
+ if ($this->beginsWithWordPressPrefix($srcTableName)) {
200
+ $sql = str_replace("CREATE TABLE `$srcTableName`", "CREATE TABLE `$destTableName`", $sql);
 
 
 
 
 
 
201
  }
202
+
 
203
  // Make constraint unique to prevent error:(errno: 121 "Duplicate key on write or update")
204
  $sql = wpstg_unique_constraint($sql);
205
  $stagingDb->query('SET FOREIGN_KEY_CHECKS=0;');
206
+ //\WPStaging\functions\debug_log(" DB Query " . $sql);
207
  if ($stagingDb->query($sql) === false) {
208
+ throw new FatalException("DB External Copy - Fatal Error: $stagingDb->last_error Query: $sql");
209
  }
210
  } else {
211
+ $this->log("Creating table $destTableName");
212
+ $query = "CREATE TABLE `{$destTableName}` LIKE `{$srcTableName}`";
213
+ if ($stagingDb->query($query) === false) {
214
+ throw new FatalException("DB Internal Copy - Fatal Error: {$stagingDb->last_error} Query: {$query}");
215
+ }
216
  }
217
+ $rowsInTable = (int)$productionDb->get_var("SELECT COUNT(1) FROM `$productionDb->dbname`.`$srcTableName`");
218
+ $this->log("Table $srcTableName contains $rowsInTable rows ");
219
  return $rowsInTable;
220
  }
221
 
287
  private function getTableCreateStatement($tableName)
288
  {
289
  $productionDb = $this->dto->getProductionDb();
290
+
291
  // Get the CREATE statement from production table
292
+ $statement = $productionDb->get_results("SHOW CREATE TABLE `$tableName`", 'ARRAY_A')[0];
293
 
294
  if ($this->dto->isMultisite()) {
295
  // Convert prefix and entire table name to lowercase to prevent capitalization issues:
300
  // Keep this here for historical purposes and to make sure no one tries to implement this again!
301
  //$row[0] = str_replace($tableName, strtolower($tableName), $row[0]);
302
 
303
+ // Build full qualified statement for table [prefix_]users from main site e.g. wp_users
304
  if ($this->removeDBBasePrefix($tableName) === 'users') {
305
  $statement = str_replace($tableName, $productionDb->prefix . 'users', $statement);
306
  }
307
+ // Build full qualified statement for table [prefix_]usermeta from main site e.g. wp_usermeta
308
  if ($this->removeDBBasePrefix($tableName) === 'usermeta') {
309
  $statement = str_replace($tableName, $productionDb->prefix . 'usermeta', $statement);
310
  }
311
  }
312
 
313
+ // Return create table statement
314
  if (isset($statement['Create Table'])) {
315
  return $statement['Create Table'];
316
  }
Framework/CommonServiceProvider.php CHANGED
@@ -2,8 +2,10 @@
2
 
3
  namespace WPStaging\Framework;
4
 
 
5
  use WPStaging\Framework\DI\ServiceProvider;
6
  use WPStaging\Framework\Filesystem\DiskWriteCheck;
 
7
 
8
  /**
9
  * Class CommonServiceProvider
@@ -17,5 +19,18 @@ class CommonServiceProvider extends ServiceProvider
17
  protected function registerClasses()
18
  {
19
  $this->container->singleton(DiskWriteCheck::class);
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  }
21
  }
2
 
3
  namespace WPStaging\Framework;
4
 
5
+ use WPStaging\Framework\Analytics\AnalyticsCleanup;
6
  use WPStaging\Framework\DI\ServiceProvider;
7
  use WPStaging\Framework\Filesystem\DiskWriteCheck;
8
+ use WPStaging\Framework\Filesystem\LogCleanup;
9
 
10
  /**
11
  * Class CommonServiceProvider
19
  protected function registerClasses()
20
  {
21
  $this->container->singleton(DiskWriteCheck::class);
22
+
23
+ add_action('wpstg_daily_event', [$this, 'cleanupLogs'], 25, 0);
24
+ add_action('wpstg_daily_event', [$this, 'cleanupAnalytics'], 25, 0);
25
+ }
26
+
27
+ public function cleanupLogs()
28
+ {
29
+ $this->container->make(LogCleanup::class)->cleanOldLogs();
30
+ }
31
+
32
+ public function cleanupAnalytics()
33
+ {
34
+ $this->container->make(AnalyticsCleanup::class)->cleanupOldAnalytics();
35
  }
36
  }
Framework/DI/Container.php CHANGED
@@ -25,9 +25,7 @@ class Container extends \WPStaging\Vendor\tad_DI52_Container
25
  try {
26
  return $this->offsetGet($offset);
27
  } catch (\Exception $e) {
28
- if (defined('WP_DEBUG') && WP_DEBUG) {
29
- error_log($e->getMessage());
30
- }
31
 
32
  return null;
33
  }
25
  try {
26
  return $this->offsetGet($offset);
27
  } catch (\Exception $e) {
28
+ \WPStaging\functions\debug_log($e->getMessage());
 
 
29
 
30
  return null;
31
  }
Framework/Database/ExcludedTables.php CHANGED
@@ -29,6 +29,11 @@ class ExcludedTables
29
  */
30
  private $excludedTables;
31
 
 
 
 
 
 
32
  /**
33
  * @var array
34
  */
@@ -37,9 +42,12 @@ class ExcludedTables
37
  public function __construct()
38
  {
39
  $this->excludedTables = [
 
 
 
 
40
  'blogs',
41
  'blog_version',
42
- Queue::getTableName(),
43
  ];
44
 
45
  $this->excludedTablesSearchReplaceOnly = [
@@ -53,10 +61,15 @@ class ExcludedTables
53
  *
54
  * @return array
55
  */
56
- public function getExcludedTables()
57
  {
58
  $excludedCustomTables = apply_filters(self::CLONE_DATABASE_TABLES_EXCLUDE_FILTER, []);
59
- return array_merge($this->excludedTables, $excludedCustomTables);
 
 
 
 
 
60
  }
61
 
62
  /**
@@ -65,12 +78,12 @@ class ExcludedTables
65
  *
66
  * @return array
67
  */
68
- public function getExcludedTablesForSearchReplace()
69
  {
70
  $excludedCustomCloneTables = apply_filters(self::CLONE_SEARCH_REPLACE_TABLES_EXCLUDE_FILTER, []);
71
  $excludedCustomClonePushTables = apply_filters(self::SEARCH_REPLACE_TABLES_EXCLUDE_FILTER, $this->excludedTablesSearchReplaceOnly);
72
  $searchReplaceExcludedTables = array_merge($excludedCustomCloneTables, $excludedCustomClonePushTables);
73
- return array_merge($this->getExcludedTables(), $searchReplaceExcludedTables);
74
  }
75
 
76
  /**
29
  */
30
  private $excludedTables;
31
 
32
+ /**
33
+ * @var array
34
+ */
35
+ private $networkExcludedTables;
36
+
37
  /**
38
  * @var array
39
  */
42
  public function __construct()
43
  {
44
  $this->excludedTables = [
45
+ Queue::getTableName(),
46
+ ];
47
+
48
+ $this->networkExcludedTables = [
49
  'blogs',
50
  'blog_version',
 
51
  ];
52
 
53
  $this->excludedTablesSearchReplaceOnly = [
61
  *
62
  * @return array
63
  */
64
+ public function getExcludedTables($networkClone = false)
65
  {
66
  $excludedCustomTables = apply_filters(self::CLONE_DATABASE_TABLES_EXCLUDE_FILTER, []);
67
+
68
+ if ($networkClone) {
69
+ return array_merge($this->excludedTables, $excludedCustomTables);
70
+ }
71
+
72
+ return array_merge($this->excludedTables, $this->networkExcludedTables, $excludedCustomTables);
73
  }
74
 
75
  /**
78
  *
79
  * @return array
80
  */
81
+ public function getExcludedTablesForSearchReplace($networkClone = false)
82
  {
83
  $excludedCustomCloneTables = apply_filters(self::CLONE_SEARCH_REPLACE_TABLES_EXCLUDE_FILTER, []);
84
  $excludedCustomClonePushTables = apply_filters(self::SEARCH_REPLACE_TABLES_EXCLUDE_FILTER, $this->excludedTablesSearchReplaceOnly);
85
  $searchReplaceExcludedTables = array_merge($excludedCustomCloneTables, $excludedCustomClonePushTables);
86
+ return array_merge($this->getExcludedTables($networkClone), $searchReplaceExcludedTables);
87
  }
88
 
89
  /**
Framework/Database/QueryBuilder/SelectQuery.php ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Database\QueryBuilder;
4
+
5
+ class SelectQuery
6
+ {
7
+ /**
8
+ * Prepared values to make sure query is safe from sql injection
9
+ *
10
+ * @var array
11
+ */
12
+ private $preparedValues = [];
13
+
14
+ /**
15
+ * Build Select Query
16
+ *
17
+ * @param string $tableName
18
+ * @param string $whereClause
19
+ * @param integer $limit
20
+ * @param integer $offset
21
+ * @return string
22
+ */
23
+ public function getQuery($tableName, $whereClause = '', $limit = 0, $offset = 0)
24
+ {
25
+ $limitations = '';
26
+ if ($limit > 0) {
27
+ $limitations = " LIMIT $limit OFFSET $offset";
28
+ }
29
+
30
+ $where = trim($whereClause);
31
+ if ((!empty($where) || $where != '') && !stripos($where, 'where') !== 0) {
32
+ $where = " WHERE $where";
33
+ }
34
+
35
+ return "SELECT `$tableName`.* FROM `$tableName`$where$limitations;";
36
+ }
37
+
38
+ /**
39
+ * Prepare parameterized wp filtered select query for data copying.
40
+ *
41
+ * @param string $tableName
42
+ * @param integer $limit
43
+ * @param integer $offset
44
+ * @param string $hook
45
+ *
46
+ * @return string
47
+ *
48
+ * @throws Exception
49
+ */
50
+ public function prepareQueryWithFilter($tableName, $limit = 0, $offset = 0, $hook = 'cloning')
51
+ {
52
+ $this->preparedValues = [];
53
+ if (!in_array($hook, ['cloning', 'pushing', 'backups'])) {
54
+ throw new \Exception("Hook '$hook' not supported for filter row. Please use between 'cloning', 'pushing' or 'backup'");
55
+ }
56
+
57
+ $selectQueryFilter = apply_filters("wpstg.$hook.database.queryRows", []);
58
+ if (!array_key_exists($tableName, $selectQueryFilter)) {
59
+ return $this->getQuery($tableName, '', $limit, $offset);
60
+ }
61
+
62
+ if (array_key_exists('join', $selectQueryFilter[$tableName])) {
63
+ return $this->prepareJoinQuery($tableName, $selectQueryFilter[$tableName]['join'], $limit, $offset, $hook);
64
+ }
65
+
66
+ $selectQueryFilter = $selectQueryFilter[$tableName];
67
+ $whereClause = $this->prepareWhereClause($selectQueryFilter);
68
+
69
+ $where = implode(" AND ", $whereClause);
70
+
71
+ return $this->getQuery($tableName, $where, $limit, $offset);
72
+ }
73
+
74
+ /**
75
+ * Get prepared statement values
76
+ *
77
+ * @return array
78
+ */
79
+ public function getPreparedValues()
80
+ {
81
+ return $this->preparedValues;
82
+ }
83
+
84
+ /**
85
+ * Build Select Query
86
+ * Support joining with other tables
87
+ *
88
+ * @param string $tableName
89
+ * @param array $joinInfo
90
+ * @param integer $limit
91
+ * @param integer $offset
92
+ * @param string $hook
93
+ * @return string
94
+ */
95
+ private function prepareJoinQuery($tableName, $joinInfo, $limit = 0, $offset = 0, $hook = 'cloning')
96
+ {
97
+ $joinTable = $joinInfo['table'];
98
+
99
+ $selectQueryFilter = apply_filters("wpstg.$hook.database.queryRows", []);
100
+ if (!array_key_exists($joinTable, $selectQueryFilter)) {
101
+ return $this->getQuery($tableName, '', $limit, $offset);
102
+ }
103
+
104
+ $limitations = '';
105
+ if ($limit > 0) {
106
+ $limitations = " LIMIT $limit OFFSET $offset";
107
+ }
108
+
109
+ $primaryKey = $joinInfo['primaryKey'];
110
+ $foreignKey = $joinInfo['foreignKey'];
111
+
112
+ $selectQueryFilter = $selectQueryFilter[$joinTable];
113
+ $whereClause = $this->prepareWhereClause($selectQueryFilter, "`$joinTable`.");
114
+ $where = implode(" AND ", $whereClause);
115
+
116
+ $where = trim($where);
117
+ if ((!empty($where) || $where != '') && !stripos($where, 'where') !== 0) {
118
+ $where = " WHERE $where";
119
+ }
120
+
121
+ return "SELECT `$tableName`.* FROM `$tableName`
122
+ INNER JOIN `$joinTable` ON `$joinTable`.$primaryKey = `$tableName`.$foreignKey
123
+ $where$limitations;";
124
+ }
125
+
126
+ /**
127
+ * Get prepare clause for Select Query
128
+ *
129
+ * @param array $filters
130
+ * @param string $prefix
131
+ * @return array
132
+ */
133
+ private function prepareWhereClause($filters, $prefix = '')
134
+ {
135
+ $whereClause = [];
136
+ foreach ($filters as $field => $value) {
137
+ if (!is_array($value)) {
138
+ $whereClause[] = "$prefix$field = %s";
139
+ $this->preparedValues[] = $value;
140
+ continue;
141
+ }
142
+
143
+ $operator = strtoupper($value['operator']);
144
+ if (!in_array($operator, ['=', '>', '>=', '<', '<=', '<>', '!=', 'LIKE', 'NOT LIKE'])) {
145
+ throw new \Exception('Invalid SQL comparison operator used!');
146
+ }
147
+
148
+ $value = $value['value'];
149
+
150
+ $whereClause[] = "$field $operator %s";
151
+ $this->preparedValues[] = $value;
152
+ }
153
+
154
+ return $whereClause;
155
+ }
156
+ }
Framework/Database/SearchReplace.php CHANGED
@@ -172,7 +172,7 @@ class SearchReplace
172
  }
173
 
174
  foreach ($props as $key => $value) {
175
- if ($key === '' || ord($key[0]) === 0) {
176
  continue;
177
  }
178
  $data->{$key} = $this->walker($value);
172
  }
173
 
174
  foreach ($props as $key => $value) {
175
+ if ($key === '' || (isset($key[0]) && ord($key[0]) === 0)) {
176
  continue;
177
  }
178
  $data->{$key} = $this->walker($value);
Framework/Filesystem/DebugLogReader.php ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Filesystem;
4
+
5
+ class DebugLogReader
6
+ {
7
+ protected $filesystem;
8
+
9
+ public function __construct(Filesystem $filesystem)
10
+ {
11
+ $this->filesystem = $filesystem;
12
+ }
13
+
14
+ /**
15
+ * @param int $maxSizeEach Max size in bytes to fetch from each log.
16
+ * @param bool $withWpstgDebugLog Whether to include WP STAGING custom log entries.
17
+ * @param bool $withPhpDebugLog Whether to include PHP error_log entries.
18
+ *
19
+ * @return string A formatted text with the last log entries from the debug log files.
20
+ */
21
+ public function getLastLogEntries($maxSizeEach, $withWpstgDebugLog = true, $withPhpDebugLog = true)
22
+ {
23
+ $errors = '';
24
+
25
+ if ($withWpstgDebugLog) {
26
+ if (defined('WPSTG_DEBUG_LOG_FILE')) {
27
+ if ($this->filesystem->isReadableFile(WPSTG_DEBUG_LOG_FILE)) {
28
+ $errors .= sprintf(
29
+ "--- WPSTAGING Debug Logs\nFile: %s\nTotal file size: %s\nShowing last: %s\n=== START ===\n",
30
+ WPSTG_DEBUG_LOG_FILE,
31
+ size_format(filesize(WPSTG_DEBUG_LOG_FILE)),
32
+ size_format($maxSizeEach)
33
+ );
34
+ $errors .= $this->getDebugLogLines(WPSTG_DEBUG_LOG_FILE, $maxSizeEach);
35
+ $errors .= "=== END ===\n\n";
36
+ } else {
37
+ $errors .= "\n=== WPSTG_DEBUG_LOG_FILE IS NOT A FILE OR IS NOT READABLE ===\n";
38
+ }
39
+ } else {
40
+ $errors .= "\n=== WPSTG_DEBUG_LOG_FILE NOT DEFINED ===\n";
41
+ }
42
+ }
43
+
44
+ if ($withPhpDebugLog) {
45
+ /** @see \wp_debug_mode to understand why it uses ini_get() */
46
+ $phpDebugLogFile = ini_get('error_log');
47
+
48
+ if ($this->filesystem->isReadableFile($phpDebugLogFile)) {
49
+ $errors .= sprintf(
50
+ "--- PHP Debug Logs\nFile: %s\nTotal file size: %s\nShowing last: %s\n=== START ===\n",
51
+ $phpDebugLogFile,
52
+ size_format(filesize($phpDebugLogFile)),
53
+ size_format($maxSizeEach)
54
+ );
55
+ $errors .= $this->getDebugLogLines($phpDebugLogFile, $maxSizeEach);
56
+ $errors .= "=== END ===\n\n";
57
+ } else {
58
+ $errors .= "\n=== PHP DEBUG LOG FILE IS NOT A FILE OR IS NOT READABLE ===\n";
59
+ }
60
+ }
61
+
62
+ return $errors;
63
+ }
64
+
65
+ protected function getDebugLogLines($debugLogPath, $maxSize)
66
+ {
67
+ if (!is_file($debugLogPath) || !is_readable($debugLogPath)) {
68
+ return '';
69
+ }
70
+
71
+ try {
72
+ $debugFile = new \SplFileObject($debugLogPath);
73
+
74
+ $negativeOffset = $maxSize;
75
+
76
+ // Set the pointer to the end of the file, minus the negative offset for which to start looking for errors.
77
+ $debugFile->fseek(max($debugFile->getSize() - $negativeOffset, 0), SEEK_SET);
78
+
79
+ $debugLines = [];
80
+
81
+ do {
82
+ $line = trim($debugFile->fgets());
83
+ $line = html_entity_decode($line);
84
+ $line = sanitize_text_field($line);
85
+ $debugLines[] = $line;
86
+ } while ($debugFile->valid());
87
+
88
+ return implode("\n", $debugLines);
89
+ } catch (\Exception $e) {
90
+ return '';
91
+ }
92
+ }
93
+ }
Framework/Filesystem/DirectoryListing.php CHANGED
@@ -74,9 +74,7 @@ class DirectoryListing
74
  }
75
  }
76
  } catch (\Exception $e) {
77
- if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
78
- error_log('WPSTAGING: Could not open plugin upload directory to protect from directory listing. ' . $e->getMessage());
79
- }
80
  }
81
  }
82
 
74
  }
75
  }
76
  } catch (\Exception $e) {
77
+ \WPStaging\functions\debug_log('WP STAGING: Could not open plugin upload directory to protect from directory listing. ' . $e->getMessage());
 
 
78
  }
79
  }
80
 
Framework/Filesystem/DiskWriteCheck.php CHANGED
@@ -121,7 +121,7 @@ class DiskWriteCheck
121
  $result = $this->setLowLevelDiskFullFlag();
122
 
123
  if (!$result) {
124
- error_log('WPSTGAGING DiskWriteCheck failed and could not update the option in the database.');
125
  }
126
  }
127
 
121
  $result = $this->setLowLevelDiskFullFlag();
122
 
123
  if (!$result) {
124
+ \WPStaging\functions\debug_log('WPSTGAGING DiskWriteCheck failed and could not update the option in the database.');
125
  }
126
  }
127
 
Framework/Filesystem/Filesystem.php CHANGED
@@ -7,6 +7,7 @@ use WPStaging\Backend\Notices\Notices;
7
  use WPStaging\Core\WPStaging;
8
  use WPStaging\Vendor\Psr\Log\LoggerInterface;
9
  use RuntimeException;
 
10
 
11
  class Filesystem extends FilterableDirectoryIterator
12
  {
@@ -160,9 +161,7 @@ class Filesystem extends FilterableDirectoryIterator
160
  $result = wp_mkdir_p($path);
161
  restore_error_handler();
162
  if (!$result) {
163
- if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
164
- error_log("Failed to create directory $path");
165
- }
166
 
167
  return '';
168
  }
@@ -742,4 +741,30 @@ class Filesystem extends FilterableDirectoryIterator
742
  {
743
  $this->logs[] = "Unable to create directory. Reason: " . $errstr;
744
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
745
  }
7
  use WPStaging\Core\WPStaging;
8
  use WPStaging\Vendor\Psr\Log\LoggerInterface;
9
  use RuntimeException;
10
+ use WPStaging\Backend\Pro\Modules\Jobs\Copiers\Copier;
11
 
12
  class Filesystem extends FilterableDirectoryIterator
13
  {
161
  $result = wp_mkdir_p($path);
162
  restore_error_handler();
163
  if (!$result) {
164
+ \WPStaging\functions\debug_log("Failed to create directory $path");
 
 
165
 
166
  return '';
167
  }
741
  {
742
  $this->logs[] = "Unable to create directory. Reason: " . $errstr;
743
  }
744
+
745
+ /**
746
+ * Build a temporary path for plugins and themes
747
+ * Add temporary prefix to plugin or theme main dir during the file copying push process.
748
+ * E.g. wpstg-tmp-yoast or wpstg-tmp-avada
749
+ *
750
+ * @return string
751
+ */
752
+ public function tmpDestinationPath($fullPath)
753
+ {
754
+ return preg_replace(
755
+ '#wp-content/(plugins|themes)/([A-Za-z0-9-_]+)#',
756
+ 'wp-content/$1/' . Copier::PREFIX_TEMP . '$2',
757
+ $fullPath
758
+ );
759
+ }
760
+
761
+ /**
762
+ * @param string $filePath The filename to check.
763
+ *
764
+ * @return bool Whether the file exists and is readable.
765
+ */
766
+ public function isReadableFile($filePath)
767
+ {
768
+ return file_exists($filePath) && is_file($filePath) && is_readable($filePath);
769
+ }
770
  }
Framework/Filesystem/LogCleanup.php CHANGED
@@ -25,9 +25,16 @@ class LogCleanup
25
  // Delete logs older than 7 days by default
26
  $deleteOlderThanDays = absint(apply_filters('wpstg.logs.deleteOlderThanDays', 7));
27
 
 
 
 
28
  /** @var \SplFileInfo $splFileInfo */
29
  foreach ($it as $splFileInfo) {
30
  if ($splFileInfo->isFile() && !$splFileInfo->isLink() && $splFileInfo->getExtension() === 'log') {
 
 
 
 
31
  if ($splFileInfo->getMTime() < strtotime("-$deleteOlderThanDays days")) {
32
  // Not silenced nor logged
33
  unlink($splFileInfo->getPathname());
25
  // Delete logs older than 7 days by default
26
  $deleteOlderThanDays = absint(apply_filters('wpstg.logs.deleteOlderThanDays', 7));
27
 
28
+ // Delete logs bigger than 5mb by default
29
+ $deleteBiggerThan = absint(apply_filters('wpstg.logs.deleteBiggerThanBytes', 5 * MB_IN_BYTES));
30
+
31
  /** @var \SplFileInfo $splFileInfo */
32
  foreach ($it as $splFileInfo) {
33
  if ($splFileInfo->isFile() && !$splFileInfo->isLink() && $splFileInfo->getExtension() === 'log') {
34
+ if ($splFileInfo->getSize() > $deleteBiggerThan) {
35
+ unlink($splFileInfo->getPathname());
36
+ continue;
37
+ }
38
  if ($splFileInfo->getMTime() < strtotime("-$deleteOlderThanDays days")) {
39
  // Not silenced nor logged
40
  unlink($splFileInfo->getPathname());
Framework/Notices/DismissNotice.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WPStaging\Framework\Notices;
4
+
5
+ use WPStaging\Backend\Notices\DisabledItemsNotice;
6
+ use WPStaging\Backend\Notices\WarningsNotice;
7
+ use WPStaging\Core\WPStaging;
8
+ use WPStaging\Framework\Support\ThirdParty\WordFence;
9
+ use WPStaging\Pro\Notices\DismissNotice as DismissProNotice;
10
+
11
+ /**
12
+ * Dismiss notice depending upon post request
13
+ */
14
+ class DismissNotice
15
+ {
16
+ /**
17
+ * @var DisabledItemsNotice
18
+ */
19
+ private $disabledItemsNotice;
20
+
21
+ /**
22
+ * @var WarningsNotice
23
+ */
24
+ private $warningsNotice;
25
+
26
+ /**
27
+ * @var WordFence
28
+ */
29
+ private $wordFence;
30
+
31
+ public function __construct(DisabledItemsNotice $disabledItemsNotice, WarningsNotice $warningsNotice, WordFence $wordFence)
32
+ {
33
+ $this->disabledItemsNotice = $disabledItemsNotice;
34
+ $this->warningsNotice = $warningsNotice;
35
+ $this->wordFence = $wordFence;
36
+ }
37
+
38
+ public function dismiss($noticeToDismiss)
39
+ {
40
+ if ($noticeToDismiss === 'disabled_items' && $this->disabledItemsNotice->disable() !== false) {
41
+ wp_send_json(true);
42
+ return;
43
+ }
44
+
45
+ if ($noticeToDismiss === 'warnings_notice' && $this->warningsNotice->disable() !== false) {
46
+ wp_send_json(true);
47
+ return;
48
+ }
49
+
50
+ // Dismiss wordfence user.ini renamed notice
51
+ if ($noticeToDismiss === WordFence::NOTICE_NAME && $this->wordFence->disable() !== false) {
52
+ wp_send_json(true);
53
+ return;
54
+ }
55
+
56
+ if (!WPStaging::isPro()) {
57
+ wp_send_json(null);
58
+ return;
59
+ }
60
+
61
+ /** @var DismissProNotice */
62
+ $dismissProNotice = WPStaging::make(DismissProNotice::class);
63
+ $dismissProNotice->dismiss($noticeToDismiss);
64
+ }
65
+ }
Framework/Queue/Storage/ArrayStorage.php CHANGED
@@ -14,7 +14,7 @@ class ArrayStorage implements StorageInterface
14
 
15
  public function commit()
16
  {
17
- error_log('ArrayStorage does not implement commit.');
18
  }
19
 
20
  /**
@@ -23,7 +23,7 @@ class ArrayStorage implements StorageInterface
23
  */
24
  public function setKey($key)
25
  {
26
- error_log('ArrayStorage does not implement setKey.');
27
 
28
  return $this;
29
  }
14
 
15
  public function commit()
16
  {
17
+ \WPStaging\functions\debug_log('ArrayStorage does not implement commit.');
18
  }
19
 
20
  /**
23
  */
24
  public function setKey($key)
25
  {
26
+ \WPStaging\functions\debug_log('ArrayStorage does not implement setKey.');
27
 
28
  return $this;
29
  }
Framework/Rest/Rest.php CHANGED
@@ -22,13 +22,13 @@ class Rest
22
  $url = trailingslashit(get_home_url(get_current_blog_id(), ''));
23
  // nginx only allows HTTP/1.0 methods when redirecting from / to /index.php.
24
  // To work around this, we manually add index.php to the URL, avoiding the redirect.
25
- if ('index.php' !== substr($url, 9)) {
26
  $url .= 'index.php';
27
  }
28
 
29
  $url = add_query_arg('rest_route', '/', $url);
30
- $restPath = trim(parse_url($url, PHP_URL_PATH), '/');
31
- if (strpos($requestPath, $restPath) === 0) {
32
  return true;
33
  }
34
 
@@ -38,8 +38,21 @@ class Rest
38
  }
39
 
40
  $baseRestURL = get_rest_url(get_current_blog_id(), '/');
41
- $restPath = trim(parse_url($baseRestURL, PHP_URL_PATH), '/');
 
 
 
 
 
42
 
43
  return strpos($requestPath, $restPath) === 0;
44
  }
 
 
 
 
 
 
 
 
45
  }
22
  $url = trailingslashit(get_home_url(get_current_blog_id(), ''));
23
  // nginx only allows HTTP/1.0 methods when redirecting from / to /index.php.
24
  // To work around this, we manually add index.php to the URL, avoiding the redirect.
25
+ if ('index.php/' !== substr($url, -10)) {
26
  $url .= 'index.php';
27
  }
28
 
29
  $url = add_query_arg('rest_route', '/', $url);
30
+ $restPath = $this->getApiRequestURI($url);
31
+ if (!empty($restPath) && strpos($requestPath, $restPath) === 0) {
32
  return true;
33
  }
34
 
38
  }
39
 
40
  $baseRestURL = get_rest_url(get_current_blog_id(), '/');
41
+ $restPath = $this->getApiRequestURI($baseRestURL);
42
+
43
+ // Early bail if rest path is empty
44
+ if (empty($restPath)) {
45
+ return false;
46
+ }
47
 
48
  return strpos($requestPath, $restPath) === 0;
49
  }
50
+
51
+ private function getApiRequestURI($url)
52
+ {
53
+ $path = trim(parse_url($url, PHP_URL_PATH), '/');
54
+ $query = trim(parse_url($url, PHP_URL_QUERY), '/');
55
+
56
+ return $query === '' ? $path : $path . '?' . $query;
57
+ }
58
  }
Framework/SiteInfo.php CHANGED
@@ -33,7 +33,7 @@ class SiteInfo
33
  const IS_STAGING_KEY = 'wpstg_is_staging_site';
34
 
35
  /**
36
- * The file which makes site a staging site
37
  * @var string
38
  */
39
  const STAGING_FILE = '.wp-staging';
@@ -52,7 +52,7 @@ class SiteInfo
52
  /**
53
  * @return bool True if is staging site. False otherwise.
54
  */
55
- public function isStaging()
56
  {
57
  if (get_option(self::IS_STAGING_KEY) === "true") {
58
  return true;
@@ -69,7 +69,7 @@ class SiteInfo
69
  public function isCloneable()
70
  {
71
  // Site should be cloneable if not staging i.e. production site
72
- if (!$this->isStaging()) {
73
  return true;
74
  }
75
 
@@ -79,7 +79,7 @@ class SiteInfo
79
  }
80
 
81
  // New condition for checking whether staging is cloneable or not
82
- return $this->cloneOptions->get(self::IS_CLONEABLE_KEY, false);
83
  }
84
 
85
  /**
@@ -112,7 +112,7 @@ class SiteInfo
112
  public function enableStagingSiteCloning()
113
  {
114
  // Early Bail: if site is not staging
115
- if (!$this->isStaging()) {
116
  return false;
117
  }
118
 
@@ -132,7 +132,7 @@ class SiteInfo
132
  public function disableStagingSiteCloning()
133
  {
134
  // Early Bail: if site is not staging
135
- if (!$this->isStaging()) {
136
  return false;
137
  }
138
 
33
  const IS_STAGING_KEY = 'wpstg_is_staging_site';
34
 
35
  /**
36
+ * The file which makes a site a staging site
37
  * @var string
38
  */
39
  const STAGING_FILE = '.wp-staging';
52
  /**
53
  * @return bool True if is staging site. False otherwise.
54
  */
55
+ public function isStagingSite()
56
  {
57
  if (get_option(self::IS_STAGING_KEY) === "true") {
58
  return true;
69
  public function isCloneable()
70
  {
71
  // Site should be cloneable if not staging i.e. production site
72
+ if (!$this->isStagingSite()) {
73
  return true;
74
  }
75
 
79
  }
80
 
81
  // New condition for checking whether staging is cloneable or not
82
+ return $this->cloneOptions->get(self::IS_CLONEABLE_KEY);
83
  }
84
 
85
  /**
112
  public function enableStagingSiteCloning()
113
  {
114
  // Early Bail: if site is not staging
115
+ if (!$this->isStagingSite()) {
116
  return false;
117
  }
118
 
132
  public function disableStagingSiteCloning()
133
  {
134
  // Early Bail: if site is not staging
135
+ if (!$this->isStagingSite()) {
136
  return false;
137
  }
138
 
Framework/Staging/CloneOptions.php CHANGED
@@ -3,6 +3,7 @@
3
  namespace WPStaging\Framework\Staging;
4
 
5
  use stdClass;
 
6
  use WPStaging\Framework\SiteInfo;
7
 
8
  /**
@@ -30,7 +31,7 @@ class CloneOptions
30
  public function get($option = null)
31
  {
32
  // Early bail if not a staging site
33
- if (!(new SiteInfo())->isStaging()) {
34
  return null;
35
  }
36
 
@@ -65,7 +66,7 @@ class CloneOptions
65
  public function set($option, $value)
66
  {
67
  // Early bail if not a staging site
68
- if (!(new SiteInfo())->isStaging()) {
69
  return false;
70
  }
71
 
@@ -91,7 +92,7 @@ class CloneOptions
91
  public function delete($option)
92
  {
93
  // Early bail if not a staging site
94
- if (!(new SiteInfo())->isStaging()) {
95
  return false;
96
  }
97
 
3
  namespace WPStaging\Framework\Staging;
4
 
5
  use stdClass;
6
+ use WPStaging\Core\WPStaging;
7
  use WPStaging\Framework\SiteInfo;
8
 
9
  /**
31
  public function get($option = null)
32
  {
33
  // Early bail if not a staging site
34
+ if (!WPStaging::make(SiteInfo::class)->isStagingSite()) {
35
  return null;
36
  }
37
 
66
  public function set($option, $value)
67
  {
68
  // Early bail if not a staging site
69
+ if (!WPStaging::make(SiteInfo::class)->isStagingSite()) {
70
  return false;
71
  }
72
 
92
  public function delete($option)
93
  {
94
  // Early bail if not a staging site
95
+ if (!WPStaging::make(SiteInfo::class)->isStagingSite()) {
96
  return false;
97
  }
98
 
Framework/Staging/FirstRun.php CHANGED
@@ -4,6 +4,8 @@ namespace WPStaging\Framework\Staging;
4
 
5
  use WPStaging\Frontend\LoginNotice;
6
  use WPStaging\Backend\Notices\DisabledItemsNotice;
 
 
7
  use WPStaging\Framework\SiteInfo;
8
  use WPStaging\Framework\Support\ThirdParty\WordFence;
9
 
@@ -26,10 +28,9 @@ class FirstRun
26
  */
27
  const MAILS_DISABLED_KEY = 'wpstg_emails_disabled';
28
 
29
-
30
  public function init()
31
  {
32
- if (!(new SiteInfo())->isStaging()) {
33
  return;
34
  }
35
 
@@ -52,11 +53,19 @@ class FirstRun
52
  (new LoginNotice())->setTransient();
53
 
54
  // Enable the notice which show what WP Staging Disabled on staging site admin.
55
- (new DisabledItemsNotice())->enable();
 
 
 
 
56
 
57
  // If user.ini present rename it to user.ini.bak and enable notice
58
  (new WordFence())->renameUserIni();
59
 
 
 
 
 
60
  // Allow users to attach custom actions by using this hook
61
  do_action('wpstg.clone_first_run');
62
  }
4
 
5
  use WPStaging\Frontend\LoginNotice;
6
  use WPStaging\Backend\Notices\DisabledItemsNotice;
7
+ use WPStaging\Backend\Notices\WarningsNotice;
8
+ use WPStaging\Core\WPStaging;
9
  use WPStaging\Framework\SiteInfo;
10
  use WPStaging\Framework\Support\ThirdParty\WordFence;
11
 
28
  */
29
  const MAILS_DISABLED_KEY = 'wpstg_emails_disabled';
30
 
 
31
  public function init()
32
  {
33
+ if (!(new SiteInfo())->isStagingSite()) {
34
  return;
35
  }
36
 
53
  (new LoginNotice())->setTransient();
54
 
55
  // Enable the notice which show what WP Staging Disabled on staging site admin.
56
+ WPStaging::make(DisabledItemsNotice::class)->enable();
57
+
58
+ // Enable the notice which show what WP Staging Disabled on staging site admin.
59
+ // This notice is disabled at the moment. Code below can be uncommented and notice can be tweaked if needed later.
60
+ // WPStaging::make(WarningsNotice::class)->enable();
61
 
62
  // If user.ini present rename it to user.ini.bak and enable notice
63
  (new WordFence())->renameUserIni();
64
 
65
+ if (class_exists('\WPStaging\Pro\Staging\NetworkClone')) {
66
+ (new \WPStaging\Pro\Staging\NetworkClone())->init();
67
+ }
68
+
69
  // Allow users to attach custom actions by using this hook
70
  do_action('wpstg.clone_first_run');
71
  }
Framework/Staging/Sites.php CHANGED
@@ -24,6 +24,18 @@ class Sites
24
  */
25
  const OLD_STAGING_SITES_OPTION = 'wpstg_existing_clones_beta';
26
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  /**
28
  * Return list of staging sites in descending order of their creation time.
29
  *
@@ -61,33 +73,48 @@ class Sites
61
  }
62
 
63
  /**
64
- * Upgrade old existing clone beta option to new staging site option
65
  *
66
  * @see \WPStaging\Backend\Upgrade\Upgrade::upgrade2_8_7 (Free version)
67
  * @see \WPStaging\Backend\Pro\Upgrade\Upgrade::upgrade4_0_5 (Pro version)
68
  */
69
  public function upgradeStagingSitesOption()
70
  {
 
 
 
 
 
 
 
 
 
 
 
 
71
  // Get the staging sites from old option
72
- $oldSites = get_option(self::OLD_STAGING_SITES_OPTION, []);
73
 
74
  // Early bail: No sites to migrate
75
- if (empty($oldSites)) {
76
  return;
77
  }
78
 
79
- $newSites = get_option(self::STAGING_SITES_OPTION, []);
80
-
81
  // Convert old format to new, including when there are staging sites in both formats
82
- $allStagingSites = $newSites;
83
 
84
- foreach ($oldSites as $oldSiteSlug => $oldSite) {
85
  // Migrate old site to new format
86
  if (!array_key_exists($oldSiteSlug, $allStagingSites)) {
87
  $allStagingSites[$oldSiteSlug] = $oldSite;
88
  continue;
89
  }
90
 
 
 
 
 
 
91
  // Migrate old site to new format when site slug exists in both options
92
  $i = 0;
93
 
@@ -100,12 +127,8 @@ class Sites
100
 
101
  if (update_option(self::STAGING_SITES_OPTION, $allStagingSites)) {
102
  // Keep a backup just in case
103
- update_option('wpstg_staging_sites_backup', $oldSites, false);
104
  delete_option(self::OLD_STAGING_SITES_OPTION);
105
- } else {
106
- if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
107
- error_log('WPSTAGING DEBUG: update_option for option renaming of staging sites failed.');
108
- }
109
  }
110
  }
111
 
@@ -135,4 +158,36 @@ class Sites
135
  {
136
  return update_option(self::STAGING_SITES_OPTION, $stagingSites);
137
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  }
24
  */
25
  const OLD_STAGING_SITES_OPTION = 'wpstg_existing_clones_beta';
26
 
27
+ /**
28
+ * Before upgrading structure, backup old staging site options
29
+ * @since 4.0.6
30
+ */
31
+ const BACKUP_STAGING_SITES_OPTION = 'wpstg_staging_sites_backup';
32
+
33
+ /**
34
+ * Missing cloneName routine executed
35
+ * @since 4.0.7
36
+ */
37
+ const MISSING_CLONE_NAME_ROUTINE_EXECUTED = 'wpstg_missing_cloneName_routine_executed';
38
+
39
  /**
40
  * Return list of staging sites in descending order of their creation time.
41
  *
73
  }
74
 
75
  /**
76
+ * Copy data from old staging site option wpstg_existing_clones_beta to new staging site option wpstg_staging_sites
77
  *
78
  * @see \WPStaging\Backend\Upgrade\Upgrade::upgrade2_8_7 (Free version)
79
  * @see \WPStaging\Backend\Pro\Upgrade\Upgrade::upgrade4_0_5 (Pro version)
80
  */
81
  public function upgradeStagingSitesOption()
82
  {
83
+ $newSitesOption = get_option(self::STAGING_SITES_OPTION, []);
84
+
85
+ // Early bail: If it's already populated and not empty do nothing. It has been migrated already.
86
+ if (!empty($newSiteOption)) {
87
+ return;
88
+ }
89
+
90
+ // If its no valid array, it is broken
91
+ if (!is_array($newSitesOption)) {
92
+ $newSitesOption = [];
93
+ }
94
+
95
  // Get the staging sites from old option
96
+ $oldSitesOption = get_option(self::OLD_STAGING_SITES_OPTION, []);
97
 
98
  // Early bail: No sites to migrate
99
+ if (empty($oldSitesOption)) {
100
  return;
101
  }
102
 
 
 
103
  // Convert old format to new, including when there are staging sites in both formats
104
+ $allStagingSites = $newSitesOption;
105
 
106
+ foreach ($oldSitesOption as $oldSiteSlug => $oldSite) {
107
  // Migrate old site to new format
108
  if (!array_key_exists($oldSiteSlug, $allStagingSites)) {
109
  $allStagingSites[$oldSiteSlug] = $oldSite;
110
  continue;
111
  }
112
 
113
+ // If key exists and path matches, skip
114
+ if ($allStagingSites[$oldSiteSlug]['path'] === $oldSite['path']) {
115
+ continue;
116
+ }
117
+
118
  // Migrate old site to new format when site slug exists in both options
119
  $i = 0;
120
 
127
 
128
  if (update_option(self::STAGING_SITES_OPTION, $allStagingSites)) {
129
  // Keep a backup just in case
130
+ update_option(self::BACKUP_STAGING_SITES_OPTION, $oldSitesOption, false);
131
  delete_option(self::OLD_STAGING_SITES_OPTION);
 
 
 
 
132
  }
133
  }
134
 
158
  {
159
  return update_option(self::STAGING_SITES_OPTION, $stagingSites);
160
  }
161
+
162
+ /**
163
+ * Upgrade the staging site data structure, add the missing cloneName, if not present
164
+ */
165
+ public function addMissingCloneNameUpgradeStructure()
166
+ {
167
+ $isAdded = get_option(self::MISSING_CLONE_NAME_ROUTINE_EXECUTED, false);
168
+ if ($isAdded) {
169
+ return;
170
+ }
171
+
172
+ // Current options
173
+ $sites = $this->tryGettingStagingSites();
174
+
175
+ // Early bail if no sites
176
+ if (empty($sites)) {
177
+ update_option(self::MISSING_CLONE_NAME_ROUTINE_EXECUTED, true);
178
+ return;
179
+ }
180
+
181
+ // Add missing cloneName if not exists
182
+ foreach ($sites as $key => $site) {
183
+ if (isset($sites[$key]['cloneName'])) {
184
+ continue;
185
+ }
186
+
187
+ $sites[$key]['cloneName'] = $sites[$key]['directoryName'];
188
+ }
189
+
190
+ $this->updateStagingSites($sites);
191
+ update_option(self::MISSING_CLONE_NAME_ROUTINE_EXECUTED, true);
192
+ }
193
  }
Framework/Support/ThirdParty/WordFence.php CHANGED
@@ -36,6 +36,11 @@ class WordFence extends BooleanNotice
36
  return;
37
  }
38
 
 
 
 
 
 
39
  // Rename by appending .bak to its name
40
  rename($absolutePathToUserIni, $absolutePathToUserIni . '.bak');
41
 
@@ -43,6 +48,19 @@ class WordFence extends BooleanNotice
43
  $this->enable();
44
  }
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  /**
47
  * Show the notice if the notice flag is enabled
48
  *
36
  return;
37
  }
38
 
39
+ $activePlugins = apply_filters('active_plugins', (array)get_option('active_plugins'));
40
+ if (!in_array('wordfence/wordfence.php', $activePlugins)) {
41
+ return;
42
+ }
43
+
44
  // Rename by appending .bak to its name
45
  rename($absolutePathToUserIni, $absolutePathToUserIni . '.bak');
46
 
48
  $this->enable();
49
  }
50
 
51
+ /**
52
+ * @inheritDoc
53
+ */
54
+ public function isEnabled()
55
+ {
56
+ // Early bail if renamed file not exists.
57
+ if (!file_exists(ABSPATH . '/.user.ini.bak')) {
58
+ return false;
59
+ }
60
+
61
+ return parent::isEnabled();
62
+ }
63
+
64
  /**
65
  * Show the notice if the notice flag is enabled
66
  *
Framework/Traits/DbRowsGeneratorTrait.php CHANGED
@@ -39,7 +39,7 @@ trait DbRowsGeneratorTrait
39
  protected function rowsGenerator($table, $offset, $limit, \wpdb $db = null)
40
  {
41
  /* if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
42
- error_log(
43
  sprintf(
44
  'DbRowsGeneratorTrait: max-memory-limit=%s; script-memory-limit=%s; memory-usage=%s; execution-time-limit=%s; running-time=%s; is-threshold=%s',
45
  $this->getMaxMemoryLimit(),
@@ -81,9 +81,7 @@ trait DbRowsGeneratorTrait
81
  $rows = $db->get_results("SELECT * FROM {$table} LIMIT {$offset}, {$batchSize}", ARRAY_A);
82
 
83
  if (!empty($db->last_error)) {
84
- if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
85
- error_log($db->last_error);
86
- }
87
  }
88
 
89
  if (empty($rows)) {
@@ -92,9 +90,7 @@ trait DbRowsGeneratorTrait
92
  }
93
 
94
  if (!is_array($rows)) {
95
- if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
96
- error_log(sprintf('$rows is not an array. Actual type: %s', gettype($rows)));
97
- }
98
  }
99
 
100
  $offset += $batchSize;
39
  protected function rowsGenerator($table, $offset, $limit, \wpdb $db = null)
40
  {
41
  /* if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
42
+ \WPStaging\functions\debug_log(
43
  sprintf(
44
  'DbRowsGeneratorTrait: max-memory-limit=%s; script-memory-limit=%s; memory-usage=%s; execution-time-limit=%s; running-time=%s; is-threshold=%s',
45
  $this->getMaxMemoryLimit(),
81
  $rows = $db->get_results("SELECT * FROM {$table} LIMIT {$offset}, {$batchSize}", ARRAY_A);
82
 
83
  if (!empty($db->last_error)) {
84
+ \WPStaging\functions\debug_log($db->last_error);
 
 
85
  }
86
 
87
  if (empty($rows)) {
90
  }
91
 
92
  if (!is_array($rows)) {
93
+ \WPStaging\functions\debug_log(sprintf('$rows is not an array. Actual type: %s', gettype($rows)));
 
 
94
  }
95
 
96
  $offset += $batchSize;
Framework/Traits/DeveloperTimerTrait.php CHANGED
@@ -52,7 +52,7 @@ trait DeveloperTimerTrait
52
  return;
53
  }
54
 
55
- error_log(json_encode($this->timings, JSON_PRETTY_PRINT));
56
  }
57
 
58
  protected function finishEventTimer($event, $context = [])
52
  return;
53
  }
54
 
55
+ \WPStaging\functions\debug_log(json_encode($this->timings, JSON_PRETTY_PRINT));
56
  }
57
 
58
  protected function finishEventTimer($event, $context = [])
Framework/Traits/HydrateTrait.php CHANGED
@@ -27,9 +27,7 @@ trait HydrateTrait
27
  try {
28
  $this->hydrateByMethod('set' . ucfirst($key), $value);
29
  } catch (Exception $e) {
30
- if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
31
- error_log($e->getMessage());
32
- }
33
  }
34
  }
35
 
27
  try {
28
  $this->hydrateByMethod('set' . ucfirst($key), $value);
29
  } catch (Exception $e) {
30
+ \WPStaging\functions\debug_log($e->getMessage());
 
 
31
  }
32
  }
33
 
Framework/Traits/MySQLRowsGeneratorTrait.php CHANGED
@@ -44,7 +44,7 @@ trait MySQLRowsGeneratorTrait
44
  protected function rowsGenerator($databaseName, $table, $numericPrimaryKey, $offset, $requestId, InterfaceDatabaseClient $db, JobDataDto $jobDataDto)
45
  {
46
  /* if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
47
- error_log(
48
  sprintf(
49
  'MySQLRowsGeneratorTrait: max-memory-limit=%s; script-memory-limit=%s; memory-usage=%s; execution-time-limit=%s; running-time=%s; is-threshold=%s',
50
  size_format($this->getMaxMemoryLimit()),
@@ -137,14 +137,15 @@ SQL;
137
  while ($row = $result->fetch_assoc()) {
138
  $rows[] = $row;
139
  }
140
- $rows = array_reverse($rows);
141
  $db->freeResult($result);
 
 
 
142
  $jobDataDto->setLastQueryInfoJSON('');
143
 
144
  if (!empty($db->error())) {
145
- if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
146
- error_log($db->error());
147
- }
148
  }
149
 
150
  if (empty($rows)) {
@@ -153,9 +154,7 @@ SQL;
153
  }
154
 
155
  if (!is_array($rows)) {
156
- if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
157
- error_log(sprintf('$rows is not an array. Actual type: %s', gettype($rows)));
158
- }
159
  }
160
 
161
  // If we got less than the batch size, then this is the last fetch.
44
  protected function rowsGenerator($databaseName, $table, $numericPrimaryKey, $offset, $requestId, InterfaceDatabaseClient $db, JobDataDto $jobDataDto)
45
  {
46
  /* if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
47
+ \WPStaging\functions\debug_log(
48
  sprintf(
49
  'MySQLRowsGeneratorTrait: max-memory-limit=%s; script-memory-limit=%s; memory-usage=%s; execution-time-limit=%s; running-time=%s; is-threshold=%s',
50
  size_format($this->getMaxMemoryLimit()),
137
  while ($row = $result->fetch_assoc()) {
138
  $rows[] = $row;
139
  }
140
+
141
  $db->freeResult($result);
142
+
143
+ $rows = array_reverse($rows);
144
+
145
  $jobDataDto->setLastQueryInfoJSON('');
146
 
147
  if (!empty($db->error())) {
148
+ \WPStaging\functions\debug_log($db->error());
 
 
149
  }
150
 
151
  if (empty($rows)) {
154
  }
155
 
156
  if (!is_array($rows)) {
157
+ \WPStaging\functions\debug_log(sprintf('$rows is not an array. Actual type: %s', gettype($rows)));
 
 
158
  }
159
 
160
  // If we got less than the batch size, then this is the last fetch.
Framework/Traits/ResourceTrait.php CHANGED
@@ -37,7 +37,7 @@ trait ResourceTrait
37
 
38
  if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
39
  if ($isTimeLimit || $isMemoryLimit) {
40
- error_log(wp_json_encode(['class', __CLASS__, 'isTimeLimit' => $isTimeLimit, 'isMemoryLimit' => $isMemoryLimit]));
41
  }
42
  }
43
 
37
 
38
  if (defined('WPSTG_DEBUG') && WPSTG_DEBUG) {
39
  if ($isTimeLimit || $isMemoryLimit) {
40
+ \WPStaging\functions\debug_log(wp_json_encode(['class', __CLASS__, 'isTimeLimit' => $isTimeLimit, 'isMemoryLimit' => $isMemoryLimit]));
41
  }
42
  }
43
 
Framework/Utils/Strings.php CHANGED
@@ -92,4 +92,21 @@ class Strings
92
  $length = strlen($needle);
93
  return ($needle === substr($haystack, 0, $length));
94
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  }
92
  $length = strlen($needle);
93
  return ($needle === substr($haystack, 0, $length));
94
  }
95
+
96
+ /**
97
+ * Search & Replace last occurrence of string in haystack
98
+ * @param string $needle
99
+ * @param string $replace
100
+ * @param string $haystack
101
+ * @return string
102
+ */
103
+ function replaceLastMatch($needle, $replace, $haystack)
104
+ {
105
+ $result = $haystack;
106
+ $pos = strrpos($haystack, $needle);
107
+ if ($pos !== false) {
108
+ $result = substr_replace($haystack, $replace, $pos, strlen($needle));
109
+ }
110
+ return $result;
111
+ }
112
  }
Frontend/Frontend.php CHANGED
@@ -158,7 +158,7 @@ class Frontend
158
  */
159
  private function isStagingSite()
160
  {
161
- return (new SiteInfo())->isStaging();
162
  }
163
 
164
  /**
158
  */
159
  private function isStagingSite()
160
  {
161
+ return (new SiteInfo())->isStagingSite();
162
  }
163
 
164
  /**
Frontend/views/header.php CHANGED
@@ -1,3 +1,10 @@
 
 
 
 
 
 
 
1
  <!DOCTYPE html>
2
  <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
3
  <head>
1
+ <?php
2
+
3
+ /**
4
+ * @see \WPStaging\Frontend\LoginForm::getHeader()
5
+ */
6
+
7
+ ?>
8
  <!DOCTYPE html>
9
  <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
10
  <head>
assets/css/dist/wpstg-admin.css CHANGED
@@ -45,6 +45,10 @@
45
  color: #1b1b1b;
46
  }
47
 
 
 
 
 
48
  /* CSS for Tabs */
49
 
50
  body.wp-staging-pro_page_wpstg_backup,
@@ -1001,7 +1005,6 @@ body.wp-staging-pro_page_wpstg-license {
1001
  display: inline-block;
1002
  text-decoration: none;
1003
  font-size: 13px;
1004
- /*line-height: 26px;*/
1005
  height: 28px;
1006
  margin: 0;
1007
  padding: 0 10px 1px;
@@ -1018,6 +1021,11 @@ body.wp-staging-pro_page_wpstg-license {
1018
  text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;
1019
  }
1020
 
 
 
 
 
 
1021
  .wpstg-blue-primary:hover {
1022
  background-color: #259be6;
1023
  }
@@ -1195,6 +1203,11 @@ body.wp-staging-pro_page_wpstg-license {
1195
  font-size: 13px;
1196
  }
1197
 
 
 
 
 
 
1198
  #wpstg-update-notify {
1199
  background-color: #E01E5A;
1200
  font-size: 14px;
@@ -1286,6 +1299,11 @@ body.wp-staging-pro_page_wpstg-license {
1286
  margin-left: 10px;
1287
  }
1288
 
 
 
 
 
 
1289
  .wpstg--tooltip .wpstg--tooltiptext {
1290
  visibility: hidden;
1291
  width: 300px;
@@ -1296,9 +1314,9 @@ body.wp-staging-pro_page_wpstg-license {
1296
  border-radius: 3px;
1297
  position: absolute;
1298
  z-index: 1;
1299
- -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
1300
- -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
1301
- box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
1302
  }
1303
 
1304
  .wpstg--tooltiptext-backups {
@@ -1369,7 +1387,8 @@ Tooltip top arrow
1369
  font-weight: 600;
1370
  }
1371
 
1372
- #wpstg_select_tables_cloning option:checked {
 
1373
  /* Cannot use background color here because Chrome and Firefox ignore it even if set to !important */
1374
  -webkit-appearance: menulist-button;
1375
  background-image: linear-gradient(0deg, #1e90ff 0%, #1e90ff 100%);
@@ -3137,4 +3156,71 @@ div#wpstg-restore-wait div {
3137
  }
3138
  }
3139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3140
  /*# sourceMappingURL=wpstg-admin.css.map */
45
  color: #1b1b1b;
46
  }
47
 
48
+ .wpstg--filter--svg {
49
+ filter: invert(24%) sepia(11%) saturate(558%) hue-rotate(169deg) brightness(97%) contrast(91%);
50
+ }
51
+
52
  /* CSS for Tabs */
53
 
54
  body.wp-staging-pro_page_wpstg_backup,
1005
  display: inline-block;
1006
  text-decoration: none;
1007
  font-size: 13px;
 
1008
  height: 28px;
1009
  margin: 0;
1010
  padding: 0 10px 1px;
1021
  text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;
1022
  }
1023
 
1024
+ a.wpstg-blue-primary {
1025
+ padding: 5px 10px;
1026
+ height: auto;
1027
+ }
1028
+
1029
  .wpstg-blue-primary:hover {
1030
  background-color: #259be6;
1031
  }
1203
  font-size: 13px;
1204
  }
1205
 
1206
+ #wpstg_select_tables_pushing {
1207
+ height: 400px;
1208
+ font-size: 13px;
1209
+ }
1210
+
1211
  #wpstg-update-notify {
1212
  background-color: #E01E5A;
1213
  font-size: 14px;
1299
  margin-left: 10px;
1300
  }
1301
 
1302
+ .wpstg--tooltip.wpstg--tooltip-normal {
1303
+ margin-left: 0;
1304
+ border-bottom: 0;
1305
+ }
1306
+
1307
  .wpstg--tooltip .wpstg--tooltiptext {
1308
  visibility: hidden;
1309
  width: 300px;
1314
  border-radius: 3px;
1315
  position: absolute;
1316
  z-index: 1;
1317
+ -webkit-box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;
1318
+ -moz-box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;
1319
+ box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;
1320
  }
1321
 
1322
  .wpstg--tooltiptext-backups {
1387
  font-weight: 600;
1388
  }
1389
 
1390
+ #wpstg_select_tables_cloning option:checked,
1391
+ #wpstg_select_tables_pushing option:checked {
1392
  /* Cannot use background color here because Chrome and Firefox ignore it even if set to !important */
1393
  -webkit-appearance: menulist-button;
1394
  background-image: linear-gradient(0deg, #1e90ff 0%, #1e90ff 100%);
3156
  }
3157
  }
3158
 
3159
+ .wpstg-tab-item--vert-center {
3160
+ display: flex;
3161
+ align-items: center;
3162
+ }
3163
+
3164
+ .wpstg-db-comparison-modal {
3165
+ padding-left: 10px;
3166
+ padding-right: 10px;
3167
+ }
3168
+
3169
+ .wpstg-db-comparison-table {
3170
+ font-size: 13px;
3171
+ width: 100%;
3172
+ }
3173
+
3174
+ .wpstg-db-comparison-table tbody td {
3175
+ padding-top: 6px;
3176
+ }
3177
+
3178
+ .wpstg-db-comparison-table tr > td:first-child,
3179
+ .wpstg-db-comparison-table tr > th:first-child {
3180
+ text-align: left;
3181
+ }
3182
+
3183
+ .wpstg-css-tick {
3184
+ display: inline-block;
3185
+ transform: rotate(45deg);
3186
+ height: 12px;
3187
+ width: 6px;
3188
+ border-bottom: 3px solid #78b13f;
3189
+ border-right: 3px solid #78b13f;
3190
+ }
3191
+
3192
+ .wpstg-css-cross {
3193
+ position: relative;
3194
+ top: -8px;
3195
+ left: -2px;
3196
+ width: 16px;
3197
+ height: 16px;
3198
+ }
3199
+
3200
+ .wpstg-css-cross:before, .wpstg-css-cross:after {
3201
+ position: absolute;
3202
+ content: ' ';
3203
+ height: 17px;
3204
+ width: 3px;
3205
+ background-color: #E01E5A;
3206
+ }
3207
+
3208
+ .wpstg-css-cross:before {
3209
+ transform: rotate(45deg);
3210
+ }
3211
+
3212
+ .wpstg-css-cross:after {
3213
+ transform: rotate(-45deg);
3214
+ }
3215
+
3216
+ .wpstg-selection-preview {
3217
+ font-size: 12px;
3218
+ margin-left: 20px;
3219
+ color: #3216;
3220
+ }
3221
+
3222
+ .wpstg-selection-preview.danger {
3223
+ color: #E01E5A;
3224
+ }
3225
+
3226
  /*# sourceMappingURL=wpstg-admin.css.map */
assets/css/dist/wpstg-admin.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["wpstg-admin.css"],"names":[],"mappings":"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","file":"wpstg-admin.css","sourcesContent":["/**\n * WPSTG Admin CSS\n *\n * @package WPSTG\n * @subpackage Admin CSS\n * @copyright Copyright (c) 2021, René Hermenau\n * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License\n*/\n\n/* Colors */\n\n.wpstg--violet {\n color: #9d37ae;\n}\n\n.wpstg-border--violet {\n border: 1px solid #9d37ae;\n}\n\n.wpstg--red {\n color: #E01E5A;\n}\n\n.wpstg-cta--red {\n color: #fe008f;\n}\n\n.wpstg--blue {\n color: #24a1f0;\n}\n\n.wpstg--darkblue {\n color: #0e86d9;\n}\n\n.wpstg--green {\n color: #83c11f;\n}\n\n.wpstg--grey {\n color: #3e3e3e;\n}\n\n.wpstg--darkgrey {\n color: #1b1b1b;\n}\n\n/* CSS for Tabs */\n\nbody.wp-staging-pro_page_wpstg_backup,\nbody.toplevel_page_wpstg_clone,\nbody.wp-staging-pro_page_wpstg-settings,\nbody.wp-staging-pro_page_wpstg-tools,\nbody.wp-staging-pro_page_wpstg-license {\n background-color: #f3f5f7;\n}\n\n#wpstg-tab-container ul {\n list-style: none;\n margin: 0;\n padding: 0;\n background: #f1f1f1;\n float: left;\n}\n\n#wpstg-tab-container ul li:first-child.selected-tab {\n border-top: none;\n}\n\n#wpstg-tab-container ul li a.selected-tab {\n font-weight: bold;\n text-decoration: none;\n}\n\n#wpstg-tab-container .row {\n padding-top: 10px;\n padding-bottom: 12px;\n}\n\n.wpstg-tabs-container .nav-tab-wrapper {\n padding: 0;\n}\n\n#wpstg-tab-container .row label strong,\n#wpstg-tab-container .row strong {\n font-weight: bold;\n}\n\n.wpstg-tabs a {\n padding: 5px;\n}\n\n#wpstg-tab-container > ul > li.wpstg-tabs.active {\n background-color: white;\n}\n\n#wpstg_settingsgeneral_header .row:nth-child(3),\n#wpstg_settingsgeneral_header .row:nth-child(4) {\n display: none;\n}\n\n#wpstg-tab-container .wpstg-settings-panel {\n padding: 0 20px 20px 20px;\n overflow: auto;\n}\n\n#wpstg-tab-container .wpstg-form-table th {\n vertical-align: top;\n text-align: left;\n padding: 20px 10px 20px 0;\n line-height: 1.3;\n font-weight: bold;\n font-size: 14px;\n color: #484848;\n width: 30%;\n}\n\n#wpstg-tab-container .wpstg-form-table tr {\n border-bottom: 1px solid #E7E7E7;\n}\n\n#wpstg-tab-container span.description {\n display: block;\n font-weight: 400;\n font-style: normal;\n font-size: 13px;\n margin-top: 7px;\n color: #484848;\n}\n\n#wpstg-tab-container .col-title {\n color: #484848;\n}\n\n@media only screen and (max-width: 680px) {\n #wpstg-tab-container ul {\n float: none;\n }\n\n #wpstg-tab-container .wpstg-form-table tr > th {\n width: 100%;\n }\n\n #wpstg-tab-container span.description {\n font-size: 14px;\n }\n\n #wpstg-tab-container .wpstg-form-table tr > th,\n #wpstg-tab-container .wpstg-form-table tr > td {\n padding: 10px;\n }\n}\n\n#wpstg-tab-container ul li {\n margin-bottom: 0;\n}\n\n#wpstg-tab-container ul li a {\n display: block;\n padding: 10px 4px 10px 14px;\n border-width: 1px 0;\n border-style: solid;\n border-top-color: white;\n border-bottom-color: #e7e7e7;\n text-decoration: none;\n color: #0097DF;\n font-weight: bold;\n}\n\n#wpstg-tab-container ul li a:hover {\n background-color: #e5e5e5;\n color: #777777;\n}\n\n.wpstg-logo {\n display: block;\n font-size: 16px;\n padding-top: 20px;\n width: 220px;\n float: left;\n}\n\n.wpstg-logo img {\n max-width: 212px;\n}\n\n.wpstg-version {\n display: block;\n padding-top: 40px;\n color: #9b9b9b;\n}\n\n.wpstg_admin .nav-tab {\n color: #3C3C3C;\n}\n\n#wpstg-tab-container table tbody tr:nth-child(1) > th > div {\n font-size: 20px;\n}\n\n/* Cloning workflow */\n\n#wpstg-clonepage-wrapper {\n margin-bottom: 20px;\n width: 98%;\n}\n\n@media screen and (min-width: 1090px) {\n #wpstg-clonepage-wrapper {\n float: left;\n margin-bottom: 20px;\n }\n}\n\n#wpstg-steps {\n margin-top: 0px;\n margin-left: 20px;\n}\n\n#wpstg-steps li {\n color: #444;\n line-height: 20px;\n padding-right: 10px;\n float: left;\n}\n\n.wpstg-step-num {\n border: 1px solid #3e3e3e;\n border-radius: 3px;\n display: inline-block;\n width: 20px;\n height: 20px;\n text-align: center;\n margin-right: 5px;\n}\n\n.wpstg-current-step {\n font-weight: bold;\n}\n\n.wpstg-current-step .wpstg-step-num {\n background: #3e3e3e;\n color: #eee;\n}\n\n.wpstg-box {\n margin: 10px 0;\n padding: 10px;\n position: relative;\n overflow: hidden;\n transition: border-color .2s ease-in-out;\n}\n\n.wpstg-clone {\n margin-bottom: 10px;\n padding: 16px;\n position: relative;\n transition: border-color .2s ease-in-out;\n background-color: #ffffff;\n color: #3e3e3e;\n border-radius: 3px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .1);\n}\n\n.wpstg-clone.active {\n border-color: #1d94cf;\n}\n\n.wpstg-clone-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.wpstg-clone-title {\n display: inline-block;\n font-size: 15px;\n max-width: 300px;\n text-decoration: none;\n font-weight: bold;\n color: #3e3e3e;\n}\n\n.wpstg-clone-title:hover {\n color: #111111;\n}\n\n.wpstg-clone-actions {\n display: flex;\n margin-top: 5px;\n}\n\n.wpstg-dropdown {\n position: relative;\n}\n\n.wpstg-clone-actions .wpstg-dropdown-toggler {\n text-decoration: none;\n background: #25a1f0;\n padding: 6px 10px;\n border-radius: 2px;\n font-size: 14px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .2);\n color: #ffffff;\n}\n\n.wpstg-clone-actions .wpstg-dropdown-toggler:hover {\n background: #002648;\n color: white;\n}\n\n.wpstg-dropdown {\n position: relative;\n}\n\n.wpstg-dropdown > .wpstg-dropdown-menu {\n background: #fff;\n display: none;\n flex-direction: column;\n position: absolute;\n right: 0;\n top: calc(100% + 4px);\n padding: 8px;\n border-radius: 2px;\n width: 100px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .2);\n z-index: 1000;\n}\n\n.wpstg-dropdown > .wpstg-dropdown-menu.wpstg-menu-dropup {\n top: auto;\n bottom: 100%;\n transform: translate3d(0px, -3px, 0px);\n}\n\n.wpstg-dropdown > .wpstg-dropdown-menu.shown {\n display: flex;\n}\n\n.wpstg-clone-action,\n.wpstg-dropdown-action {\n color: #3e3e3e;\n padding: 6px 8px;\n border-radius: 3px;\n text-decoration: none;\n position: relative;\n transition: color .2s ease-in-out;\n border-bottom: 1px solid #f3f3f3;\n}\n\n.wpstg-clone-action:hover,\n.wpstg-dropdown-action:hover {\n background: rgba(0, 0, 0, 0.05);\n}\n\n.wpstg-dropdown-action {\n color: #3e3e3e;\n background: transparent;\n border: 0 solid black;\n outline: none;\n box-shadow: none;\n}\n\n.wpstg-remove-clone:hover {\n color: #E01E5A;\n}\n\n.wpstg-clone-action:last-child {\n border: none;\n}\n\n.wpstg-clone:hover .wpstg-clone-action {\n display: inline-block;\n}\n\n#wpstg-show-error-details:focus,\n#wpstg-workflow .wpstg-clone-action {\n outline: none;\n box-shadow: none;\n}\n\n.wpstg-link-btn {\n background: #45a1c9;\n color: #fff;\n display: inline-block;\n padding: 5px 10px;\n text-decoration: none;\n vertical-align: baseline;\n transition: all .2s ease-in-out;\n}\n\n.wpstg-link-btn:hover,\n.wpstg-link-btn:focus {\n color: #fff;\n outline: none;\n box-shadow: none;\n}\n\n#wpstg-workflow .wpstg-link-btn:active {\n vertical-align: baseline;\n}\n\n.wpstg-link-btn[disabled] {\n background: #777 !important;\n border-color: #555 !important;\n pointer-events: none;\n}\n\n#wpstg-cancel-cloning,\n#wpstg-cancel-cloning-update {\n margin-top: 5px;\n}\n\n#wpstg-cancel-cloning.success,\n#wpstg-cancel-cloning.success {\n background: #64dd58;\n border-color: #54bd4a;\n}\n\n#wpstg-error-wrapper,\n#wpstg-error-details {\n display: none;\n padding-top: 10px;\n font-size: 13px;\n clear: both;\n}\n\n#wpstg-show-error-details {\n display: inline-block;\n margin-left: 5px;\n color: #555;\n text-decoration: none;\n transition: color .2s ease-in-out;\n}\n\n#wpstg-show-error-details:hover {\n color: #1d94cf;\n}\n\n#wpstg-error-details {\n border-left: 5px solid #E01E5A;\n padding: 10px;\n width: 500px;\n}\n\n#wpstg-try-again {\n display: none;\n}\n\n#wpstg-home-link {\n float: right;\n}\n\n.wpstg-loader {\n content: url('../../img/loading.gif');\n margin-top: 10px;\n display: none;\n}\n\n.wpstg-loader.wpstg-finished {\n display: block;\n content: \"Finished\";\n background-color: #00c89a;\n color: white;\n padding: 2px 10px;\n margin-top: 0;\n border-radius: 3px;\n}\n\n#wpstg-workflow {\n max-width: 800px;\n position: relative;\n clear: both;\n padding-top: 20px;\n float: left;\n min-width: 500px;\n min-height: 380px;\n padding-right: 20px;\n padding-bottom: 20px;\n}\n\n#wpstg-sidebar {\n float: left;\n max-width: 400px;\n display: block;\n margin-left: 10px;\n}\n\n#wpstg-workflow.loading::after,\n#wpstg-removing-clone.loading::after {\n background: rgba(255, 255, 255, .7);\n content: 'Loading... may take a while for huge websites';\n display: block;\n width: 100%;\n height: 100%;\n font-size: 20px;\n padding-top: 100px;\n text-align: center;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 99;\n}\n\n#wpstg-removing-clone.loading::after {\n content: 'REMOVING' !important;\n}\n\n#wpstg-existing-clones,\n#wpstg-removing-clone {\n position: relative;\n}\n\n#wpstg-existing-clones h3 {\n color: #3e3e3e;\n}\n\n#wpstg-removing-clone .wpstg-tab-section {\n display: block;\n}\n\n.wpstg-progress-bar {\n max-width: 900px;\n height: 27px;\n padding: 0;\n background-color: #d6d8d7;\n}\n\n.wpstg-progress {\n float: left;\n background: #3fa5ee;\n width: 0;\n height: 100%;\n transition: width .6s ease;\n color: white;\n line-height: 25px;\n text-align: center;\n overflow: hidden;\n}\n\n.wpstg-progress-files {\n background: #16b4f0;\n width: 0;\n height: 100%;\n transition: width .6s ease;\n color: white;\n line-height: 25px;\n text-align: center;\n}\n\n#wpstg-new-clone-id.wpstg-error-input,\n#wpstg-clone-path.wpstg-error-input {\n border: 1px solid #E01E5A;\n box-shadow: 0 0 2px rgba(255, 66, 53, .8);\n}\n\n#wpstg-new-clone-id {\n width: 450px;\n max-width: 100%;\n margin-left: 15px;\n}\n\n#wpstg-new-clone {\n background: #25a1f0;\n border-color: #2188c9;\n}\n\n#wpstg-new-clone:hover {\n background: #259be6;\n border-color: #2188c9;\n}\n\n#wpstg-clone-path {\n margin-left: 10px;\n width: 350px;\n}\n\n.wpstg-error-msg {\n color: #E01E5A;\n}\n\n#wpstg-clone-id-error {\n display: block;\n background-color: #f0f8ff;\n padding: 10px;\n margin: 20px;\n}\n\n#wpstg-start-cloning + .wpstg-error-msg {\n display: block;\n margin-top: 5px;\n}\n\n.wpstg-size-info {\n color: #999;\n font-weight: normal;\n position: relative;\n left: 2px;\n}\n\n.wpstg-db-table .wpstg-size-info {\n top: 2px;\n}\n\n.wpstg-db-table:hover {\n background-color: #f0f8ff;\n}\n\n#wpstg-workflow #wpstg-start-cloning {\n margin-left: 5px;\n vertical-align: baseline;\n}\n\n\n/* Tabs */\n\n.wpstg-tabs-wrapper {\n max-width: 640px;\n margin: 10px 0;\n}\n\n#wpstg-path-wrapper {\n border-bottom: 2px dashed #ccc;\n padding-bottom: 10px;\n margin-bottom: 10px;\n}\n\n.wpstg-tab-section {\n border-bottom: 1px solid #ddd;\n border-right: none;\n border-left: none;\n display: none;\n width: calc(100% - 72px);\n padding: 0px 36px;\n}\n\n.wpstg-tab-section::after {\n display: block;\n content: '';\n clear: both;\n}\n\n.wpstg-tab-header {\n border-bottom: 1px solid #ddd;\n border-right: none;\n border-left: none;\n color: #444;\n font-size: 16px;\n font-weight: bold;\n display: block;\n padding: 10px;;\n text-decoration: none;\n}\n\n.wpstg-tab-triangle {\n display: inline-block;\n margin-right: 12px;\n animation: transform 0.5s;\n width: 0;\n height: 0;\n margin-top: -3px;\n vertical-align: middle;\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-left: 10px solid;\n transition: transform 0.2s;\n cursor: pointer;\n}\n\n.wpstg-tab-triangle.wpstg-no-icon {\n margin-right: 2px;\n width: auto;\n height: auto;\n vertical-align: auto;\n border-top: 0px solid;\n border-bottom: 0px solid;\n border-left: 0px solid;\n}\n\n.wpstg-tab-triangle.wpstg-rotate-90 {\n transform: rotate(90deg);\n}\n\n.wpstg-tab-header:focus {\n color: #444;\n outline: none;\n box-shadow: none;\n}\n\n#wpstg-large-files {\n display: none;\n border: 1px dashed #ccc;\n padding: 10px 10px 10px;\n margin-top: 20px;\n position: relative;\n font-size: 12px;\n}\n\n#wpstg-large-files h3 {\n background: #fff;\n margin: 0;\n padding: 0 5px;\n position: absolute;\n top: -10px;\n left: 5px;\n}\n\n.wpstg-subdir {\n display: none;\n margin-left: 20px;\n}\n\n.wpstg-subdir.wpstg-push {\n display: block;\n margin-left: 20px;\n}\n\n.wpstg-dir a.disabled {\n color: #888;\n cursor: default;\n text-decoration: none;\n}\n\n.wpstg-check-subdirs {\n display: inline-block;\n margin-left: 10px;\n}\n\n.wpstg-notice-alert {\n display: block;\n background-color: #E01E5A;\n padding: 20px;\n max-width: 600px;\n margin-top: 10px;\n color: white;\n}\n\n.wpstg-notice--white {\n display: block;\n background-color: #ffffff;\n padding: 20px;\n max-width: 600px;\n margin-top: 10px;\n}\n\n.wpstg-notice-alert a {\n color: white;\n}\n\n.wpstg-notice-alert h3 {\n color: white;\n}\n\n.wpstg-header {\n font-weight: 400;\n line-height: 1.6em;\n font-size: 19px;\n border-bottom: 1px solid #DFDFDF;\n clear: both;\n padding-top: 10px;\n}\n\n#wpstg-clone-label {\n font-size: 14px;\n font-weight: bold;\n}\n\n.wpstg-log-details {\n height: 300px;\n overflow: scroll;\n max-width: 650px;\n font-family: monospace;\n font-size: 12px;\n line-height: 15px;\n border: 1px solid #FFF;\n background-color: black;\n color: #c0c0c0;\n padding: 3px;\n white-space: nowrap;\n margin-top: 15px;\n}\n\n#wpstg-finished-result {\n display: none;\n}\n\n#wpstg-remove-cloning {\n background: #ff3428;\n border-color: #e72f24;\n margin-top: 5px;\n}\n\n#wpstg-success-notice {\n padding: 10px;\n background-color: white;\n max-width: 900px;\n border: 1px solid #ccc;\n margin-top: 20px;\n}\n\n.wpstg_beta_notice {\n margin-bottom: 20px;\n}\n\n.wpstg-sysinfo {\n width: 700px;\n height: 700px;\n}\n\n.wpstg-form-table .col-title label {\n font-weight: 600;\n}\n\n.wpstg-form-table td:first-child {\n width: 30%;\n}\n\n.wpstg-share-button-container {\n margin: 5px 0;\n}\n\n.wpstg-share-button-container p {\n margin: 0 0 10px 0;\n}\n\n.wpstg-share-button {\n display: inline-block;\n}\n\n.wpstg-share-button a {\n text-decoration: none;\n}\n\n.wpstg-share-button .wpstg-share {\n font-family: sans-serif;\n font-weight: bold;\n text-decoration: none;\n text-align: center;\n}\n\n.wpstg-share-button .wpstg-share {\n -webkit-border-radius: 2px;\n -moz-border-radius: 2px;\n border-radius: 2px;\n color: #FFF;\n display: inline;\n font-size: 12px;\n padding: 4px 8px;\n}\n\n.wpstg-share-button-twitter .wpstg-share {\n background-color: #00ABF0;\n}\n\n.wpstg-share-button-facebook .wpstg-share {\n background-color: #3b5998;\n}\n\n.wpstg-share-button-googleplus .wpstg-share {\n background-color: #F53424;\n}\n\n.wpstg-share-button-twitter .share:active,\n.wpstg-share-button-facebook .share:active,\n.wpstg-share-button-googleplus .share:active {\n background-color: #353535;\n}\n\n#wpstg-check-space {\n margin-left: 8px;\n}\n\n#wpstg-welcome li {\n font-size: 18px;\n line-height: 29px;\n position: relative;\n padding-left: 23px;\n list-style: none !important;\n}\n\n#wpstg-welcome {\n margin-top: 20px;\n margin-right: 20px;\n background-color: white;\n}\n\n.wpstg-heading-pro {\n font-weight: bold;\n}\n\n.wpstg-h2 {\n margin-top: 0;\n margin-bottom: 1.2rem;\n font-size: 30px;\n line-height: 2.5rem;\n}\n\n#wpstg-welcome li:before {\n width: 1em;\n height: 100%;\n background: url(data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%2377B227%22%20d%3D%22M1671%20566q0%2040%2D28%2068l%2D724%20724%2D136%20136q%2D28%2028%2D68%2028t%2D68%2D28l%2D136%2D136%2D362%2D362q%2D28%2D28%2D28%2D68t28%2D68l136%2D136q28%2D28%2068%2D28t68%2028l294%20295%20656%2D657q28%2D28%2068%2D28t68%2028l136%20136q28%2028%2028%2068z%22%2F%3E%3C%2Fsvg%3E) left .4em no-repeat;\n background-size: contain;\n content: \"\";\n position: absolute;\n top: -2px;\n left: 0;\n color: #77b227;\n}\n\n.wpstg-h1 {\n margin-bottom: 1.35rem;\n font-size: 2.5em;\n line-height: 3.68rem;\n letter-spacing: normal;\n}\n\n.wpstg--swal2-content h1 {\n color: #444;\n}\n\n#wpstg-welcome h2 {\n margin: 0 0 15px;\n}\n\n#wpstg-welcome .wpstg-footer {\n clear: both;\n margin-top: 20px;\n font-style: italic;\n}\n\n#wpstg-footer {\n clear: both;\n margin-top: 20px;\n margin-right: 10px;\n padding-top: 50px;\n}\n\n#wpstg-footer a {\n text-decoration: none;\n}\n\n#wpstg-footer li {\n margin-bottom: 2px;\n list-style: circle;\n}\n\n#wpstg-footer ul {\n margin-left: 15px;\n margin-top: 0px;\n}\n\n.wpstg-footer--title {\n margin-left: 15px;\n}\n\n.wpstg-staging-info {\n margin-top: 8px;\n color: #3e3e3e;\n font-size: 12px;\n}\n\n.wpstg-staging-info a {\n color: #3e3e3e;\n}\n\n.wpstg-staging-info li {\n margin-bottom: 2px;\n}\n\n.wpstg-bold {\n font-weight: 600;\n}\n\n#wpstg-processing-status {\n margin-top: 5px;\n font-size: 13px;\n font-weight: 400;\n float: left;\n}\n\n#wpstg-processing-timer {\n margin-top: 5px;\n font-size: 13px;\n font-weight: 400;\n float: right;\n}\n\n#wpstg-report-issue-button {\n margin-left: 50px;\n border: 1px solid #E01E5A;\n color: #E01E5A;\n background-color: white;\n}\n\n#wpstg-report-issue-button:hover {\n background-color: #dc2b62;\n color: #fff;\n}\n\n.wpstg-blue-primary {\n display: inline-block;\n text-decoration: none;\n font-size: 13px;\n /*line-height: 26px;*/\n height: 28px;\n margin: 0;\n padding: 0 10px 1px;\n cursor: pointer;\n border-width: 1px;\n border-style: solid;\n -webkit-appearance: none;\n border-radius: 3px;\n white-space: nowrap;\n box-sizing: border-box;\n background: #25a1f0;\n border-color: #2188c9;\n color: #fff;\n text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;\n}\n\n.wpstg-blue-primary:hover {\n background-color: #259be6;\n}\n\n.wpstg-report-issue-form {\n position: absolute;\n z-index: 999;\n width: 300px;\n background-color: #fff;\n padding: 15px 15px 10px;\n border: 1px solid #e8e8e8;\n border-radius: 3px;\n box-shadow: 0 1px 0 0 #fff inset;\n display: none;\n right: 0;\n top: 35px;\n}\n\n@media (max-width: 600px) {\n .wpstg-report-issue-form {\n position: relative;\n }\n}\n\n.wpstg-report-show {\n display: block;\n}\n\n.wpstg-field input[type=text],\n.wpstg-field textarea {\n width: 100%;\n font-weight: 400;\n line-height: 1.4;\n margin-bottom: 4px;\n}\n\n.wpstg-report-email,\n.wpstg-report-hosting-provider {\n width: 100%;\n font-weight: 400;\n font-size: .8rem;\n height: 2.3rem;\n line-height: 2.3rem;\n border-radius: 3px;\n margin-bottom: 4px;\n padding: 0 10px;\n}\n\n.wpstg-report-description {\n border-radius: 3px;\n font-size: .8rem;\n padding: 6px 10px;\n resize: none;\n}\n\n.wpstg-report-privacy-policy {\n font-size: 12px;\n margin-bottom: 15px;\n}\n\n#wpstg-report-cancel {\n float: right;\n margin-right: 5px;\n font-weight: bold;\n}\n\n#wpstg-success-button {\n font-weight: bold;\n}\n\n.wpstg-message {\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n background-color: #f5e0de;\n border-radius: 3px;\n color: rgba(0, 0, 0, .6);\n height: auto;\n margin: 10px 0;\n min-height: 18px;\n padding: 6px 10px;\n position: relative;\n}\n\n.wpstg-message.wpstg-error-message {\n background-color: #f5e0de;\n color: #b65147;\n font-size: 12px;\n}\n\n.wpstg-message.wpstg-success-message {\n background-color: #d7f8e0;\n color: #515151;\n}\n\n.wpstg-message p {\n margin: 3px 0;\n font-size: 13px;\n}\n\n.wpstg-warning {\n display: block;\n padding: 10px;\n background-color: #ffb804;\n color: #ffffff;\n margin: 10px 10px 10px 0;\n}\n\n.wpstg-warning a {\n color: #ffffff;\n font-weight: bold;\n text-decoration: underline;\n}\n\n.wpstg-error {\n display: block;\n padding: 10px !important;\n background-color: #E01E5A !important;\n color: #ffffff;\n margin: 10px 10px 10px 0 !important;\n border-color: transparent !important;\n border-left-color: transparent !important;\n box-shadow: none !important;\n}\n\n.wpstg-error a {\n color: #ffffff;\n font-weight: bold;\n text-decoration: underline;\n}\n\n#wpstg-resume-cloning {\n display: none;\n}\n\n#wpstg-external-db th {\n text-align: left;\n width: 120px;\n}\n\n#wpstg-db-connect {\n font-weight: normal;\n}\n\n#wpstg-db-status {\n display: block;\n margin-top: 5px;\n padding: 5px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n text-decoration: none;\n text-align: center;\n}\n\n.wpstg-text-field > #wpstg-db-status {\n margin-top: 8px;\n margin-left: 150px;\n min-width: 300px;\n}\n\n.wpstg-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n\n.wpstg-failed {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n\n#wpstg_select_tables_cloning {\n height: 600px;\n font-size: 13px;\n}\n\n#wpstg-update-notify {\n background-color: #E01E5A;\n font-size: 14px;\n color: #ffffff;\n line-height: normal;\n padding: 10px;\n}\n\n#wpstg-update-notify a {\n color: #ffffff;\n font-weight: bold;\n}\n\n.wpstg-pointer {\n cursor: pointer;\n}\n\n.wpstg--tab--header {\n background-color: white;\n /* margin-bottom: 10px; */\n /* padding: 16px; */\n position: relative;\n transition: border-color .2s ease-in-out;\n background-color: #ffffff;\n color: #3e3e3e;\n border-radius: 2px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .02);\n}\n\n.wpstg--tab--header ul {\n display: flex;\n}\n\n.wpstg--tab--header ul li {\n margin-right: 1em;\n margin-bottom: 0px;\n}\n\n.wpstg--tab--header ul li:last-child {\n margin-right: 0;\n}\n\n.wpstg--tab--header a {\n min-width: 150px;\n text-align: center;\n cursor: pointer;\n display: inline-block;\n padding: 1em 1.25em;\n padding-bottom: 9px;\n color: #c4c4c4;\n font-size: 18px;\n /*\n border: solid 1px;\n */\n}\n\n.wpstg--tab--header a.wpstg--tab--active {\n border-bottom: .4em solid #25A1F0;\n color: #25A1F0;\n}\n\n.wpstg--tab--header a:hover {\n background-color: #fefefe;\n border-bottom: 0.4em solid #25A1F0;\n color: #25A1F0;\n}\n\n.wpstg--tab--content {\n display: none;\n}\n\n.wpstg--tab--active {\n display: block;\n}\n\n.wpstg--text--strong,\n.wpstg--text--strong * {\n font-weight: bold !important;\n}\n\n.wpstg--text--danger {\n color: #a94442;\n}\n\n.wpstg--tooltip {\n position: relative;\n display: inline-block;\n border-bottom: 1px dotted black;\n margin-left: 10px;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext {\n visibility: hidden;\n width: 300px;\n background-color: #ffffff;\n color: #505050;\n text-align: left;\n padding: 12px;\n border-radius: 3px;\n position: absolute;\n z-index: 1;\n -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n}\n\n.wpstg--tooltiptext-backups {\n width: 120px;\n top: 100%;\n left: -150%;\n margin-left: -56px;\n margin-top: 4px;\n}\n\n.wpstg--tooltip.wpstg--exclude-rules--tooltip {\n border-bottom: 0px solid transparent;\n}\n\n.wpstg--tooltip.wpstg--exclude-rules--tooltip > .wpstg--tooltiptext {\n margin-top: 0px;\n margin-left: -150px;\n}\n\n/**\nTooltip top arrow\n */\n\n.wpstg--tooltip .wpstg--tooltiptext-backups::after {\n content: \" \";\n position: absolute;\n bottom: 100%;\n /* At the top of the tooltip */\n left: 50%;\n margin-left: 25px;\n border-width: 5px;\n border-style: solid;\n border-color: transparent transparent white transparent;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext.has-top-arrow {\n margin-top: 6px;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext.has-top-arrow::after {\n content: \" \";\n position: absolute;\n bottom: 100%;\n left: 50%;\n margin-left: -18px;\n border-width: 5px;\n border-style: solid;\n border-color: transparent transparent white transparent;\n}\n\n.wpstg--snaphot-restore-table tr {\n line-height: 12px;\n}\n\n.wpstg-float-left {\n float: left;\n}\n\n.wpstg-beta-notice {\n background-color: #b0e8b0;\n border-radius: 3px;\n padding: 7px;\n margin-bottom: 20px;\n}\n\n#wpstg-backup-name {\n font-size: 1.875em;\n font-weight: 600;\n}\n\n#wpstg_select_tables_cloning option:checked {\n /* Cannot use background color here because Chrome and Firefox ignore it even if set to !important */\n -webkit-appearance: menulist-button;\n background-image: linear-gradient(0deg, #1e90ff 0%, #1e90ff 100%);\n}\n\n.wpstg--btn--cancel {\n background: #ff3428;\n border-color: #e72f24;\n color: #fff;\n height: auto;\n line-height: normal;\n font-size: 16px;\n padding: .5em;\n margin-bottom: 1.5em;\n}\n\n.wpstg--btn--cancel:hover {\n background: #ff3428;\n border-color: #e72f24;\n}\n\n.wpstg--process--content > .wpstg--swal2-html-container {\n padding: 4em 2em !important;\n}\n\n.wpstg--modal--process--logs,\n.wpstg--modal--error--logs {\n background: #ffffff;\n border: 1px solid #a8a8a8;\n border-radius: 3px;\n height: 300px;\n margin-top: 1em;\n display: none;\n padding-top: 10px;\n padding-left: 10px;\n overflow: auto;\n text-align: justify;\n}\n\n.wpstg--modal--error--logs {\n height: auto;\n max-height: 300px;\n}\n\n.wpstg--modal--process--logs p {\n font-size: 12px;\n white-space: nowrap;\n}\n\n.wpstg--modal--process--logs p.wpstg--modal--process--msg--info {\n color: #222222;\n}\n\n.wpstg--modal--process--logs p.wpstg--modal--process--msg--debug {\n color: #757575;\n}\n\n.wpstg--modal--process--title {\n color: #565656;\n margin: .25em 0;\n}\n\n.wpstg--modal--process--subtitle {\n margin: .5em 0;\n color: #565656;\n}\n\n.wpstg--modal--error--logs > p {\n text-align: left;\n font-size: 14px;\n color: #222222;\n}\n\n.wpstg--modal--process--logs p,\n.wpstg--modal--error--logs p {\n margin: 0px;\n margin-bottom: 2px;\n}\n\n.wpstg--modal--process--msg--error {\n color: #E01E5A;\n}\n\n.wpstg--modal--process--msg--critical {\n color: #E01E5A;\n}\n\n.wpstg--modal--process--msg--warning {\n color: darkorange;\n}\n\n.wpstg--modal--process--msg-found {\n font-size: 16px;\n color: #E01E5A;\n font-weight: bold;\n}\n\n.wpstg--modal--delete {\n text-align: left;\n margin-top: 8px;\n color: #565656;\n}\n\n.wpstg-swal-popup .wpstg--swal2-cancel.wpstg--btn--cancel {\n margin-bottom: 0;\n text-shadow: none !important;\n}\n\n.wpstg-swal-popup .wpstg-loader {\n display: inline-block !important;\n}\n\n.wpstg--modal--process--generic-problem {\n display: none;\n border-left: 5px solid #E01E5A;\n margin: .5em 0;\n}\n\n.wpstg--modal--process--logs--tail {\n font-size: 16px;\n color: #565656;\n background: none;\n border: none;\n cursor: pointer;\n}\n\n.wpstg--modal--backup--import--upload--title {\n color: #565656;\n}\n\n.wpstg--modal--backup--import--configure,\n.wpstg--modal--backup--import--upload--status,\n.wpstg--modal--backup--import--upload--container input[type=\"file\"] {\n display: none;\n}\n\n#wpstg--backups--import--file-list {\n font-size: 14px;\n font-weight: bold;\n}\n\n#wpstg--backups--import--file-list-empty {\n color: #E01E5A;\n}\n\n.wpstg--modal--backup--import--filesystem label {\n font-size: 14px;\n}\n\n.wpstg--modal--backup--import--filesystem button {\n margin-bottom: 20px;\n}\n\n.wpstg--modal--backup--import--upload {\n position: relative;\n min-height: 30px;\n}\n\n.wpstg--modal--backup--import--upload {\n color: #505050;\n}\n\n.wpstg--modal--backup--import--upload--container {\n position: relative;\n border-radius: 10px;\n margin: .5em;\n padding: 1em .5em;\n border: 3.5px dashed #dedede;\n transition: background-color 0.3s ease, color 0.3s ease;\n background-color: #f4fbff;\n min-height: 130px;\n}\n\n.wpstg--modal--backup--import--upload--container.wpstg--has-dragover span.wpstg--drop {\n display: inline-flex;\n}\n\n.wpstg--modal--backup--import--upload--container input[type='file'] {\n display: none;\n}\n\n.wpstg--modal--backup--import--upload--container img {\n margin-top: 10px;\n width: 4em;\n align-self: center;\n border: none;\n}\n\n.wpstg--modal--backup--import--upload--container span {\n margin-top: 1em;\n}\n\n.wpstg--backup--import--options > button {\n margin-top: 1em;\n padding: 1em;\n align-self: center;\n width: 185px;\n height: auto;\n line-height: normal;\n}\n\n.wpstg--backup--import--options {\n position: relative;\n display: flex;\n justify-content: center;\n}\n\n.wpstg--backup--import--options ul {\n display: none;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul {\n padding: 0;\n margin: 54px 0 0 0;\n display: block;\n position: absolute;\n width: 185px;\n background: #25a1f0;\n box-sizing: border-box;\n border-radius: 0 0 3px 3px;\n border-width: 1px;\n border-color: #2188c9;\n text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul li {\n border-bottom: .1em solid #25a1f0;\n margin: 0;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul li:hover {\n background-color: #25a1f0;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul li:last-child {\n border-bottom: none;\n}\n\n.wpstg--backup--import--options ul li button {\n cursor: pointer;\n background: none;\n border: none;\n margin: 0;\n width: 100%;\n color: white;\n height: 40px;\n line-height: 40px;\n}\n\n.wpstg--backup--import--options ul li button:hover {\n background-color: #259be6;\n}\n\n.wpstg--modal--backup--import--search-replace--info {\n margin: 1em 0;\n display: flex;\n flex-direction: row;\n}\n\n.wpstg--modal--backup--import--info p {\n text-align: left;\n margin: 0;\n}\n\n.wpstg--modal--backup--import--search-replace--wrapper button {\n align-self: center;\n}\n\n.wpstg--import--advanced-options--button {\n border: 0;\n border-radius: 3px;\n font-size: 18px;\n text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;\n cursor: pointer;\n}\n\n.wpstg--modal--backup--import--search-replace--new {\n color: white;\n background-color: #25a1f0;\n}\n\n.wpstg--modal--backup--import--search-replace--remove {\n color: white;\n background-color: #25a1f0;\n width: 22px;\n height: 22px;\n margin-left: 5px;\n}\n\n.wpstg--modal--backup--import--search-replace--input-group:first-child button {\n display: none;\n}\n\n.wpstg--modal--backup--import--search-replace--input--container {\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.wpstg--modal--backup--import--search-replace--input-group {\n width: 100%;\n border-bottom: 6px solid #f1f1f1;\n margin-bottom: 10px;\n}\n\n.wpstg--modal--backup--import--search-replace--input-group input {\n min-width: 250px;\n width: calc(50% - 4px - 11px - 5px); /* -4px is half of the padding; -11px is half of the button; -5 is the margin left of the button */\n display: inline-block;\n line-height: 10px;\n border: 1px solid #dedede;\n border-radius: 3px;\n color: #666;\n padding: 8px;\n margin-bottom: 12px;\n}\n\n.wpstg--modal--import--upload--process {\n display: none;\n position: relative;\n height: 30px;\n margin-top: 20px;\n margin-bottom: 20px;\n width: 100%;\n top: 0;\n left: 0;\n text-indent: 1em;\n white-space: nowrap;\n overflow: hidden;\n color: #333333;\n justify-content: center;\n align-items: center;\n}\n\n.wpstg--modal--import--upload--progress {\n position: absolute;\n background: #98d452;\n color: white;\n height: 100%;\n border-radius: 4px;\n left: 0;\n top: 0;\n}\n\n.wpstg--modal--import--upload--progress--title {\n z-index: 9;\n}\n\n.wpstg-fieldset:disabled {\n opacity: 0.8;\n border-top: 1px solid white;\n margin-top: 20px;\n}\n\n.wpstg-fieldset {\n padding-left: 20px;\n}\n\n.wpstg-fs-14 {\n font-size: 14px;\n}\n\n.wpstg-dark-alert {\n font-weight: bold;\n background-color: #0e86d9;\n padding: 15px;\n margin-top: 0px;\n color: white;\n}\n\n.wpstg-dark-alert .wpstg-button--cta-red {\n margin-left:10px;\n}\n\n.wpstg-form-group {\n display: block;\n width: 100%;\n margin-bottom: 8px;\n align-items: center;\n}\n\n.wpstg-form-group > label {\n display: block;\n font-weight: 700;\n}\n\n.wpstg-text-field > input {\n width: 300px;\n display: block;\n line-height: 1.5;\n}\n\n.wpstg-code-segment {\n display: block;\n}\n\n.wpstg-text-field > .wpstg-code-segment {\n margin-top: 4px;\n min-width: 300px;\n}\n\n.wpstg-form-group > .wpstg-checkbox {\n min-width: 100%;\n width: 100%;\n position: relative;\n}\n\n.wpstg-form-group > .wpstg-checkbox > input[type='checkbox'] {\n left: 150px;\n}\n\n.wpstg-rounded {\n border-radius: 3px;\n}\n\n.wpstg-white-border {\n border: 1px solid white !important;\n}\n\n.wpstg-ml-4 {\n margin-left: 4px;\n}\n\n#wpstg-confirm-backup-restore-data {\n margin: 40px;\n text-align: left;\n}\n\n#wpstg-advanced-settings hr {\n margin: 20px 0;\n}\n\n.wpstg-form-row {\n display: block;\n}\n\n.wpstg-form-row label,\n.wpstg-form-row input {\n display: table-cell;\n padding-left: 5px;\n padding-right: 5px;\n margin-top: 3px;\n margin-bottom: 3px;\n}\n\n.wpstg-form-row input {\n width: 400px;\n}\n\n.wpstg-form-row label {\n font-weight: bold;\n width: 1px;\n white-space: nowrap;\n}\n\n#wpstg-db-connect-output #wpstg-db-status {\n width: 390px;\n}\n\n.wpstg-fs-14 {\n font-size: 14px;\n}\n\n.wpstg-code-segment {\n display: block;\n}\n\n.wpstg-form-group > .wpstg-checkbox {\n min-width: 100%;\n width: 100%;\n}\n\n.wpstg-form-group > .wpstg-checkbox > input[type='checkbox'] {\n margin-left: 10px;\n}\n\n@media only screen and (max-width: 768px) {\n .wpstg-form-group > label {\n min-width: auto;\n width: auto;\n }\n\n .wpstg-text-field > input {\n width: 100%;\n }\n\n .wpstg-text-field > .wpstg-code-segment {\n margin-left: 0;\n min-width: 100%;\n }\n\n .wpstg-tab-section {\n width: calc(100vw - 60px);\n max-width: 450px;\n }\n}\n\n.wpstg-rounded {\n border-radius: 3px;\n}\n\n.wpstg-white-border {\n border: 1px solid white !important;\n}\n\n.wpstg-m-0 {\n margin: 0;\n}\n\n.wpstg-mt-10px {\n margin-top: 10px !important;\n}\n\n.wpstg-my-10px {\n margin-top: 10px !important;\n margin-bottom: 10px !important;\n}\n\n.wpstg-w-100 {\n width: 100%;\n}\n\n.wpstg-box-shadow {\n box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);\n}\n\n.wpstg-float-left {\n float: left;\n}\n\n.wpstg-bold-text {\n font-weight: bold;\n}\n\n.wpstg-warning.notice {\n border-left: 4px solid #ffba00;\n}\n\n.wpstg-confirmation-label {\n background-color: #5b9dd9;\n color: #fff;\n padding: 2px;\n border-radius: 3px;\n}\n\n.wpstg-my-6px {\n margin-bottom: 6px;\n margin-top: 6px;\n}\n\n.wpstg-mb-10px {\n margin-bottom: 10px;\n}\n\n.wpstg-clear-both {\n clear: both;\n}\n\n.wpstg-font-italic {\n font-style: italic;\n}\n\n.wpstg-mt-20px {\n margin-top: 20px;\n}\n\n.wpstg-welcome-container {\n border: 2px solid white;\n padding: 20px;\n margin-bottom: 20px;\n}\n\n.wpstg-ml-30px {\n margin-left: 30px;\n}\n\n.wpstg-text-center {\n text-align: center;\n}\n\n.wpstg-feedback-link {\n text-decoration: none;\n}\n\n.wpstg-feedback-span {\n display: block;\n margin-bottom: 3px;\n}\n\n#wpstg-confirm-backup-restore-data {\n margin: 40px;\n text-align: left;\n}\n\n#wpstg-confirm-backup-restore-wrapper {\n margin: 30px;\n margin-top: 0;\n}\n\n#wpstg-confirm-backup-restore-wrapper h3 {\n color: #E01E5A;\n}\n\n#wpstg-progress-db,\n#wpstg-progress-backup {\n background-color: #3fa5ee;\n}\n\n#wpstg-progress-sr,\n#wpstg-progress-files.wpstg-pro {\n background-color: #3c9ee4;\n}\n\n#wpstg-progress-dirs,\n#wpstg-progress-data {\n background-color: #3a96d7;\n}\n\n#wpstg-progress-files:not(.wpstg-pro),\n#wpstg-progress-finishing {\n background-color: #378cc9;\n}\n\n.wpstg-issue-resubmit-confirmation.wpstg--swal2-container,\n.wpstg-swal2-container.wpstg--swal2-container {\n z-index: 10500;\n}\n\n.wpstg-swal2-container.wpstg-swal2-loading .wpstg--swal2-actions,\n.wpstg-swal2-container.wpstg-swal2-loading .wpstg--swal2-header {\n display: none;\n}\n\nbody.toplevel_page_wpstg_backup .wpstg--swal2-container .wpstg--swal2-content,\nbody.toplevel_page_wpstg_clone .wpstg--swal2-container .wpstg--swal2-content {\n z-index: 2;\n}\n\n.toplevel_page_wpstg_clone #swal2-content h2 {\n color: #565656;\n}\n\n.toplevel_page_wpstg_clone #swal2-content {\n line-height: 1.5em;\n}\n\ndiv#exportUploadsWithoutDatabaseWarning {\n font-style: italic;\n font-size: 0.9rem;\n margin: 10px;\n padding: 10px;\n border: 1px solid #e3e3e3;\n border-radius: 5px;\n text-align: center;\n background-color: #fafafa;\n}\n\n.wpstg-advanced-options-dropdown-wrapper {\n display: none; /* ENABLE WHEN WE HAVE ADVANCED OPTIONS FOR EXPORTING */\n margin-top: 20px;\n}\n\n.wpstg--modal--backup--import--search-replace--wrapper {\n text-align: left;\n margin-top: 20px;\n}\n\n.wpstg--modal--backup--import--search-replace--new--wrapper {\n text-align: center;\n}\n\n.wpstg-import-backup-contains li {\n display: inline-block;\n}\n\n.wpstg-import-backup-contains li .wpstg-backups-contains {\n border-radius: 3px;\n color: #979797;\n background-color: #e3e3e3;\n border: 1px solid #c2c2c2;\n width: 17px;\n height: 17px;\n font-size: 17px;\n}\n\n.wpstg-import-backup-contains.wpstg-listing-single-backup li .wpstg-backups-contains {\n padding: 2px;\n background-color: white;\n border: 1px solid #c2c2c2;\n}\n\n.wpstg-import-backup-contains.wpstg-listing-single-backup li .wpstg-backups-contains > .wpstg--dashicons {\n filter: invert(50%);\n}\n\n.wpstg-import-backup-contains .wpstg--tooltiptext {\n width: 50px;\n font-size: x-small;\n padding: 5px;\n left: -25px;\n text-align: center;\n}\n\n.wpstg-import-backup-contains-title {\n display: inline-block;\n}\n\nul.wpstg-import-backup-contains {\n display: inline-block;\n}\n\n.wpstg-import-backup-name {\n display: inline-block;\n font-weight: bold;\n}\n\n.wpstg-backup-more-info-toggle {\n font-size: x-small;\n display: inline-block;\n font-style: italic;\n cursor: pointer;\n}\n\n.wpstg-backup-more-info-toggle::selection {\n background: none;\n}\n\nul.wpstg-import-backup-more-info {\n font-size: 14px;\n text-align: left;\n margin-bottom: 30px;\n margin-top: 10px;\n background-color: #f6f6f6;\n border: 1px solid #878787;\n border-radius: 3px;\n padding: 7px;\n cursor: pointer;\n}\n\nul.wpstg-import-backup-more-info:hover {\n background-color: #def2ff;\n border: 1px solid #25a1f0;\n}\n\nul.wpstg-import-backup-more-info li {\n height: 20px;\n}\n\n.wpstg-backup-list {\n max-width: 800px;\n}\n\n.wpstg-backup-list h3 {\n color:#3e3e3e;\n}\n\n.wpstg-backup-list ul ul {\n margin-block-start: 1em;\n margin-block-end: 1em;\n}\n\n.wpstg-push-confirmation-message {\n text-align: justify;\n font-size: 15px;\n}\n\n.wpstg-settings-row {\n padding-top: 10px;\n padding-bottom: 10px;\n}\n\n.wpstg-settings-title {\n font-weight: 600;\n}\n\n.wpstg-settings-form-group {\n display: flex;\n align-items: center;\n}\n\n.wpstg-settings-form-group > .wpstg-settings-message {\n width: 30%;\n padding: 0;\n margin: 7px 0 0;\n}\n\n/**\n * WP STAGING EXCLUSION RULES TABLE LAYOUT\n */\n\n.wpstg-excluded-filters-container {\n padding: 0;\n margin-top: 10px;\n margin-bottom: 10px;\n max-width: 100%;\n width: 100%;\n}\n\n.wpstg-excluded-filters-container > table {\n width: 100%;\n border-collapse: collapse;\n border-color: transparent;\n}\n\n.wpstg-excluded-filters-container td {\n padding-top: 4px;\n padding-bottom: 4px;\n height: 20px;\n}\n\n.wpstg-excluded-filters-container h4 {\n margin: 0;\n}\n\n.wpstg-exclude-filters-foot {\n display: flex;\n justify-content: flex-start;\n padding: 0;\n}\n\n/**\n * WP STAGING EXCLUSION RULE DROPDOWN STYLE\n */\n\n\n.wpstg-exclude-filter-dropdown > button:hover {\n background: #135e96;;\n border: 1px solid #135e96;;\n}\n\n.wpstg-exclude-filter-dropdown > .wpstg-dropdown-menu {\n width: 128px;\n}\n\n.wpstg-remove-exclude-rule {\n color: #fff !important;\n background-color: #e01e5a;\n border: 1px solid #e01e5a;\n width: 20px;\n height: 20px;\n border-radius: 10px;\n font-size: 24px;\n padding: 0;\n display: inline-flex;\n justify-content: center;\n outline: none;\n box-shadow: none;\n font-weight: 400;\n line-height: 0.7;\n margin-top: 5px;\n cursor: pointer;\n}\n\n.wpstg-remove-exclude-rule:hover {\n background-color: #E01E5A;\n border-color: #E01E5A;\n}\n\n.wpstg-code-block {\n margin-top: 4px;\n font-size: 1.2em;\n background: #f8f8f8;\n border-radius: 2px;\n}\n\n.wpstg-rule-info {\n background: #f8f8f8 !important;\n}\n\ncode.wpstg-code {\n display: inline-block;\n font-size: 11px;\n border: 1px solid #aaa;\n background: #fff;\n padding: 2px 4px;\n margin-bottom: 1px;\n color: #E01E5A;\n}\n\n.wpstg-exclusion-rule-info {\n color: #fff !important;\n background-color: #ffc107;\n border: 1px solid #ffc107;\n width: 14px;\n height: 14px;\n border-radius: 7px;\n font-size: 14px;\n padding: 0;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n outline: none;\n box-shadow: none;\n font-weight: 400;\n vertical-align: middle;\n}\n\n.wpstg-exclusion-rule-info:hover {\n background-color: #ffba0c;\n border: 1px solid #ffba0c;\n}\n\n/**\n * WP STAGING INPUTS EXCLUSION RULES\n */\n\n.wpstg-exclude-rule-input {\n font-size: 12px !important;\n padding: 2px 6px;\n box-shadow: none;\n outline: none !important;\n display: inline-block;\n font-weight: 400;\n line-height: 1.5;\n color: #222;\n border-radius: 0 !important;\n background-color: #fff;\n border: 1px solid #bbb;\n min-height: 24px !important;\n margin-top: 4px;\n margin-left: 4px;\n vertical-align: baseline !important;\n transition: all 0.3s cubic-bezier(.25, .8, .25, 1);\n width: 135px;\n}\n\n.wpstg-excluded-filters-container tbody > tr:last-child .wpstg-exclude-rule-input {\n margin-bottom: 4px;\n}\n\n.wpstg-exclude-rule-input:hover {\n border: 1px solid #999;\n}\n\n.wpstg-exclude-rule-input:focus {\n border: 1px solid #25A0F1 !important;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24) !important;\n}\n\n.wpstg-file-size-exclude-select,\n.wpstg-path-exclude-select {\n width: 135px;\n}\n\n.wpstg-file-size-exclude-select-small {\n width: 52px;\n}\n\n.wpstg-file-size-exclude-input {\n width: 75px;\n}\n\n.wpstg-staging-option-title {\n margin: 15px 0 0;\n}\n\n.wpstg-swal-push-container.wpstg--swal2-container {\n z-index: 9995;\n}\n\n#wpstg-scanning-files {\n padding-bottom: 5px;\n}\n\n#wpstg-scanning-files.wpstg-tab-section, #wpstg-scanning-db.wpstg-tab-section {\n padding-top: 10px;\n}\n\n.wpstg-reset-excludes-container {\n margin: 10px 0;\n}\n\n.wpstg-swal2-ajax-loader {\n width: 100%;\n height: 150px;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n@keyframes wpstg-loading-icon-anim {\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.wpstg-swal2-ajax-loader > img {\n width: 64px;\n height: 64px;\n animation: wpstg-loading-icon-anim 1s infinite linear;\n -webkit-animation: wpstg-loading-icon-anim 1s infinite linear;\n}\n\n.wpstg-swal2-container .wpstg-tab-section {\n width: auto !important;\n}\n\n#wpstg-no-staging-site-results {\n margin-top: 10px;\n max-width: 375px;\n}\n\nli#wpstg-backup-no-results {\n max-width: 500px;\n}\n\nli#wpstg-backup-no-results div, #wpstg-no-staging-site-results div {\n display: inline-block;\n text-align: center;\n}\n\nli#wpstg-backup-no-results .wpstg--dashicons, #wpstg-no-staging-site-results .wpstg--dashicons {\n filter: invert(50%);\n position: absolute;\n margin-top: 1px;\n}\n\nli#wpstg-backup-no-results .no-backups-found-text, #wpstg-no-staging-site-results .no-staging-site-found-text {\n color: #5d5d5d;\n margin-left: 20px;\n}\n\n@media only screen and (max-width: 680px) {\n li#wpstg-backup-no-results div, #wpstg-no-staging-site-results div {\n width: 100%;\n }\n}\n\n#wpstg--modal--backup--download-inner p.wpstg-download-modal-text {\n font-size: 16px;\n color: #565656;\n}\n\n#wpstg--modal--backup--download-inner h2 {\n color: #565656;\n}\n\n.wpstg-backup-restore-contains-database,\n.wpstg-backup-restore-contains-files {\n display: none;\n}\n\n.wpstg-green-button {\n background: #8bc34a;\n border: 1px solid #78a93f;\n color: white;\n text-shadow: 0 -1px 1px #78a93f, 1px 0 1px #78a93f, 0 1px 1px #40c921, -1px 0 1px #78a93f;\n}\n\n.wpstg-green-button:hover {\n background: #78a93f;\n}\n\n.wpstg-is-dir-loading {\n position: absolute;\n margin-top: -2px;\n margin-left: 8px;\n display: none;\n}\n\n.wpstg-ml-8px {\n margin-left: 8px;\n}\n\n.wpstg-mb-8px {\n margin-bottom: 8px;\n}\n\n\n.wpstg-btn-danger {\n background-color: #E01E5A;\n border: 1px solid #E01E5A;\n color: white;\n text-shadow: none;\n}\n\n.wpstg-btn-danger:hover {\n background: #c0194d;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);\n}\n\n.wpstg-swal2-container.wpstg-swal2-loading > .wpstg--swal2-modal {\n height: 200px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container:not(.wpstg-swal2-loading) > .wpstg--swal2-modal {\n max-width: 480px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container .wpstg--swal2-header {\n display: none;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container .wpstg--swal2-content {\n height: auto;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-tabs-wrapper {\n overflow-y: auto;\n height: auto !important;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content {\n font-size: 13px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-dir {\n margin-bottom: 4px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-subdir {\n margin-top: 4px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container.has-collapsible-open .wpstg--swal2-modal {\n height: calc(100vh - 70px);\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container.has-collapsible-open > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-tabs-wrapper {\n height: calc(100vh - 350px) !important;\n}\n\n.wpstg--swal2-actions.wpstg--modal--actions > button {\n margin-left: 4px;\n margin-right: 4px;\n text-transform: uppercase;\n text-shadow: initial;\n font-weight: 500;\n min-width: 80px;\n}\n\n.wpstg-swal-popup {\n max-width: 1200px !important;\n}\n\n.wpstg-swal-popup.wpstg-push-finished .wpstg--swal2-title {\n color: #a8a8a8;\n}\n\n.wpstg-swal-popup.wpstg-push-finished .wpstg--swal2-content {\n margin-top: 8px;\n color: #a8a8a8;\n}\n\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step.wpstg--swal2-active-progress-step,\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step,\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step-line {\n background: #25a1f0;\n}\n\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step-line {\n width: 2.75em;\n}\n\n.wpstg--dashicons {\n width: 16px;\n height: 16px;\n}\n\n.wpstg--dashicons.wpstg-dashicons-grey {\n filter: invert(20%);\n}\n\n.wpstg--dashicons.wpstg-dashicons-19 {\n width: 19px;\n height: 19px;\n}\n\n.wpstg--dashicons.wpstg-dashicons-21 {\n width: 21px;\n height: 21px;\n}\n\n#wpstg--tab--backup #wpstg-step-1 {\n display: flex;\n align-items: center;\n}\n\n.wpstg-advanced-options .wpstg--tooltip,\n#wpstg--tab--backup #wpstg-step-1 .wpstg--tooltip {\n border-bottom: 0 solid transparent;\n display: inline-flex;\n align-items: center;\n}\n\n#wpstg--tab--backup #wpstg-step-1 .wpstg--tooltip {\n border-bottom: 0 solid transparent;\n display: flex;\n align-items: center;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext-backups::after {\n left: calc(20% + 2px);\n}\n\n.wpstg-listing-single-backup .wpstg--dashicons {\n width: 17px;\n height: 17px;\n}\n\n.wpstg-100-width {\n width: 100px;\n}\n\n.wpstg-caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px solid;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n transition: transform 0.2s;\n cursor: pointer;\n}\n\n.wpstg-caret.wpstg-caret-up {\n transform: rotate(-180deg);\n}\n\n.wpstg-advanced-options-site label {\n font-size: 16px;\n display: block;\n margin: .5em 0;\n}\n\n#wpstg-confirm-backup-restore-data {\n font-size: 18px;\n margin: 0;\n margin-top: 30px;\n}\n\n/* Sweetalert WP STAGING Theme */\n\nbody.toplevel_page_wpstg_backup .wpstg--swal2-container.wpstg--swal2-backdrop-show,\nbody.toplevel_page_wpstg_clone .wpstg--swal2-container.wpstg--swal2-backdrop-show {\n background: rgba(0, 0, 0, .6);\n z-index: 9995;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup {\n border-radius: 8px;\n z-index: 9999;\n padding: 24px;\n color: #565656;\n font-family: Verdana, Geneva, Tahoma, sans-serif;\n}\n\n.wpstg-swal-popup .wpstg--swal2-title {\n font-size: 22px;\n color: #565656;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-title {\n align-self: flex-start; /* For an actual Swal title */\n text-align: left; /* Manually adding this class to a non flex display */\n margin-bottom: 0;\n}\n\n.wpstg-swal-popup .wpstg--swal2-close {\n top: 8px;\n right: 8px;\n z-index: 5;\n}\n\n.wpstg-swal-popup .wpstg--swal2-close:focus {\n outline: none;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-actions {\n justify-content: flex-end;\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button {\n border-radius: 4px;\n font-weight: 900;\n border: 0;\n font-size: 15px;\n padding: 10px 12px;\n text-transform: capitalize;\n line-height: normal;\n height: 40px;\n min-width: 100px;\n text-shadow: none;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-actions > button {\n margin-left: 8px;\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button.wpstg--swal2-cancel {\n border: 1px solid rgba(29, 28, 29, 0.3);\n background: #fff;\n color: rgb(29, 28, 29);\n font-weight: 500;\n width: 100px;\n text-shadow: none;\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button:hover {\n box-shadow: 0 1px 3px 0 rgba(0 0 0 .1);\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button.wpstg--swal2-cancel:hover {\n background: rgba(28, 29, 28, .04);\n}\n\n#wpstg-backup-name-input {\n height: 44px;\n font-size: 18px;\n}\n\n.wpstg-restore-finished-container .wpstg--swal2-title {\n color: #565656 !important;\n}\n\n/*#wpstg-restore-success {\n color: #565656;\n}*/\n\n.wpstg-restore-finished-container .wpstg--swal2-content {\n margin-top: 20px;\n color: #a8a8a8;\n}\n\n/* WP Staging Implementation of Windows Style Linear Loader */\n\n.wpstg-linear-loader > span[class*=\"wpstg-linear-loader-item\"] {\n height: 6px;\n width: 6px;\n background: #333;\n display: inline-block;\n margin: 12px 2px;\n border-radius: 100%;\n animation: wpstg_linear_loader 3s infinite;\n animation-timing-function: cubic-bezier(0.030, 0.615, 0.995, 0.415);\n animation-fill-mode: both;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(1) {\n animation-delay: 1s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(2) {\n animation-delay: 0.8s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(3) {\n animation-delay: 0.6s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(4) {\n animation-delay: 0.4s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(5) {\n animation-delay: 0.2s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(6) {\n animation-delay: 0s;\n}\n\n@keyframes wpstg_linear_loader {\n 0% {\n transform: translateX(-30px);\n opacity: 0;\n }\n 25% {\n opacity: 1;\n }\n 50% {\n transform: translateX(30px);\n opacity: 0;\n }\n 100% {\n opacity: 0;\n }\n}\n\n/* END - Windows Style Linear Loader */\n\n.wpstg--modal--backup--import--upload--content {\n padding: .75em;\n margin: 1em auto;\n}\n\n.wpstg--modal--backup--import--upload--content .wpstg-linear-loader {\n display: none;\n}\n\n#wpstg-multisite-disabled .wpstg-clone {\n width: 355px;\n}\n\n#wpstg-free-version-backups .wpstg-clone {\n text-align: center;\n}\n\n#wpstg-free-version-backups .wpstg-clone p {\n font-size: 16px;\n}\n\n.wpstg-staging-info li .backup-notes {\n word-break: break-word;\n}\n\n.wpstg--modal--import--upload--progress--title small {\n font-weight: normal;\n}\n\n#wpstg-report-issue-wrapper {\n position: relative;\n}\n\n#wpstg-report-issue-wrapper .arrow-up {\n width: 0;\n height: 0;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-bottom: 8px solid white;\n position: absolute;\n top: -8px;\n right: 40px;\n}\n\n.notice {\n margin: 10px 20px 0 2px;\n}\n\n.wpstg--notice {\n box-shadow: 0 1px 1px rgba(0, 0, 0, .04);\n margin: 20px 20px 20px 0px;\n padding: 1px 12px;\n}\n\n.wpstg--error a:hover {\n color: #eeeeee;\n}\n\n.wpstg--error, .wpstg--error a {\n background: #E01E5A;\n color: white;\n}\n\n/**\n * Buttons\n */\n\n.wpstg-button {\n display: inline-block;\n border-radius: 2px;\n cursor: pointer;\n padding: 2px 10px 2px 10px;\n text-transform: uppercase;\n font-weight: 500;\n outline: 0;\n transition: background-color .1s ease-in;\n text-decoration: none;\n}\n\n.wpstg-button.wpstg-save {\n background-color: #1687A7;\n color: white;\n}\n\n.wpstg-button.wpstg-save:hover {\n background-color: #276678;\n}\n\n\n.wpstg-button.wpstg-button-light {\n background-color: #f8f8f8;\n border: 1px solid #eee;\n color: #333;\n animation: background-color 0.3s;\n}\n\n.wpstg-button.wpstg-button-light:hover {\n background-color: #e0e0e0;\n border: 1px solid #e0e0e0;\n}\n\n.wpstg-buttons .spinner {\n float: none;\n margin: 0 0 0 5px;\n}\n\n.wpstg-button.danger {\n display: inline-block;\n text-decoration: none;\n text-align: center;\n text-transform: inherit;\n background-color: #E01E5A;\n color: white;\n border-radius: 2px;\n border-color: transparent;\n}\n\n.wpstg-button.danger:hover {\n background-color: #c0194d;\n}\n\n.wpstg-button--big {\n display: inline-block;\n padding: 10px;\n min-width: 170px;\n font-size: 16px;\n text-decoration: none;\n text-align: center;\n margin-top: 20px;\n color: white;\n border-radius: 3px;\n}\n\n.wpstg-button--primary {\n display: inline-block;\n text-decoration: none;\n font-size: 13px;\n line-height: 2.15384615;\n min-height: 30px;\n margin: 0;\n padding: 0 10px;\n cursor: pointer;\n border: 1px solid rgba(29, 28, 29, 0.3);\n -webkit-appearance: none;\n border-radius: 2px;\n white-space: nowrap;\n box-sizing: border-box;\n color: #171717;\n}\n\n.wpstg-button--primary:hover {\n background: rgba(28, 29, 28, .04);\n color: black;\n}\n\n.wpstg-button--secondary {\n display: inline-block;\n background-color: transparent;\n color: #95a5a6;\n border-radius: 2px;\n border: 1px solid rgba(29, 28, 29, 0.3);\n cursor: pointer;\n padding: 4px 10px 2px 10px;\n font-weight: 500;\n outline: 0;\n transition: background-color .1s ease-in;\n text-decoration: none;\n}\n\n.wpstg-button--red {\n background-color: #E01E5A;\n border-color: #E01E5A;\n color: white;\n}\n\n.wpstg-button--red:hover {\n background-color: #d02358;\n border-color: #e0255f;\n color: white;\n}\n\n.wpstg-button--cta-red {\n background-color: #fe008f;\n border-color: #E01E5A;\n color: white;\n}\n\n.wpstg-button--cta-red:hover {\n background-color: #f31391;\n border-color: #e0255f;\n color: white;\n}\n\n.wpstg-button--blue {\n background-color: #25A0F1;\n border-color: #25A0F1;\n color: white;\n}\n\n.wpstg-button--blue:hover {\n background-color: #259be6;\n border-color: #259be6;\n color: white;\n}\n\n#wpstg-button-backup-upgrade {\n font-size: 16px;\n}\n\n.wpstg-staging-status {\n color: #E01E5A;\n}\n\n#wpstg-push-changes,\n#wpstg-start-updating,\n#wpstg-save-clone-data {\n margin-left: 5px;\n}\n\ninput.wpstg-textbox {\n border: 1px solid #aaa;\n border-radius: .25rem;\n padding: 0.25rem 0.5rem;\n font-size: 14px;\n}\n\ninput.wpstg-textbox:focus {\n outline: 0;\n border-color: #259be6;\n -webkit-box-shadow: 0 0 0 0.1rem rgba(221, 221, 221, .35);\n box-shadow: 0 0 0 0.1rem rgba(221, 221, 221, .35);\n}\n\ninput.wpstg-textbox::placeholder {\n color: #888;\n}\n\n.wpstg--advance-settings--checkbox {\n display: flex;\n align-items: center;\n}\n\n.wpstg--advance-settings--checkbox > label {\n font-size: 14px;\n font-weight: bolder;\n width: 165px;\n display: inline-block;\n}\n\n.wpstg--advance-settings--checkbox > .wpstg--tooltip {\n margin-top: 5px;\n margin-left: 5px;\n position: relative;\n display: inline-block;\n border-bottom: 0px solid transparent;\n}\n\n.wpstg--advance-settings--checkbox > .wpstg--tooltip > .wpstg--tooltiptext {\n top: 18px;\n left: -150px;\n}\n\n\ndiv#wpstg-restore-wait {\n display: none;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n height: 100vh;\n width: 100vw;\n position: fixed;\n top: 0;\n left: 0;\n background: white;\n z-index: 99999;\n}\n\ndiv#wpstg-restore-wait .wpstg-title {\n font-weight: bold;\n}\n\ndiv#wpstg-restore-wait div {\n font-size: 16px;\n margin-top: 12px;\n}\n\n.resumable-browse {\n cursor: pointer;\n}\n\n.resumable-browse a {\n text-decoration: underline;\n}\n\n.wpstg-upload-text {\n font-weight: 600;\n}\n\n.wpstg--modal--backup--import--upload--container.dragover {\n transition: background-color 0.7s;\n background-color: #94dc96;\n color: #FFF;\n}\n\n.wpstg--modal--backup--import--upload--container.dragover * {\n pointer-events: none; /* Avoids flickering when dragging to drop a file */\n}\n\n.wpstg--modal--backup--import--upload--container.dragover .wpstg-upload-text {\n display: none;\n}\n\n.wpstg--modal--backup--import--upload--container.dragover .wpstg-dragover-text {\n display: block;\n}\n\n.wpstg--modal--backup--import--upload--container .wpstg-dragover-text {\n display: none;\n}\n\n#wpstg-invalid-license-message, #wpstg-invalid-license-message a {\n font-weight: 500;\n color: #E01E5A;\n margin-left: 6px;\n}\n\n#wpstg-sidebar--banner {\n max-width: 200px;\n}\n\n@media screen and (max-width: 1234px) {\n .wpstg-h2 {\n font-size: 24px;\n }\n\n #wpstg-welcome li {\n font-size: 14px;\n }\n}\n\n.wpstg-exclamation {\n color: #ffffff;\n border-radius: 100%;\n background-color: #E01E5A;\n width: 20px;\n height: 20px;\n text-align: center;\n font-weight: bold;\n display: inline-block;\n margin: 6px;\n}\n\n.wpstg--tab--contents {\n padding-top: 1px;\n}\n\n.wpstg-swal-show.wpstg--swal2-show {\n -webkit-animation: wpstg-swal-show 0.2s !important;\n animation: wpstg-swal-show 0.2s !important;\n}\n\n@-webkit-keyframes wpstg-swal-show {\n 0% {\n transform: scale(0.3);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes wpstg-swal-show {\n 0% {\n transform: scale(0.3);\n }\n 100% {\n transform: scale(1);\n }\n}\n"]}
1
+ {"version":3,"sources":["wpstg-admin.css"],"names":[],"mappings":"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","file":"wpstg-admin.css","sourcesContent":["/**\n * WPSTG Admin CSS\n *\n * @package WPSTG\n * @subpackage Admin CSS\n * @copyright Copyright (c) 2021, René Hermenau\n * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License\n*/\n\n/* Colors */\n\n.wpstg--violet {\n color: #9d37ae;\n}\n\n.wpstg-border--violet {\n border: 1px solid #9d37ae;\n}\n\n.wpstg--red {\n color: #E01E5A;\n}\n\n.wpstg-cta--red {\n color: #fe008f;\n}\n\n.wpstg--blue {\n color: #24a1f0;\n}\n\n.wpstg--darkblue {\n color: #0e86d9;\n}\n\n.wpstg--green {\n color: #83c11f;\n}\n\n.wpstg--grey {\n color: #3e3e3e;\n}\n\n.wpstg--darkgrey {\n color: #1b1b1b;\n}\n\n.wpstg--filter--svg {\n filter: invert(24%) sepia(11%) saturate(558%) hue-rotate(169deg) brightness(97%) contrast(91%);\n}\n\n/* CSS for Tabs */\n\nbody.wp-staging-pro_page_wpstg_backup,\nbody.toplevel_page_wpstg_clone,\nbody.wp-staging-pro_page_wpstg-settings,\nbody.wp-staging-pro_page_wpstg-tools,\nbody.wp-staging-pro_page_wpstg-license {\n background-color: #f3f5f7;\n}\n\n#wpstg-tab-container ul {\n list-style: none;\n margin: 0;\n padding: 0;\n background: #f1f1f1;\n float: left;\n}\n\n#wpstg-tab-container ul li:first-child.selected-tab {\n border-top: none;\n}\n\n#wpstg-tab-container ul li a.selected-tab {\n font-weight: bold;\n text-decoration: none;\n}\n\n#wpstg-tab-container .row {\n padding-top: 10px;\n padding-bottom: 12px;\n}\n\n.wpstg-tabs-container .nav-tab-wrapper {\n padding: 0;\n}\n\n#wpstg-tab-container .row label strong,\n#wpstg-tab-container .row strong {\n font-weight: bold;\n}\n\n.wpstg-tabs a {\n padding: 5px;\n}\n\n#wpstg-tab-container > ul > li.wpstg-tabs.active {\n background-color: white;\n}\n\n#wpstg_settingsgeneral_header .row:nth-child(3),\n#wpstg_settingsgeneral_header .row:nth-child(4) {\n display: none;\n}\n\n#wpstg-tab-container .wpstg-settings-panel {\n padding: 0 20px 20px 20px;\n overflow: auto;\n}\n\n#wpstg-tab-container .wpstg-form-table th {\n vertical-align: top;\n text-align: left;\n padding: 20px 10px 20px 0;\n line-height: 1.3;\n font-weight: bold;\n font-size: 14px;\n color: #484848;\n width: 30%;\n}\n\n#wpstg-tab-container .wpstg-form-table tr {\n border-bottom: 1px solid #E7E7E7;\n}\n\n#wpstg-tab-container span.description {\n display: block;\n font-weight: 400;\n font-style: normal;\n font-size: 13px;\n margin-top: 7px;\n color: #484848;\n}\n\n#wpstg-tab-container .col-title {\n color: #484848;\n}\n\n@media only screen and (max-width: 680px) {\n #wpstg-tab-container ul {\n float: none;\n }\n\n #wpstg-tab-container .wpstg-form-table tr > th {\n width: 100%;\n }\n\n #wpstg-tab-container span.description {\n font-size: 14px;\n }\n\n #wpstg-tab-container .wpstg-form-table tr > th,\n #wpstg-tab-container .wpstg-form-table tr > td {\n padding: 10px;\n }\n}\n\n#wpstg-tab-container ul li {\n margin-bottom: 0;\n}\n\n#wpstg-tab-container ul li a {\n display: block;\n padding: 10px 4px 10px 14px;\n border-width: 1px 0;\n border-style: solid;\n border-top-color: white;\n border-bottom-color: #e7e7e7;\n text-decoration: none;\n color: #0097DF;\n font-weight: bold;\n}\n\n#wpstg-tab-container ul li a:hover {\n background-color: #e5e5e5;\n color: #777777;\n}\n\n.wpstg-logo {\n display: block;\n font-size: 16px;\n padding-top: 20px;\n width: 220px;\n float: left;\n}\n\n.wpstg-logo img {\n max-width: 212px;\n}\n\n.wpstg-version {\n display: block;\n padding-top: 40px;\n color: #9b9b9b;\n}\n\n.wpstg_admin .nav-tab {\n color: #3C3C3C;\n}\n\n#wpstg-tab-container table tbody tr:nth-child(1) > th > div {\n font-size: 20px;\n}\n\n/* Cloning workflow */\n\n#wpstg-clonepage-wrapper {\n margin-bottom: 20px;\n width: 98%;\n}\n\n@media screen and (min-width: 1090px) {\n #wpstg-clonepage-wrapper {\n float: left;\n margin-bottom: 20px;\n }\n}\n\n#wpstg-steps {\n margin-top: 0px;\n margin-left: 20px;\n}\n\n#wpstg-steps li {\n color: #444;\n line-height: 20px;\n padding-right: 10px;\n float: left;\n}\n\n.wpstg-step-num {\n border: 1px solid #3e3e3e;\n border-radius: 3px;\n display: inline-block;\n width: 20px;\n height: 20px;\n text-align: center;\n margin-right: 5px;\n}\n\n.wpstg-current-step {\n font-weight: bold;\n}\n\n.wpstg-current-step .wpstg-step-num {\n background: #3e3e3e;\n color: #eee;\n}\n\n.wpstg-box {\n margin: 10px 0;\n padding: 10px;\n position: relative;\n overflow: hidden;\n transition: border-color .2s ease-in-out;\n}\n\n.wpstg-clone {\n margin-bottom: 10px;\n padding: 16px;\n position: relative;\n transition: border-color .2s ease-in-out;\n background-color: #ffffff;\n color: #3e3e3e;\n border-radius: 3px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .1);\n}\n\n.wpstg-clone.active {\n border-color: #1d94cf;\n}\n\n.wpstg-clone-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.wpstg-clone-title {\n display: inline-block;\n font-size: 15px;\n max-width: 300px;\n text-decoration: none;\n font-weight: bold;\n color: #3e3e3e;\n}\n\n.wpstg-clone-title:hover {\n color: #111111;\n}\n\n.wpstg-clone-actions {\n display: flex;\n margin-top: 5px;\n}\n\n.wpstg-dropdown {\n position: relative;\n}\n\n.wpstg-clone-actions .wpstg-dropdown-toggler {\n text-decoration: none;\n background: #25a1f0;\n padding: 6px 10px;\n border-radius: 2px;\n font-size: 14px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .2);\n color: #ffffff;\n}\n\n.wpstg-clone-actions .wpstg-dropdown-toggler:hover {\n background: #002648;\n color: white;\n}\n\n.wpstg-dropdown {\n position: relative;\n}\n\n.wpstg-dropdown > .wpstg-dropdown-menu {\n background: #fff;\n display: none;\n flex-direction: column;\n position: absolute;\n right: 0;\n top: calc(100% + 4px);\n padding: 8px;\n border-radius: 2px;\n width: 100px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .2);\n z-index: 1000;\n}\n\n.wpstg-dropdown > .wpstg-dropdown-menu.wpstg-menu-dropup {\n top: auto;\n bottom: 100%;\n transform: translate3d(0px, -3px, 0px);\n}\n\n.wpstg-dropdown > .wpstg-dropdown-menu.shown {\n display: flex;\n}\n\n.wpstg-clone-action,\n.wpstg-dropdown-action {\n color: #3e3e3e;\n padding: 6px 8px;\n border-radius: 3px;\n text-decoration: none;\n position: relative;\n transition: color .2s ease-in-out;\n border-bottom: 1px solid #f3f3f3;\n}\n\n.wpstg-clone-action:hover,\n.wpstg-dropdown-action:hover {\n background: rgba(0, 0, 0, 0.05);\n}\n\n.wpstg-dropdown-action {\n color: #3e3e3e;\n background: transparent;\n border: 0 solid black;\n outline: none;\n box-shadow: none;\n}\n\n.wpstg-remove-clone:hover {\n color: #E01E5A;\n}\n\n.wpstg-clone-action:last-child {\n border: none;\n}\n\n.wpstg-clone:hover .wpstg-clone-action {\n display: inline-block;\n}\n\n#wpstg-show-error-details:focus,\n#wpstg-workflow .wpstg-clone-action {\n outline: none;\n box-shadow: none;\n}\n\n.wpstg-link-btn {\n background: #45a1c9;\n color: #fff;\n display: inline-block;\n padding: 5px 10px;\n text-decoration: none;\n vertical-align: baseline;\n transition: all .2s ease-in-out;\n}\n\n.wpstg-link-btn:hover,\n.wpstg-link-btn:focus {\n color: #fff;\n outline: none;\n box-shadow: none;\n}\n\n#wpstg-workflow .wpstg-link-btn:active {\n vertical-align: baseline;\n}\n\n.wpstg-link-btn[disabled] {\n background: #777 !important;\n border-color: #555 !important;\n pointer-events: none;\n}\n\n#wpstg-cancel-cloning,\n#wpstg-cancel-cloning-update {\n margin-top: 5px;\n}\n\n#wpstg-cancel-cloning.success,\n#wpstg-cancel-cloning.success {\n background: #64dd58;\n border-color: #54bd4a;\n}\n\n#wpstg-error-wrapper,\n#wpstg-error-details {\n display: none;\n padding-top: 10px;\n font-size: 13px;\n clear: both;\n}\n\n#wpstg-show-error-details {\n display: inline-block;\n margin-left: 5px;\n color: #555;\n text-decoration: none;\n transition: color .2s ease-in-out;\n}\n\n#wpstg-show-error-details:hover {\n color: #1d94cf;\n}\n\n#wpstg-error-details {\n border-left: 5px solid #E01E5A;\n padding: 10px;\n width: 500px;\n}\n\n#wpstg-try-again {\n display: none;\n}\n\n#wpstg-home-link {\n float: right;\n}\n\n.wpstg-loader {\n content: url('../../img/loading.gif');\n margin-top: 10px;\n display: none;\n}\n\n.wpstg-loader.wpstg-finished {\n display: block;\n content: \"Finished\";\n background-color: #00c89a;\n color: white;\n padding: 2px 10px;\n margin-top: 0;\n border-radius: 3px;\n}\n\n#wpstg-workflow {\n max-width: 800px;\n position: relative;\n clear: both;\n padding-top: 20px;\n float: left;\n min-width: 500px;\n min-height: 380px;\n padding-right: 20px;\n padding-bottom: 20px;\n}\n\n#wpstg-sidebar {\n float: left;\n max-width: 400px;\n display: block;\n margin-left: 10px;\n}\n\n#wpstg-workflow.loading::after,\n#wpstg-removing-clone.loading::after {\n background: rgba(255, 255, 255, .7);\n content: 'Loading... may take a while for huge websites';\n display: block;\n width: 100%;\n height: 100%;\n font-size: 20px;\n padding-top: 100px;\n text-align: center;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 99;\n}\n\n#wpstg-removing-clone.loading::after {\n content: 'REMOVING' !important;\n}\n\n#wpstg-existing-clones,\n#wpstg-removing-clone {\n position: relative;\n}\n\n#wpstg-existing-clones h3 {\n color: #3e3e3e;\n}\n\n#wpstg-removing-clone .wpstg-tab-section {\n display: block;\n}\n\n.wpstg-progress-bar {\n max-width: 900px;\n height: 27px;\n padding: 0;\n background-color: #d6d8d7;\n}\n\n.wpstg-progress {\n float: left;\n background: #3fa5ee;\n width: 0;\n height: 100%;\n transition: width .6s ease;\n color: white;\n line-height: 25px;\n text-align: center;\n overflow: hidden;\n}\n\n.wpstg-progress-files {\n background: #16b4f0;\n width: 0;\n height: 100%;\n transition: width .6s ease;\n color: white;\n line-height: 25px;\n text-align: center;\n}\n\n#wpstg-new-clone-id.wpstg-error-input,\n#wpstg-clone-path.wpstg-error-input {\n border: 1px solid #E01E5A;\n box-shadow: 0 0 2px rgba(255, 66, 53, .8);\n}\n\n#wpstg-new-clone-id {\n width: 450px;\n max-width: 100%;\n margin-left: 15px;\n}\n\n#wpstg-new-clone {\n background: #25a1f0;\n border-color: #2188c9;\n}\n\n#wpstg-new-clone:hover {\n background: #259be6;\n border-color: #2188c9;\n}\n\n#wpstg-clone-path {\n margin-left: 10px;\n width: 350px;\n}\n\n.wpstg-error-msg {\n color: #E01E5A;\n}\n\n#wpstg-clone-id-error {\n display: block;\n background-color: #f0f8ff;\n padding: 10px;\n margin: 20px;\n}\n\n#wpstg-start-cloning + .wpstg-error-msg {\n display: block;\n margin-top: 5px;\n}\n\n.wpstg-size-info {\n color: #999;\n font-weight: normal;\n position: relative;\n left: 2px;\n}\n\n.wpstg-db-table .wpstg-size-info {\n top: 2px;\n}\n\n.wpstg-db-table:hover {\n background-color: #f0f8ff;\n}\n\n#wpstg-workflow #wpstg-start-cloning {\n margin-left: 5px;\n vertical-align: baseline;\n}\n\n\n/* Tabs */\n\n.wpstg-tabs-wrapper {\n max-width: 640px;\n margin: 10px 0;\n}\n\n#wpstg-path-wrapper {\n border-bottom: 2px dashed #ccc;\n padding-bottom: 10px;\n margin-bottom: 10px;\n}\n\n.wpstg-tab-section {\n border-bottom: 1px solid #ddd;\n border-right: none;\n border-left: none;\n display: none;\n width: calc(100% - 72px);\n padding: 0px 36px;\n}\n\n.wpstg-tab-section::after {\n display: block;\n content: '';\n clear: both;\n}\n\n.wpstg-tab-header {\n border-bottom: 1px solid #ddd;\n border-right: none;\n border-left: none;\n color: #444;\n font-size: 16px;\n font-weight: bold;\n display: block;\n padding: 10px;;\n text-decoration: none;\n}\n\n.wpstg-tab-triangle {\n display: inline-block;\n margin-right: 12px;\n animation: transform 0.5s;\n width: 0;\n height: 0;\n margin-top: -3px;\n vertical-align: middle;\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-left: 10px solid;\n transition: transform 0.2s;\n cursor: pointer;\n}\n\n.wpstg-tab-triangle.wpstg-no-icon {\n margin-right: 2px;\n width: auto;\n height: auto;\n vertical-align: auto;\n border-top: 0px solid;\n border-bottom: 0px solid;\n border-left: 0px solid;\n}\n\n.wpstg-tab-triangle.wpstg-rotate-90 {\n transform: rotate(90deg);\n}\n\n.wpstg-tab-header:focus {\n color: #444;\n outline: none;\n box-shadow: none;\n}\n\n#wpstg-large-files {\n display: none;\n border: 1px dashed #ccc;\n padding: 10px 10px 10px;\n margin-top: 20px;\n position: relative;\n font-size: 12px;\n}\n\n#wpstg-large-files h3 {\n background: #fff;\n margin: 0;\n padding: 0 5px;\n position: absolute;\n top: -10px;\n left: 5px;\n}\n\n.wpstg-subdir {\n display: none;\n margin-left: 20px;\n}\n\n.wpstg-subdir.wpstg-push {\n display: block;\n margin-left: 20px;\n}\n\n.wpstg-dir a.disabled {\n color: #888;\n cursor: default;\n text-decoration: none;\n}\n\n.wpstg-check-subdirs {\n display: inline-block;\n margin-left: 10px;\n}\n\n.wpstg-notice-alert {\n display: block;\n background-color: #E01E5A;\n padding: 20px;\n max-width: 600px;\n margin-top: 10px;\n color: white;\n}\n\n.wpstg-notice--white {\n display: block;\n background-color: #ffffff;\n padding: 20px;\n max-width: 600px;\n margin-top: 10px;\n}\n\n.wpstg-notice-alert a {\n color: white;\n}\n\n.wpstg-notice-alert h3 {\n color: white;\n}\n\n.wpstg-header {\n font-weight: 400;\n line-height: 1.6em;\n font-size: 19px;\n border-bottom: 1px solid #DFDFDF;\n clear: both;\n padding-top: 10px;\n}\n\n#wpstg-clone-label {\n font-size: 14px;\n font-weight: bold;\n}\n\n.wpstg-log-details {\n height: 300px;\n overflow: scroll;\n max-width: 650px;\n font-family: monospace;\n font-size: 12px;\n line-height: 15px;\n border: 1px solid #FFF;\n background-color: black;\n color: #c0c0c0;\n padding: 3px;\n white-space: nowrap;\n margin-top: 15px;\n}\n\n#wpstg-finished-result {\n display: none;\n}\n\n#wpstg-remove-cloning {\n background: #ff3428;\n border-color: #e72f24;\n margin-top: 5px;\n}\n\n#wpstg-success-notice {\n padding: 10px;\n background-color: white;\n max-width: 900px;\n border: 1px solid #ccc;\n margin-top: 20px;\n}\n\n.wpstg_beta_notice {\n margin-bottom: 20px;\n}\n\n.wpstg-sysinfo {\n width: 700px;\n height: 700px;\n}\n\n.wpstg-form-table .col-title label {\n font-weight: 600;\n}\n\n.wpstg-form-table td:first-child {\n width: 30%;\n}\n\n.wpstg-share-button-container {\n margin: 5px 0;\n}\n\n.wpstg-share-button-container p {\n margin: 0 0 10px 0;\n}\n\n.wpstg-share-button {\n display: inline-block;\n}\n\n.wpstg-share-button a {\n text-decoration: none;\n}\n\n.wpstg-share-button .wpstg-share {\n font-family: sans-serif;\n font-weight: bold;\n text-decoration: none;\n text-align: center;\n}\n\n.wpstg-share-button .wpstg-share {\n -webkit-border-radius: 2px;\n -moz-border-radius: 2px;\n border-radius: 2px;\n color: #FFF;\n display: inline;\n font-size: 12px;\n padding: 4px 8px;\n}\n\n.wpstg-share-button-twitter .wpstg-share {\n background-color: #00ABF0;\n}\n\n.wpstg-share-button-facebook .wpstg-share {\n background-color: #3b5998;\n}\n\n.wpstg-share-button-googleplus .wpstg-share {\n background-color: #F53424;\n}\n\n.wpstg-share-button-twitter .share:active,\n.wpstg-share-button-facebook .share:active,\n.wpstg-share-button-googleplus .share:active {\n background-color: #353535;\n}\n\n#wpstg-check-space {\n margin-left: 8px;\n}\n\n#wpstg-welcome li {\n font-size: 18px;\n line-height: 29px;\n position: relative;\n padding-left: 23px;\n list-style: none !important;\n}\n\n#wpstg-welcome {\n margin-top: 20px;\n margin-right: 20px;\n background-color: white;\n}\n\n.wpstg-heading-pro {\n font-weight: bold;\n}\n\n.wpstg-h2 {\n margin-top: 0;\n margin-bottom: 1.2rem;\n font-size: 30px;\n line-height: 2.5rem;\n}\n\n#wpstg-welcome li:before {\n width: 1em;\n height: 100%;\n background: url(data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%2377B227%22%20d%3D%22M1671%20566q0%2040%2D28%2068l%2D724%20724%2D136%20136q%2D28%2028%2D68%2028t%2D68%2D28l%2D136%2D136%2D362%2D362q%2D28%2D28%2D28%2D68t28%2D68l136%2D136q28%2D28%2068%2D28t68%2028l294%20295%20656%2D657q28%2D28%2068%2D28t68%2028l136%20136q28%2028%2028%2068z%22%2F%3E%3C%2Fsvg%3E) left .4em no-repeat;\n background-size: contain;\n content: \"\";\n position: absolute;\n top: -2px;\n left: 0;\n color: #77b227;\n}\n\n.wpstg-h1 {\n margin-bottom: 1.35rem;\n font-size: 2.5em;\n line-height: 3.68rem;\n letter-spacing: normal;\n}\n\n.wpstg--swal2-content h1 {\n color: #444;\n}\n\n#wpstg-welcome h2 {\n margin: 0 0 15px;\n}\n\n#wpstg-welcome .wpstg-footer {\n clear: both;\n margin-top: 20px;\n font-style: italic;\n}\n\n#wpstg-footer {\n clear: both;\n margin-top: 20px;\n margin-right: 10px;\n padding-top: 50px;\n}\n\n#wpstg-footer a {\n text-decoration: none;\n}\n\n#wpstg-footer li {\n margin-bottom: 2px;\n list-style: circle;\n}\n\n#wpstg-footer ul {\n margin-left: 15px;\n margin-top: 0px;\n}\n\n.wpstg-footer--title {\n margin-left: 15px;\n}\n\n.wpstg-staging-info {\n margin-top: 8px;\n color: #3e3e3e;\n font-size: 12px;\n}\n\n.wpstg-staging-info a {\n color: #3e3e3e;\n}\n\n.wpstg-staging-info li {\n margin-bottom: 2px;\n}\n\n.wpstg-bold {\n font-weight: 600;\n}\n\n#wpstg-processing-status {\n margin-top: 5px;\n font-size: 13px;\n font-weight: 400;\n float: left;\n}\n\n#wpstg-processing-timer {\n margin-top: 5px;\n font-size: 13px;\n font-weight: 400;\n float: right;\n}\n\n#wpstg-report-issue-button {\n margin-left: 50px;\n border: 1px solid #E01E5A;\n color: #E01E5A;\n background-color: white;\n}\n\n#wpstg-report-issue-button:hover {\n background-color: #dc2b62;\n color: #fff;\n}\n\n.wpstg-blue-primary {\n display: inline-block;\n text-decoration: none;\n font-size: 13px;\n height: 28px;\n margin: 0;\n padding: 0 10px 1px;\n cursor: pointer;\n border-width: 1px;\n border-style: solid;\n -webkit-appearance: none;\n border-radius: 3px;\n white-space: nowrap;\n box-sizing: border-box;\n background: #25a1f0;\n border-color: #2188c9;\n color: #fff;\n text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;\n}\n\na.wpstg-blue-primary {\n padding: 5px 10px;\n height: auto;\n}\n\n.wpstg-blue-primary:hover {\n background-color: #259be6;\n}\n\n.wpstg-report-issue-form {\n position: absolute;\n z-index: 999;\n width: 300px;\n background-color: #fff;\n padding: 15px 15px 10px;\n border: 1px solid #e8e8e8;\n border-radius: 3px;\n box-shadow: 0 1px 0 0 #fff inset;\n display: none;\n right: 0;\n top: 35px;\n}\n\n@media (max-width: 600px) {\n .wpstg-report-issue-form {\n position: relative;\n }\n}\n\n.wpstg-report-show {\n display: block;\n}\n\n.wpstg-field input[type=text],\n.wpstg-field textarea {\n width: 100%;\n font-weight: 400;\n line-height: 1.4;\n margin-bottom: 4px;\n}\n\n.wpstg-report-email,\n.wpstg-report-hosting-provider {\n width: 100%;\n font-weight: 400;\n font-size: .8rem;\n height: 2.3rem;\n line-height: 2.3rem;\n border-radius: 3px;\n margin-bottom: 4px;\n padding: 0 10px;\n}\n\n.wpstg-report-description {\n border-radius: 3px;\n font-size: .8rem;\n padding: 6px 10px;\n resize: none;\n}\n\n.wpstg-report-privacy-policy {\n font-size: 12px;\n margin-bottom: 15px;\n}\n\n#wpstg-report-cancel {\n float: right;\n margin-right: 5px;\n font-weight: bold;\n}\n\n#wpstg-success-button {\n font-weight: bold;\n}\n\n.wpstg-message {\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n background-color: #f5e0de;\n border-radius: 3px;\n color: rgba(0, 0, 0, .6);\n height: auto;\n margin: 10px 0;\n min-height: 18px;\n padding: 6px 10px;\n position: relative;\n}\n\n.wpstg-message.wpstg-error-message {\n background-color: #f5e0de;\n color: #b65147;\n font-size: 12px;\n}\n\n.wpstg-message.wpstg-success-message {\n background-color: #d7f8e0;\n color: #515151;\n}\n\n.wpstg-message p {\n margin: 3px 0;\n font-size: 13px;\n}\n\n.wpstg-warning {\n display: block;\n padding: 10px;\n background-color: #ffb804;\n color: #ffffff;\n margin: 10px 10px 10px 0;\n}\n\n.wpstg-warning a {\n color: #ffffff;\n font-weight: bold;\n text-decoration: underline;\n}\n\n.wpstg-error {\n display: block;\n padding: 10px !important;\n background-color: #E01E5A !important;\n color: #ffffff;\n margin: 10px 10px 10px 0 !important;\n border-color: transparent !important;\n border-left-color: transparent !important;\n box-shadow: none !important;\n}\n\n.wpstg-error a {\n color: #ffffff;\n font-weight: bold;\n text-decoration: underline;\n}\n\n#wpstg-resume-cloning {\n display: none;\n}\n\n#wpstg-external-db th {\n text-align: left;\n width: 120px;\n}\n\n#wpstg-db-connect {\n font-weight: normal;\n}\n\n#wpstg-db-status {\n display: block;\n margin-top: 5px;\n padding: 5px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n text-decoration: none;\n text-align: center;\n}\n\n.wpstg-text-field > #wpstg-db-status {\n margin-top: 8px;\n margin-left: 150px;\n min-width: 300px;\n}\n\n.wpstg-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n\n.wpstg-failed {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n\n#wpstg_select_tables_cloning {\n height: 600px;\n font-size: 13px;\n}\n\n#wpstg_select_tables_pushing {\n height: 400px;\n font-size: 13px;\n}\n\n#wpstg-update-notify {\n background-color: #E01E5A;\n font-size: 14px;\n color: #ffffff;\n line-height: normal;\n padding: 10px;\n}\n\n#wpstg-update-notify a {\n color: #ffffff;\n font-weight: bold;\n}\n\n.wpstg-pointer {\n cursor: pointer;\n}\n\n.wpstg--tab--header {\n background-color: white;\n /* margin-bottom: 10px; */\n /* padding: 16px; */\n position: relative;\n transition: border-color .2s ease-in-out;\n background-color: #ffffff;\n color: #3e3e3e;\n border-radius: 2px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .02);\n}\n\n.wpstg--tab--header ul {\n display: flex;\n}\n\n.wpstg--tab--header ul li {\n margin-right: 1em;\n margin-bottom: 0px;\n}\n\n.wpstg--tab--header ul li:last-child {\n margin-right: 0;\n}\n\n.wpstg--tab--header a {\n min-width: 150px;\n text-align: center;\n cursor: pointer;\n display: inline-block;\n padding: 1em 1.25em;\n padding-bottom: 9px;\n color: #c4c4c4;\n font-size: 18px;\n /*\n border: solid 1px;\n */\n}\n\n.wpstg--tab--header a.wpstg--tab--active {\n border-bottom: .4em solid #25A1F0;\n color: #25A1F0;\n}\n\n.wpstg--tab--header a:hover {\n background-color: #fefefe;\n border-bottom: 0.4em solid #25A1F0;\n color: #25A1F0;\n}\n\n.wpstg--tab--content {\n display: none;\n}\n\n.wpstg--tab--active {\n display: block;\n}\n\n.wpstg--text--strong,\n.wpstg--text--strong * {\n font-weight: bold !important;\n}\n\n.wpstg--text--danger {\n color: #a94442;\n}\n\n.wpstg--tooltip {\n position: relative;\n display: inline-block;\n border-bottom: 1px dotted black;\n margin-left: 10px;\n}\n\n.wpstg--tooltip.wpstg--tooltip-normal {\n margin-left: 0;\n border-bottom: 0;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext {\n visibility: hidden;\n width: 300px;\n background-color: #ffffff;\n color: #505050;\n text-align: left;\n padding: 12px;\n border-radius: 3px;\n position: absolute;\n z-index: 1;\n -webkit-box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n -moz-box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n}\n\n.wpstg--tooltiptext-backups {\n width: 120px;\n top: 100%;\n left: -150%;\n margin-left: -56px;\n margin-top: 4px;\n}\n\n.wpstg--tooltip.wpstg--exclude-rules--tooltip {\n border-bottom: 0px solid transparent;\n}\n\n.wpstg--tooltip.wpstg--exclude-rules--tooltip > .wpstg--tooltiptext {\n margin-top: 0px;\n margin-left: -150px;\n}\n\n/**\nTooltip top arrow\n */\n\n.wpstg--tooltip .wpstg--tooltiptext-backups::after {\n content: \" \";\n position: absolute;\n bottom: 100%;\n /* At the top of the tooltip */\n left: 50%;\n margin-left: 25px;\n border-width: 5px;\n border-style: solid;\n border-color: transparent transparent white transparent;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext.has-top-arrow {\n margin-top: 6px;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext.has-top-arrow::after {\n content: \" \";\n position: absolute;\n bottom: 100%;\n left: 50%;\n margin-left: -18px;\n border-width: 5px;\n border-style: solid;\n border-color: transparent transparent white transparent;\n}\n\n.wpstg--snaphot-restore-table tr {\n line-height: 12px;\n}\n\n.wpstg-float-left {\n float: left;\n}\n\n.wpstg-beta-notice {\n background-color: #b0e8b0;\n border-radius: 3px;\n padding: 7px;\n margin-bottom: 20px;\n}\n\n#wpstg-backup-name {\n font-size: 1.875em;\n font-weight: 600;\n}\n\n#wpstg_select_tables_cloning option:checked,\n#wpstg_select_tables_pushing option:checked {\n /* Cannot use background color here because Chrome and Firefox ignore it even if set to !important */\n -webkit-appearance: menulist-button;\n background-image: linear-gradient(0deg, #1e90ff 0%, #1e90ff 100%);\n}\n\n.wpstg--btn--cancel {\n background: #ff3428;\n border-color: #e72f24;\n color: #fff;\n height: auto;\n line-height: normal;\n font-size: 16px;\n padding: .5em;\n margin-bottom: 1.5em;\n}\n\n.wpstg--btn--cancel:hover {\n background: #ff3428;\n border-color: #e72f24;\n}\n\n.wpstg--process--content > .wpstg--swal2-html-container {\n padding: 4em 2em !important;\n}\n\n.wpstg--modal--process--logs,\n.wpstg--modal--error--logs {\n background: #ffffff;\n border: 1px solid #a8a8a8;\n border-radius: 3px;\n height: 300px;\n margin-top: 1em;\n display: none;\n padding-top: 10px;\n padding-left: 10px;\n overflow: auto;\n text-align: justify;\n}\n\n.wpstg--modal--error--logs {\n height: auto;\n max-height: 300px;\n}\n\n.wpstg--modal--process--logs p {\n font-size: 12px;\n white-space: nowrap;\n}\n\n.wpstg--modal--process--logs p.wpstg--modal--process--msg--info {\n color: #222222;\n}\n\n.wpstg--modal--process--logs p.wpstg--modal--process--msg--debug {\n color: #757575;\n}\n\n.wpstg--modal--process--title {\n color: #565656;\n margin: .25em 0;\n}\n\n.wpstg--modal--process--subtitle {\n margin: .5em 0;\n color: #565656;\n}\n\n.wpstg--modal--error--logs > p {\n text-align: left;\n font-size: 14px;\n color: #222222;\n}\n\n.wpstg--modal--process--logs p,\n.wpstg--modal--error--logs p {\n margin: 0px;\n margin-bottom: 2px;\n}\n\n.wpstg--modal--process--msg--error {\n color: #E01E5A;\n}\n\n.wpstg--modal--process--msg--critical {\n color: #E01E5A;\n}\n\n.wpstg--modal--process--msg--warning {\n color: darkorange;\n}\n\n.wpstg--modal--process--msg-found {\n font-size: 16px;\n color: #E01E5A;\n font-weight: bold;\n}\n\n.wpstg--modal--delete {\n text-align: left;\n margin-top: 8px;\n color: #565656;\n}\n\n.wpstg-swal-popup .wpstg--swal2-cancel.wpstg--btn--cancel {\n margin-bottom: 0;\n text-shadow: none !important;\n}\n\n.wpstg-swal-popup .wpstg-loader {\n display: inline-block !important;\n}\n\n.wpstg--modal--process--generic-problem {\n display: none;\n border-left: 5px solid #E01E5A;\n margin: .5em 0;\n}\n\n.wpstg--modal--process--logs--tail {\n font-size: 16px;\n color: #565656;\n background: none;\n border: none;\n cursor: pointer;\n}\n\n.wpstg--modal--backup--import--upload--title {\n color: #565656;\n}\n\n.wpstg--modal--backup--import--configure,\n.wpstg--modal--backup--import--upload--status,\n.wpstg--modal--backup--import--upload--container input[type=\"file\"] {\n display: none;\n}\n\n#wpstg--backups--import--file-list {\n font-size: 14px;\n font-weight: bold;\n}\n\n#wpstg--backups--import--file-list-empty {\n color: #E01E5A;\n}\n\n.wpstg--modal--backup--import--filesystem label {\n font-size: 14px;\n}\n\n.wpstg--modal--backup--import--filesystem button {\n margin-bottom: 20px;\n}\n\n.wpstg--modal--backup--import--upload {\n position: relative;\n min-height: 30px;\n}\n\n.wpstg--modal--backup--import--upload {\n color: #505050;\n}\n\n.wpstg--modal--backup--import--upload--container {\n position: relative;\n border-radius: 10px;\n margin: .5em;\n padding: 1em .5em;\n border: 3.5px dashed #dedede;\n transition: background-color 0.3s ease, color 0.3s ease;\n background-color: #f4fbff;\n min-height: 130px;\n}\n\n.wpstg--modal--backup--import--upload--container.wpstg--has-dragover span.wpstg--drop {\n display: inline-flex;\n}\n\n.wpstg--modal--backup--import--upload--container input[type='file'] {\n display: none;\n}\n\n.wpstg--modal--backup--import--upload--container img {\n margin-top: 10px;\n width: 4em;\n align-self: center;\n border: none;\n}\n\n.wpstg--modal--backup--import--upload--container span {\n margin-top: 1em;\n}\n\n.wpstg--backup--import--options > button {\n margin-top: 1em;\n padding: 1em;\n align-self: center;\n width: 185px;\n height: auto;\n line-height: normal;\n}\n\n.wpstg--backup--import--options {\n position: relative;\n display: flex;\n justify-content: center;\n}\n\n.wpstg--backup--import--options ul {\n display: none;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul {\n padding: 0;\n margin: 54px 0 0 0;\n display: block;\n position: absolute;\n width: 185px;\n background: #25a1f0;\n box-sizing: border-box;\n border-radius: 0 0 3px 3px;\n border-width: 1px;\n border-color: #2188c9;\n text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul li {\n border-bottom: .1em solid #25a1f0;\n margin: 0;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul li:hover {\n background-color: #25a1f0;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul li:last-child {\n border-bottom: none;\n}\n\n.wpstg--backup--import--options ul li button {\n cursor: pointer;\n background: none;\n border: none;\n margin: 0;\n width: 100%;\n color: white;\n height: 40px;\n line-height: 40px;\n}\n\n.wpstg--backup--import--options ul li button:hover {\n background-color: #259be6;\n}\n\n.wpstg--modal--backup--import--search-replace--info {\n margin: 1em 0;\n display: flex;\n flex-direction: row;\n}\n\n.wpstg--modal--backup--import--info p {\n text-align: left;\n margin: 0;\n}\n\n.wpstg--modal--backup--import--search-replace--wrapper button {\n align-self: center;\n}\n\n.wpstg--import--advanced-options--button {\n border: 0;\n border-radius: 3px;\n font-size: 18px;\n text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;\n cursor: pointer;\n}\n\n.wpstg--modal--backup--import--search-replace--new {\n color: white;\n background-color: #25a1f0;\n}\n\n.wpstg--modal--backup--import--search-replace--remove {\n color: white;\n background-color: #25a1f0;\n width: 22px;\n height: 22px;\n margin-left: 5px;\n}\n\n.wpstg--modal--backup--import--search-replace--input-group:first-child button {\n display: none;\n}\n\n.wpstg--modal--backup--import--search-replace--input--container {\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.wpstg--modal--backup--import--search-replace--input-group {\n width: 100%;\n border-bottom: 6px solid #f1f1f1;\n margin-bottom: 10px;\n}\n\n.wpstg--modal--backup--import--search-replace--input-group input {\n min-width: 250px;\n width: calc(50% - 4px - 11px - 5px); /* -4px is half of the padding; -11px is half of the button; -5 is the margin left of the button */\n display: inline-block;\n line-height: 10px;\n border: 1px solid #dedede;\n border-radius: 3px;\n color: #666;\n padding: 8px;\n margin-bottom: 12px;\n}\n\n.wpstg--modal--import--upload--process {\n display: none;\n position: relative;\n height: 30px;\n margin-top: 20px;\n margin-bottom: 20px;\n width: 100%;\n top: 0;\n left: 0;\n text-indent: 1em;\n white-space: nowrap;\n overflow: hidden;\n color: #333333;\n justify-content: center;\n align-items: center;\n}\n\n.wpstg--modal--import--upload--progress {\n position: absolute;\n background: #98d452;\n color: white;\n height: 100%;\n border-radius: 4px;\n left: 0;\n top: 0;\n}\n\n.wpstg--modal--import--upload--progress--title {\n z-index: 9;\n}\n\n.wpstg-fieldset:disabled {\n opacity: 0.8;\n border-top: 1px solid white;\n margin-top: 20px;\n}\n\n.wpstg-fieldset {\n padding-left: 20px;\n}\n\n.wpstg-fs-14 {\n font-size: 14px;\n}\n\n.wpstg-dark-alert {\n font-weight: bold;\n background-color: #0e86d9;\n padding: 15px;\n margin-top: 0px;\n color: white;\n}\n\n.wpstg-dark-alert .wpstg-button--cta-red {\n margin-left:10px;\n}\n\n.wpstg-form-group {\n display: block;\n width: 100%;\n margin-bottom: 8px;\n align-items: center;\n}\n\n.wpstg-form-group > label {\n display: block;\n font-weight: 700;\n}\n\n.wpstg-text-field > input {\n width: 300px;\n display: block;\n line-height: 1.5;\n}\n\n.wpstg-code-segment {\n display: block;\n}\n\n.wpstg-text-field > .wpstg-code-segment {\n margin-top: 4px;\n min-width: 300px;\n}\n\n.wpstg-form-group > .wpstg-checkbox {\n min-width: 100%;\n width: 100%;\n position: relative;\n}\n\n.wpstg-form-group > .wpstg-checkbox > input[type='checkbox'] {\n left: 150px;\n}\n\n.wpstg-rounded {\n border-radius: 3px;\n}\n\n.wpstg-white-border {\n border: 1px solid white !important;\n}\n\n.wpstg-ml-4 {\n margin-left: 4px;\n}\n\n#wpstg-confirm-backup-restore-data {\n margin: 40px;\n text-align: left;\n}\n\n#wpstg-advanced-settings hr {\n margin: 20px 0;\n}\n\n.wpstg-form-row {\n display: block;\n}\n\n.wpstg-form-row label,\n.wpstg-form-row input {\n display: table-cell;\n padding-left: 5px;\n padding-right: 5px;\n margin-top: 3px;\n margin-bottom: 3px;\n}\n\n.wpstg-form-row input {\n width: 400px;\n}\n\n.wpstg-form-row label {\n font-weight: bold;\n width: 1px;\n white-space: nowrap;\n}\n\n#wpstg-db-connect-output #wpstg-db-status {\n width: 390px;\n}\n\n.wpstg-fs-14 {\n font-size: 14px;\n}\n\n.wpstg-code-segment {\n display: block;\n}\n\n.wpstg-form-group > .wpstg-checkbox {\n min-width: 100%;\n width: 100%;\n}\n\n.wpstg-form-group > .wpstg-checkbox > input[type='checkbox'] {\n margin-left: 10px;\n}\n\n@media only screen and (max-width: 768px) {\n .wpstg-form-group > label {\n min-width: auto;\n width: auto;\n }\n\n .wpstg-text-field > input {\n width: 100%;\n }\n\n .wpstg-text-field > .wpstg-code-segment {\n margin-left: 0;\n min-width: 100%;\n }\n\n .wpstg-tab-section {\n width: calc(100vw - 60px);\n max-width: 450px;\n }\n}\n\n.wpstg-rounded {\n border-radius: 3px;\n}\n\n.wpstg-white-border {\n border: 1px solid white !important;\n}\n\n.wpstg-m-0 {\n margin: 0;\n}\n\n.wpstg-mt-10px {\n margin-top: 10px !important;\n}\n\n.wpstg-my-10px {\n margin-top: 10px !important;\n margin-bottom: 10px !important;\n}\n\n.wpstg-w-100 {\n width: 100%;\n}\n\n.wpstg-box-shadow {\n box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);\n}\n\n.wpstg-float-left {\n float: left;\n}\n\n.wpstg-bold-text {\n font-weight: bold;\n}\n\n.wpstg-warning.notice {\n border-left: 4px solid #ffba00;\n}\n\n.wpstg-confirmation-label {\n background-color: #5b9dd9;\n color: #fff;\n padding: 2px;\n border-radius: 3px;\n}\n\n.wpstg-my-6px {\n margin-bottom: 6px;\n margin-top: 6px;\n}\n\n.wpstg-mb-10px {\n margin-bottom: 10px;\n}\n\n.wpstg-clear-both {\n clear: both;\n}\n\n.wpstg-font-italic {\n font-style: italic;\n}\n\n.wpstg-mt-20px {\n margin-top: 20px;\n}\n\n.wpstg-welcome-container {\n border: 2px solid white;\n padding: 20px;\n margin-bottom: 20px;\n}\n\n.wpstg-ml-30px {\n margin-left: 30px;\n}\n\n.wpstg-text-center {\n text-align: center;\n}\n\n.wpstg-feedback-link {\n text-decoration: none;\n}\n\n.wpstg-feedback-span {\n display: block;\n margin-bottom: 3px;\n}\n\n#wpstg-confirm-backup-restore-data {\n margin: 40px;\n text-align: left;\n}\n\n#wpstg-confirm-backup-restore-wrapper {\n margin: 30px;\n margin-top: 0;\n}\n\n#wpstg-confirm-backup-restore-wrapper h3 {\n color: #E01E5A;\n}\n\n#wpstg-progress-db,\n#wpstg-progress-backup {\n background-color: #3fa5ee;\n}\n\n#wpstg-progress-sr,\n#wpstg-progress-files.wpstg-pro {\n background-color: #3c9ee4;\n}\n\n#wpstg-progress-dirs,\n#wpstg-progress-data {\n background-color: #3a96d7;\n}\n\n#wpstg-progress-files:not(.wpstg-pro),\n#wpstg-progress-finishing {\n background-color: #378cc9;\n}\n\n.wpstg-issue-resubmit-confirmation.wpstg--swal2-container,\n.wpstg-swal2-container.wpstg--swal2-container {\n z-index: 10500;\n}\n\n.wpstg-swal2-container.wpstg-swal2-loading .wpstg--swal2-actions,\n.wpstg-swal2-container.wpstg-swal2-loading .wpstg--swal2-header {\n display: none;\n}\n\nbody.toplevel_page_wpstg_backup .wpstg--swal2-container .wpstg--swal2-content,\nbody.toplevel_page_wpstg_clone .wpstg--swal2-container .wpstg--swal2-content {\n z-index: 2;\n}\n\n.toplevel_page_wpstg_clone #swal2-content h2 {\n color: #565656;\n}\n\n.toplevel_page_wpstg_clone #swal2-content {\n line-height: 1.5em;\n}\n\ndiv#exportUploadsWithoutDatabaseWarning {\n font-style: italic;\n font-size: 0.9rem;\n margin: 10px;\n padding: 10px;\n border: 1px solid #e3e3e3;\n border-radius: 5px;\n text-align: center;\n background-color: #fafafa;\n}\n\n.wpstg-advanced-options-dropdown-wrapper {\n display: none; /* ENABLE WHEN WE HAVE ADVANCED OPTIONS FOR EXPORTING */\n margin-top: 20px;\n}\n\n.wpstg--modal--backup--import--search-replace--wrapper {\n text-align: left;\n margin-top: 20px;\n}\n\n.wpstg--modal--backup--import--search-replace--new--wrapper {\n text-align: center;\n}\n\n.wpstg-import-backup-contains li {\n display: inline-block;\n}\n\n.wpstg-import-backup-contains li .wpstg-backups-contains {\n border-radius: 3px;\n color: #979797;\n background-color: #e3e3e3;\n border: 1px solid #c2c2c2;\n width: 17px;\n height: 17px;\n font-size: 17px;\n}\n\n.wpstg-import-backup-contains.wpstg-listing-single-backup li .wpstg-backups-contains {\n padding: 2px;\n background-color: white;\n border: 1px solid #c2c2c2;\n}\n\n.wpstg-import-backup-contains.wpstg-listing-single-backup li .wpstg-backups-contains > .wpstg--dashicons {\n filter: invert(50%);\n}\n\n.wpstg-import-backup-contains .wpstg--tooltiptext {\n width: 50px;\n font-size: x-small;\n padding: 5px;\n left: -25px;\n text-align: center;\n}\n\n.wpstg-import-backup-contains-title {\n display: inline-block;\n}\n\nul.wpstg-import-backup-contains {\n display: inline-block;\n}\n\n.wpstg-import-backup-name {\n display: inline-block;\n font-weight: bold;\n}\n\n.wpstg-backup-more-info-toggle {\n font-size: x-small;\n display: inline-block;\n font-style: italic;\n cursor: pointer;\n}\n\n.wpstg-backup-more-info-toggle::selection {\n background: none;\n}\n\nul.wpstg-import-backup-more-info {\n font-size: 14px;\n text-align: left;\n margin-bottom: 30px;\n margin-top: 10px;\n background-color: #f6f6f6;\n border: 1px solid #878787;\n border-radius: 3px;\n padding: 7px;\n cursor: pointer;\n}\n\nul.wpstg-import-backup-more-info:hover {\n background-color: #def2ff;\n border: 1px solid #25a1f0;\n}\n\nul.wpstg-import-backup-more-info li {\n height: 20px;\n}\n\n.wpstg-backup-list {\n max-width: 800px;\n}\n\n.wpstg-backup-list h3 {\n color:#3e3e3e;\n}\n\n.wpstg-backup-list ul ul {\n margin-block-start: 1em;\n margin-block-end: 1em;\n}\n\n.wpstg-push-confirmation-message {\n text-align: justify;\n font-size: 15px;\n}\n\n.wpstg-settings-row {\n padding-top: 10px;\n padding-bottom: 10px;\n}\n\n.wpstg-settings-title {\n font-weight: 600;\n}\n\n.wpstg-settings-form-group {\n display: flex;\n align-items: center;\n}\n\n.wpstg-settings-form-group > .wpstg-settings-message {\n width: 30%;\n padding: 0;\n margin: 7px 0 0;\n}\n\n/**\n * WP STAGING EXCLUSION RULES TABLE LAYOUT\n */\n\n.wpstg-excluded-filters-container {\n padding: 0;\n margin-top: 10px;\n margin-bottom: 10px;\n max-width: 100%;\n width: 100%;\n}\n\n.wpstg-excluded-filters-container > table {\n width: 100%;\n border-collapse: collapse;\n border-color: transparent;\n}\n\n.wpstg-excluded-filters-container td {\n padding-top: 4px;\n padding-bottom: 4px;\n height: 20px;\n}\n\n.wpstg-excluded-filters-container h4 {\n margin: 0;\n}\n\n.wpstg-exclude-filters-foot {\n display: flex;\n justify-content: flex-start;\n padding: 0;\n}\n\n/**\n * WP STAGING EXCLUSION RULE DROPDOWN STYLE\n */\n\n\n.wpstg-exclude-filter-dropdown > button:hover {\n background: #135e96;;\n border: 1px solid #135e96;;\n}\n\n.wpstg-exclude-filter-dropdown > .wpstg-dropdown-menu {\n width: 128px;\n}\n\n.wpstg-remove-exclude-rule {\n color: #fff !important;\n background-color: #e01e5a;\n border: 1px solid #e01e5a;\n width: 20px;\n height: 20px;\n border-radius: 10px;\n font-size: 24px;\n padding: 0;\n display: inline-flex;\n justify-content: center;\n outline: none;\n box-shadow: none;\n font-weight: 400;\n line-height: 0.7;\n margin-top: 5px;\n cursor: pointer;\n}\n\n.wpstg-remove-exclude-rule:hover {\n background-color: #E01E5A;\n border-color: #E01E5A;\n}\n\n.wpstg-code-block {\n margin-top: 4px;\n font-size: 1.2em;\n background: #f8f8f8;\n border-radius: 2px;\n}\n\n.wpstg-rule-info {\n background: #f8f8f8 !important;\n}\n\ncode.wpstg-code {\n display: inline-block;\n font-size: 11px;\n border: 1px solid #aaa;\n background: #fff;\n padding: 2px 4px;\n margin-bottom: 1px;\n color: #E01E5A;\n}\n\n.wpstg-exclusion-rule-info {\n color: #fff !important;\n background-color: #ffc107;\n border: 1px solid #ffc107;\n width: 14px;\n height: 14px;\n border-radius: 7px;\n font-size: 14px;\n padding: 0;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n outline: none;\n box-shadow: none;\n font-weight: 400;\n vertical-align: middle;\n}\n\n.wpstg-exclusion-rule-info:hover {\n background-color: #ffba0c;\n border: 1px solid #ffba0c;\n}\n\n/**\n * WP STAGING INPUTS EXCLUSION RULES\n */\n\n.wpstg-exclude-rule-input {\n font-size: 12px !important;\n padding: 2px 6px;\n box-shadow: none;\n outline: none !important;\n display: inline-block;\n font-weight: 400;\n line-height: 1.5;\n color: #222;\n border-radius: 0 !important;\n background-color: #fff;\n border: 1px solid #bbb;\n min-height: 24px !important;\n margin-top: 4px;\n margin-left: 4px;\n vertical-align: baseline !important;\n transition: all 0.3s cubic-bezier(.25, .8, .25, 1);\n width: 135px;\n}\n\n.wpstg-excluded-filters-container tbody > tr:last-child .wpstg-exclude-rule-input {\n margin-bottom: 4px;\n}\n\n.wpstg-exclude-rule-input:hover {\n border: 1px solid #999;\n}\n\n.wpstg-exclude-rule-input:focus {\n border: 1px solid #25A0F1 !important;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24) !important;\n}\n\n.wpstg-file-size-exclude-select,\n.wpstg-path-exclude-select {\n width: 135px;\n}\n\n.wpstg-file-size-exclude-select-small {\n width: 52px;\n}\n\n.wpstg-file-size-exclude-input {\n width: 75px;\n}\n\n.wpstg-staging-option-title {\n margin: 15px 0 0;\n}\n\n.wpstg-swal-push-container.wpstg--swal2-container {\n z-index: 9995;\n}\n\n#wpstg-scanning-files {\n padding-bottom: 5px;\n}\n\n#wpstg-scanning-files.wpstg-tab-section, #wpstg-scanning-db.wpstg-tab-section {\n padding-top: 10px;\n}\n\n.wpstg-reset-excludes-container {\n margin: 10px 0;\n}\n\n.wpstg-swal2-ajax-loader {\n width: 100%;\n height: 150px;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n@keyframes wpstg-loading-icon-anim {\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.wpstg-swal2-ajax-loader > img {\n width: 64px;\n height: 64px;\n animation: wpstg-loading-icon-anim 1s infinite linear;\n -webkit-animation: wpstg-loading-icon-anim 1s infinite linear;\n}\n\n.wpstg-swal2-container .wpstg-tab-section {\n width: auto !important;\n}\n\n#wpstg-no-staging-site-results {\n margin-top: 10px;\n max-width: 375px;\n}\n\nli#wpstg-backup-no-results {\n max-width: 500px;\n}\n\nli#wpstg-backup-no-results div, #wpstg-no-staging-site-results div {\n display: inline-block;\n text-align: center;\n}\n\nli#wpstg-backup-no-results .wpstg--dashicons, #wpstg-no-staging-site-results .wpstg--dashicons {\n filter: invert(50%);\n position: absolute;\n margin-top: 1px;\n}\n\nli#wpstg-backup-no-results .no-backups-found-text, #wpstg-no-staging-site-results .no-staging-site-found-text {\n color: #5d5d5d;\n margin-left: 20px;\n}\n\n@media only screen and (max-width: 680px) {\n li#wpstg-backup-no-results div, #wpstg-no-staging-site-results div {\n width: 100%;\n }\n}\n\n#wpstg--modal--backup--download-inner p.wpstg-download-modal-text {\n font-size: 16px;\n color: #565656;\n}\n\n#wpstg--modal--backup--download-inner h2 {\n color: #565656;\n}\n\n.wpstg-backup-restore-contains-database,\n.wpstg-backup-restore-contains-files {\n display: none;\n}\n\n.wpstg-green-button {\n background: #8bc34a;\n border: 1px solid #78a93f;\n color: white;\n text-shadow: 0 -1px 1px #78a93f, 1px 0 1px #78a93f, 0 1px 1px #40c921, -1px 0 1px #78a93f;\n}\n\n.wpstg-green-button:hover {\n background: #78a93f;\n}\n\n.wpstg-is-dir-loading {\n position: absolute;\n margin-top: -2px;\n margin-left: 8px;\n display: none;\n}\n\n.wpstg-ml-8px {\n margin-left: 8px;\n}\n\n.wpstg-mb-8px {\n margin-bottom: 8px;\n}\n\n\n.wpstg-btn-danger {\n background-color: #E01E5A;\n border: 1px solid #E01E5A;\n color: white;\n text-shadow: none;\n}\n\n.wpstg-btn-danger:hover {\n background: #c0194d;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);\n}\n\n.wpstg-swal2-container.wpstg-swal2-loading > .wpstg--swal2-modal {\n height: 200px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container:not(.wpstg-swal2-loading) > .wpstg--swal2-modal {\n max-width: 480px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container .wpstg--swal2-header {\n display: none;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container .wpstg--swal2-content {\n height: auto;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-tabs-wrapper {\n overflow-y: auto;\n height: auto !important;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content {\n font-size: 13px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-dir {\n margin-bottom: 4px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-subdir {\n margin-top: 4px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container.has-collapsible-open .wpstg--swal2-modal {\n height: calc(100vh - 70px);\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container.has-collapsible-open > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-tabs-wrapper {\n height: calc(100vh - 350px) !important;\n}\n\n.wpstg--swal2-actions.wpstg--modal--actions > button {\n margin-left: 4px;\n margin-right: 4px;\n text-transform: uppercase;\n text-shadow: initial;\n font-weight: 500;\n min-width: 80px;\n}\n\n.wpstg-swal-popup {\n max-width: 1200px !important;\n}\n\n.wpstg-swal-popup.wpstg-push-finished .wpstg--swal2-title {\n color: #a8a8a8;\n}\n\n.wpstg-swal-popup.wpstg-push-finished .wpstg--swal2-content {\n margin-top: 8px;\n color: #a8a8a8;\n}\n\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step.wpstg--swal2-active-progress-step,\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step,\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step-line {\n background: #25a1f0;\n}\n\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step-line {\n width: 2.75em;\n}\n\n.wpstg--dashicons {\n width: 16px;\n height: 16px;\n}\n\n.wpstg--dashicons.wpstg-dashicons-grey {\n filter: invert(20%);\n}\n\n.wpstg--dashicons.wpstg-dashicons-19 {\n width: 19px;\n height: 19px;\n}\n\n.wpstg--dashicons.wpstg-dashicons-21 {\n width: 21px;\n height: 21px;\n}\n\n#wpstg--tab--backup #wpstg-step-1 {\n display: flex;\n align-items: center;\n}\n\n.wpstg-advanced-options .wpstg--tooltip,\n#wpstg--tab--backup #wpstg-step-1 .wpstg--tooltip {\n border-bottom: 0 solid transparent;\n display: inline-flex;\n align-items: center;\n}\n\n#wpstg--tab--backup #wpstg-step-1 .wpstg--tooltip {\n border-bottom: 0 solid transparent;\n display: flex;\n align-items: center;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext-backups::after {\n left: calc(20% + 2px);\n}\n\n.wpstg-listing-single-backup .wpstg--dashicons {\n width: 17px;\n height: 17px;\n}\n\n.wpstg-100-width {\n width: 100px;\n}\n\n.wpstg-caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px solid;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n transition: transform 0.2s;\n cursor: pointer;\n}\n\n.wpstg-caret.wpstg-caret-up {\n transform: rotate(-180deg);\n}\n\n.wpstg-advanced-options-site label {\n font-size: 16px;\n display: block;\n margin: .5em 0;\n}\n\n#wpstg-confirm-backup-restore-data {\n font-size: 18px;\n margin: 0;\n margin-top: 30px;\n}\n\n/* Sweetalert WP STAGING Theme */\n\nbody.toplevel_page_wpstg_backup .wpstg--swal2-container.wpstg--swal2-backdrop-show,\nbody.toplevel_page_wpstg_clone .wpstg--swal2-container.wpstg--swal2-backdrop-show {\n background: rgba(0, 0, 0, .6);\n z-index: 9995;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup {\n border-radius: 8px;\n z-index: 9999;\n padding: 24px;\n color: #565656;\n font-family: Verdana, Geneva, Tahoma, sans-serif;\n}\n\n.wpstg-swal-popup .wpstg--swal2-title {\n font-size: 22px;\n color: #565656;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-title {\n align-self: flex-start; /* For an actual Swal title */\n text-align: left; /* Manually adding this class to a non flex display */\n margin-bottom: 0;\n}\n\n.wpstg-swal-popup .wpstg--swal2-close {\n top: 8px;\n right: 8px;\n z-index: 5;\n}\n\n.wpstg-swal-popup .wpstg--swal2-close:focus {\n outline: none;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-actions {\n justify-content: flex-end;\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button {\n border-radius: 4px;\n font-weight: 900;\n border: 0;\n font-size: 15px;\n padding: 10px 12px;\n text-transform: capitalize;\n line-height: normal;\n height: 40px;\n min-width: 100px;\n text-shadow: none;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-actions > button {\n margin-left: 8px;\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button.wpstg--swal2-cancel {\n border: 1px solid rgba(29, 28, 29, 0.3);\n background: #fff;\n color: rgb(29, 28, 29);\n font-weight: 500;\n width: 100px;\n text-shadow: none;\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button:hover {\n box-shadow: 0 1px 3px 0 rgba(0 0 0 .1);\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button.wpstg--swal2-cancel:hover {\n background: rgba(28, 29, 28, .04);\n}\n\n#wpstg-backup-name-input {\n height: 44px;\n font-size: 18px;\n}\n\n.wpstg-restore-finished-container .wpstg--swal2-title {\n color: #565656 !important;\n}\n\n/*#wpstg-restore-success {\n color: #565656;\n}*/\n\n.wpstg-restore-finished-container .wpstg--swal2-content {\n margin-top: 20px;\n color: #a8a8a8;\n}\n\n/* WP Staging Implementation of Windows Style Linear Loader */\n\n.wpstg-linear-loader > span[class*=\"wpstg-linear-loader-item\"] {\n height: 6px;\n width: 6px;\n background: #333;\n display: inline-block;\n margin: 12px 2px;\n border-radius: 100%;\n animation: wpstg_linear_loader 3s infinite;\n animation-timing-function: cubic-bezier(0.030, 0.615, 0.995, 0.415);\n animation-fill-mode: both;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(1) {\n animation-delay: 1s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(2) {\n animation-delay: 0.8s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(3) {\n animation-delay: 0.6s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(4) {\n animation-delay: 0.4s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(5) {\n animation-delay: 0.2s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(6) {\n animation-delay: 0s;\n}\n\n@keyframes wpstg_linear_loader {\n 0% {\n transform: translateX(-30px);\n opacity: 0;\n }\n 25% {\n opacity: 1;\n }\n 50% {\n transform: translateX(30px);\n opacity: 0;\n }\n 100% {\n opacity: 0;\n }\n}\n\n/* END - Windows Style Linear Loader */\n\n.wpstg--modal--backup--import--upload--content {\n padding: .75em;\n margin: 1em auto;\n}\n\n.wpstg--modal--backup--import--upload--content .wpstg-linear-loader {\n display: none;\n}\n\n#wpstg-multisite-disabled .wpstg-clone {\n width: 355px;\n}\n\n#wpstg-free-version-backups .wpstg-clone {\n text-align: center;\n}\n\n#wpstg-free-version-backups .wpstg-clone p {\n font-size: 16px;\n}\n\n.wpstg-staging-info li .backup-notes {\n word-break: break-word;\n}\n\n.wpstg--modal--import--upload--progress--title small {\n font-weight: normal;\n}\n\n#wpstg-report-issue-wrapper {\n position: relative;\n}\n\n#wpstg-report-issue-wrapper .arrow-up {\n width: 0;\n height: 0;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-bottom: 8px solid white;\n position: absolute;\n top: -8px;\n right: 40px;\n}\n\n.notice {\n margin: 10px 20px 0 2px;\n}\n\n.wpstg--notice {\n box-shadow: 0 1px 1px rgba(0, 0, 0, .04);\n margin: 20px 20px 20px 0px;\n padding: 1px 12px;\n}\n\n.wpstg--error a:hover {\n color: #eeeeee;\n}\n\n.wpstg--error, .wpstg--error a {\n background: #E01E5A;\n color: white;\n}\n\n/**\n * Buttons\n */\n\n.wpstg-button {\n display: inline-block;\n border-radius: 2px;\n cursor: pointer;\n padding: 2px 10px 2px 10px;\n text-transform: uppercase;\n font-weight: 500;\n outline: 0;\n transition: background-color .1s ease-in;\n text-decoration: none;\n}\n\n.wpstg-button.wpstg-save {\n background-color: #1687A7;\n color: white;\n}\n\n.wpstg-button.wpstg-save:hover {\n background-color: #276678;\n}\n\n\n.wpstg-button.wpstg-button-light {\n background-color: #f8f8f8;\n border: 1px solid #eee;\n color: #333;\n animation: background-color 0.3s;\n}\n\n.wpstg-button.wpstg-button-light:hover {\n background-color: #e0e0e0;\n border: 1px solid #e0e0e0;\n}\n\n.wpstg-buttons .spinner {\n float: none;\n margin: 0 0 0 5px;\n}\n\n.wpstg-button.danger {\n display: inline-block;\n text-decoration: none;\n text-align: center;\n text-transform: inherit;\n background-color: #E01E5A;\n color: white;\n border-radius: 2px;\n border-color: transparent;\n}\n\n.wpstg-button.danger:hover {\n background-color: #c0194d;\n}\n\n.wpstg-button--big {\n display: inline-block;\n padding: 10px;\n min-width: 170px;\n font-size: 16px;\n text-decoration: none;\n text-align: center;\n margin-top: 20px;\n color: white;\n border-radius: 3px;\n}\n\n.wpstg-button--primary {\n display: inline-block;\n text-decoration: none;\n font-size: 13px;\n line-height: 2.15384615;\n min-height: 30px;\n margin: 0;\n padding: 0 10px;\n cursor: pointer;\n border: 1px solid rgba(29, 28, 29, 0.3);\n -webkit-appearance: none;\n border-radius: 2px;\n white-space: nowrap;\n box-sizing: border-box;\n color: #171717;\n}\n\n.wpstg-button--primary:hover {\n background: rgba(28, 29, 28, .04);\n color: black;\n}\n\n.wpstg-button--secondary {\n display: inline-block;\n background-color: transparent;\n color: #95a5a6;\n border-radius: 2px;\n border: 1px solid rgba(29, 28, 29, 0.3);\n cursor: pointer;\n padding: 4px 10px 2px 10px;\n font-weight: 500;\n outline: 0;\n transition: background-color .1s ease-in;\n text-decoration: none;\n}\n\n.wpstg-button--red {\n background-color: #E01E5A;\n border-color: #E01E5A;\n color: white;\n}\n\n.wpstg-button--red:hover {\n background-color: #d02358;\n border-color: #e0255f;\n color: white;\n}\n\n.wpstg-button--cta-red {\n background-color: #fe008f;\n border-color: #E01E5A;\n color: white;\n}\n\n.wpstg-button--cta-red:hover {\n background-color: #f31391;\n border-color: #e0255f;\n color: white;\n}\n\n.wpstg-button--blue {\n background-color: #25A0F1;\n border-color: #25A0F1;\n color: white;\n}\n\n.wpstg-button--blue:hover {\n background-color: #259be6;\n border-color: #259be6;\n color: white;\n}\n\n#wpstg-button-backup-upgrade {\n font-size: 16px;\n}\n\n.wpstg-staging-status {\n color: #E01E5A;\n}\n\n#wpstg-push-changes,\n#wpstg-start-updating,\n#wpstg-save-clone-data {\n margin-left: 5px;\n}\n\ninput.wpstg-textbox {\n border: 1px solid #aaa;\n border-radius: .25rem;\n padding: 0.25rem 0.5rem;\n font-size: 14px;\n}\n\ninput.wpstg-textbox:focus {\n outline: 0;\n border-color: #259be6;\n -webkit-box-shadow: 0 0 0 0.1rem rgba(221, 221, 221, .35);\n box-shadow: 0 0 0 0.1rem rgba(221, 221, 221, .35);\n}\n\ninput.wpstg-textbox::placeholder {\n color: #888;\n}\n\n.wpstg--advance-settings--checkbox {\n display: flex;\n align-items: center;\n}\n\n.wpstg--advance-settings--checkbox > label {\n font-size: 14px;\n font-weight: bolder;\n width: 165px;\n display: inline-block;\n}\n\n.wpstg--advance-settings--checkbox > .wpstg--tooltip {\n margin-top: 5px;\n margin-left: 5px;\n position: relative;\n display: inline-block;\n border-bottom: 0px solid transparent;\n}\n\n.wpstg--advance-settings--checkbox > .wpstg--tooltip > .wpstg--tooltiptext {\n top: 18px;\n left: -150px;\n}\n\n\ndiv#wpstg-restore-wait {\n display: none;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n height: 100vh;\n width: 100vw;\n position: fixed;\n top: 0;\n left: 0;\n background: white;\n z-index: 99999;\n}\n\ndiv#wpstg-restore-wait .wpstg-title {\n font-weight: bold;\n}\n\ndiv#wpstg-restore-wait div {\n font-size: 16px;\n margin-top: 12px;\n}\n\n.resumable-browse {\n cursor: pointer;\n}\n\n.resumable-browse a {\n text-decoration: underline;\n}\n\n.wpstg-upload-text {\n font-weight: 600;\n}\n\n.wpstg--modal--backup--import--upload--container.dragover {\n transition: background-color 0.7s;\n background-color: #94dc96;\n color: #FFF;\n}\n\n.wpstg--modal--backup--import--upload--container.dragover * {\n pointer-events: none; /* Avoids flickering when dragging to drop a file */\n}\n\n.wpstg--modal--backup--import--upload--container.dragover .wpstg-upload-text {\n display: none;\n}\n\n.wpstg--modal--backup--import--upload--container.dragover .wpstg-dragover-text {\n display: block;\n}\n\n.wpstg--modal--backup--import--upload--container .wpstg-dragover-text {\n display: none;\n}\n\n#wpstg-invalid-license-message, #wpstg-invalid-license-message a {\n font-weight: 500;\n color: #E01E5A;\n margin-left: 6px;\n}\n\n#wpstg-sidebar--banner {\n max-width: 200px;\n}\n\n@media screen and (max-width: 1234px) {\n .wpstg-h2 {\n font-size: 24px;\n }\n\n #wpstg-welcome li {\n font-size: 14px;\n }\n}\n\n.wpstg-exclamation {\n color: #ffffff;\n border-radius: 100%;\n background-color: #E01E5A;\n width: 20px;\n height: 20px;\n text-align: center;\n font-weight: bold;\n display: inline-block;\n margin: 6px;\n}\n\n.wpstg--tab--contents {\n padding-top: 1px;\n}\n\n.wpstg-swal-show.wpstg--swal2-show {\n -webkit-animation: wpstg-swal-show 0.2s !important;\n animation: wpstg-swal-show 0.2s !important;\n}\n\n@-webkit-keyframes wpstg-swal-show {\n 0% {\n transform: scale(0.3);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes wpstg-swal-show {\n 0% {\n transform: scale(0.3);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n.wpstg-tab-item--vert-center {\n display: flex;\n align-items: center;\n}\n\n.wpstg-db-comparison-modal {\n padding-left: 10px;\n padding-right: 10px;\n}\n\n.wpstg-db-comparison-table {\n font-size: 13px;\n width: 100%;\n}\n\n.wpstg-db-comparison-table tbody td {\n padding-top: 6px;\n}\n\n.wpstg-db-comparison-table tr > td:first-child,\n.wpstg-db-comparison-table tr > th:first-child {\n text-align: left;\n}\n\n.wpstg-css-tick {\n display: inline-block;\n transform: rotate(45deg);\n height: 12px;\n width: 6px;\n border-bottom: 3px solid #78b13f;\n border-right: 3px solid #78b13f;\n}\n\n.wpstg-css-cross {\n position: relative;\n top: -8px;\n left: -2px;\n width: 16px;\n height: 16px;\n}\n\n.wpstg-css-cross:before, .wpstg-css-cross:after {\n position: absolute;\n content: ' ';\n height: 17px;\n width: 3px;\n background-color: #E01E5A;\n}\n\n.wpstg-css-cross:before {\n transform: rotate(45deg);\n}\n\n.wpstg-css-cross:after {\n transform: rotate(-45deg);\n}\n\n.wpstg-selection-preview {\n font-size: 12px;\n margin-left: 20px;\n color: #3216;\n}\n\n.wpstg-selection-preview.danger {\n color: #E01E5A;\n}\n"]}
assets/css/dist/wpstg-admin.min.css CHANGED
@@ -1,2 +1,2 @@
1
- .wpstg--violet{color:#9d37ae}.wpstg-border--violet{border:1px solid #9d37ae}.wpstg--red{color:#e01e5a}.wpstg-cta--red{color:#fe008f}.wpstg--blue{color:#24a1f0}.wpstg--darkblue{color:#0e86d9}.wpstg--green{color:#83c11f}.wpstg--grey{color:#3e3e3e}.wpstg--darkgrey{color:#1b1b1b}body.toplevel_page_wpstg_clone,body.wp-staging-pro_page_wpstg-license,body.wp-staging-pro_page_wpstg-settings,body.wp-staging-pro_page_wpstg-tools,body.wp-staging-pro_page_wpstg_backup{background-color:#f3f5f7}#wpstg-tab-container ul{background:#f1f1f1;float:left;list-style:none;margin:0;padding:0}#wpstg-tab-container ul li:first-child.selected-tab{border-top:none}#wpstg-tab-container ul li a.selected-tab{font-weight:700;text-decoration:none}#wpstg-tab-container .row{padding-bottom:12px;padding-top:10px}.wpstg-tabs-container .nav-tab-wrapper{padding:0}#wpstg-tab-container .row label strong,#wpstg-tab-container .row strong{font-weight:700}.wpstg-tabs a{padding:5px}#wpstg-tab-container>ul>li.wpstg-tabs.active{background-color:#fff}#wpstg_settingsgeneral_header .row:nth-child(3),#wpstg_settingsgeneral_header .row:nth-child(4){display:none}#wpstg-tab-container .wpstg-settings-panel{overflow:auto;padding:0 20px 20px}#wpstg-tab-container .wpstg-form-table th{color:#484848;font-size:14px;font-weight:700;line-height:1.3;padding:20px 10px 20px 0;text-align:left;vertical-align:top;width:30%}#wpstg-tab-container .wpstg-form-table tr{border-bottom:1px solid #e7e7e7}#wpstg-tab-container span.description{color:#484848;display:block;font-size:13px;font-style:normal;font-weight:400;margin-top:7px}#wpstg-tab-container .col-title{color:#484848}@media only screen and (max-width:680px){#wpstg-tab-container ul{float:none}#wpstg-tab-container .wpstg-form-table tr>th{width:100%}#wpstg-tab-container span.description{font-size:14px}#wpstg-tab-container .wpstg-form-table tr>td,#wpstg-tab-container .wpstg-form-table tr>th{padding:10px}}#wpstg-tab-container ul li{margin-bottom:0}#wpstg-tab-container ul li a{border-bottom:1px solid #e7e7e7;border-left-style:solid;border-left-width:0;border-right-style:solid;border-right-width:0;border-top:1px solid #fff;color:#0097df;display:block;font-weight:700;padding:10px 4px 10px 14px;text-decoration:none}#wpstg-tab-container ul li a:hover{background-color:#e5e5e5;color:#777}.wpstg-logo{display:block;float:left;font-size:16px;padding-top:20px;width:220px}.wpstg-logo img{max-width:212px}.wpstg-version{color:#9b9b9b;display:block;padding-top:40px}.wpstg_admin .nav-tab{color:#3c3c3c}#wpstg-tab-container table tbody tr:first-child>th>div{font-size:20px}#wpstg-clonepage-wrapper{margin-bottom:20px;width:98%}@media screen and (min-width:1090px){#wpstg-clonepage-wrapper{float:left;margin-bottom:20px}}#wpstg-steps{margin-left:20px;margin-top:0}#wpstg-steps li{color:#444;float:left;line-height:20px;padding-right:10px}.wpstg-step-num{border:1px solid #3e3e3e;border-radius:3px;display:inline-block;height:20px;margin-right:5px;text-align:center;width:20px}.wpstg-current-step{font-weight:700}.wpstg-current-step .wpstg-step-num{background:#3e3e3e;color:#eee}.wpstg-box{margin:10px 0;overflow:hidden;padding:10px}.wpstg-box,.wpstg-clone{position:relative;transition:border-color .2s ease-in-out}.wpstg-clone{background-color:#fff;border-radius:3px;box-shadow:0 0 1px rgba(0,0,0,.125),0 1px 3px rgba(0,0,0,.1);color:#3e3e3e;margin-bottom:10px;padding:16px}.wpstg-clone.active{border-color:#1d94cf}.wpstg-clone-header{align-items:center;display:flex;justify-content:space-between}.wpstg-clone-title{color:#3e3e3e;display:inline-block;font-size:15px;font-weight:700;max-width:300px;text-decoration:none}.wpstg-clone-title:hover{color:#111}.wpstg-clone-actions{display:flex;margin-top:5px}.wpstg-clone-actions .wpstg-dropdown-toggler{background:#25a1f0;border-radius:2px;box-shadow:0 0 1px rgba(0,0,0,.125),0 1px 3px rgba(0,0,0,.2);color:#fff;font-size:14px;padding:6px 10px;text-decoration:none}.wpstg-clone-actions .wpstg-dropdown-toggler:hover{background:#002648;color:#fff}.wpstg-dropdown{position:relative}.wpstg-dropdown>.wpstg-dropdown-menu{background:#fff;border-radius:2px;box-shadow:0 0 1px rgba(0,0,0,.125),0 1px 3px rgba(0,0,0,.2);display:none;flex-direction:column;padding:8px;position:absolute;right:0;top:calc(100% + 4px);width:100px;z-index:1000}.wpstg-dropdown>.wpstg-dropdown-menu.wpstg-menu-dropup{bottom:100%;top:auto;transform:translate3d(0,-3px,0)}.wpstg-dropdown>.wpstg-dropdown-menu.shown{display:flex}.wpstg-clone-action,.wpstg-dropdown-action{border-bottom:1px solid #f3f3f3;border-radius:3px;color:#3e3e3e;padding:6px 8px;position:relative;text-decoration:none;transition:color .2s ease-in-out}.wpstg-clone-action:hover,.wpstg-dropdown-action:hover{background:rgba(0,0,0,.05)}.wpstg-dropdown-action{background:transparent;border:0 solid #000;box-shadow:none;color:#3e3e3e;outline:none}.wpstg-remove-clone:hover{color:#e01e5a}.wpstg-clone-action:last-child{border:none}.wpstg-clone:hover .wpstg-clone-action{display:inline-block}#wpstg-show-error-details:focus,#wpstg-workflow .wpstg-clone-action{box-shadow:none;outline:none}.wpstg-link-btn{background:#45a1c9;color:#fff;display:inline-block;padding:5px 10px;text-decoration:none;transition:all .2s ease-in-out;vertical-align:baseline}.wpstg-link-btn:focus,.wpstg-link-btn:hover{box-shadow:none;color:#fff;outline:none}#wpstg-workflow .wpstg-link-btn:active{vertical-align:baseline}.wpstg-link-btn[disabled]{background:#777!important;border-color:#555!important;pointer-events:none}#wpstg-cancel-cloning,#wpstg-cancel-cloning-update{margin-top:5px}#wpstg-cancel-cloning.success{background:#64dd58;border-color:#54bd4a}#wpstg-error-details,#wpstg-error-wrapper{clear:both;display:none;font-size:13px;padding-top:10px}#wpstg-show-error-details{color:#555;display:inline-block;margin-left:5px;text-decoration:none;transition:color .2s ease-in-out}#wpstg-show-error-details:hover{color:#1d94cf}#wpstg-error-details{border-left:5px solid #e01e5a;padding:10px;width:500px}#wpstg-try-again{display:none}#wpstg-home-link{float:right}.wpstg-loader{content:url(../../img/loading.gif);display:none;margin-top:10px}.wpstg-loader.wpstg-finished{background-color:#00c89a;border-radius:3px;color:#fff;content:"Finished";display:block;margin-top:0;padding:2px 10px}#wpstg-workflow{clear:both;float:left;max-width:800px;min-height:380px;min-width:500px;padding-bottom:20px;padding-right:20px;padding-top:20px;position:relative}#wpstg-sidebar{display:block;float:left;margin-left:10px;max-width:400px}#wpstg-removing-clone.loading:after,#wpstg-workflow.loading:after{background:hsla(0,0%,100%,.7);content:"Loading... may take a while for huge websites";display:block;font-size:20px;height:100%;left:0;padding-top:100px;position:absolute;text-align:center;top:0;width:100%;z-index:99}#wpstg-removing-clone.loading:after{content:"REMOVING"!important}#wpstg-existing-clones,#wpstg-removing-clone{position:relative}#wpstg-existing-clones h3{color:#3e3e3e}#wpstg-removing-clone .wpstg-tab-section{display:block}.wpstg-progress-bar{background-color:#d6d8d7;height:27px;max-width:900px;padding:0}.wpstg-progress{background:#3fa5ee;float:left;overflow:hidden}.wpstg-progress,.wpstg-progress-files{color:#fff;height:100%;line-height:25px;text-align:center;transition:width .6s ease;width:0}.wpstg-progress-files{background:#16b4f0}#wpstg-clone-path.wpstg-error-input,#wpstg-new-clone-id.wpstg-error-input{border:1px solid #e01e5a;box-shadow:0 0 2px rgba(255,66,53,.8)}#wpstg-new-clone-id{margin-left:15px;max-width:100%;width:450px}#wpstg-new-clone{background:#25a1f0;border-color:#2188c9}#wpstg-new-clone:hover{background:#259be6;border-color:#2188c9}#wpstg-clone-path{margin-left:10px;width:350px}.wpstg-error-msg{color:#e01e5a}#wpstg-clone-id-error{background-color:#f0f8ff;display:block;margin:20px;padding:10px}#wpstg-start-cloning+.wpstg-error-msg{display:block;margin-top:5px}.wpstg-size-info{color:#999;font-weight:400;left:2px;position:relative}.wpstg-db-table .wpstg-size-info{top:2px}.wpstg-db-table:hover{background-color:#f0f8ff}#wpstg-workflow #wpstg-start-cloning{margin-left:5px;vertical-align:baseline}.wpstg-tabs-wrapper{margin:10px 0;max-width:640px}#wpstg-path-wrapper{border-bottom:2px dashed #ccc;margin-bottom:10px;padding-bottom:10px}.wpstg-tab-section{border-bottom:1px solid #ddd;border-left:none;border-right:none;display:none;padding:0 36px;width:calc(100% - 72px)}.wpstg-tab-section:after{clear:both;content:"";display:block}.wpstg-tab-header{border-bottom:1px solid #ddd;border-left:none;border-right:none;color:#444;display:block;font-size:16px;font-weight:700;padding:10px;text-decoration:none}.wpstg-tab-triangle{animation:transform .5s;border-bottom:5px solid transparent;border-left:10px solid;border-top:5px solid transparent;cursor:pointer;display:inline-block;height:0;margin-right:12px;margin-top:-3px;transition:transform .2s;vertical-align:middle;width:0}.wpstg-tab-triangle.wpstg-no-icon{border-bottom:0 solid;border-left:0 solid;border-top:0 solid;height:auto;margin-right:2px;vertical-align:auto;width:auto}.wpstg-tab-triangle.wpstg-rotate-90{transform:rotate(90deg)}.wpstg-tab-header:focus{box-shadow:none;color:#444;outline:none}#wpstg-large-files{border:1px dashed #ccc;display:none;font-size:12px;margin-top:20px;padding:10px;position:relative}#wpstg-large-files h3{background:#fff;left:5px;margin:0;padding:0 5px;position:absolute;top:-10px}.wpstg-subdir{display:none;margin-left:20px}.wpstg-subdir.wpstg-push{display:block;margin-left:20px}.wpstg-dir a.disabled{color:#888;cursor:default;text-decoration:none}.wpstg-check-subdirs{display:inline-block;margin-left:10px}.wpstg-notice-alert{background-color:#e01e5a;color:#fff}.wpstg-notice--white,.wpstg-notice-alert{display:block;margin-top:10px;max-width:600px;padding:20px}.wpstg-notice--white{background-color:#fff}.wpstg-notice-alert a,.wpstg-notice-alert h3{color:#fff}.wpstg-header{border-bottom:1px solid #dfdfdf;clear:both;font-size:19px;font-weight:400;line-height:1.6em;padding-top:10px}#wpstg-clone-label{font-size:14px;font-weight:700}.wpstg-log-details{background-color:#000;border:1px solid #fff;color:silver;font-family:monospace;font-size:12px;height:300px;line-height:15px;margin-top:15px;max-width:650px;overflow:scroll;padding:3px;white-space:nowrap}#wpstg-finished-result{display:none}#wpstg-remove-cloning{background:#ff3428;border-color:#e72f24;margin-top:5px}#wpstg-success-notice{background-color:#fff;border:1px solid #ccc;margin-top:20px;max-width:900px;padding:10px}.wpstg_beta_notice{margin-bottom:20px}.wpstg-sysinfo{height:700px;width:700px}.wpstg-form-table .col-title label{font-weight:600}.wpstg-form-table td:first-child{width:30%}.wpstg-share-button-container{margin:5px 0}.wpstg-share-button-container p{margin:0 0 10px}.wpstg-share-button{display:inline-block}.wpstg-share-button a{text-decoration:none}.wpstg-share-button .wpstg-share{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;color:#fff;display:inline;font-family:sans-serif;font-size:12px;font-weight:700;padding:4px 8px;text-align:center;text-decoration:none}.wpstg-share-button-twitter .wpstg-share{background-color:#00abf0}.wpstg-share-button-facebook .wpstg-share{background-color:#3b5998}.wpstg-share-button-googleplus .wpstg-share{background-color:#f53424}.wpstg-share-button-facebook .share:active,.wpstg-share-button-googleplus .share:active,.wpstg-share-button-twitter .share:active{background-color:#353535}#wpstg-check-space{margin-left:8px}#wpstg-welcome li{font-size:18px;line-height:29px;list-style:none!important;padding-left:23px;position:relative}#wpstg-welcome{background-color:#fff;margin-right:20px;margin-top:20px}.wpstg-heading-pro{font-weight:700}.wpstg-h2{font-size:30px;line-height:2.5rem;margin-bottom:1.2rem;margin-top:0}#wpstg-welcome li:before{background:url(data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%2377B227%22%20d%3D%22M1671%20566q0%2040%2D28%2068l%2D724%20724%2D136%20136q%2D28%2028%2D68%2028t%2D68%2D28l%2D136%2D136%2D362%2D362q%2D28%2D28%2D28%2D68t28%2D68l136%2D136q28%2D28%2068%2D28t68%2028l294%20295%20656%2D657q28%2D28%2068%2D28t68%2028l136%20136q28%2028%2028%2068z%22%2F%3E%3C%2Fsvg%3E) left .4em no-repeat;background-size:contain;color:#77b227;content:"";height:100%;left:0;position:absolute;top:-2px;width:1em}.wpstg-h1{font-size:2.5em;letter-spacing:normal;line-height:3.68rem;margin-bottom:1.35rem}.wpstg--swal2-content h1{color:#444}#wpstg-welcome h2{margin:0 0 15px}#wpstg-welcome .wpstg-footer{clear:both;font-style:italic;margin-top:20px}#wpstg-footer{clear:both;margin-right:10px;margin-top:20px;padding-top:50px}#wpstg-footer a{text-decoration:none}#wpstg-footer li{list-style:circle;margin-bottom:2px}#wpstg-footer ul{margin-left:15px;margin-top:0}.wpstg-footer--title{margin-left:15px}.wpstg-staging-info{color:#3e3e3e;font-size:12px;margin-top:8px}.wpstg-staging-info a{color:#3e3e3e}.wpstg-staging-info li{margin-bottom:2px}.wpstg-bold{font-weight:600}#wpstg-processing-status{float:left;font-size:13px;font-weight:400;margin-top:5px}#wpstg-processing-timer{float:right;font-size:13px;font-weight:400;margin-top:5px}#wpstg-report-issue-button{background-color:#fff;border:1px solid #e01e5a;color:#e01e5a;margin-left:50px}#wpstg-report-issue-button:hover{background-color:#dc2b62;color:#fff}.wpstg-blue-primary{-webkit-appearance:none;background:#25a1f0;border:1px solid #2188c9;border-radius:3px;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-size:13px;height:28px;margin:0;padding:0 10px 1px;text-decoration:none;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799;white-space:nowrap}.wpstg-blue-primary:hover{background-color:#259be6}.wpstg-report-issue-form{background-color:#fff;border:1px solid #e8e8e8;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;display:none;padding:15px 15px 10px;position:absolute;right:0;top:35px;width:300px;z-index:999}@media (max-width:600px){.wpstg-report-issue-form{position:relative}}.wpstg-report-show{display:block}.wpstg-field input[type=text],.wpstg-field textarea{font-weight:400;line-height:1.4;margin-bottom:4px;width:100%}.wpstg-report-email,.wpstg-report-hosting-provider{border-radius:3px;font-size:.8rem;font-weight:400;height:2.3rem;line-height:2.3rem;margin-bottom:4px;padding:0 10px;width:100%}.wpstg-report-description{border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.wpstg-report-privacy-policy{font-size:12px;margin-bottom:15px}#wpstg-report-cancel{float:right;font-weight:700;margin-right:5px}#wpstg-success-button{font-weight:700}.wpstg-message{background-color:#f5e0de;border-radius:3px;box-sizing:border-box;-moz-box-sizing:border-box;color:rgba(0,0,0,.6);height:auto;margin:10px 0;min-height:18px;padding:6px 10px;position:relative}.wpstg-message.wpstg-error-message{background-color:#f5e0de;color:#b65147;font-size:12px}.wpstg-message.wpstg-success-message{background-color:#d7f8e0;color:#515151}.wpstg-message p{font-size:13px;margin:3px 0}.wpstg-warning{background-color:#ffb804;color:#fff;display:block;margin:10px 10px 10px 0;padding:10px}.wpstg-warning a{color:#fff;font-weight:700;text-decoration:underline}.wpstg-error{background-color:#e01e5a!important;border-color:transparent!important;box-shadow:none!important;color:#fff;display:block;margin:10px 10px 10px 0!important;padding:10px!important}.wpstg-error a{color:#fff;font-weight:700;text-decoration:underline}#wpstg-resume-cloning{display:none}#wpstg-external-db th{text-align:left;width:120px}#wpstg-db-connect{font-weight:400}#wpstg-db-status{border:1px solid transparent;border-radius:4px;display:block;margin-bottom:20px;margin-top:5px;padding:5px;text-align:center;text-decoration:none}.wpstg-text-field>#wpstg-db-status{margin-left:150px;margin-top:8px;min-width:300px}.wpstg-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.wpstg-failed{background-color:#f2dede;border-color:#ebccd1;color:#a94442}#wpstg_select_tables_cloning{font-size:13px;height:600px}#wpstg-update-notify{background-color:#e01e5a;color:#fff;font-size:14px;line-height:normal;padding:10px}#wpstg-update-notify a{color:#fff;font-weight:700}.wpstg-pointer{cursor:pointer}.wpstg--tab--header{background-color:#fff;border-radius:2px;box-shadow:0 0 1px rgba(0,0,0,.125),0 1px 3px rgba(0,0,0,.02);color:#3e3e3e;position:relative;transition:border-color .2s ease-in-out}.wpstg--tab--header ul{display:flex}.wpstg--tab--header ul li{margin-bottom:0;margin-right:1em}.wpstg--tab--header ul li:last-child{margin-right:0}.wpstg--tab--header a{color:#c4c4c4;cursor:pointer;display:inline-block;font-size:18px;min-width:150px;padding:1em 1.25em 9px;text-align:center}.wpstg--tab--header a.wpstg--tab--active,.wpstg--tab--header a:hover{border-bottom:.4em solid #25a1f0;color:#25a1f0}.wpstg--tab--header a:hover{background-color:#fefefe}.wpstg--tab--content{display:none}.wpstg--tab--active{display:block}.wpstg--text--strong,.wpstg--text--strong *{font-weight:700!important}.wpstg--text--danger{color:#a94442}.wpstg--tooltip{border-bottom:1px dotted #000;display:inline-block;margin-left:10px;position:relative}.wpstg--tooltip .wpstg--tooltiptext{background-color:#fff;border-radius:3px;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23);-moz-box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23);box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23);color:#505050;padding:12px;position:absolute;text-align:left;visibility:hidden;width:300px;z-index:1}.wpstg--tooltiptext-backups{left:-150%;margin-left:-56px;margin-top:4px;top:100%;width:120px}.wpstg--tooltip.wpstg--exclude-rules--tooltip{border-bottom:0 solid transparent}.wpstg--tooltip.wpstg--exclude-rules--tooltip>.wpstg--tooltiptext{margin-left:-150px;margin-top:0}.wpstg--tooltip .wpstg--tooltiptext-backups:after{border:5px solid transparent;border-bottom-color:#fff;bottom:100%;content:" ";left:50%;margin-left:25px;position:absolute}.wpstg--tooltip .wpstg--tooltiptext.has-top-arrow{margin-top:6px}.wpstg--tooltip .wpstg--tooltiptext.has-top-arrow:after{border:5px solid transparent;border-bottom-color:#fff;bottom:100%;content:" ";left:50%;margin-left:-18px;position:absolute}.wpstg--snaphot-restore-table tr{line-height:12px}.wpstg-beta-notice{background-color:#b0e8b0;border-radius:3px;margin-bottom:20px;padding:7px}#wpstg-backup-name{font-size:1.875em;font-weight:600}#wpstg_select_tables_cloning option:checked{-webkit-appearance:menulist-button;background-image:linear-gradient(0deg,#1e90ff,#1e90ff)}.wpstg--btn--cancel{color:#fff;font-size:16px;height:auto;line-height:normal;margin-bottom:1.5em;padding:.5em}.wpstg--btn--cancel,.wpstg--btn--cancel:hover{background:#ff3428;border-color:#e72f24}.wpstg--process--content>.wpstg--swal2-html-container{padding:4em 2em!important}.wpstg--modal--error--logs,.wpstg--modal--process--logs{background:#fff;border:1px solid #a8a8a8;border-radius:3px;display:none;height:300px;margin-top:1em;overflow:auto;padding-left:10px;padding-top:10px;text-align:justify}.wpstg--modal--error--logs{height:auto;max-height:300px}.wpstg--modal--process--logs p{font-size:12px;white-space:nowrap}.wpstg--modal--process--logs p.wpstg--modal--process--msg--info{color:#222}.wpstg--modal--process--logs p.wpstg--modal--process--msg--debug{color:#757575}.wpstg--modal--process--title{color:#565656;margin:.25em 0}.wpstg--modal--process--subtitle{color:#565656;margin:.5em 0}.wpstg--modal--error--logs>p{color:#222;font-size:14px;text-align:left}.wpstg--modal--error--logs p,.wpstg--modal--process--logs p{margin:0 0 2px}.wpstg--modal--process--msg--critical,.wpstg--modal--process--msg--error{color:#e01e5a}.wpstg--modal--process--msg--warning{color:#ff8c00}.wpstg--modal--process--msg-found{color:#e01e5a;font-size:16px;font-weight:700}.wpstg--modal--delete{color:#565656;margin-top:8px;text-align:left}.wpstg-swal-popup .wpstg--swal2-cancel.wpstg--btn--cancel{margin-bottom:0;text-shadow:none!important}.wpstg-swal-popup .wpstg-loader{display:inline-block!important}.wpstg--modal--process--generic-problem{border-left:5px solid #e01e5a;display:none;margin:.5em 0}.wpstg--modal--process--logs--tail{background:none;border:none;color:#565656;cursor:pointer;font-size:16px}.wpstg--modal--backup--import--upload--title{color:#565656}.wpstg--modal--backup--import--configure,.wpstg--modal--backup--import--upload--container input[type=file],.wpstg--modal--backup--import--upload--status{display:none}#wpstg--backups--import--file-list{font-size:14px;font-weight:700}#wpstg--backups--import--file-list-empty{color:#e01e5a}.wpstg--modal--backup--import--filesystem label{font-size:14px}.wpstg--modal--backup--import--filesystem button{margin-bottom:20px}.wpstg--modal--backup--import--upload{color:#505050;min-height:30px;position:relative}.wpstg--modal--backup--import--upload--container{background-color:#f4fbff;border:3.5px dashed #dedede;border-radius:10px;margin:.5em;min-height:130px;padding:1em .5em;position:relative;transition:background-color .3s ease,color .3s ease}.wpstg--modal--backup--import--upload--container.wpstg--has-dragover span.wpstg--drop{display:inline-flex}.wpstg--modal--backup--import--upload--container input[type=file]{display:none}.wpstg--modal--backup--import--upload--container img{align-self:center;border:none;margin-top:10px;width:4em}.wpstg--modal--backup--import--upload--container span{margin-top:1em}.wpstg--backup--import--options>button{align-self:center;height:auto;line-height:normal;margin-top:1em;padding:1em;width:185px}.wpstg--backup--import--options{display:flex;justify-content:center;position:relative}.wpstg--backup--import--options ul{display:none}.wpstg--backup--import--options.wpstg--show-options ul{background:#25a1f0;border-color:#2188c9;border-radius:0 0 3px 3px;border-width:1px;box-sizing:border-box;display:block;margin:54px 0 0;padding:0;position:absolute;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799;width:185px}.wpstg--backup--import--options.wpstg--show-options ul li{border-bottom:.1em solid #25a1f0;margin:0}.wpstg--backup--import--options.wpstg--show-options ul li:hover{background-color:#25a1f0}.wpstg--backup--import--options.wpstg--show-options ul li:last-child{border-bottom:none}.wpstg--backup--import--options ul li button{background:none;border:none;color:#fff;cursor:pointer;height:40px;line-height:40px;margin:0;width:100%}.wpstg--backup--import--options ul li button:hover{background-color:#259be6}.wpstg--modal--backup--import--search-replace--info{display:flex;flex-direction:row;margin:1em 0}.wpstg--modal--backup--import--info p{margin:0;text-align:left}.wpstg--modal--backup--import--search-replace--wrapper button{align-self:center}.wpstg--import--advanced-options--button{border:0;border-radius:3px;cursor:pointer;font-size:18px;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799}.wpstg--modal--backup--import--search-replace--new{background-color:#25a1f0;color:#fff}.wpstg--modal--backup--import--search-replace--remove{background-color:#25a1f0;color:#fff;height:22px;margin-left:5px;width:22px}.wpstg--modal--backup--import--search-replace--input-group:first-child button{display:none}.wpstg--modal--backup--import--search-replace--input--container{display:flex;flex:1;flex-direction:column}.wpstg--modal--backup--import--search-replace--input-group{border-bottom:6px solid #f1f1f1;margin-bottom:10px;width:100%}.wpstg--modal--backup--import--search-replace--input-group input{border:1px solid #dedede;border-radius:3px;color:#666;display:inline-block;line-height:10px;margin-bottom:12px;min-width:250px;padding:8px;width:calc(50% - 20px)}.wpstg--modal--import--upload--process{align-items:center;color:#333;display:none;height:30px;justify-content:center;left:0;margin-bottom:20px;margin-top:20px;overflow:hidden;position:relative;text-indent:1em;top:0;white-space:nowrap;width:100%}.wpstg--modal--import--upload--progress{background:#98d452;border-radius:4px;color:#fff;height:100%;left:0;position:absolute;top:0}.wpstg--modal--import--upload--progress--title{z-index:9}.wpstg-fieldset:disabled{border-top:1px solid #fff;margin-top:20px;opacity:.8}.wpstg-fieldset{padding-left:20px}.wpstg-dark-alert{background-color:#0e86d9;color:#fff;font-weight:700;margin-top:0;padding:15px}.wpstg-dark-alert .wpstg-button--cta-red{margin-left:10px}.wpstg-form-group{align-items:center;display:block;margin-bottom:8px;width:100%}.wpstg-form-group>label{display:block;font-weight:700}.wpstg-text-field>input{display:block;line-height:1.5;width:300px}.wpstg-text-field>.wpstg-code-segment{margin-top:4px;min-width:300px}.wpstg-form-group>.wpstg-checkbox{position:relative}.wpstg-form-group>.wpstg-checkbox>input[type=checkbox]{left:150px}.wpstg-ml-4{margin-left:4px}#wpstg-advanced-settings hr{margin:20px 0}.wpstg-form-row{display:block}.wpstg-form-row input,.wpstg-form-row label{display:table-cell;margin-bottom:3px;margin-top:3px;padding-left:5px;padding-right:5px}.wpstg-form-row input{width:400px}.wpstg-form-row label{font-weight:700;white-space:nowrap;width:1px}#wpstg-db-connect-output #wpstg-db-status{width:390px}.wpstg-fs-14{font-size:14px}.wpstg-code-segment{display:block}.wpstg-form-group>.wpstg-checkbox{min-width:100%;width:100%}.wpstg-form-group>.wpstg-checkbox>input[type=checkbox]{margin-left:10px}@media only screen and (max-width:768px){.wpstg-form-group>label{min-width:auto;width:auto}.wpstg-text-field>input{width:100%}.wpstg-text-field>.wpstg-code-segment{margin-left:0;min-width:100%}.wpstg-tab-section{max-width:450px;width:calc(100vw - 60px)}}.wpstg-rounded{border-radius:3px}.wpstg-white-border{border:1px solid #fff!important}.wpstg-m-0{margin:0}.wpstg-mt-10px,.wpstg-my-10px{margin-top:10px!important}.wpstg-my-10px{margin-bottom:10px!important}.wpstg-w-100{width:100%}.wpstg-box-shadow{box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.wpstg-float-left{float:left}.wpstg-bold-text{font-weight:700}.wpstg-warning.notice{border-left:4px solid #ffba00}.wpstg-confirmation-label{background-color:#5b9dd9;border-radius:3px;color:#fff;padding:2px}.wpstg-my-6px{margin-bottom:6px;margin-top:6px}.wpstg-mb-10px{margin-bottom:10px}.wpstg-clear-both{clear:both}.wpstg-font-italic{font-style:italic}.wpstg-mt-20px{margin-top:20px}.wpstg-welcome-container{border:2px solid #fff;margin-bottom:20px;padding:20px}.wpstg-ml-30px{margin-left:30px}.wpstg-text-center{text-align:center}.wpstg-feedback-link{text-decoration:none}.wpstg-feedback-span{display:block;margin-bottom:3px}#wpstg-confirm-backup-restore-data{margin:40px;text-align:left}#wpstg-confirm-backup-restore-wrapper{margin:0 30px 30px}#wpstg-confirm-backup-restore-wrapper h3{color:#e01e5a}#wpstg-progress-backup,#wpstg-progress-db{background-color:#3fa5ee}#wpstg-progress-files.wpstg-pro,#wpstg-progress-sr{background-color:#3c9ee4}#wpstg-progress-data,#wpstg-progress-dirs{background-color:#3a96d7}#wpstg-progress-files:not(.wpstg-pro),#wpstg-progress-finishing{background-color:#378cc9}.wpstg-issue-resubmit-confirmation.wpstg--swal2-container,.wpstg-swal2-container.wpstg--swal2-container{z-index:10500}.wpstg-swal2-container.wpstg-swal2-loading .wpstg--swal2-actions,.wpstg-swal2-container.wpstg-swal2-loading .wpstg--swal2-header{display:none}body.toplevel_page_wpstg_backup .wpstg--swal2-container .wpstg--swal2-content,body.toplevel_page_wpstg_clone .wpstg--swal2-container .wpstg--swal2-content{z-index:2}.toplevel_page_wpstg_clone #swal2-content h2{color:#565656}.toplevel_page_wpstg_clone #swal2-content{line-height:1.5em}div#exportUploadsWithoutDatabaseWarning{background-color:#fafafa;border:1px solid #e3e3e3;border-radius:5px;font-size:.9rem;font-style:italic;margin:10px;padding:10px;text-align:center}.wpstg-advanced-options-dropdown-wrapper{display:none;margin-top:20px}.wpstg--modal--backup--import--search-replace--wrapper{margin-top:20px;text-align:left}.wpstg--modal--backup--import--search-replace--new--wrapper{text-align:center}.wpstg-import-backup-contains li{display:inline-block}.wpstg-import-backup-contains li .wpstg-backups-contains{background-color:#e3e3e3;border:1px solid #c2c2c2;border-radius:3px;color:#979797;font-size:17px;height:17px;width:17px}.wpstg-import-backup-contains.wpstg-listing-single-backup li .wpstg-backups-contains{background-color:#fff;border:1px solid #c2c2c2;padding:2px}.wpstg-import-backup-contains.wpstg-listing-single-backup li .wpstg-backups-contains>.wpstg--dashicons{filter:invert(50%)}.wpstg-import-backup-contains .wpstg--tooltiptext{font-size:x-small;left:-25px;padding:5px;text-align:center;width:50px}.wpstg-import-backup-contains-title,ul.wpstg-import-backup-contains{display:inline-block}.wpstg-import-backup-name{display:inline-block;font-weight:700}.wpstg-backup-more-info-toggle{cursor:pointer;display:inline-block;font-size:x-small;font-style:italic}.wpstg-backup-more-info-toggle::selection{background:none}ul.wpstg-import-backup-more-info{background-color:#f6f6f6;border:1px solid #878787;border-radius:3px;cursor:pointer;font-size:14px;margin-bottom:30px;margin-top:10px;padding:7px;text-align:left}ul.wpstg-import-backup-more-info:hover{background-color:#def2ff;border:1px solid #25a1f0}ul.wpstg-import-backup-more-info li{height:20px}.wpstg-backup-list{max-width:800px}.wpstg-backup-list h3{color:#3e3e3e}.wpstg-backup-list ul ul{margin-block-end:1em;margin-block-start:1em}.wpstg-push-confirmation-message{font-size:15px;text-align:justify}.wpstg-settings-row{padding-bottom:10px;padding-top:10px}.wpstg-settings-title{font-weight:600}.wpstg-settings-form-group{align-items:center;display:flex}.wpstg-settings-form-group>.wpstg-settings-message{margin:7px 0 0;padding:0;width:30%}.wpstg-excluded-filters-container{margin-bottom:10px;margin-top:10px;max-width:100%;padding:0;width:100%}.wpstg-excluded-filters-container>table{border-collapse:collapse;border-color:transparent;width:100%}.wpstg-excluded-filters-container td{height:20px;padding-bottom:4px;padding-top:4px}.wpstg-excluded-filters-container h4{margin:0}.wpstg-exclude-filters-foot{display:flex;justify-content:flex-start;padding:0}.wpstg-exclude-filter-dropdown>button:hover{background:#135e96;border:1px solid #135e96}.wpstg-exclude-filter-dropdown>.wpstg-dropdown-menu{width:128px}.wpstg-remove-exclude-rule{background-color:#e01e5a;border:1px solid #e01e5a;border-radius:10px;box-shadow:none;color:#fff!important;cursor:pointer;display:inline-flex;font-size:24px;font-weight:400;height:20px;justify-content:center;line-height:.7;margin-top:5px;outline:none;padding:0;width:20px}.wpstg-remove-exclude-rule:hover{background-color:#e01e5a;border-color:#e01e5a}.wpstg-code-block{background:#f8f8f8;border-radius:2px;font-size:1.2em;margin-top:4px}.wpstg-rule-info{background:#f8f8f8!important}code.wpstg-code{background:#fff;border:1px solid #aaa;color:#e01e5a;display:inline-block;font-size:11px;margin-bottom:1px;padding:2px 4px}.wpstg-exclusion-rule-info{align-items:center;background-color:#ffc107;border:1px solid #ffc107;border-radius:7px;box-shadow:none;color:#fff!important;display:inline-flex;font-size:14px;font-weight:400;height:14px;justify-content:center;outline:none;padding:0;vertical-align:middle;width:14px}.wpstg-exclusion-rule-info:hover{background-color:#ffba0c;border:1px solid #ffba0c}.wpstg-exclude-rule-input{background-color:#fff;border:1px solid #bbb;border-radius:0!important;box-shadow:none;color:#222;display:inline-block;font-size:12px!important;font-weight:400;line-height:1.5;margin-left:4px;margin-top:4px;min-height:24px!important;outline:none!important;padding:2px 6px;transition:all .3s cubic-bezier(.25,.8,.25,1);vertical-align:baseline!important;width:135px}.wpstg-excluded-filters-container tbody>tr:last-child .wpstg-exclude-rule-input{margin-bottom:4px}.wpstg-exclude-rule-input:hover{border:1px solid #999}.wpstg-exclude-rule-input:focus{border:1px solid #25a0f1!important;box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)!important}.wpstg-file-size-exclude-select,.wpstg-path-exclude-select{width:135px}.wpstg-file-size-exclude-select-small{width:52px}.wpstg-file-size-exclude-input{width:75px}.wpstg-staging-option-title{margin:15px 0 0}.wpstg-swal-push-container.wpstg--swal2-container{z-index:9995}#wpstg-scanning-files{padding-bottom:5px}#wpstg-scanning-db.wpstg-tab-section,#wpstg-scanning-files.wpstg-tab-section{padding-top:10px}.wpstg-reset-excludes-container{margin:10px 0}.wpstg-swal2-ajax-loader{align-items:center;display:flex;height:150px;justify-content:center;overflow:hidden;width:100%}@keyframes wpstg-loading-icon-anim{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.wpstg-swal2-ajax-loader>img{animation:wpstg-loading-icon-anim 1s linear infinite;-webkit-animation:wpstg-loading-icon-anim 1s linear infinite;height:64px;width:64px}.wpstg-swal2-container .wpstg-tab-section{width:auto!important}#wpstg-no-staging-site-results{margin-top:10px;max-width:375px}li#wpstg-backup-no-results{max-width:500px}#wpstg-no-staging-site-results div,li#wpstg-backup-no-results div{display:inline-block;text-align:center}#wpstg-no-staging-site-results .wpstg--dashicons,li#wpstg-backup-no-results .wpstg--dashicons{filter:invert(50%);margin-top:1px;position:absolute}#wpstg-no-staging-site-results .no-staging-site-found-text,li#wpstg-backup-no-results .no-backups-found-text{color:#5d5d5d;margin-left:20px}@media only screen and (max-width:680px){#wpstg-no-staging-site-results div,li#wpstg-backup-no-results div{width:100%}}#wpstg--modal--backup--download-inner p.wpstg-download-modal-text{color:#565656;font-size:16px}#wpstg--modal--backup--download-inner h2{color:#565656}.wpstg-backup-restore-contains-database,.wpstg-backup-restore-contains-files{display:none}.wpstg-green-button{background:#8bc34a;border:1px solid #78a93f;color:#fff;text-shadow:0 -1px 1px #78a93f,1px 0 1px #78a93f,0 1px 1px #40c921,-1px 0 1px #78a93f}.wpstg-green-button:hover{background:#78a93f}.wpstg-is-dir-loading{display:none;margin-left:8px;margin-top:-2px;position:absolute}.wpstg-ml-8px{margin-left:8px}.wpstg-mb-8px{margin-bottom:8px}.wpstg-btn-danger{background-color:#e01e5a;border:1px solid #e01e5a;color:#fff;text-shadow:none}.wpstg-btn-danger:hover{background:#c0194d;box-shadow:0 1px 4px rgba(0,0,0,.3)}.wpstg-swal2-container.wpstg-swal2-loading>.wpstg--swal2-modal{height:200px}.wpstg-reset-confirmation.wpstg-swal2-container:not(.wpstg-swal2-loading)>.wpstg--swal2-modal{max-width:480px}.wpstg-reset-confirmation.wpstg-swal2-container .wpstg--swal2-header{display:none}.wpstg-reset-confirmation.wpstg-swal2-container .wpstg--swal2-content{height:auto}.wpstg-reset-confirmation.wpstg-swal2-container>.wpstg--swal2-modal>.wpstg--swal2-content .wpstg-tabs-wrapper{height:auto!important;overflow-y:auto}.wpstg-reset-confirmation.wpstg-swal2-container>.wpstg--swal2-modal>.wpstg--swal2-content{font-size:13px}.wpstg-reset-confirmation.wpstg-swal2-container>.wpstg--swal2-modal>.wpstg--swal2-content .wpstg-dir{margin-bottom:4px}.wpstg-reset-confirmation.wpstg-swal2-container>.wpstg--swal2-modal>.wpstg--swal2-content .wpstg-subdir{margin-top:4px}.wpstg-reset-confirmation.wpstg-swal2-container.has-collapsible-open .wpstg--swal2-modal{height:calc(100vh - 70px)}.wpstg-reset-confirmation.wpstg-swal2-container.has-collapsible-open>.wpstg--swal2-modal>.wpstg--swal2-content .wpstg-tabs-wrapper{height:calc(100vh - 350px)!important}.wpstg--swal2-actions.wpstg--modal--actions>button{font-weight:500;margin-left:4px;margin-right:4px;min-width:80px;text-shadow:none;text-transform:uppercase}.wpstg-swal-popup{max-width:1200px!important}.wpstg-swal-popup.wpstg-push-finished .wpstg--swal2-title{color:#a8a8a8}.wpstg-swal-popup.wpstg-push-finished .wpstg--swal2-content{color:#a8a8a8;margin-top:8px}.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step,.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step-line,.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step.wpstg--swal2-active-progress-step{background:#25a1f0}.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step-line{width:2.75em}.wpstg--dashicons{height:16px;width:16px}.wpstg--dashicons.wpstg-dashicons-grey{filter:invert(20%)}.wpstg--dashicons.wpstg-dashicons-19{height:19px;width:19px}.wpstg--dashicons.wpstg-dashicons-21{height:21px;width:21px}#wpstg--tab--backup #wpstg-step-1{align-items:center;display:flex}#wpstg--tab--backup #wpstg-step-1 .wpstg--tooltip,.wpstg-advanced-options .wpstg--tooltip{align-items:center;border-bottom:0 solid transparent;display:inline-flex}#wpstg--tab--backup #wpstg-step-1 .wpstg--tooltip{align-items:center;border-bottom:0 solid transparent;display:flex}.wpstg--tooltip .wpstg--tooltiptext-backups:after{left:calc(20% + 2px)}.wpstg-listing-single-backup .wpstg--dashicons{height:17px;width:17px}.wpstg-100-width{width:100px}.wpstg-caret{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid;cursor:pointer;display:inline-block;height:0;margin-left:2px;transition:transform .2s;vertical-align:middle;width:0}.wpstg-caret.wpstg-caret-up{transform:rotate(-180deg)}.wpstg-advanced-options-site label{display:block;font-size:16px;margin:.5em 0}#wpstg-confirm-backup-restore-data{font-size:18px;margin:30px 0 0}body.toplevel_page_wpstg_backup .wpstg--swal2-container.wpstg--swal2-backdrop-show,body.toplevel_page_wpstg_clone .wpstg--swal2-container.wpstg--swal2-backdrop-show{background:rgba(0,0,0,.6);z-index:9995}.wpstg-swal-popup.wpstg--swal2-popup{border-radius:8px;color:#565656;font-family:Verdana,Geneva,Tahoma,sans-serif;padding:24px;z-index:9999}.wpstg-swal-popup .wpstg--swal2-title{color:#565656;font-size:22px}.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-title{align-self:flex-start;margin-bottom:0;text-align:left}.wpstg-swal-popup .wpstg--swal2-close{right:8px;top:8px;z-index:5}.wpstg-swal-popup .wpstg--swal2-close:focus{outline:none}.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-actions{justify-content:flex-end}.wpstg-swal-popup .wpstg--swal2-actions>button{border:0;border-radius:4px;font-size:15px;font-weight:900;height:40px;line-height:normal;min-width:100px;padding:10px 12px;text-shadow:none;text-transform:capitalize}.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-actions>button{margin-left:8px}.wpstg-swal-popup .wpstg--swal2-actions>button.wpstg--swal2-cancel{background:#fff;border:1px solid rgba(29,28,29,.3);color:#1d1c1d;font-weight:500;text-shadow:none;width:100px}.wpstg-swal-popup .wpstg--swal2-actions>button:hover{box-shadow:0 1px 3px 0 rgba(0 0 0 .1)}.wpstg-swal-popup .wpstg--swal2-actions>button.wpstg--swal2-cancel:hover{background:rgba(28,29,28,.04)}#wpstg-backup-name-input{font-size:18px;height:44px}.wpstg-restore-finished-container .wpstg--swal2-title{color:#565656!important}.wpstg-restore-finished-container .wpstg--swal2-content{color:#a8a8a8;margin-top:20px}.wpstg-linear-loader>span[class*=wpstg-linear-loader-item]{animation:wpstg_linear_loader 3s infinite;animation-fill-mode:both;animation-timing-function:cubic-bezier(.03,.615,.995,.415);background:#333;border-radius:100%;display:inline-block;height:6px;margin:12px 2px;width:6px}.wpstg-linear-loader>span.wpstg-linear-loader-item:first-child{animation-delay:1s}.wpstg-linear-loader>span.wpstg-linear-loader-item:nth-child(2){animation-delay:.8s}.wpstg-linear-loader>span.wpstg-linear-loader-item:nth-child(3){animation-delay:.6s}.wpstg-linear-loader>span.wpstg-linear-loader-item:nth-child(4){animation-delay:.4s}.wpstg-linear-loader>span.wpstg-linear-loader-item:nth-child(5){animation-delay:.2s}.wpstg-linear-loader>span.wpstg-linear-loader-item:nth-child(6){animation-delay:0s}@keyframes wpstg_linear_loader{0%{opacity:0;transform:translateX(-30px)}25%{opacity:1}50%{opacity:0;transform:translateX(30px)}to{opacity:0}}.wpstg--modal--backup--import--upload--content{margin:1em auto;padding:.75em}.wpstg--modal--backup--import--upload--content .wpstg-linear-loader{display:none}#wpstg-multisite-disabled .wpstg-clone{width:355px}#wpstg-free-version-backups .wpstg-clone{text-align:center}#wpstg-free-version-backups .wpstg-clone p{font-size:16px}.wpstg-staging-info li .backup-notes{word-break:break-word}.wpstg--modal--import--upload--progress--title small{font-weight:400}#wpstg-report-issue-wrapper{position:relative}#wpstg-report-issue-wrapper .arrow-up{border-bottom:8px solid #fff;border-left:8px solid transparent;border-right:8px solid transparent;height:0;position:absolute;right:40px;top:-8px;width:0}.notice{margin:10px 20px 0 2px}.wpstg--notice{box-shadow:0 1px 1px rgba(0,0,0,.04);margin:20px 20px 20px 0;padding:1px 12px}.wpstg--error a:hover{color:#eee}.wpstg--error,.wpstg--error a{background:#e01e5a;color:#fff}.wpstg-button{border-radius:2px;cursor:pointer;display:inline-block;font-weight:500;outline:0;padding:2px 10px;text-decoration:none;text-transform:uppercase;transition:background-color .1s ease-in}.wpstg-button.wpstg-save{background-color:#1687a7;color:#fff}.wpstg-button.wpstg-save:hover{background-color:#276678}.wpstg-button.wpstg-button-light{animation:background-color .3s;background-color:#f8f8f8;border:1px solid #eee;color:#333}.wpstg-button.wpstg-button-light:hover{background-color:#e0e0e0;border:1px solid #e0e0e0}.wpstg-buttons .spinner{float:none;margin:0 0 0 5px}.wpstg-button.danger{background-color:#e01e5a;border-color:transparent;border-radius:2px;color:#fff;display:inline-block;text-align:center;text-decoration:none;text-transform:inherit}.wpstg-button.danger:hover{background-color:#c0194d}.wpstg-button--big{border-radius:3px;color:#fff;display:inline-block;font-size:16px;margin-top:20px;min-width:170px;padding:10px;text-align:center;text-decoration:none}.wpstg-button--primary{-webkit-appearance:none;border:1px solid rgba(29,28,29,.3);border-radius:2px;box-sizing:border-box;color:#171717;cursor:pointer;display:inline-block;font-size:13px;line-height:2.15384615;margin:0;min-height:30px;padding:0 10px;text-decoration:none;white-space:nowrap}.wpstg-button--primary:hover{background:rgba(28,29,28,.04);color:#000}.wpstg-button--secondary{background-color:transparent;border:1px solid rgba(29,28,29,.3);border-radius:2px;color:#95a5a6;cursor:pointer;display:inline-block;font-weight:500;outline:0;padding:4px 10px 2px;text-decoration:none;transition:background-color .1s ease-in}.wpstg-button--red{background-color:#e01e5a;border-color:#e01e5a;color:#fff}.wpstg-button--red:hover{background-color:#d02358;border-color:#e0255f;color:#fff}.wpstg-button--cta-red{background-color:#fe008f;border-color:#e01e5a;color:#fff}.wpstg-button--cta-red:hover{background-color:#f31391;border-color:#e0255f;color:#fff}.wpstg-button--blue{background-color:#25a0f1;border-color:#25a0f1;color:#fff}.wpstg-button--blue:hover{background-color:#259be6;border-color:#259be6;color:#fff}#wpstg-button-backup-upgrade{font-size:16px}.wpstg-staging-status{color:#e01e5a}#wpstg-push-changes,#wpstg-save-clone-data,#wpstg-start-updating{margin-left:5px}input.wpstg-textbox{border:1px solid #aaa;border-radius:.25rem;font-size:14px;padding:.25rem .5rem}input.wpstg-textbox:focus{border-color:#259be6;-webkit-box-shadow:0 0 0 .1rem hsla(0,0%,86.7%,.35);box-shadow:0 0 0 .1rem hsla(0,0%,86.7%,.35);outline:0}input.wpstg-textbox::placeholder{color:#888}.wpstg--advance-settings--checkbox{align-items:center;display:flex}.wpstg--advance-settings--checkbox>label{display:inline-block;font-size:14px;font-weight:bolder;width:165px}.wpstg--advance-settings--checkbox>.wpstg--tooltip{border-bottom:0 solid transparent;display:inline-block;margin-left:5px;margin-top:5px;position:relative}.wpstg--advance-settings--checkbox>.wpstg--tooltip>.wpstg--tooltiptext{left:-150px;top:18px}div#wpstg-restore-wait{align-items:center;background:#fff;display:none;flex-direction:column;height:100vh;justify-content:center;left:0;position:fixed;text-align:center;top:0;width:100vw;z-index:99999}div#wpstg-restore-wait .wpstg-title{font-weight:700}div#wpstg-restore-wait div{font-size:16px;margin-top:12px}.resumable-browse{cursor:pointer}.resumable-browse a{text-decoration:underline}.wpstg-upload-text{font-weight:600}.wpstg--modal--backup--import--upload--container.dragover{background-color:#94dc96;color:#fff;transition:background-color .7s}.wpstg--modal--backup--import--upload--container.dragover *{pointer-events:none}.wpstg--modal--backup--import--upload--container.dragover .wpstg-upload-text{display:none}.wpstg--modal--backup--import--upload--container.dragover .wpstg-dragover-text{display:block}.wpstg--modal--backup--import--upload--container .wpstg-dragover-text{display:none}#wpstg-invalid-license-message,#wpstg-invalid-license-message a{color:#e01e5a;font-weight:500;margin-left:6px}#wpstg-sidebar--banner{max-width:200px}@media screen and (max-width:1234px){.wpstg-h2{font-size:24px}#wpstg-welcome li{font-size:14px}}.wpstg-exclamation{background-color:#e01e5a;border-radius:100%;color:#fff;display:inline-block;font-weight:700;height:20px;margin:6px;text-align:center;width:20px}.wpstg--tab--contents{padding-top:1px}.wpstg-swal-show.wpstg--swal2-show{-webkit-animation:wpstg-swal-show .2s!important;animation:wpstg-swal-show .2s!important}@-webkit-keyframes wpstg-swal-show{0%{transform:scale(.3)}to{transform:scale(1)}}@keyframes wpstg-swal-show{0%{transform:scale(.3)}to{transform:scale(1)}}
2
  /*# sourceMappingURL=wpstg-admin.min.css.map */
1
+ .wpstg--violet{color:#9d37ae}.wpstg-border--violet{border:1px solid #9d37ae}.wpstg--red{color:#e01e5a}.wpstg-cta--red{color:#fe008f}.wpstg--blue{color:#24a1f0}.wpstg--darkblue{color:#0e86d9}.wpstg--green{color:#83c11f}.wpstg--grey{color:#3e3e3e}.wpstg--darkgrey{color:#1b1b1b}.wpstg--filter--svg{filter:invert(24%) sepia(11%) saturate(558%) hue-rotate(169deg) brightness(97%) contrast(91%)}body.toplevel_page_wpstg_clone,body.wp-staging-pro_page_wpstg-license,body.wp-staging-pro_page_wpstg-settings,body.wp-staging-pro_page_wpstg-tools,body.wp-staging-pro_page_wpstg_backup{background-color:#f3f5f7}#wpstg-tab-container ul{background:#f1f1f1;float:left;list-style:none;margin:0;padding:0}#wpstg-tab-container ul li:first-child.selected-tab{border-top:none}#wpstg-tab-container ul li a.selected-tab{font-weight:700;text-decoration:none}#wpstg-tab-container .row{padding-bottom:12px;padding-top:10px}.wpstg-tabs-container .nav-tab-wrapper{padding:0}#wpstg-tab-container .row label strong,#wpstg-tab-container .row strong{font-weight:700}.wpstg-tabs a{padding:5px}#wpstg-tab-container>ul>li.wpstg-tabs.active{background-color:#fff}#wpstg_settingsgeneral_header .row:nth-child(3),#wpstg_settingsgeneral_header .row:nth-child(4){display:none}#wpstg-tab-container .wpstg-settings-panel{overflow:auto;padding:0 20px 20px}#wpstg-tab-container .wpstg-form-table th{color:#484848;font-size:14px;font-weight:700;line-height:1.3;padding:20px 10px 20px 0;text-align:left;vertical-align:top;width:30%}#wpstg-tab-container .wpstg-form-table tr{border-bottom:1px solid #e7e7e7}#wpstg-tab-container span.description{color:#484848;display:block;font-size:13px;font-style:normal;font-weight:400;margin-top:7px}#wpstg-tab-container .col-title{color:#484848}@media only screen and (max-width:680px){#wpstg-tab-container ul{float:none}#wpstg-tab-container .wpstg-form-table tr>th{width:100%}#wpstg-tab-container span.description{font-size:14px}#wpstg-tab-container .wpstg-form-table tr>td,#wpstg-tab-container .wpstg-form-table tr>th{padding:10px}}#wpstg-tab-container ul li{margin-bottom:0}#wpstg-tab-container ul li a{border-bottom:1px solid #e7e7e7;border-left-style:solid;border-left-width:0;border-right-style:solid;border-right-width:0;border-top:1px solid #fff;color:#0097df;display:block;font-weight:700;padding:10px 4px 10px 14px;text-decoration:none}#wpstg-tab-container ul li a:hover{background-color:#e5e5e5;color:#777}.wpstg-logo{display:block;float:left;font-size:16px;padding-top:20px;width:220px}.wpstg-logo img{max-width:212px}.wpstg-version{color:#9b9b9b;display:block;padding-top:40px}.wpstg_admin .nav-tab{color:#3c3c3c}#wpstg-tab-container table tbody tr:first-child>th>div{font-size:20px}#wpstg-clonepage-wrapper{margin-bottom:20px;width:98%}@media screen and (min-width:1090px){#wpstg-clonepage-wrapper{float:left;margin-bottom:20px}}#wpstg-steps{margin-left:20px;margin-top:0}#wpstg-steps li{color:#444;float:left;line-height:20px;padding-right:10px}.wpstg-step-num{border:1px solid #3e3e3e;border-radius:3px;display:inline-block;height:20px;margin-right:5px;text-align:center;width:20px}.wpstg-current-step{font-weight:700}.wpstg-current-step .wpstg-step-num{background:#3e3e3e;color:#eee}.wpstg-box{margin:10px 0;overflow:hidden;padding:10px}.wpstg-box,.wpstg-clone{position:relative;transition:border-color .2s ease-in-out}.wpstg-clone{background-color:#fff;border-radius:3px;box-shadow:0 0 1px rgba(0,0,0,.125),0 1px 3px rgba(0,0,0,.1);color:#3e3e3e;margin-bottom:10px;padding:16px}.wpstg-clone.active{border-color:#1d94cf}.wpstg-clone-header{align-items:center;display:flex;justify-content:space-between}.wpstg-clone-title{color:#3e3e3e;display:inline-block;font-size:15px;font-weight:700;max-width:300px;text-decoration:none}.wpstg-clone-title:hover{color:#111}.wpstg-clone-actions{display:flex;margin-top:5px}.wpstg-clone-actions .wpstg-dropdown-toggler{background:#25a1f0;border-radius:2px;box-shadow:0 0 1px rgba(0,0,0,.125),0 1px 3px rgba(0,0,0,.2);color:#fff;font-size:14px;padding:6px 10px;text-decoration:none}.wpstg-clone-actions .wpstg-dropdown-toggler:hover{background:#002648;color:#fff}.wpstg-dropdown{position:relative}.wpstg-dropdown>.wpstg-dropdown-menu{background:#fff;border-radius:2px;box-shadow:0 0 1px rgba(0,0,0,.125),0 1px 3px rgba(0,0,0,.2);display:none;flex-direction:column;padding:8px;position:absolute;right:0;top:calc(100% + 4px);width:100px;z-index:1000}.wpstg-dropdown>.wpstg-dropdown-menu.wpstg-menu-dropup{bottom:100%;top:auto;transform:translate3d(0,-3px,0)}.wpstg-dropdown>.wpstg-dropdown-menu.shown{display:flex}.wpstg-clone-action,.wpstg-dropdown-action{border-bottom:1px solid #f3f3f3;border-radius:3px;color:#3e3e3e;padding:6px 8px;position:relative;text-decoration:none;transition:color .2s ease-in-out}.wpstg-clone-action:hover,.wpstg-dropdown-action:hover{background:rgba(0,0,0,.05)}.wpstg-dropdown-action{background:transparent;border:0 solid #000;box-shadow:none;color:#3e3e3e;outline:none}.wpstg-remove-clone:hover{color:#e01e5a}.wpstg-clone-action:last-child{border:none}.wpstg-clone:hover .wpstg-clone-action{display:inline-block}#wpstg-show-error-details:focus,#wpstg-workflow .wpstg-clone-action{box-shadow:none;outline:none}.wpstg-link-btn{background:#45a1c9;color:#fff;display:inline-block;padding:5px 10px;text-decoration:none;transition:all .2s ease-in-out;vertical-align:baseline}.wpstg-link-btn:focus,.wpstg-link-btn:hover{box-shadow:none;color:#fff;outline:none}#wpstg-workflow .wpstg-link-btn:active{vertical-align:baseline}.wpstg-link-btn[disabled]{background:#777!important;border-color:#555!important;pointer-events:none}#wpstg-cancel-cloning,#wpstg-cancel-cloning-update{margin-top:5px}#wpstg-cancel-cloning.success{background:#64dd58;border-color:#54bd4a}#wpstg-error-details,#wpstg-error-wrapper{clear:both;display:none;font-size:13px;padding-top:10px}#wpstg-show-error-details{color:#555;display:inline-block;margin-left:5px;text-decoration:none;transition:color .2s ease-in-out}#wpstg-show-error-details:hover{color:#1d94cf}#wpstg-error-details{border-left:5px solid #e01e5a;padding:10px;width:500px}#wpstg-try-again{display:none}#wpstg-home-link{float:right}.wpstg-loader{content:url(../../img/loading.gif);display:none;margin-top:10px}.wpstg-loader.wpstg-finished{background-color:#00c89a;border-radius:3px;color:#fff;content:"Finished";display:block;margin-top:0;padding:2px 10px}#wpstg-workflow{clear:both;float:left;max-width:800px;min-height:380px;min-width:500px;padding-bottom:20px;padding-right:20px;padding-top:20px;position:relative}#wpstg-sidebar{display:block;float:left;margin-left:10px;max-width:400px}#wpstg-removing-clone.loading:after,#wpstg-workflow.loading:after{background:hsla(0,0%,100%,.7);content:"Loading... may take a while for huge websites";display:block;font-size:20px;height:100%;left:0;padding-top:100px;position:absolute;text-align:center;top:0;width:100%;z-index:99}#wpstg-removing-clone.loading:after{content:"REMOVING"!important}#wpstg-existing-clones,#wpstg-removing-clone{position:relative}#wpstg-existing-clones h3{color:#3e3e3e}#wpstg-removing-clone .wpstg-tab-section{display:block}.wpstg-progress-bar{background-color:#d6d8d7;height:27px;max-width:900px;padding:0}.wpstg-progress{background:#3fa5ee;float:left;overflow:hidden}.wpstg-progress,.wpstg-progress-files{color:#fff;height:100%;line-height:25px;text-align:center;transition:width .6s ease;width:0}.wpstg-progress-files{background:#16b4f0}#wpstg-clone-path.wpstg-error-input,#wpstg-new-clone-id.wpstg-error-input{border:1px solid #e01e5a;box-shadow:0 0 2px rgba(255,66,53,.8)}#wpstg-new-clone-id{margin-left:15px;max-width:100%;width:450px}#wpstg-new-clone{background:#25a1f0;border-color:#2188c9}#wpstg-new-clone:hover{background:#259be6;border-color:#2188c9}#wpstg-clone-path{margin-left:10px;width:350px}.wpstg-error-msg{color:#e01e5a}#wpstg-clone-id-error{background-color:#f0f8ff;display:block;margin:20px;padding:10px}#wpstg-start-cloning+.wpstg-error-msg{display:block;margin-top:5px}.wpstg-size-info{color:#999;font-weight:400;left:2px;position:relative}.wpstg-db-table .wpstg-size-info{top:2px}.wpstg-db-table:hover{background-color:#f0f8ff}#wpstg-workflow #wpstg-start-cloning{margin-left:5px;vertical-align:baseline}.wpstg-tabs-wrapper{margin:10px 0;max-width:640px}#wpstg-path-wrapper{border-bottom:2px dashed #ccc;margin-bottom:10px;padding-bottom:10px}.wpstg-tab-section{border-bottom:1px solid #ddd;border-left:none;border-right:none;display:none;padding:0 36px;width:calc(100% - 72px)}.wpstg-tab-section:after{clear:both;content:"";display:block}.wpstg-tab-header{border-bottom:1px solid #ddd;border-left:none;border-right:none;color:#444;display:block;font-size:16px;font-weight:700;padding:10px;text-decoration:none}.wpstg-tab-triangle{animation:transform .5s;border-bottom:5px solid transparent;border-left:10px solid;border-top:5px solid transparent;cursor:pointer;display:inline-block;height:0;margin-right:12px;margin-top:-3px;transition:transform .2s;vertical-align:middle;width:0}.wpstg-tab-triangle.wpstg-no-icon{border-bottom:0 solid;border-left:0 solid;border-top:0 solid;height:auto;margin-right:2px;vertical-align:auto;width:auto}.wpstg-tab-triangle.wpstg-rotate-90{transform:rotate(90deg)}.wpstg-tab-header:focus{box-shadow:none;color:#444;outline:none}#wpstg-large-files{border:1px dashed #ccc;display:none;font-size:12px;margin-top:20px;padding:10px;position:relative}#wpstg-large-files h3{background:#fff;left:5px;margin:0;padding:0 5px;position:absolute;top:-10px}.wpstg-subdir{display:none;margin-left:20px}.wpstg-subdir.wpstg-push{display:block;margin-left:20px}.wpstg-dir a.disabled{color:#888;cursor:default;text-decoration:none}.wpstg-check-subdirs{display:inline-block;margin-left:10px}.wpstg-notice-alert{background-color:#e01e5a;color:#fff}.wpstg-notice--white,.wpstg-notice-alert{display:block;margin-top:10px;max-width:600px;padding:20px}.wpstg-notice--white{background-color:#fff}.wpstg-notice-alert a,.wpstg-notice-alert h3{color:#fff}.wpstg-header{border-bottom:1px solid #dfdfdf;clear:both;font-size:19px;font-weight:400;line-height:1.6em;padding-top:10px}#wpstg-clone-label{font-size:14px;font-weight:700}.wpstg-log-details{background-color:#000;border:1px solid #fff;color:silver;font-family:monospace;font-size:12px;height:300px;line-height:15px;margin-top:15px;max-width:650px;overflow:scroll;padding:3px;white-space:nowrap}#wpstg-finished-result{display:none}#wpstg-remove-cloning{background:#ff3428;border-color:#e72f24;margin-top:5px}#wpstg-success-notice{background-color:#fff;border:1px solid #ccc;margin-top:20px;max-width:900px;padding:10px}.wpstg_beta_notice{margin-bottom:20px}.wpstg-sysinfo{height:700px;width:700px}.wpstg-form-table .col-title label{font-weight:600}.wpstg-form-table td:first-child{width:30%}.wpstg-share-button-container{margin:5px 0}.wpstg-share-button-container p{margin:0 0 10px}.wpstg-share-button{display:inline-block}.wpstg-share-button a{text-decoration:none}.wpstg-share-button .wpstg-share{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;color:#fff;display:inline;font-family:sans-serif;font-size:12px;font-weight:700;padding:4px 8px;text-align:center;text-decoration:none}.wpstg-share-button-twitter .wpstg-share{background-color:#00abf0}.wpstg-share-button-facebook .wpstg-share{background-color:#3b5998}.wpstg-share-button-googleplus .wpstg-share{background-color:#f53424}.wpstg-share-button-facebook .share:active,.wpstg-share-button-googleplus .share:active,.wpstg-share-button-twitter .share:active{background-color:#353535}#wpstg-check-space{margin-left:8px}#wpstg-welcome li{font-size:18px;line-height:29px;list-style:none!important;padding-left:23px;position:relative}#wpstg-welcome{background-color:#fff;margin-right:20px;margin-top:20px}.wpstg-heading-pro{font-weight:700}.wpstg-h2{font-size:30px;line-height:2.5rem;margin-bottom:1.2rem;margin-top:0}#wpstg-welcome li:before{background:url(data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%2377B227%22%20d%3D%22M1671%20566q0%2040%2D28%2068l%2D724%20724%2D136%20136q%2D28%2028%2D68%2028t%2D68%2D28l%2D136%2D136%2D362%2D362q%2D28%2D28%2D28%2D68t28%2D68l136%2D136q28%2D28%2068%2D28t68%2028l294%20295%20656%2D657q28%2D28%2068%2D28t68%2028l136%20136q28%2028%2028%2068z%22%2F%3E%3C%2Fsvg%3E) left .4em no-repeat;background-size:contain;color:#77b227;content:"";height:100%;left:0;position:absolute;top:-2px;width:1em}.wpstg-h1{font-size:2.5em;letter-spacing:normal;line-height:3.68rem;margin-bottom:1.35rem}.wpstg--swal2-content h1{color:#444}#wpstg-welcome h2{margin:0 0 15px}#wpstg-welcome .wpstg-footer{clear:both;font-style:italic;margin-top:20px}#wpstg-footer{clear:both;margin-right:10px;margin-top:20px;padding-top:50px}#wpstg-footer a{text-decoration:none}#wpstg-footer li{list-style:circle;margin-bottom:2px}#wpstg-footer ul{margin-left:15px;margin-top:0}.wpstg-footer--title{margin-left:15px}.wpstg-staging-info{color:#3e3e3e;font-size:12px;margin-top:8px}.wpstg-staging-info a{color:#3e3e3e}.wpstg-staging-info li{margin-bottom:2px}.wpstg-bold{font-weight:600}#wpstg-processing-status{float:left;font-size:13px;font-weight:400;margin-top:5px}#wpstg-processing-timer{float:right;font-size:13px;font-weight:400;margin-top:5px}#wpstg-report-issue-button{background-color:#fff;border:1px solid #e01e5a;color:#e01e5a;margin-left:50px}#wpstg-report-issue-button:hover{background-color:#dc2b62;color:#fff}.wpstg-blue-primary{-webkit-appearance:none;background:#25a1f0;border:1px solid #2188c9;border-radius:3px;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-size:13px;height:28px;margin:0;padding:0 10px 1px;text-decoration:none;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799;white-space:nowrap}a.wpstg-blue-primary{height:auto;padding:5px 10px}.wpstg-blue-primary:hover{background-color:#259be6}.wpstg-report-issue-form{background-color:#fff;border:1px solid #e8e8e8;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;display:none;padding:15px 15px 10px;position:absolute;right:0;top:35px;width:300px;z-index:999}@media (max-width:600px){.wpstg-report-issue-form{position:relative}}.wpstg-report-show{display:block}.wpstg-field input[type=text],.wpstg-field textarea{font-weight:400;line-height:1.4;margin-bottom:4px;width:100%}.wpstg-report-email,.wpstg-report-hosting-provider{border-radius:3px;font-size:.8rem;font-weight:400;height:2.3rem;line-height:2.3rem;margin-bottom:4px;padding:0 10px;width:100%}.wpstg-report-description{border-radius:3px;font-size:.8rem;padding:6px 10px;resize:none}.wpstg-report-privacy-policy{font-size:12px;margin-bottom:15px}#wpstg-report-cancel{float:right;font-weight:700;margin-right:5px}#wpstg-success-button{font-weight:700}.wpstg-message{background-color:#f5e0de;border-radius:3px;box-sizing:border-box;-moz-box-sizing:border-box;color:rgba(0,0,0,.6);height:auto;margin:10px 0;min-height:18px;padding:6px 10px;position:relative}.wpstg-message.wpstg-error-message{background-color:#f5e0de;color:#b65147;font-size:12px}.wpstg-message.wpstg-success-message{background-color:#d7f8e0;color:#515151}.wpstg-message p{font-size:13px;margin:3px 0}.wpstg-warning{background-color:#ffb804;color:#fff;display:block;margin:10px 10px 10px 0;padding:10px}.wpstg-warning a{color:#fff;font-weight:700;text-decoration:underline}.wpstg-error{background-color:#e01e5a!important;border-color:transparent!important;box-shadow:none!important;color:#fff;display:block;margin:10px 10px 10px 0!important;padding:10px!important}.wpstg-error a{color:#fff;font-weight:700;text-decoration:underline}#wpstg-resume-cloning{display:none}#wpstg-external-db th{text-align:left;width:120px}#wpstg-db-connect{font-weight:400}#wpstg-db-status{border:1px solid transparent;border-radius:4px;display:block;margin-bottom:20px;margin-top:5px;padding:5px;text-align:center;text-decoration:none}.wpstg-text-field>#wpstg-db-status{margin-left:150px;margin-top:8px;min-width:300px}.wpstg-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.wpstg-failed{background-color:#f2dede;border-color:#ebccd1;color:#a94442}#wpstg_select_tables_cloning{font-size:13px;height:600px}#wpstg_select_tables_pushing{font-size:13px;height:400px}#wpstg-update-notify{background-color:#e01e5a;color:#fff;font-size:14px;line-height:normal;padding:10px}#wpstg-update-notify a{color:#fff;font-weight:700}.wpstg-pointer{cursor:pointer}.wpstg--tab--header{background-color:#fff;border-radius:2px;box-shadow:0 0 1px rgba(0,0,0,.125),0 1px 3px rgba(0,0,0,.02);color:#3e3e3e;position:relative;transition:border-color .2s ease-in-out}.wpstg--tab--header ul{display:flex}.wpstg--tab--header ul li{margin-bottom:0;margin-right:1em}.wpstg--tab--header ul li:last-child{margin-right:0}.wpstg--tab--header a{color:#c4c4c4;cursor:pointer;display:inline-block;font-size:18px;min-width:150px;padding:1em 1.25em 9px;text-align:center}.wpstg--tab--header a.wpstg--tab--active,.wpstg--tab--header a:hover{border-bottom:.4em solid #25a1f0;color:#25a1f0}.wpstg--tab--header a:hover{background-color:#fefefe}.wpstg--tab--content{display:none}.wpstg--tab--active{display:block}.wpstg--text--strong,.wpstg--text--strong *{font-weight:700!important}.wpstg--text--danger{color:#a94442}.wpstg--tooltip{border-bottom:1px dotted #000;display:inline-block;margin-left:10px;position:relative}.wpstg--tooltip.wpstg--tooltip-normal{border-bottom:0;margin-left:0}.wpstg--tooltip .wpstg--tooltiptext{background-color:#fff;border-radius:3px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.16);-moz-box-shadow:0 1px 4px rgba(0,0,0,.16);box-shadow:0 1px 4px rgba(0,0,0,.16);color:#505050;padding:12px;position:absolute;text-align:left;visibility:hidden;width:300px;z-index:1}.wpstg--tooltiptext-backups{left:-150%;margin-left:-56px;margin-top:4px;top:100%;width:120px}.wpstg--tooltip.wpstg--exclude-rules--tooltip{border-bottom:0 solid transparent}.wpstg--tooltip.wpstg--exclude-rules--tooltip>.wpstg--tooltiptext{margin-left:-150px;margin-top:0}.wpstg--tooltip .wpstg--tooltiptext-backups:after{border:5px solid transparent;border-bottom-color:#fff;bottom:100%;content:" ";left:50%;margin-left:25px;position:absolute}.wpstg--tooltip .wpstg--tooltiptext.has-top-arrow{margin-top:6px}.wpstg--tooltip .wpstg--tooltiptext.has-top-arrow:after{border:5px solid transparent;border-bottom-color:#fff;bottom:100%;content:" ";left:50%;margin-left:-18px;position:absolute}.wpstg--snaphot-restore-table tr{line-height:12px}.wpstg-beta-notice{background-color:#b0e8b0;border-radius:3px;margin-bottom:20px;padding:7px}#wpstg-backup-name{font-size:1.875em;font-weight:600}#wpstg_select_tables_cloning option:checked,#wpstg_select_tables_pushing option:checked{-webkit-appearance:menulist-button;background-image:linear-gradient(0deg,#1e90ff,#1e90ff)}.wpstg--btn--cancel{color:#fff;font-size:16px;height:auto;line-height:normal;margin-bottom:1.5em;padding:.5em}.wpstg--btn--cancel,.wpstg--btn--cancel:hover{background:#ff3428;border-color:#e72f24}.wpstg--process--content>.wpstg--swal2-html-container{padding:4em 2em!important}.wpstg--modal--error--logs,.wpstg--modal--process--logs{background:#fff;border:1px solid #a8a8a8;border-radius:3px;display:none;height:300px;margin-top:1em;overflow:auto;padding-left:10px;padding-top:10px;text-align:justify}.wpstg--modal--error--logs{height:auto;max-height:300px}.wpstg--modal--process--logs p{font-size:12px;white-space:nowrap}.wpstg--modal--process--logs p.wpstg--modal--process--msg--info{color:#222}.wpstg--modal--process--logs p.wpstg--modal--process--msg--debug{color:#757575}.wpstg--modal--process--title{color:#565656;margin:.25em 0}.wpstg--modal--process--subtitle{color:#565656;margin:.5em 0}.wpstg--modal--error--logs>p{color:#222;font-size:14px;text-align:left}.wpstg--modal--error--logs p,.wpstg--modal--process--logs p{margin:0 0 2px}.wpstg--modal--process--msg--critical,.wpstg--modal--process--msg--error{color:#e01e5a}.wpstg--modal--process--msg--warning{color:#ff8c00}.wpstg--modal--process--msg-found{color:#e01e5a;font-size:16px;font-weight:700}.wpstg--modal--delete{color:#565656;margin-top:8px;text-align:left}.wpstg-swal-popup .wpstg--swal2-cancel.wpstg--btn--cancel{margin-bottom:0;text-shadow:none!important}.wpstg-swal-popup .wpstg-loader{display:inline-block!important}.wpstg--modal--process--generic-problem{border-left:5px solid #e01e5a;display:none;margin:.5em 0}.wpstg--modal--process--logs--tail{background:none;border:none;color:#565656;cursor:pointer;font-size:16px}.wpstg--modal--backup--import--upload--title{color:#565656}.wpstg--modal--backup--import--configure,.wpstg--modal--backup--import--upload--container input[type=file],.wpstg--modal--backup--import--upload--status{display:none}#wpstg--backups--import--file-list{font-size:14px;font-weight:700}#wpstg--backups--import--file-list-empty{color:#e01e5a}.wpstg--modal--backup--import--filesystem label{font-size:14px}.wpstg--modal--backup--import--filesystem button{margin-bottom:20px}.wpstg--modal--backup--import--upload{color:#505050;min-height:30px;position:relative}.wpstg--modal--backup--import--upload--container{background-color:#f4fbff;border:3.5px dashed #dedede;border-radius:10px;margin:.5em;min-height:130px;padding:1em .5em;position:relative;transition:background-color .3s ease,color .3s ease}.wpstg--modal--backup--import--upload--container.wpstg--has-dragover span.wpstg--drop{display:inline-flex}.wpstg--modal--backup--import--upload--container input[type=file]{display:none}.wpstg--modal--backup--import--upload--container img{align-self:center;border:none;margin-top:10px;width:4em}.wpstg--modal--backup--import--upload--container span{margin-top:1em}.wpstg--backup--import--options>button{align-self:center;height:auto;line-height:normal;margin-top:1em;padding:1em;width:185px}.wpstg--backup--import--options{display:flex;justify-content:center;position:relative}.wpstg--backup--import--options ul{display:none}.wpstg--backup--import--options.wpstg--show-options ul{background:#25a1f0;border-color:#2188c9;border-radius:0 0 3px 3px;border-width:1px;box-sizing:border-box;display:block;margin:54px 0 0;padding:0;position:absolute;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799;width:185px}.wpstg--backup--import--options.wpstg--show-options ul li{border-bottom:.1em solid #25a1f0;margin:0}.wpstg--backup--import--options.wpstg--show-options ul li:hover{background-color:#25a1f0}.wpstg--backup--import--options.wpstg--show-options ul li:last-child{border-bottom:none}.wpstg--backup--import--options ul li button{background:none;border:none;color:#fff;cursor:pointer;height:40px;line-height:40px;margin:0;width:100%}.wpstg--backup--import--options ul li button:hover{background-color:#259be6}.wpstg--modal--backup--import--search-replace--info{display:flex;flex-direction:row;margin:1em 0}.wpstg--modal--backup--import--info p{margin:0;text-align:left}.wpstg--modal--backup--import--search-replace--wrapper button{align-self:center}.wpstg--import--advanced-options--button{border:0;border-radius:3px;cursor:pointer;font-size:18px;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799}.wpstg--modal--backup--import--search-replace--new{background-color:#25a1f0;color:#fff}.wpstg--modal--backup--import--search-replace--remove{background-color:#25a1f0;color:#fff;height:22px;margin-left:5px;width:22px}.wpstg--modal--backup--import--search-replace--input-group:first-child button{display:none}.wpstg--modal--backup--import--search-replace--input--container{display:flex;flex:1;flex-direction:column}.wpstg--modal--backup--import--search-replace--input-group{border-bottom:6px solid #f1f1f1;margin-bottom:10px;width:100%}.wpstg--modal--backup--import--search-replace--input-group input{border:1px solid #dedede;border-radius:3px;color:#666;display:inline-block;line-height:10px;margin-bottom:12px;min-width:250px;padding:8px;width:calc(50% - 20px)}.wpstg--modal--import--upload--process{align-items:center;color:#333;display:none;height:30px;justify-content:center;left:0;margin-bottom:20px;margin-top:20px;overflow:hidden;position:relative;text-indent:1em;top:0;white-space:nowrap;width:100%}.wpstg--modal--import--upload--progress{background:#98d452;border-radius:4px;color:#fff;height:100%;left:0;position:absolute;top:0}.wpstg--modal--import--upload--progress--title{z-index:9}.wpstg-fieldset:disabled{border-top:1px solid #fff;margin-top:20px;opacity:.8}.wpstg-fieldset{padding-left:20px}.wpstg-dark-alert{background-color:#0e86d9;color:#fff;font-weight:700;margin-top:0;padding:15px}.wpstg-dark-alert .wpstg-button--cta-red{margin-left:10px}.wpstg-form-group{align-items:center;display:block;margin-bottom:8px;width:100%}.wpstg-form-group>label{display:block;font-weight:700}.wpstg-text-field>input{display:block;line-height:1.5;width:300px}.wpstg-text-field>.wpstg-code-segment{margin-top:4px;min-width:300px}.wpstg-form-group>.wpstg-checkbox{position:relative}.wpstg-form-group>.wpstg-checkbox>input[type=checkbox]{left:150px}.wpstg-ml-4{margin-left:4px}#wpstg-advanced-settings hr{margin:20px 0}.wpstg-form-row{display:block}.wpstg-form-row input,.wpstg-form-row label{display:table-cell;margin-bottom:3px;margin-top:3px;padding-left:5px;padding-right:5px}.wpstg-form-row input{width:400px}.wpstg-form-row label{font-weight:700;white-space:nowrap;width:1px}#wpstg-db-connect-output #wpstg-db-status{width:390px}.wpstg-fs-14{font-size:14px}.wpstg-code-segment{display:block}.wpstg-form-group>.wpstg-checkbox{min-width:100%;width:100%}.wpstg-form-group>.wpstg-checkbox>input[type=checkbox]{margin-left:10px}@media only screen and (max-width:768px){.wpstg-form-group>label{min-width:auto;width:auto}.wpstg-text-field>input{width:100%}.wpstg-text-field>.wpstg-code-segment{margin-left:0;min-width:100%}.wpstg-tab-section{max-width:450px;width:calc(100vw - 60px)}}.wpstg-rounded{border-radius:3px}.wpstg-white-border{border:1px solid #fff!important}.wpstg-m-0{margin:0}.wpstg-mt-10px,.wpstg-my-10px{margin-top:10px!important}.wpstg-my-10px{margin-bottom:10px!important}.wpstg-w-100{width:100%}.wpstg-box-shadow{box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.wpstg-float-left{float:left}.wpstg-bold-text{font-weight:700}.wpstg-warning.notice{border-left:4px solid #ffba00}.wpstg-confirmation-label{background-color:#5b9dd9;border-radius:3px;color:#fff;padding:2px}.wpstg-my-6px{margin-bottom:6px;margin-top:6px}.wpstg-mb-10px{margin-bottom:10px}.wpstg-clear-both{clear:both}.wpstg-font-italic{font-style:italic}.wpstg-mt-20px{margin-top:20px}.wpstg-welcome-container{border:2px solid #fff;margin-bottom:20px;padding:20px}.wpstg-ml-30px{margin-left:30px}.wpstg-text-center{text-align:center}.wpstg-feedback-link{text-decoration:none}.wpstg-feedback-span{display:block;margin-bottom:3px}#wpstg-confirm-backup-restore-data{margin:40px;text-align:left}#wpstg-confirm-backup-restore-wrapper{margin:0 30px 30px}#wpstg-confirm-backup-restore-wrapper h3{color:#e01e5a}#wpstg-progress-backup,#wpstg-progress-db{background-color:#3fa5ee}#wpstg-progress-files.wpstg-pro,#wpstg-progress-sr{background-color:#3c9ee4}#wpstg-progress-data,#wpstg-progress-dirs{background-color:#3a96d7}#wpstg-progress-files:not(.wpstg-pro),#wpstg-progress-finishing{background-color:#378cc9}.wpstg-issue-resubmit-confirmation.wpstg--swal2-container,.wpstg-swal2-container.wpstg--swal2-container{z-index:10500}.wpstg-swal2-container.wpstg-swal2-loading .wpstg--swal2-actions,.wpstg-swal2-container.wpstg-swal2-loading .wpstg--swal2-header{display:none}body.toplevel_page_wpstg_backup .wpstg--swal2-container .wpstg--swal2-content,body.toplevel_page_wpstg_clone .wpstg--swal2-container .wpstg--swal2-content{z-index:2}.toplevel_page_wpstg_clone #swal2-content h2{color:#565656}.toplevel_page_wpstg_clone #swal2-content{line-height:1.5em}div#exportUploadsWithoutDatabaseWarning{background-color:#fafafa;border:1px solid #e3e3e3;border-radius:5px;font-size:.9rem;font-style:italic;margin:10px;padding:10px;text-align:center}.wpstg-advanced-options-dropdown-wrapper{display:none;margin-top:20px}.wpstg--modal--backup--import--search-replace--wrapper{margin-top:20px;text-align:left}.wpstg--modal--backup--import--search-replace--new--wrapper{text-align:center}.wpstg-import-backup-contains li{display:inline-block}.wpstg-import-backup-contains li .wpstg-backups-contains{background-color:#e3e3e3;border:1px solid #c2c2c2;border-radius:3px;color:#979797;font-size:17px;height:17px;width:17px}.wpstg-import-backup-contains.wpstg-listing-single-backup li .wpstg-backups-contains{background-color:#fff;border:1px solid #c2c2c2;padding:2px}.wpstg-import-backup-contains.wpstg-listing-single-backup li .wpstg-backups-contains>.wpstg--dashicons{filter:invert(50%)}.wpstg-import-backup-contains .wpstg--tooltiptext{font-size:x-small;left:-25px;padding:5px;text-align:center;width:50px}.wpstg-import-backup-contains-title,ul.wpstg-import-backup-contains{display:inline-block}.wpstg-import-backup-name{display:inline-block;font-weight:700}.wpstg-backup-more-info-toggle{cursor:pointer;display:inline-block;font-size:x-small;font-style:italic}.wpstg-backup-more-info-toggle::selection{background:none}ul.wpstg-import-backup-more-info{background-color:#f6f6f6;border:1px solid #878787;border-radius:3px;cursor:pointer;font-size:14px;margin-bottom:30px;margin-top:10px;padding:7px;text-align:left}ul.wpstg-import-backup-more-info:hover{background-color:#def2ff;border:1px solid #25a1f0}ul.wpstg-import-backup-more-info li{height:20px}.wpstg-backup-list{max-width:800px}.wpstg-backup-list h3{color:#3e3e3e}.wpstg-backup-list ul ul{margin-block-end:1em;margin-block-start:1em}.wpstg-push-confirmation-message{font-size:15px;text-align:justify}.wpstg-settings-row{padding-bottom:10px;padding-top:10px}.wpstg-settings-title{font-weight:600}.wpstg-settings-form-group{align-items:center;display:flex}.wpstg-settings-form-group>.wpstg-settings-message{margin:7px 0 0;padding:0;width:30%}.wpstg-excluded-filters-container{margin-bottom:10px;margin-top:10px;max-width:100%;padding:0;width:100%}.wpstg-excluded-filters-container>table{border-collapse:collapse;border-color:transparent;width:100%}.wpstg-excluded-filters-container td{height:20px;padding-bottom:4px;padding-top:4px}.wpstg-excluded-filters-container h4{margin:0}.wpstg-exclude-filters-foot{display:flex;justify-content:flex-start;padding:0}.wpstg-exclude-filter-dropdown>button:hover{background:#135e96;border:1px solid #135e96}.wpstg-exclude-filter-dropdown>.wpstg-dropdown-menu{width:128px}.wpstg-remove-exclude-rule{background-color:#e01e5a;border:1px solid #e01e5a;border-radius:10px;box-shadow:none;color:#fff!important;cursor:pointer;display:inline-flex;font-size:24px;font-weight:400;height:20px;justify-content:center;line-height:.7;margin-top:5px;outline:none;padding:0;width:20px}.wpstg-remove-exclude-rule:hover{background-color:#e01e5a;border-color:#e01e5a}.wpstg-code-block{background:#f8f8f8;border-radius:2px;font-size:1.2em;margin-top:4px}.wpstg-rule-info{background:#f8f8f8!important}code.wpstg-code{background:#fff;border:1px solid #aaa;color:#e01e5a;display:inline-block;font-size:11px;margin-bottom:1px;padding:2px 4px}.wpstg-exclusion-rule-info{align-items:center;background-color:#ffc107;border:1px solid #ffc107;border-radius:7px;box-shadow:none;color:#fff!important;display:inline-flex;font-size:14px;font-weight:400;height:14px;justify-content:center;outline:none;padding:0;vertical-align:middle;width:14px}.wpstg-exclusion-rule-info:hover{background-color:#ffba0c;border:1px solid #ffba0c}.wpstg-exclude-rule-input{background-color:#fff;border:1px solid #bbb;border-radius:0!important;box-shadow:none;color:#222;display:inline-block;font-size:12px!important;font-weight:400;line-height:1.5;margin-left:4px;margin-top:4px;min-height:24px!important;outline:none!important;padding:2px 6px;transition:all .3s cubic-bezier(.25,.8,.25,1);vertical-align:baseline!important;width:135px}.wpstg-excluded-filters-container tbody>tr:last-child .wpstg-exclude-rule-input{margin-bottom:4px}.wpstg-exclude-rule-input:hover{border:1px solid #999}.wpstg-exclude-rule-input:focus{border:1px solid #25a0f1!important;box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)!important}.wpstg-file-size-exclude-select,.wpstg-path-exclude-select{width:135px}.wpstg-file-size-exclude-select-small{width:52px}.wpstg-file-size-exclude-input{width:75px}.wpstg-staging-option-title{margin:15px 0 0}.wpstg-swal-push-container.wpstg--swal2-container{z-index:9995}#wpstg-scanning-files{padding-bottom:5px}#wpstg-scanning-db.wpstg-tab-section,#wpstg-scanning-files.wpstg-tab-section{padding-top:10px}.wpstg-reset-excludes-container{margin:10px 0}.wpstg-swal2-ajax-loader{align-items:center;display:flex;height:150px;justify-content:center;overflow:hidden;width:100%}@keyframes wpstg-loading-icon-anim{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.wpstg-swal2-ajax-loader>img{animation:wpstg-loading-icon-anim 1s linear infinite;-webkit-animation:wpstg-loading-icon-anim 1s linear infinite;height:64px;width:64px}.wpstg-swal2-container .wpstg-tab-section{width:auto!important}#wpstg-no-staging-site-results{margin-top:10px;max-width:375px}li#wpstg-backup-no-results{max-width:500px}#wpstg-no-staging-site-results div,li#wpstg-backup-no-results div{display:inline-block;text-align:center}#wpstg-no-staging-site-results .wpstg--dashicons,li#wpstg-backup-no-results .wpstg--dashicons{filter:invert(50%);margin-top:1px;position:absolute}#wpstg-no-staging-site-results .no-staging-site-found-text,li#wpstg-backup-no-results .no-backups-found-text{color:#5d5d5d;margin-left:20px}@media only screen and (max-width:680px){#wpstg-no-staging-site-results div,li#wpstg-backup-no-results div{width:100%}}#wpstg--modal--backup--download-inner p.wpstg-download-modal-text{color:#565656;font-size:16px}#wpstg--modal--backup--download-inner h2{color:#565656}.wpstg-backup-restore-contains-database,.wpstg-backup-restore-contains-files{display:none}.wpstg-green-button{background:#8bc34a;border:1px solid #78a93f;color:#fff;text-shadow:0 -1px 1px #78a93f,1px 0 1px #78a93f,0 1px 1px #40c921,-1px 0 1px #78a93f}.wpstg-green-button:hover{background:#78a93f}.wpstg-is-dir-loading{display:none;margin-left:8px;margin-top:-2px;position:absolute}.wpstg-ml-8px{margin-left:8px}.wpstg-mb-8px{margin-bottom:8px}.wpstg-btn-danger{background-color:#e01e5a;border:1px solid #e01e5a;color:#fff;text-shadow:none}.wpstg-btn-danger:hover{background:#c0194d;box-shadow:0 1px 4px rgba(0,0,0,.3)}.wpstg-swal2-container.wpstg-swal2-loading>.wpstg--swal2-modal{height:200px}.wpstg-reset-confirmation.wpstg-swal2-container:not(.wpstg-swal2-loading)>.wpstg--swal2-modal{max-width:480px}.wpstg-reset-confirmation.wpstg-swal2-container .wpstg--swal2-header{display:none}.wpstg-reset-confirmation.wpstg-swal2-container .wpstg--swal2-content{height:auto}.wpstg-reset-confirmation.wpstg-swal2-container>.wpstg--swal2-modal>.wpstg--swal2-content .wpstg-tabs-wrapper{height:auto!important;overflow-y:auto}.wpstg-reset-confirmation.wpstg-swal2-container>.wpstg--swal2-modal>.wpstg--swal2-content{font-size:13px}.wpstg-reset-confirmation.wpstg-swal2-container>.wpstg--swal2-modal>.wpstg--swal2-content .wpstg-dir{margin-bottom:4px}.wpstg-reset-confirmation.wpstg-swal2-container>.wpstg--swal2-modal>.wpstg--swal2-content .wpstg-subdir{margin-top:4px}.wpstg-reset-confirmation.wpstg-swal2-container.has-collapsible-open .wpstg--swal2-modal{height:calc(100vh - 70px)}.wpstg-reset-confirmation.wpstg-swal2-container.has-collapsible-open>.wpstg--swal2-modal>.wpstg--swal2-content .wpstg-tabs-wrapper{height:calc(100vh - 350px)!important}.wpstg--swal2-actions.wpstg--modal--actions>button{font-weight:500;margin-left:4px;margin-right:4px;min-width:80px;text-shadow:none;text-transform:uppercase}.wpstg-swal-popup{max-width:1200px!important}.wpstg-swal-popup.wpstg-push-finished .wpstg--swal2-title{color:#a8a8a8}.wpstg-swal-popup.wpstg-push-finished .wpstg--swal2-content{color:#a8a8a8;margin-top:8px}.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step,.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step-line,.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step.wpstg--swal2-active-progress-step{background:#25a1f0}.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step-line{width:2.75em}.wpstg--dashicons{height:16px;width:16px}.wpstg--dashicons.wpstg-dashicons-grey{filter:invert(20%)}.wpstg--dashicons.wpstg-dashicons-19{height:19px;width:19px}.wpstg--dashicons.wpstg-dashicons-21{height:21px;width:21px}#wpstg--tab--backup #wpstg-step-1{align-items:center;display:flex}#wpstg--tab--backup #wpstg-step-1 .wpstg--tooltip,.wpstg-advanced-options .wpstg--tooltip{align-items:center;border-bottom:0 solid transparent;display:inline-flex}#wpstg--tab--backup #wpstg-step-1 .wpstg--tooltip{align-items:center;border-bottom:0 solid transparent;display:flex}.wpstg--tooltip .wpstg--tooltiptext-backups:after{left:calc(20% + 2px)}.wpstg-listing-single-backup .wpstg--dashicons{height:17px;width:17px}.wpstg-100-width{width:100px}.wpstg-caret{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid;cursor:pointer;display:inline-block;height:0;margin-left:2px;transition:transform .2s;vertical-align:middle;width:0}.wpstg-caret.wpstg-caret-up{transform:rotate(-180deg)}.wpstg-advanced-options-site label{display:block;font-size:16px;margin:.5em 0}#wpstg-confirm-backup-restore-data{font-size:18px;margin:30px 0 0}body.toplevel_page_wpstg_backup .wpstg--swal2-container.wpstg--swal2-backdrop-show,body.toplevel_page_wpstg_clone .wpstg--swal2-container.wpstg--swal2-backdrop-show{background:rgba(0,0,0,.6);z-index:9995}.wpstg-swal-popup.wpstg--swal2-popup{border-radius:8px;color:#565656;font-family:Verdana,Geneva,Tahoma,sans-serif;padding:24px;z-index:9999}.wpstg-swal-popup .wpstg--swal2-title{color:#565656;font-size:22px}.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-title{align-self:flex-start;margin-bottom:0;text-align:left}.wpstg-swal-popup .wpstg--swal2-close{right:8px;top:8px;z-index:5}.wpstg-swal-popup .wpstg--swal2-close:focus{outline:none}.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-actions{justify-content:flex-end}.wpstg-swal-popup .wpstg--swal2-actions>button{border:0;border-radius:4px;font-size:15px;font-weight:900;height:40px;line-height:normal;min-width:100px;padding:10px 12px;text-shadow:none;text-transform:capitalize}.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-actions>button{margin-left:8px}.wpstg-swal-popup .wpstg--swal2-actions>button.wpstg--swal2-cancel{background:#fff;border:1px solid rgba(29,28,29,.3);color:#1d1c1d;font-weight:500;text-shadow:none;width:100px}.wpstg-swal-popup .wpstg--swal2-actions>button:hover{box-shadow:0 1px 3px 0 rgba(0 0 0 .1)}.wpstg-swal-popup .wpstg--swal2-actions>button.wpstg--swal2-cancel:hover{background:rgba(28,29,28,.04)}#wpstg-backup-name-input{font-size:18px;height:44px}.wpstg-restore-finished-container .wpstg--swal2-title{color:#565656!important}.wpstg-restore-finished-container .wpstg--swal2-content{color:#a8a8a8;margin-top:20px}.wpstg-linear-loader>span[class*=wpstg-linear-loader-item]{animation:wpstg_linear_loader 3s infinite;animation-fill-mode:both;animation-timing-function:cubic-bezier(.03,.615,.995,.415);background:#333;border-radius:100%;display:inline-block;height:6px;margin:12px 2px;width:6px}.wpstg-linear-loader>span.wpstg-linear-loader-item:first-child{animation-delay:1s}.wpstg-linear-loader>span.wpstg-linear-loader-item:nth-child(2){animation-delay:.8s}.wpstg-linear-loader>span.wpstg-linear-loader-item:nth-child(3){animation-delay:.6s}.wpstg-linear-loader>span.wpstg-linear-loader-item:nth-child(4){animation-delay:.4s}.wpstg-linear-loader>span.wpstg-linear-loader-item:nth-child(5){animation-delay:.2s}.wpstg-linear-loader>span.wpstg-linear-loader-item:nth-child(6){animation-delay:0s}@keyframes wpstg_linear_loader{0%{opacity:0;transform:translateX(-30px)}25%{opacity:1}50%{opacity:0;transform:translateX(30px)}to{opacity:0}}.wpstg--modal--backup--import--upload--content{margin:1em auto;padding:.75em}.wpstg--modal--backup--import--upload--content .wpstg-linear-loader{display:none}#wpstg-multisite-disabled .wpstg-clone{width:355px}#wpstg-free-version-backups .wpstg-clone{text-align:center}#wpstg-free-version-backups .wpstg-clone p{font-size:16px}.wpstg-staging-info li .backup-notes{word-break:break-word}.wpstg--modal--import--upload--progress--title small{font-weight:400}#wpstg-report-issue-wrapper{position:relative}#wpstg-report-issue-wrapper .arrow-up{border-bottom:8px solid #fff;border-left:8px solid transparent;border-right:8px solid transparent;height:0;position:absolute;right:40px;top:-8px;width:0}.notice{margin:10px 20px 0 2px}.wpstg--notice{box-shadow:0 1px 1px rgba(0,0,0,.04);margin:20px 20px 20px 0;padding:1px 12px}.wpstg--error a:hover{color:#eee}.wpstg--error,.wpstg--error a{background:#e01e5a;color:#fff}.wpstg-button{border-radius:2px;cursor:pointer;display:inline-block;font-weight:500;outline:0;padding:2px 10px;text-decoration:none;text-transform:uppercase;transition:background-color .1s ease-in}.wpstg-button.wpstg-save{background-color:#1687a7;color:#fff}.wpstg-button.wpstg-save:hover{background-color:#276678}.wpstg-button.wpstg-button-light{animation:background-color .3s;background-color:#f8f8f8;border:1px solid #eee;color:#333}.wpstg-button.wpstg-button-light:hover{background-color:#e0e0e0;border:1px solid #e0e0e0}.wpstg-buttons .spinner{float:none;margin:0 0 0 5px}.wpstg-button.danger{background-color:#e01e5a;border-color:transparent;border-radius:2px;color:#fff;display:inline-block;text-align:center;text-decoration:none;text-transform:inherit}.wpstg-button.danger:hover{background-color:#c0194d}.wpstg-button--big{border-radius:3px;color:#fff;display:inline-block;font-size:16px;margin-top:20px;min-width:170px;padding:10px;text-align:center;text-decoration:none}.wpstg-button--primary{-webkit-appearance:none;border:1px solid rgba(29,28,29,.3);border-radius:2px;box-sizing:border-box;color:#171717;cursor:pointer;display:inline-block;font-size:13px;line-height:2.15384615;margin:0;min-height:30px;padding:0 10px;text-decoration:none;white-space:nowrap}.wpstg-button--primary:hover{background:rgba(28,29,28,.04);color:#000}.wpstg-button--secondary{background-color:transparent;border:1px solid rgba(29,28,29,.3);border-radius:2px;color:#95a5a6;cursor:pointer;display:inline-block;font-weight:500;outline:0;padding:4px 10px 2px;text-decoration:none;transition:background-color .1s ease-in}.wpstg-button--red{background-color:#e01e5a;border-color:#e01e5a;color:#fff}.wpstg-button--red:hover{background-color:#d02358;border-color:#e0255f;color:#fff}.wpstg-button--cta-red{background-color:#fe008f;border-color:#e01e5a;color:#fff}.wpstg-button--cta-red:hover{background-color:#f31391;border-color:#e0255f;color:#fff}.wpstg-button--blue{background-color:#25a0f1;border-color:#25a0f1;color:#fff}.wpstg-button--blue:hover{background-color:#259be6;border-color:#259be6;color:#fff}#wpstg-button-backup-upgrade{font-size:16px}.wpstg-staging-status{color:#e01e5a}#wpstg-push-changes,#wpstg-save-clone-data,#wpstg-start-updating{margin-left:5px}input.wpstg-textbox{border:1px solid #aaa;border-radius:.25rem;font-size:14px;padding:.25rem .5rem}input.wpstg-textbox:focus{border-color:#259be6;-webkit-box-shadow:0 0 0 .1rem hsla(0,0%,86.7%,.35);box-shadow:0 0 0 .1rem hsla(0,0%,86.7%,.35);outline:0}input.wpstg-textbox::placeholder{color:#888}.wpstg--advance-settings--checkbox{align-items:center;display:flex}.wpstg--advance-settings--checkbox>label{display:inline-block;font-size:14px;font-weight:bolder;width:165px}.wpstg--advance-settings--checkbox>.wpstg--tooltip{border-bottom:0 solid transparent;display:inline-block;margin-left:5px;margin-top:5px;position:relative}.wpstg--advance-settings--checkbox>.wpstg--tooltip>.wpstg--tooltiptext{left:-150px;top:18px}div#wpstg-restore-wait{align-items:center;background:#fff;display:none;flex-direction:column;height:100vh;justify-content:center;left:0;position:fixed;text-align:center;top:0;width:100vw;z-index:99999}div#wpstg-restore-wait .wpstg-title{font-weight:700}div#wpstg-restore-wait div{font-size:16px;margin-top:12px}.resumable-browse{cursor:pointer}.resumable-browse a{text-decoration:underline}.wpstg-upload-text{font-weight:600}.wpstg--modal--backup--import--upload--container.dragover{background-color:#94dc96;color:#fff;transition:background-color .7s}.wpstg--modal--backup--import--upload--container.dragover *{pointer-events:none}.wpstg--modal--backup--import--upload--container.dragover .wpstg-upload-text{display:none}.wpstg--modal--backup--import--upload--container.dragover .wpstg-dragover-text{display:block}.wpstg--modal--backup--import--upload--container .wpstg-dragover-text{display:none}#wpstg-invalid-license-message,#wpstg-invalid-license-message a{color:#e01e5a;font-weight:500;margin-left:6px}#wpstg-sidebar--banner{max-width:200px}@media screen and (max-width:1234px){.wpstg-h2{font-size:24px}#wpstg-welcome li{font-size:14px}}.wpstg-exclamation{background-color:#e01e5a;border-radius:100%;color:#fff;display:inline-block;font-weight:700;height:20px;margin:6px;text-align:center;width:20px}.wpstg--tab--contents{padding-top:1px}.wpstg-swal-show.wpstg--swal2-show{-webkit-animation:wpstg-swal-show .2s!important;animation:wpstg-swal-show .2s!important}@-webkit-keyframes wpstg-swal-show{0%{transform:scale(.3)}to{transform:scale(1)}}@keyframes wpstg-swal-show{0%{transform:scale(.3)}to{transform:scale(1)}}.wpstg-tab-item--vert-center{align-items:center;display:flex}.wpstg-db-comparison-modal{padding-left:10px;padding-right:10px}.wpstg-db-comparison-table{font-size:13px;width:100%}.wpstg-db-comparison-table tbody td{padding-top:6px}.wpstg-db-comparison-table tr>td:first-child,.wpstg-db-comparison-table tr>th:first-child{text-align:left}.wpstg-css-tick{border-bottom:3px solid #78b13f;border-right:3px solid #78b13f;display:inline-block;height:12px;transform:rotate(45deg);width:6px}.wpstg-css-cross{height:16px;left:-2px;position:relative;top:-8px;width:16px}.wpstg-css-cross:after,.wpstg-css-cross:before{background-color:#e01e5a;content:" ";height:17px;position:absolute;width:3px}.wpstg-css-cross:before{transform:rotate(45deg)}.wpstg-css-cross:after{transform:rotate(-45deg)}.wpstg-selection-preview{color:rgba(51,34,17,.4);font-size:12px;margin-left:20px}.wpstg-selection-preview.danger{color:#e01e5a}
2
  /*# sourceMappingURL=wpstg-admin.min.css.map */
assets/css/dist/wpstg-admin.min.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["wpstg-admin.css"],"names":[],"mappings":"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","file":"wpstg-admin.min.css","sourcesContent":["/**\n * WPSTG Admin CSS\n *\n * @package WPSTG\n * @subpackage Admin CSS\n * @copyright Copyright (c) 2021, René Hermenau\n * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License\n*/\n\n/* Colors */\n\n.wpstg--violet {\n color: #9d37ae;\n}\n\n.wpstg-border--violet {\n border: 1px solid #9d37ae;\n}\n\n.wpstg--red {\n color: #E01E5A;\n}\n\n.wpstg-cta--red {\n color: #fe008f;\n}\n\n.wpstg--blue {\n color: #24a1f0;\n}\n\n.wpstg--darkblue {\n color: #0e86d9;\n}\n\n.wpstg--green {\n color: #83c11f;\n}\n\n.wpstg--grey {\n color: #3e3e3e;\n}\n\n.wpstg--darkgrey {\n color: #1b1b1b;\n}\n\n/* CSS for Tabs */\n\nbody.wp-staging-pro_page_wpstg_backup,\nbody.toplevel_page_wpstg_clone,\nbody.wp-staging-pro_page_wpstg-settings,\nbody.wp-staging-pro_page_wpstg-tools,\nbody.wp-staging-pro_page_wpstg-license {\n background-color: #f3f5f7;\n}\n\n#wpstg-tab-container ul {\n list-style: none;\n margin: 0;\n padding: 0;\n background: #f1f1f1;\n float: left;\n}\n\n#wpstg-tab-container ul li:first-child.selected-tab {\n border-top: none;\n}\n\n#wpstg-tab-container ul li a.selected-tab {\n font-weight: bold;\n text-decoration: none;\n}\n\n#wpstg-tab-container .row {\n padding-top: 10px;\n padding-bottom: 12px;\n}\n\n.wpstg-tabs-container .nav-tab-wrapper {\n padding: 0;\n}\n\n#wpstg-tab-container .row label strong,\n#wpstg-tab-container .row strong {\n font-weight: bold;\n}\n\n.wpstg-tabs a {\n padding: 5px;\n}\n\n#wpstg-tab-container > ul > li.wpstg-tabs.active {\n background-color: white;\n}\n\n#wpstg_settingsgeneral_header .row:nth-child(3),\n#wpstg_settingsgeneral_header .row:nth-child(4) {\n display: none;\n}\n\n#wpstg-tab-container .wpstg-settings-panel {\n padding: 0 20px 20px 20px;\n overflow: auto;\n}\n\n#wpstg-tab-container .wpstg-form-table th {\n vertical-align: top;\n text-align: left;\n padding: 20px 10px 20px 0;\n line-height: 1.3;\n font-weight: bold;\n font-size: 14px;\n color: #484848;\n width: 30%;\n}\n\n#wpstg-tab-container .wpstg-form-table tr {\n border-bottom: 1px solid #E7E7E7;\n}\n\n#wpstg-tab-container span.description {\n display: block;\n font-weight: 400;\n font-style: normal;\n font-size: 13px;\n margin-top: 7px;\n color: #484848;\n}\n\n#wpstg-tab-container .col-title {\n color: #484848;\n}\n\n@media only screen and (max-width: 680px) {\n #wpstg-tab-container ul {\n float: none;\n }\n\n #wpstg-tab-container .wpstg-form-table tr > th {\n width: 100%;\n }\n\n #wpstg-tab-container span.description {\n font-size: 14px;\n }\n\n #wpstg-tab-container .wpstg-form-table tr > th,\n #wpstg-tab-container .wpstg-form-table tr > td {\n padding: 10px;\n }\n}\n\n#wpstg-tab-container ul li {\n margin-bottom: 0;\n}\n\n#wpstg-tab-container ul li a {\n display: block;\n padding: 10px 4px 10px 14px;\n border-width: 1px 0;\n border-style: solid;\n border-top-color: white;\n border-bottom-color: #e7e7e7;\n text-decoration: none;\n color: #0097DF;\n font-weight: bold;\n}\n\n#wpstg-tab-container ul li a:hover {\n background-color: #e5e5e5;\n color: #777777;\n}\n\n.wpstg-logo {\n display: block;\n font-size: 16px;\n padding-top: 20px;\n width: 220px;\n float: left;\n}\n\n.wpstg-logo img {\n max-width: 212px;\n}\n\n.wpstg-version {\n display: block;\n padding-top: 40px;\n color: #9b9b9b;\n}\n\n.wpstg_admin .nav-tab {\n color: #3C3C3C;\n}\n\n#wpstg-tab-container table tbody tr:nth-child(1) > th > div {\n font-size: 20px;\n}\n\n/* Cloning workflow */\n\n#wpstg-clonepage-wrapper {\n margin-bottom: 20px;\n width: 98%;\n}\n\n@media screen and (min-width: 1090px) {\n #wpstg-clonepage-wrapper {\n float: left;\n margin-bottom: 20px;\n }\n}\n\n#wpstg-steps {\n margin-top: 0px;\n margin-left: 20px;\n}\n\n#wpstg-steps li {\n color: #444;\n line-height: 20px;\n padding-right: 10px;\n float: left;\n}\n\n.wpstg-step-num {\n border: 1px solid #3e3e3e;\n border-radius: 3px;\n display: inline-block;\n width: 20px;\n height: 20px;\n text-align: center;\n margin-right: 5px;\n}\n\n.wpstg-current-step {\n font-weight: bold;\n}\n\n.wpstg-current-step .wpstg-step-num {\n background: #3e3e3e;\n color: #eee;\n}\n\n.wpstg-box {\n margin: 10px 0;\n padding: 10px;\n position: relative;\n overflow: hidden;\n transition: border-color .2s ease-in-out;\n}\n\n.wpstg-clone {\n margin-bottom: 10px;\n padding: 16px;\n position: relative;\n transition: border-color .2s ease-in-out;\n background-color: #ffffff;\n color: #3e3e3e;\n border-radius: 3px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .1);\n}\n\n.wpstg-clone.active {\n border-color: #1d94cf;\n}\n\n.wpstg-clone-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.wpstg-clone-title {\n display: inline-block;\n font-size: 15px;\n max-width: 300px;\n text-decoration: none;\n font-weight: bold;\n color: #3e3e3e;\n}\n\n.wpstg-clone-title:hover {\n color: #111111;\n}\n\n.wpstg-clone-actions {\n display: flex;\n margin-top: 5px;\n}\n\n.wpstg-dropdown {\n position: relative;\n}\n\n.wpstg-clone-actions .wpstg-dropdown-toggler {\n text-decoration: none;\n background: #25a1f0;\n padding: 6px 10px;\n border-radius: 2px;\n font-size: 14px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .2);\n color: #ffffff;\n}\n\n.wpstg-clone-actions .wpstg-dropdown-toggler:hover {\n background: #002648;\n color: white;\n}\n\n.wpstg-dropdown {\n position: relative;\n}\n\n.wpstg-dropdown > .wpstg-dropdown-menu {\n background: #fff;\n display: none;\n flex-direction: column;\n position: absolute;\n right: 0;\n top: calc(100% + 4px);\n padding: 8px;\n border-radius: 2px;\n width: 100px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .2);\n z-index: 1000;\n}\n\n.wpstg-dropdown > .wpstg-dropdown-menu.wpstg-menu-dropup {\n top: auto;\n bottom: 100%;\n transform: translate3d(0px, -3px, 0px);\n}\n\n.wpstg-dropdown > .wpstg-dropdown-menu.shown {\n display: flex;\n}\n\n.wpstg-clone-action,\n.wpstg-dropdown-action {\n color: #3e3e3e;\n padding: 6px 8px;\n border-radius: 3px;\n text-decoration: none;\n position: relative;\n transition: color .2s ease-in-out;\n border-bottom: 1px solid #f3f3f3;\n}\n\n.wpstg-clone-action:hover,\n.wpstg-dropdown-action:hover {\n background: rgba(0, 0, 0, 0.05);\n}\n\n.wpstg-dropdown-action {\n color: #3e3e3e;\n background: transparent;\n border: 0 solid black;\n outline: none;\n box-shadow: none;\n}\n\n.wpstg-remove-clone:hover {\n color: #E01E5A;\n}\n\n.wpstg-clone-action:last-child {\n border: none;\n}\n\n.wpstg-clone:hover .wpstg-clone-action {\n display: inline-block;\n}\n\n#wpstg-show-error-details:focus,\n#wpstg-workflow .wpstg-clone-action {\n outline: none;\n box-shadow: none;\n}\n\n.wpstg-link-btn {\n background: #45a1c9;\n color: #fff;\n display: inline-block;\n padding: 5px 10px;\n text-decoration: none;\n vertical-align: baseline;\n transition: all .2s ease-in-out;\n}\n\n.wpstg-link-btn:hover,\n.wpstg-link-btn:focus {\n color: #fff;\n outline: none;\n box-shadow: none;\n}\n\n#wpstg-workflow .wpstg-link-btn:active {\n vertical-align: baseline;\n}\n\n.wpstg-link-btn[disabled] {\n background: #777 !important;\n border-color: #555 !important;\n pointer-events: none;\n}\n\n#wpstg-cancel-cloning,\n#wpstg-cancel-cloning-update {\n margin-top: 5px;\n}\n\n#wpstg-cancel-cloning.success,\n#wpstg-cancel-cloning.success {\n background: #64dd58;\n border-color: #54bd4a;\n}\n\n#wpstg-error-wrapper,\n#wpstg-error-details {\n display: none;\n padding-top: 10px;\n font-size: 13px;\n clear: both;\n}\n\n#wpstg-show-error-details {\n display: inline-block;\n margin-left: 5px;\n color: #555;\n text-decoration: none;\n transition: color .2s ease-in-out;\n}\n\n#wpstg-show-error-details:hover {\n color: #1d94cf;\n}\n\n#wpstg-error-details {\n border-left: 5px solid #E01E5A;\n padding: 10px;\n width: 500px;\n}\n\n#wpstg-try-again {\n display: none;\n}\n\n#wpstg-home-link {\n float: right;\n}\n\n.wpstg-loader {\n content: url('../../img/loading.gif');\n margin-top: 10px;\n display: none;\n}\n\n.wpstg-loader.wpstg-finished {\n display: block;\n content: \"Finished\";\n background-color: #00c89a;\n color: white;\n padding: 2px 10px;\n margin-top: 0;\n border-radius: 3px;\n}\n\n#wpstg-workflow {\n max-width: 800px;\n position: relative;\n clear: both;\n padding-top: 20px;\n float: left;\n min-width: 500px;\n min-height: 380px;\n padding-right: 20px;\n padding-bottom: 20px;\n}\n\n#wpstg-sidebar {\n float: left;\n max-width: 400px;\n display: block;\n margin-left: 10px;\n}\n\n#wpstg-workflow.loading::after,\n#wpstg-removing-clone.loading::after {\n background: rgba(255, 255, 255, .7);\n content: 'Loading... may take a while for huge websites';\n display: block;\n width: 100%;\n height: 100%;\n font-size: 20px;\n padding-top: 100px;\n text-align: center;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 99;\n}\n\n#wpstg-removing-clone.loading::after {\n content: 'REMOVING' !important;\n}\n\n#wpstg-existing-clones,\n#wpstg-removing-clone {\n position: relative;\n}\n\n#wpstg-existing-clones h3 {\n color: #3e3e3e;\n}\n\n#wpstg-removing-clone .wpstg-tab-section {\n display: block;\n}\n\n.wpstg-progress-bar {\n max-width: 900px;\n height: 27px;\n padding: 0;\n background-color: #d6d8d7;\n}\n\n.wpstg-progress {\n float: left;\n background: #3fa5ee;\n width: 0;\n height: 100%;\n transition: width .6s ease;\n color: white;\n line-height: 25px;\n text-align: center;\n overflow: hidden;\n}\n\n.wpstg-progress-files {\n background: #16b4f0;\n width: 0;\n height: 100%;\n transition: width .6s ease;\n color: white;\n line-height: 25px;\n text-align: center;\n}\n\n#wpstg-new-clone-id.wpstg-error-input,\n#wpstg-clone-path.wpstg-error-input {\n border: 1px solid #E01E5A;\n box-shadow: 0 0 2px rgba(255, 66, 53, .8);\n}\n\n#wpstg-new-clone-id {\n width: 450px;\n max-width: 100%;\n margin-left: 15px;\n}\n\n#wpstg-new-clone {\n background: #25a1f0;\n border-color: #2188c9;\n}\n\n#wpstg-new-clone:hover {\n background: #259be6;\n border-color: #2188c9;\n}\n\n#wpstg-clone-path {\n margin-left: 10px;\n width: 350px;\n}\n\n.wpstg-error-msg {\n color: #E01E5A;\n}\n\n#wpstg-clone-id-error {\n display: block;\n background-color: #f0f8ff;\n padding: 10px;\n margin: 20px;\n}\n\n#wpstg-start-cloning + .wpstg-error-msg {\n display: block;\n margin-top: 5px;\n}\n\n.wpstg-size-info {\n color: #999;\n font-weight: normal;\n position: relative;\n left: 2px;\n}\n\n.wpstg-db-table .wpstg-size-info {\n top: 2px;\n}\n\n.wpstg-db-table:hover {\n background-color: #f0f8ff;\n}\n\n#wpstg-workflow #wpstg-start-cloning {\n margin-left: 5px;\n vertical-align: baseline;\n}\n\n\n/* Tabs */\n\n.wpstg-tabs-wrapper {\n max-width: 640px;\n margin: 10px 0;\n}\n\n#wpstg-path-wrapper {\n border-bottom: 2px dashed #ccc;\n padding-bottom: 10px;\n margin-bottom: 10px;\n}\n\n.wpstg-tab-section {\n border-bottom: 1px solid #ddd;\n border-right: none;\n border-left: none;\n display: none;\n width: calc(100% - 72px);\n padding: 0px 36px;\n}\n\n.wpstg-tab-section::after {\n display: block;\n content: '';\n clear: both;\n}\n\n.wpstg-tab-header {\n border-bottom: 1px solid #ddd;\n border-right: none;\n border-left: none;\n color: #444;\n font-size: 16px;\n font-weight: bold;\n display: block;\n padding: 10px;;\n text-decoration: none;\n}\n\n.wpstg-tab-triangle {\n display: inline-block;\n margin-right: 12px;\n animation: transform 0.5s;\n width: 0;\n height: 0;\n margin-top: -3px;\n vertical-align: middle;\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-left: 10px solid;\n transition: transform 0.2s;\n cursor: pointer;\n}\n\n.wpstg-tab-triangle.wpstg-no-icon {\n margin-right: 2px;\n width: auto;\n height: auto;\n vertical-align: auto;\n border-top: 0px solid;\n border-bottom: 0px solid;\n border-left: 0px solid;\n}\n\n.wpstg-tab-triangle.wpstg-rotate-90 {\n transform: rotate(90deg);\n}\n\n.wpstg-tab-header:focus {\n color: #444;\n outline: none;\n box-shadow: none;\n}\n\n#wpstg-large-files {\n display: none;\n border: 1px dashed #ccc;\n padding: 10px 10px 10px;\n margin-top: 20px;\n position: relative;\n font-size: 12px;\n}\n\n#wpstg-large-files h3 {\n background: #fff;\n margin: 0;\n padding: 0 5px;\n position: absolute;\n top: -10px;\n left: 5px;\n}\n\n.wpstg-subdir {\n display: none;\n margin-left: 20px;\n}\n\n.wpstg-subdir.wpstg-push {\n display: block;\n margin-left: 20px;\n}\n\n.wpstg-dir a.disabled {\n color: #888;\n cursor: default;\n text-decoration: none;\n}\n\n.wpstg-check-subdirs {\n display: inline-block;\n margin-left: 10px;\n}\n\n.wpstg-notice-alert {\n display: block;\n background-color: #E01E5A;\n padding: 20px;\n max-width: 600px;\n margin-top: 10px;\n color: white;\n}\n\n.wpstg-notice--white {\n display: block;\n background-color: #ffffff;\n padding: 20px;\n max-width: 600px;\n margin-top: 10px;\n}\n\n.wpstg-notice-alert a {\n color: white;\n}\n\n.wpstg-notice-alert h3 {\n color: white;\n}\n\n.wpstg-header {\n font-weight: 400;\n line-height: 1.6em;\n font-size: 19px;\n border-bottom: 1px solid #DFDFDF;\n clear: both;\n padding-top: 10px;\n}\n\n#wpstg-clone-label {\n font-size: 14px;\n font-weight: bold;\n}\n\n.wpstg-log-details {\n height: 300px;\n overflow: scroll;\n max-width: 650px;\n font-family: monospace;\n font-size: 12px;\n line-height: 15px;\n border: 1px solid #FFF;\n background-color: black;\n color: #c0c0c0;\n padding: 3px;\n white-space: nowrap;\n margin-top: 15px;\n}\n\n#wpstg-finished-result {\n display: none;\n}\n\n#wpstg-remove-cloning {\n background: #ff3428;\n border-color: #e72f24;\n margin-top: 5px;\n}\n\n#wpstg-success-notice {\n padding: 10px;\n background-color: white;\n max-width: 900px;\n border: 1px solid #ccc;\n margin-top: 20px;\n}\n\n.wpstg_beta_notice {\n margin-bottom: 20px;\n}\n\n.wpstg-sysinfo {\n width: 700px;\n height: 700px;\n}\n\n.wpstg-form-table .col-title label {\n font-weight: 600;\n}\n\n.wpstg-form-table td:first-child {\n width: 30%;\n}\n\n.wpstg-share-button-container {\n margin: 5px 0;\n}\n\n.wpstg-share-button-container p {\n margin: 0 0 10px 0;\n}\n\n.wpstg-share-button {\n display: inline-block;\n}\n\n.wpstg-share-button a {\n text-decoration: none;\n}\n\n.wpstg-share-button .wpstg-share {\n font-family: sans-serif;\n font-weight: bold;\n text-decoration: none;\n text-align: center;\n}\n\n.wpstg-share-button .wpstg-share {\n -webkit-border-radius: 2px;\n -moz-border-radius: 2px;\n border-radius: 2px;\n color: #FFF;\n display: inline;\n font-size: 12px;\n padding: 4px 8px;\n}\n\n.wpstg-share-button-twitter .wpstg-share {\n background-color: #00ABF0;\n}\n\n.wpstg-share-button-facebook .wpstg-share {\n background-color: #3b5998;\n}\n\n.wpstg-share-button-googleplus .wpstg-share {\n background-color: #F53424;\n}\n\n.wpstg-share-button-twitter .share:active,\n.wpstg-share-button-facebook .share:active,\n.wpstg-share-button-googleplus .share:active {\n background-color: #353535;\n}\n\n#wpstg-check-space {\n margin-left: 8px;\n}\n\n#wpstg-welcome li {\n font-size: 18px;\n line-height: 29px;\n position: relative;\n padding-left: 23px;\n list-style: none !important;\n}\n\n#wpstg-welcome {\n margin-top: 20px;\n margin-right: 20px;\n background-color: white;\n}\n\n.wpstg-heading-pro {\n font-weight: bold;\n}\n\n.wpstg-h2 {\n margin-top: 0;\n margin-bottom: 1.2rem;\n font-size: 30px;\n line-height: 2.5rem;\n}\n\n#wpstg-welcome li:before {\n width: 1em;\n height: 100%;\n background: url(data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%2377B227%22%20d%3D%22M1671%20566q0%2040%2D28%2068l%2D724%20724%2D136%20136q%2D28%2028%2D68%2028t%2D68%2D28l%2D136%2D136%2D362%2D362q%2D28%2D28%2D28%2D68t28%2D68l136%2D136q28%2D28%2068%2D28t68%2028l294%20295%20656%2D657q28%2D28%2068%2D28t68%2028l136%20136q28%2028%2028%2068z%22%2F%3E%3C%2Fsvg%3E) left .4em no-repeat;\n background-size: contain;\n content: \"\";\n position: absolute;\n top: -2px;\n left: 0;\n color: #77b227;\n}\n\n.wpstg-h1 {\n margin-bottom: 1.35rem;\n font-size: 2.5em;\n line-height: 3.68rem;\n letter-spacing: normal;\n}\n\n.wpstg--swal2-content h1 {\n color: #444;\n}\n\n#wpstg-welcome h2 {\n margin: 0 0 15px;\n}\n\n#wpstg-welcome .wpstg-footer {\n clear: both;\n margin-top: 20px;\n font-style: italic;\n}\n\n#wpstg-footer {\n clear: both;\n margin-top: 20px;\n margin-right: 10px;\n padding-top: 50px;\n}\n\n#wpstg-footer a {\n text-decoration: none;\n}\n\n#wpstg-footer li {\n margin-bottom: 2px;\n list-style: circle;\n}\n\n#wpstg-footer ul {\n margin-left: 15px;\n margin-top: 0px;\n}\n\n.wpstg-footer--title {\n margin-left: 15px;\n}\n\n.wpstg-staging-info {\n margin-top: 8px;\n color: #3e3e3e;\n font-size: 12px;\n}\n\n.wpstg-staging-info a {\n color: #3e3e3e;\n}\n\n.wpstg-staging-info li {\n margin-bottom: 2px;\n}\n\n.wpstg-bold {\n font-weight: 600;\n}\n\n#wpstg-processing-status {\n margin-top: 5px;\n font-size: 13px;\n font-weight: 400;\n float: left;\n}\n\n#wpstg-processing-timer {\n margin-top: 5px;\n font-size: 13px;\n font-weight: 400;\n float: right;\n}\n\n#wpstg-report-issue-button {\n margin-left: 50px;\n border: 1px solid #E01E5A;\n color: #E01E5A;\n background-color: white;\n}\n\n#wpstg-report-issue-button:hover {\n background-color: #dc2b62;\n color: #fff;\n}\n\n.wpstg-blue-primary {\n display: inline-block;\n text-decoration: none;\n font-size: 13px;\n /*line-height: 26px;*/\n height: 28px;\n margin: 0;\n padding: 0 10px 1px;\n cursor: pointer;\n border-width: 1px;\n border-style: solid;\n -webkit-appearance: none;\n border-radius: 3px;\n white-space: nowrap;\n box-sizing: border-box;\n background: #25a1f0;\n border-color: #2188c9;\n color: #fff;\n text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;\n}\n\n.wpstg-blue-primary:hover {\n background-color: #259be6;\n}\n\n.wpstg-report-issue-form {\n position: absolute;\n z-index: 999;\n width: 300px;\n background-color: #fff;\n padding: 15px 15px 10px;\n border: 1px solid #e8e8e8;\n border-radius: 3px;\n box-shadow: 0 1px 0 0 #fff inset;\n display: none;\n right: 0;\n top: 35px;\n}\n\n@media (max-width: 600px) {\n .wpstg-report-issue-form {\n position: relative;\n }\n}\n\n.wpstg-report-show {\n display: block;\n}\n\n.wpstg-field input[type=text],\n.wpstg-field textarea {\n width: 100%;\n font-weight: 400;\n line-height: 1.4;\n margin-bottom: 4px;\n}\n\n.wpstg-report-email,\n.wpstg-report-hosting-provider {\n width: 100%;\n font-weight: 400;\n font-size: .8rem;\n height: 2.3rem;\n line-height: 2.3rem;\n border-radius: 3px;\n margin-bottom: 4px;\n padding: 0 10px;\n}\n\n.wpstg-report-description {\n border-radius: 3px;\n font-size: .8rem;\n padding: 6px 10px;\n resize: none;\n}\n\n.wpstg-report-privacy-policy {\n font-size: 12px;\n margin-bottom: 15px;\n}\n\n#wpstg-report-cancel {\n float: right;\n margin-right: 5px;\n font-weight: bold;\n}\n\n#wpstg-success-button {\n font-weight: bold;\n}\n\n.wpstg-message {\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n background-color: #f5e0de;\n border-radius: 3px;\n color: rgba(0, 0, 0, .6);\n height: auto;\n margin: 10px 0;\n min-height: 18px;\n padding: 6px 10px;\n position: relative;\n}\n\n.wpstg-message.wpstg-error-message {\n background-color: #f5e0de;\n color: #b65147;\n font-size: 12px;\n}\n\n.wpstg-message.wpstg-success-message {\n background-color: #d7f8e0;\n color: #515151;\n}\n\n.wpstg-message p {\n margin: 3px 0;\n font-size: 13px;\n}\n\n.wpstg-warning {\n display: block;\n padding: 10px;\n background-color: #ffb804;\n color: #ffffff;\n margin: 10px 10px 10px 0;\n}\n\n.wpstg-warning a {\n color: #ffffff;\n font-weight: bold;\n text-decoration: underline;\n}\n\n.wpstg-error {\n display: block;\n padding: 10px !important;\n background-color: #E01E5A !important;\n color: #ffffff;\n margin: 10px 10px 10px 0 !important;\n border-color: transparent !important;\n border-left-color: transparent !important;\n box-shadow: none !important;\n}\n\n.wpstg-error a {\n color: #ffffff;\n font-weight: bold;\n text-decoration: underline;\n}\n\n#wpstg-resume-cloning {\n display: none;\n}\n\n#wpstg-external-db th {\n text-align: left;\n width: 120px;\n}\n\n#wpstg-db-connect {\n font-weight: normal;\n}\n\n#wpstg-db-status {\n display: block;\n margin-top: 5px;\n padding: 5px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n text-decoration: none;\n text-align: center;\n}\n\n.wpstg-text-field > #wpstg-db-status {\n margin-top: 8px;\n margin-left: 150px;\n min-width: 300px;\n}\n\n.wpstg-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n\n.wpstg-failed {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n\n#wpstg_select_tables_cloning {\n height: 600px;\n font-size: 13px;\n}\n\n#wpstg-update-notify {\n background-color: #E01E5A;\n font-size: 14px;\n color: #ffffff;\n line-height: normal;\n padding: 10px;\n}\n\n#wpstg-update-notify a {\n color: #ffffff;\n font-weight: bold;\n}\n\n.wpstg-pointer {\n cursor: pointer;\n}\n\n.wpstg--tab--header {\n background-color: white;\n /* margin-bottom: 10px; */\n /* padding: 16px; */\n position: relative;\n transition: border-color .2s ease-in-out;\n background-color: #ffffff;\n color: #3e3e3e;\n border-radius: 2px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .02);\n}\n\n.wpstg--tab--header ul {\n display: flex;\n}\n\n.wpstg--tab--header ul li {\n margin-right: 1em;\n margin-bottom: 0px;\n}\n\n.wpstg--tab--header ul li:last-child {\n margin-right: 0;\n}\n\n.wpstg--tab--header a {\n min-width: 150px;\n text-align: center;\n cursor: pointer;\n display: inline-block;\n padding: 1em 1.25em;\n padding-bottom: 9px;\n color: #c4c4c4;\n font-size: 18px;\n /*\n border: solid 1px;\n */\n}\n\n.wpstg--tab--header a.wpstg--tab--active {\n border-bottom: .4em solid #25A1F0;\n color: #25A1F0;\n}\n\n.wpstg--tab--header a:hover {\n background-color: #fefefe;\n border-bottom: 0.4em solid #25A1F0;\n color: #25A1F0;\n}\n\n.wpstg--tab--content {\n display: none;\n}\n\n.wpstg--tab--active {\n display: block;\n}\n\n.wpstg--text--strong,\n.wpstg--text--strong * {\n font-weight: bold !important;\n}\n\n.wpstg--text--danger {\n color: #a94442;\n}\n\n.wpstg--tooltip {\n position: relative;\n display: inline-block;\n border-bottom: 1px dotted black;\n margin-left: 10px;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext {\n visibility: hidden;\n width: 300px;\n background-color: #ffffff;\n color: #505050;\n text-align: left;\n padding: 12px;\n border-radius: 3px;\n position: absolute;\n z-index: 1;\n -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n -moz-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n}\n\n.wpstg--tooltiptext-backups {\n width: 120px;\n top: 100%;\n left: -150%;\n margin-left: -56px;\n margin-top: 4px;\n}\n\n.wpstg--tooltip.wpstg--exclude-rules--tooltip {\n border-bottom: 0px solid transparent;\n}\n\n.wpstg--tooltip.wpstg--exclude-rules--tooltip > .wpstg--tooltiptext {\n margin-top: 0px;\n margin-left: -150px;\n}\n\n/**\nTooltip top arrow\n */\n\n.wpstg--tooltip .wpstg--tooltiptext-backups::after {\n content: \" \";\n position: absolute;\n bottom: 100%;\n /* At the top of the tooltip */\n left: 50%;\n margin-left: 25px;\n border-width: 5px;\n border-style: solid;\n border-color: transparent transparent white transparent;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext.has-top-arrow {\n margin-top: 6px;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext.has-top-arrow::after {\n content: \" \";\n position: absolute;\n bottom: 100%;\n left: 50%;\n margin-left: -18px;\n border-width: 5px;\n border-style: solid;\n border-color: transparent transparent white transparent;\n}\n\n.wpstg--snaphot-restore-table tr {\n line-height: 12px;\n}\n\n.wpstg-float-left {\n float: left;\n}\n\n.wpstg-beta-notice {\n background-color: #b0e8b0;\n border-radius: 3px;\n padding: 7px;\n margin-bottom: 20px;\n}\n\n#wpstg-backup-name {\n font-size: 1.875em;\n font-weight: 600;\n}\n\n#wpstg_select_tables_cloning option:checked {\n /* Cannot use background color here because Chrome and Firefox ignore it even if set to !important */\n -webkit-appearance: menulist-button;\n background-image: linear-gradient(0deg, #1e90ff 0%, #1e90ff 100%);\n}\n\n.wpstg--btn--cancel {\n background: #ff3428;\n border-color: #e72f24;\n color: #fff;\n height: auto;\n line-height: normal;\n font-size: 16px;\n padding: .5em;\n margin-bottom: 1.5em;\n}\n\n.wpstg--btn--cancel:hover {\n background: #ff3428;\n border-color: #e72f24;\n}\n\n.wpstg--process--content > .wpstg--swal2-html-container {\n padding: 4em 2em !important;\n}\n\n.wpstg--modal--process--logs,\n.wpstg--modal--error--logs {\n background: #ffffff;\n border: 1px solid #a8a8a8;\n border-radius: 3px;\n height: 300px;\n margin-top: 1em;\n display: none;\n padding-top: 10px;\n padding-left: 10px;\n overflow: auto;\n text-align: justify;\n}\n\n.wpstg--modal--error--logs {\n height: auto;\n max-height: 300px;\n}\n\n.wpstg--modal--process--logs p {\n font-size: 12px;\n white-space: nowrap;\n}\n\n.wpstg--modal--process--logs p.wpstg--modal--process--msg--info {\n color: #222222;\n}\n\n.wpstg--modal--process--logs p.wpstg--modal--process--msg--debug {\n color: #757575;\n}\n\n.wpstg--modal--process--title {\n color: #565656;\n margin: .25em 0;\n}\n\n.wpstg--modal--process--subtitle {\n margin: .5em 0;\n color: #565656;\n}\n\n.wpstg--modal--error--logs > p {\n text-align: left;\n font-size: 14px;\n color: #222222;\n}\n\n.wpstg--modal--process--logs p,\n.wpstg--modal--error--logs p {\n margin: 0px;\n margin-bottom: 2px;\n}\n\n.wpstg--modal--process--msg--error {\n color: #E01E5A;\n}\n\n.wpstg--modal--process--msg--critical {\n color: #E01E5A;\n}\n\n.wpstg--modal--process--msg--warning {\n color: darkorange;\n}\n\n.wpstg--modal--process--msg-found {\n font-size: 16px;\n color: #E01E5A;\n font-weight: bold;\n}\n\n.wpstg--modal--delete {\n text-align: left;\n margin-top: 8px;\n color: #565656;\n}\n\n.wpstg-swal-popup .wpstg--swal2-cancel.wpstg--btn--cancel {\n margin-bottom: 0;\n text-shadow: none !important;\n}\n\n.wpstg-swal-popup .wpstg-loader {\n display: inline-block !important;\n}\n\n.wpstg--modal--process--generic-problem {\n display: none;\n border-left: 5px solid #E01E5A;\n margin: .5em 0;\n}\n\n.wpstg--modal--process--logs--tail {\n font-size: 16px;\n color: #565656;\n background: none;\n border: none;\n cursor: pointer;\n}\n\n.wpstg--modal--backup--import--upload--title {\n color: #565656;\n}\n\n.wpstg--modal--backup--import--configure,\n.wpstg--modal--backup--import--upload--status,\n.wpstg--modal--backup--import--upload--container input[type=\"file\"] {\n display: none;\n}\n\n#wpstg--backups--import--file-list {\n font-size: 14px;\n font-weight: bold;\n}\n\n#wpstg--backups--import--file-list-empty {\n color: #E01E5A;\n}\n\n.wpstg--modal--backup--import--filesystem label {\n font-size: 14px;\n}\n\n.wpstg--modal--backup--import--filesystem button {\n margin-bottom: 20px;\n}\n\n.wpstg--modal--backup--import--upload {\n position: relative;\n min-height: 30px;\n}\n\n.wpstg--modal--backup--import--upload {\n color: #505050;\n}\n\n.wpstg--modal--backup--import--upload--container {\n position: relative;\n border-radius: 10px;\n margin: .5em;\n padding: 1em .5em;\n border: 3.5px dashed #dedede;\n transition: background-color 0.3s ease, color 0.3s ease;\n background-color: #f4fbff;\n min-height: 130px;\n}\n\n.wpstg--modal--backup--import--upload--container.wpstg--has-dragover span.wpstg--drop {\n display: inline-flex;\n}\n\n.wpstg--modal--backup--import--upload--container input[type='file'] {\n display: none;\n}\n\n.wpstg--modal--backup--import--upload--container img {\n margin-top: 10px;\n width: 4em;\n align-self: center;\n border: none;\n}\n\n.wpstg--modal--backup--import--upload--container span {\n margin-top: 1em;\n}\n\n.wpstg--backup--import--options > button {\n margin-top: 1em;\n padding: 1em;\n align-self: center;\n width: 185px;\n height: auto;\n line-height: normal;\n}\n\n.wpstg--backup--import--options {\n position: relative;\n display: flex;\n justify-content: center;\n}\n\n.wpstg--backup--import--options ul {\n display: none;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul {\n padding: 0;\n margin: 54px 0 0 0;\n display: block;\n position: absolute;\n width: 185px;\n background: #25a1f0;\n box-sizing: border-box;\n border-radius: 0 0 3px 3px;\n border-width: 1px;\n border-color: #2188c9;\n text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul li {\n border-bottom: .1em solid #25a1f0;\n margin: 0;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul li:hover {\n background-color: #25a1f0;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul li:last-child {\n border-bottom: none;\n}\n\n.wpstg--backup--import--options ul li button {\n cursor: pointer;\n background: none;\n border: none;\n margin: 0;\n width: 100%;\n color: white;\n height: 40px;\n line-height: 40px;\n}\n\n.wpstg--backup--import--options ul li button:hover {\n background-color: #259be6;\n}\n\n.wpstg--modal--backup--import--search-replace--info {\n margin: 1em 0;\n display: flex;\n flex-direction: row;\n}\n\n.wpstg--modal--backup--import--info p {\n text-align: left;\n margin: 0;\n}\n\n.wpstg--modal--backup--import--search-replace--wrapper button {\n align-self: center;\n}\n\n.wpstg--import--advanced-options--button {\n border: 0;\n border-radius: 3px;\n font-size: 18px;\n text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;\n cursor: pointer;\n}\n\n.wpstg--modal--backup--import--search-replace--new {\n color: white;\n background-color: #25a1f0;\n}\n\n.wpstg--modal--backup--import--search-replace--remove {\n color: white;\n background-color: #25a1f0;\n width: 22px;\n height: 22px;\n margin-left: 5px;\n}\n\n.wpstg--modal--backup--import--search-replace--input-group:first-child button {\n display: none;\n}\n\n.wpstg--modal--backup--import--search-replace--input--container {\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.wpstg--modal--backup--import--search-replace--input-group {\n width: 100%;\n border-bottom: 6px solid #f1f1f1;\n margin-bottom: 10px;\n}\n\n.wpstg--modal--backup--import--search-replace--input-group input {\n min-width: 250px;\n width: calc(50% - 4px - 11px - 5px); /* -4px is half of the padding; -11px is half of the button; -5 is the margin left of the button */\n display: inline-block;\n line-height: 10px;\n border: 1px solid #dedede;\n border-radius: 3px;\n color: #666;\n padding: 8px;\n margin-bottom: 12px;\n}\n\n.wpstg--modal--import--upload--process {\n display: none;\n position: relative;\n height: 30px;\n margin-top: 20px;\n margin-bottom: 20px;\n width: 100%;\n top: 0;\n left: 0;\n text-indent: 1em;\n white-space: nowrap;\n overflow: hidden;\n color: #333333;\n justify-content: center;\n align-items: center;\n}\n\n.wpstg--modal--import--upload--progress {\n position: absolute;\n background: #98d452;\n color: white;\n height: 100%;\n border-radius: 4px;\n left: 0;\n top: 0;\n}\n\n.wpstg--modal--import--upload--progress--title {\n z-index: 9;\n}\n\n.wpstg-fieldset:disabled {\n opacity: 0.8;\n border-top: 1px solid white;\n margin-top: 20px;\n}\n\n.wpstg-fieldset {\n padding-left: 20px;\n}\n\n.wpstg-fs-14 {\n font-size: 14px;\n}\n\n.wpstg-dark-alert {\n font-weight: bold;\n background-color: #0e86d9;\n padding: 15px;\n margin-top: 0px;\n color: white;\n}\n\n.wpstg-dark-alert .wpstg-button--cta-red {\n margin-left:10px;\n}\n\n.wpstg-form-group {\n display: block;\n width: 100%;\n margin-bottom: 8px;\n align-items: center;\n}\n\n.wpstg-form-group > label {\n display: block;\n font-weight: 700;\n}\n\n.wpstg-text-field > input {\n width: 300px;\n display: block;\n line-height: 1.5;\n}\n\n.wpstg-code-segment {\n display: block;\n}\n\n.wpstg-text-field > .wpstg-code-segment {\n margin-top: 4px;\n min-width: 300px;\n}\n\n.wpstg-form-group > .wpstg-checkbox {\n min-width: 100%;\n width: 100%;\n position: relative;\n}\n\n.wpstg-form-group > .wpstg-checkbox > input[type='checkbox'] {\n left: 150px;\n}\n\n.wpstg-rounded {\n border-radius: 3px;\n}\n\n.wpstg-white-border {\n border: 1px solid white !important;\n}\n\n.wpstg-ml-4 {\n margin-left: 4px;\n}\n\n#wpstg-confirm-backup-restore-data {\n margin: 40px;\n text-align: left;\n}\n\n#wpstg-advanced-settings hr {\n margin: 20px 0;\n}\n\n.wpstg-form-row {\n display: block;\n}\n\n.wpstg-form-row label,\n.wpstg-form-row input {\n display: table-cell;\n padding-left: 5px;\n padding-right: 5px;\n margin-top: 3px;\n margin-bottom: 3px;\n}\n\n.wpstg-form-row input {\n width: 400px;\n}\n\n.wpstg-form-row label {\n font-weight: bold;\n width: 1px;\n white-space: nowrap;\n}\n\n#wpstg-db-connect-output #wpstg-db-status {\n width: 390px;\n}\n\n.wpstg-fs-14 {\n font-size: 14px;\n}\n\n.wpstg-code-segment {\n display: block;\n}\n\n.wpstg-form-group > .wpstg-checkbox {\n min-width: 100%;\n width: 100%;\n}\n\n.wpstg-form-group > .wpstg-checkbox > input[type='checkbox'] {\n margin-left: 10px;\n}\n\n@media only screen and (max-width: 768px) {\n .wpstg-form-group > label {\n min-width: auto;\n width: auto;\n }\n\n .wpstg-text-field > input {\n width: 100%;\n }\n\n .wpstg-text-field > .wpstg-code-segment {\n margin-left: 0;\n min-width: 100%;\n }\n\n .wpstg-tab-section {\n width: calc(100vw - 60px);\n max-width: 450px;\n }\n}\n\n.wpstg-rounded {\n border-radius: 3px;\n}\n\n.wpstg-white-border {\n border: 1px solid white !important;\n}\n\n.wpstg-m-0 {\n margin: 0;\n}\n\n.wpstg-mt-10px {\n margin-top: 10px !important;\n}\n\n.wpstg-my-10px {\n margin-top: 10px !important;\n margin-bottom: 10px !important;\n}\n\n.wpstg-w-100 {\n width: 100%;\n}\n\n.wpstg-box-shadow {\n box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);\n}\n\n.wpstg-float-left {\n float: left;\n}\n\n.wpstg-bold-text {\n font-weight: bold;\n}\n\n.wpstg-warning.notice {\n border-left: 4px solid #ffba00;\n}\n\n.wpstg-confirmation-label {\n background-color: #5b9dd9;\n color: #fff;\n padding: 2px;\n border-radius: 3px;\n}\n\n.wpstg-my-6px {\n margin-bottom: 6px;\n margin-top: 6px;\n}\n\n.wpstg-mb-10px {\n margin-bottom: 10px;\n}\n\n.wpstg-clear-both {\n clear: both;\n}\n\n.wpstg-font-italic {\n font-style: italic;\n}\n\n.wpstg-mt-20px {\n margin-top: 20px;\n}\n\n.wpstg-welcome-container {\n border: 2px solid white;\n padding: 20px;\n margin-bottom: 20px;\n}\n\n.wpstg-ml-30px {\n margin-left: 30px;\n}\n\n.wpstg-text-center {\n text-align: center;\n}\n\n.wpstg-feedback-link {\n text-decoration: none;\n}\n\n.wpstg-feedback-span {\n display: block;\n margin-bottom: 3px;\n}\n\n#wpstg-confirm-backup-restore-data {\n margin: 40px;\n text-align: left;\n}\n\n#wpstg-confirm-backup-restore-wrapper {\n margin: 30px;\n margin-top: 0;\n}\n\n#wpstg-confirm-backup-restore-wrapper h3 {\n color: #E01E5A;\n}\n\n#wpstg-progress-db,\n#wpstg-progress-backup {\n background-color: #3fa5ee;\n}\n\n#wpstg-progress-sr,\n#wpstg-progress-files.wpstg-pro {\n background-color: #3c9ee4;\n}\n\n#wpstg-progress-dirs,\n#wpstg-progress-data {\n background-color: #3a96d7;\n}\n\n#wpstg-progress-files:not(.wpstg-pro),\n#wpstg-progress-finishing {\n background-color: #378cc9;\n}\n\n.wpstg-issue-resubmit-confirmation.wpstg--swal2-container,\n.wpstg-swal2-container.wpstg--swal2-container {\n z-index: 10500;\n}\n\n.wpstg-swal2-container.wpstg-swal2-loading .wpstg--swal2-actions,\n.wpstg-swal2-container.wpstg-swal2-loading .wpstg--swal2-header {\n display: none;\n}\n\nbody.toplevel_page_wpstg_backup .wpstg--swal2-container .wpstg--swal2-content,\nbody.toplevel_page_wpstg_clone .wpstg--swal2-container .wpstg--swal2-content {\n z-index: 2;\n}\n\n.toplevel_page_wpstg_clone #swal2-content h2 {\n color: #565656;\n}\n\n.toplevel_page_wpstg_clone #swal2-content {\n line-height: 1.5em;\n}\n\ndiv#exportUploadsWithoutDatabaseWarning {\n font-style: italic;\n font-size: 0.9rem;\n margin: 10px;\n padding: 10px;\n border: 1px solid #e3e3e3;\n border-radius: 5px;\n text-align: center;\n background-color: #fafafa;\n}\n\n.wpstg-advanced-options-dropdown-wrapper {\n display: none; /* ENABLE WHEN WE HAVE ADVANCED OPTIONS FOR EXPORTING */\n margin-top: 20px;\n}\n\n.wpstg--modal--backup--import--search-replace--wrapper {\n text-align: left;\n margin-top: 20px;\n}\n\n.wpstg--modal--backup--import--search-replace--new--wrapper {\n text-align: center;\n}\n\n.wpstg-import-backup-contains li {\n display: inline-block;\n}\n\n.wpstg-import-backup-contains li .wpstg-backups-contains {\n border-radius: 3px;\n color: #979797;\n background-color: #e3e3e3;\n border: 1px solid #c2c2c2;\n width: 17px;\n height: 17px;\n font-size: 17px;\n}\n\n.wpstg-import-backup-contains.wpstg-listing-single-backup li .wpstg-backups-contains {\n padding: 2px;\n background-color: white;\n border: 1px solid #c2c2c2;\n}\n\n.wpstg-import-backup-contains.wpstg-listing-single-backup li .wpstg-backups-contains > .wpstg--dashicons {\n filter: invert(50%);\n}\n\n.wpstg-import-backup-contains .wpstg--tooltiptext {\n width: 50px;\n font-size: x-small;\n padding: 5px;\n left: -25px;\n text-align: center;\n}\n\n.wpstg-import-backup-contains-title {\n display: inline-block;\n}\n\nul.wpstg-import-backup-contains {\n display: inline-block;\n}\n\n.wpstg-import-backup-name {\n display: inline-block;\n font-weight: bold;\n}\n\n.wpstg-backup-more-info-toggle {\n font-size: x-small;\n display: inline-block;\n font-style: italic;\n cursor: pointer;\n}\n\n.wpstg-backup-more-info-toggle::selection {\n background: none;\n}\n\nul.wpstg-import-backup-more-info {\n font-size: 14px;\n text-align: left;\n margin-bottom: 30px;\n margin-top: 10px;\n background-color: #f6f6f6;\n border: 1px solid #878787;\n border-radius: 3px;\n padding: 7px;\n cursor: pointer;\n}\n\nul.wpstg-import-backup-more-info:hover {\n background-color: #def2ff;\n border: 1px solid #25a1f0;\n}\n\nul.wpstg-import-backup-more-info li {\n height: 20px;\n}\n\n.wpstg-backup-list {\n max-width: 800px;\n}\n\n.wpstg-backup-list h3 {\n color:#3e3e3e;\n}\n\n.wpstg-backup-list ul ul {\n margin-block-start: 1em;\n margin-block-end: 1em;\n}\n\n.wpstg-push-confirmation-message {\n text-align: justify;\n font-size: 15px;\n}\n\n.wpstg-settings-row {\n padding-top: 10px;\n padding-bottom: 10px;\n}\n\n.wpstg-settings-title {\n font-weight: 600;\n}\n\n.wpstg-settings-form-group {\n display: flex;\n align-items: center;\n}\n\n.wpstg-settings-form-group > .wpstg-settings-message {\n width: 30%;\n padding: 0;\n margin: 7px 0 0;\n}\n\n/**\n * WP STAGING EXCLUSION RULES TABLE LAYOUT\n */\n\n.wpstg-excluded-filters-container {\n padding: 0;\n margin-top: 10px;\n margin-bottom: 10px;\n max-width: 100%;\n width: 100%;\n}\n\n.wpstg-excluded-filters-container > table {\n width: 100%;\n border-collapse: collapse;\n border-color: transparent;\n}\n\n.wpstg-excluded-filters-container td {\n padding-top: 4px;\n padding-bottom: 4px;\n height: 20px;\n}\n\n.wpstg-excluded-filters-container h4 {\n margin: 0;\n}\n\n.wpstg-exclude-filters-foot {\n display: flex;\n justify-content: flex-start;\n padding: 0;\n}\n\n/**\n * WP STAGING EXCLUSION RULE DROPDOWN STYLE\n */\n\n\n.wpstg-exclude-filter-dropdown > button:hover {\n background: #135e96;;\n border: 1px solid #135e96;;\n}\n\n.wpstg-exclude-filter-dropdown > .wpstg-dropdown-menu {\n width: 128px;\n}\n\n.wpstg-remove-exclude-rule {\n color: #fff !important;\n background-color: #e01e5a;\n border: 1px solid #e01e5a;\n width: 20px;\n height: 20px;\n border-radius: 10px;\n font-size: 24px;\n padding: 0;\n display: inline-flex;\n justify-content: center;\n outline: none;\n box-shadow: none;\n font-weight: 400;\n line-height: 0.7;\n margin-top: 5px;\n cursor: pointer;\n}\n\n.wpstg-remove-exclude-rule:hover {\n background-color: #E01E5A;\n border-color: #E01E5A;\n}\n\n.wpstg-code-block {\n margin-top: 4px;\n font-size: 1.2em;\n background: #f8f8f8;\n border-radius: 2px;\n}\n\n.wpstg-rule-info {\n background: #f8f8f8 !important;\n}\n\ncode.wpstg-code {\n display: inline-block;\n font-size: 11px;\n border: 1px solid #aaa;\n background: #fff;\n padding: 2px 4px;\n margin-bottom: 1px;\n color: #E01E5A;\n}\n\n.wpstg-exclusion-rule-info {\n color: #fff !important;\n background-color: #ffc107;\n border: 1px solid #ffc107;\n width: 14px;\n height: 14px;\n border-radius: 7px;\n font-size: 14px;\n padding: 0;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n outline: none;\n box-shadow: none;\n font-weight: 400;\n vertical-align: middle;\n}\n\n.wpstg-exclusion-rule-info:hover {\n background-color: #ffba0c;\n border: 1px solid #ffba0c;\n}\n\n/**\n * WP STAGING INPUTS EXCLUSION RULES\n */\n\n.wpstg-exclude-rule-input {\n font-size: 12px !important;\n padding: 2px 6px;\n box-shadow: none;\n outline: none !important;\n display: inline-block;\n font-weight: 400;\n line-height: 1.5;\n color: #222;\n border-radius: 0 !important;\n background-color: #fff;\n border: 1px solid #bbb;\n min-height: 24px !important;\n margin-top: 4px;\n margin-left: 4px;\n vertical-align: baseline !important;\n transition: all 0.3s cubic-bezier(.25, .8, .25, 1);\n width: 135px;\n}\n\n.wpstg-excluded-filters-container tbody > tr:last-child .wpstg-exclude-rule-input {\n margin-bottom: 4px;\n}\n\n.wpstg-exclude-rule-input:hover {\n border: 1px solid #999;\n}\n\n.wpstg-exclude-rule-input:focus {\n border: 1px solid #25A0F1 !important;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24) !important;\n}\n\n.wpstg-file-size-exclude-select,\n.wpstg-path-exclude-select {\n width: 135px;\n}\n\n.wpstg-file-size-exclude-select-small {\n width: 52px;\n}\n\n.wpstg-file-size-exclude-input {\n width: 75px;\n}\n\n.wpstg-staging-option-title {\n margin: 15px 0 0;\n}\n\n.wpstg-swal-push-container.wpstg--swal2-container {\n z-index: 9995;\n}\n\n#wpstg-scanning-files {\n padding-bottom: 5px;\n}\n\n#wpstg-scanning-files.wpstg-tab-section, #wpstg-scanning-db.wpstg-tab-section {\n padding-top: 10px;\n}\n\n.wpstg-reset-excludes-container {\n margin: 10px 0;\n}\n\n.wpstg-swal2-ajax-loader {\n width: 100%;\n height: 150px;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n@keyframes wpstg-loading-icon-anim {\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.wpstg-swal2-ajax-loader > img {\n width: 64px;\n height: 64px;\n animation: wpstg-loading-icon-anim 1s infinite linear;\n -webkit-animation: wpstg-loading-icon-anim 1s infinite linear;\n}\n\n.wpstg-swal2-container .wpstg-tab-section {\n width: auto !important;\n}\n\n#wpstg-no-staging-site-results {\n margin-top: 10px;\n max-width: 375px;\n}\n\nli#wpstg-backup-no-results {\n max-width: 500px;\n}\n\nli#wpstg-backup-no-results div, #wpstg-no-staging-site-results div {\n display: inline-block;\n text-align: center;\n}\n\nli#wpstg-backup-no-results .wpstg--dashicons, #wpstg-no-staging-site-results .wpstg--dashicons {\n filter: invert(50%);\n position: absolute;\n margin-top: 1px;\n}\n\nli#wpstg-backup-no-results .no-backups-found-text, #wpstg-no-staging-site-results .no-staging-site-found-text {\n color: #5d5d5d;\n margin-left: 20px;\n}\n\n@media only screen and (max-width: 680px) {\n li#wpstg-backup-no-results div, #wpstg-no-staging-site-results div {\n width: 100%;\n }\n}\n\n#wpstg--modal--backup--download-inner p.wpstg-download-modal-text {\n font-size: 16px;\n color: #565656;\n}\n\n#wpstg--modal--backup--download-inner h2 {\n color: #565656;\n}\n\n.wpstg-backup-restore-contains-database,\n.wpstg-backup-restore-contains-files {\n display: none;\n}\n\n.wpstg-green-button {\n background: #8bc34a;\n border: 1px solid #78a93f;\n color: white;\n text-shadow: 0 -1px 1px #78a93f, 1px 0 1px #78a93f, 0 1px 1px #40c921, -1px 0 1px #78a93f;\n}\n\n.wpstg-green-button:hover {\n background: #78a93f;\n}\n\n.wpstg-is-dir-loading {\n position: absolute;\n margin-top: -2px;\n margin-left: 8px;\n display: none;\n}\n\n.wpstg-ml-8px {\n margin-left: 8px;\n}\n\n.wpstg-mb-8px {\n margin-bottom: 8px;\n}\n\n\n.wpstg-btn-danger {\n background-color: #E01E5A;\n border: 1px solid #E01E5A;\n color: white;\n text-shadow: none;\n}\n\n.wpstg-btn-danger:hover {\n background: #c0194d;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);\n}\n\n.wpstg-swal2-container.wpstg-swal2-loading > .wpstg--swal2-modal {\n height: 200px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container:not(.wpstg-swal2-loading) > .wpstg--swal2-modal {\n max-width: 480px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container .wpstg--swal2-header {\n display: none;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container .wpstg--swal2-content {\n height: auto;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-tabs-wrapper {\n overflow-y: auto;\n height: auto !important;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content {\n font-size: 13px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-dir {\n margin-bottom: 4px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-subdir {\n margin-top: 4px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container.has-collapsible-open .wpstg--swal2-modal {\n height: calc(100vh - 70px);\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container.has-collapsible-open > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-tabs-wrapper {\n height: calc(100vh - 350px) !important;\n}\n\n.wpstg--swal2-actions.wpstg--modal--actions > button {\n margin-left: 4px;\n margin-right: 4px;\n text-transform: uppercase;\n text-shadow: initial;\n font-weight: 500;\n min-width: 80px;\n}\n\n.wpstg-swal-popup {\n max-width: 1200px !important;\n}\n\n.wpstg-swal-popup.wpstg-push-finished .wpstg--swal2-title {\n color: #a8a8a8;\n}\n\n.wpstg-swal-popup.wpstg-push-finished .wpstg--swal2-content {\n margin-top: 8px;\n color: #a8a8a8;\n}\n\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step.wpstg--swal2-active-progress-step,\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step,\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step-line {\n background: #25a1f0;\n}\n\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step-line {\n width: 2.75em;\n}\n\n.wpstg--dashicons {\n width: 16px;\n height: 16px;\n}\n\n.wpstg--dashicons.wpstg-dashicons-grey {\n filter: invert(20%);\n}\n\n.wpstg--dashicons.wpstg-dashicons-19 {\n width: 19px;\n height: 19px;\n}\n\n.wpstg--dashicons.wpstg-dashicons-21 {\n width: 21px;\n height: 21px;\n}\n\n#wpstg--tab--backup #wpstg-step-1 {\n display: flex;\n align-items: center;\n}\n\n.wpstg-advanced-options .wpstg--tooltip,\n#wpstg--tab--backup #wpstg-step-1 .wpstg--tooltip {\n border-bottom: 0 solid transparent;\n display: inline-flex;\n align-items: center;\n}\n\n#wpstg--tab--backup #wpstg-step-1 .wpstg--tooltip {\n border-bottom: 0 solid transparent;\n display: flex;\n align-items: center;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext-backups::after {\n left: calc(20% + 2px);\n}\n\n.wpstg-listing-single-backup .wpstg--dashicons {\n width: 17px;\n height: 17px;\n}\n\n.wpstg-100-width {\n width: 100px;\n}\n\n.wpstg-caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px solid;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n transition: transform 0.2s;\n cursor: pointer;\n}\n\n.wpstg-caret.wpstg-caret-up {\n transform: rotate(-180deg);\n}\n\n.wpstg-advanced-options-site label {\n font-size: 16px;\n display: block;\n margin: .5em 0;\n}\n\n#wpstg-confirm-backup-restore-data {\n font-size: 18px;\n margin: 0;\n margin-top: 30px;\n}\n\n/* Sweetalert WP STAGING Theme */\n\nbody.toplevel_page_wpstg_backup .wpstg--swal2-container.wpstg--swal2-backdrop-show,\nbody.toplevel_page_wpstg_clone .wpstg--swal2-container.wpstg--swal2-backdrop-show {\n background: rgba(0, 0, 0, .6);\n z-index: 9995;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup {\n border-radius: 8px;\n z-index: 9999;\n padding: 24px;\n color: #565656;\n font-family: Verdana, Geneva, Tahoma, sans-serif;\n}\n\n.wpstg-swal-popup .wpstg--swal2-title {\n font-size: 22px;\n color: #565656;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-title {\n align-self: flex-start; /* For an actual Swal title */\n text-align: left; /* Manually adding this class to a non flex display */\n margin-bottom: 0;\n}\n\n.wpstg-swal-popup .wpstg--swal2-close {\n top: 8px;\n right: 8px;\n z-index: 5;\n}\n\n.wpstg-swal-popup .wpstg--swal2-close:focus {\n outline: none;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-actions {\n justify-content: flex-end;\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button {\n border-radius: 4px;\n font-weight: 900;\n border: 0;\n font-size: 15px;\n padding: 10px 12px;\n text-transform: capitalize;\n line-height: normal;\n height: 40px;\n min-width: 100px;\n text-shadow: none;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-actions > button {\n margin-left: 8px;\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button.wpstg--swal2-cancel {\n border: 1px solid rgba(29, 28, 29, 0.3);\n background: #fff;\n color: rgb(29, 28, 29);\n font-weight: 500;\n width: 100px;\n text-shadow: none;\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button:hover {\n box-shadow: 0 1px 3px 0 rgba(0 0 0 .1);\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button.wpstg--swal2-cancel:hover {\n background: rgba(28, 29, 28, .04);\n}\n\n#wpstg-backup-name-input {\n height: 44px;\n font-size: 18px;\n}\n\n.wpstg-restore-finished-container .wpstg--swal2-title {\n color: #565656 !important;\n}\n\n/*#wpstg-restore-success {\n color: #565656;\n}*/\n\n.wpstg-restore-finished-container .wpstg--swal2-content {\n margin-top: 20px;\n color: #a8a8a8;\n}\n\n/* WP Staging Implementation of Windows Style Linear Loader */\n\n.wpstg-linear-loader > span[class*=\"wpstg-linear-loader-item\"] {\n height: 6px;\n width: 6px;\n background: #333;\n display: inline-block;\n margin: 12px 2px;\n border-radius: 100%;\n animation: wpstg_linear_loader 3s infinite;\n animation-timing-function: cubic-bezier(0.030, 0.615, 0.995, 0.415);\n animation-fill-mode: both;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(1) {\n animation-delay: 1s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(2) {\n animation-delay: 0.8s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(3) {\n animation-delay: 0.6s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(4) {\n animation-delay: 0.4s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(5) {\n animation-delay: 0.2s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(6) {\n animation-delay: 0s;\n}\n\n@keyframes wpstg_linear_loader {\n 0% {\n transform: translateX(-30px);\n opacity: 0;\n }\n 25% {\n opacity: 1;\n }\n 50% {\n transform: translateX(30px);\n opacity: 0;\n }\n 100% {\n opacity: 0;\n }\n}\n\n/* END - Windows Style Linear Loader */\n\n.wpstg--modal--backup--import--upload--content {\n padding: .75em;\n margin: 1em auto;\n}\n\n.wpstg--modal--backup--import--upload--content .wpstg-linear-loader {\n display: none;\n}\n\n#wpstg-multisite-disabled .wpstg-clone {\n width: 355px;\n}\n\n#wpstg-free-version-backups .wpstg-clone {\n text-align: center;\n}\n\n#wpstg-free-version-backups .wpstg-clone p {\n font-size: 16px;\n}\n\n.wpstg-staging-info li .backup-notes {\n word-break: break-word;\n}\n\n.wpstg--modal--import--upload--progress--title small {\n font-weight: normal;\n}\n\n#wpstg-report-issue-wrapper {\n position: relative;\n}\n\n#wpstg-report-issue-wrapper .arrow-up {\n width: 0;\n height: 0;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-bottom: 8px solid white;\n position: absolute;\n top: -8px;\n right: 40px;\n}\n\n.notice {\n margin: 10px 20px 0 2px;\n}\n\n.wpstg--notice {\n box-shadow: 0 1px 1px rgba(0, 0, 0, .04);\n margin: 20px 20px 20px 0px;\n padding: 1px 12px;\n}\n\n.wpstg--error a:hover {\n color: #eeeeee;\n}\n\n.wpstg--error, .wpstg--error a {\n background: #E01E5A;\n color: white;\n}\n\n/**\n * Buttons\n */\n\n.wpstg-button {\n display: inline-block;\n border-radius: 2px;\n cursor: pointer;\n padding: 2px 10px 2px 10px;\n text-transform: uppercase;\n font-weight: 500;\n outline: 0;\n transition: background-color .1s ease-in;\n text-decoration: none;\n}\n\n.wpstg-button.wpstg-save {\n background-color: #1687A7;\n color: white;\n}\n\n.wpstg-button.wpstg-save:hover {\n background-color: #276678;\n}\n\n\n.wpstg-button.wpstg-button-light {\n background-color: #f8f8f8;\n border: 1px solid #eee;\n color: #333;\n animation: background-color 0.3s;\n}\n\n.wpstg-button.wpstg-button-light:hover {\n background-color: #e0e0e0;\n border: 1px solid #e0e0e0;\n}\n\n.wpstg-buttons .spinner {\n float: none;\n margin: 0 0 0 5px;\n}\n\n.wpstg-button.danger {\n display: inline-block;\n text-decoration: none;\n text-align: center;\n text-transform: inherit;\n background-color: #E01E5A;\n color: white;\n border-radius: 2px;\n border-color: transparent;\n}\n\n.wpstg-button.danger:hover {\n background-color: #c0194d;\n}\n\n.wpstg-button--big {\n display: inline-block;\n padding: 10px;\n min-width: 170px;\n font-size: 16px;\n text-decoration: none;\n text-align: center;\n margin-top: 20px;\n color: white;\n border-radius: 3px;\n}\n\n.wpstg-button--primary {\n display: inline-block;\n text-decoration: none;\n font-size: 13px;\n line-height: 2.15384615;\n min-height: 30px;\n margin: 0;\n padding: 0 10px;\n cursor: pointer;\n border: 1px solid rgba(29, 28, 29, 0.3);\n -webkit-appearance: none;\n border-radius: 2px;\n white-space: nowrap;\n box-sizing: border-box;\n color: #171717;\n}\n\n.wpstg-button--primary:hover {\n background: rgba(28, 29, 28, .04);\n color: black;\n}\n\n.wpstg-button--secondary {\n display: inline-block;\n background-color: transparent;\n color: #95a5a6;\n border-radius: 2px;\n border: 1px solid rgba(29, 28, 29, 0.3);\n cursor: pointer;\n padding: 4px 10px 2px 10px;\n font-weight: 500;\n outline: 0;\n transition: background-color .1s ease-in;\n text-decoration: none;\n}\n\n.wpstg-button--red {\n background-color: #E01E5A;\n border-color: #E01E5A;\n color: white;\n}\n\n.wpstg-button--red:hover {\n background-color: #d02358;\n border-color: #e0255f;\n color: white;\n}\n\n.wpstg-button--cta-red {\n background-color: #fe008f;\n border-color: #E01E5A;\n color: white;\n}\n\n.wpstg-button--cta-red:hover {\n background-color: #f31391;\n border-color: #e0255f;\n color: white;\n}\n\n.wpstg-button--blue {\n background-color: #25A0F1;\n border-color: #25A0F1;\n color: white;\n}\n\n.wpstg-button--blue:hover {\n background-color: #259be6;\n border-color: #259be6;\n color: white;\n}\n\n#wpstg-button-backup-upgrade {\n font-size: 16px;\n}\n\n.wpstg-staging-status {\n color: #E01E5A;\n}\n\n#wpstg-push-changes,\n#wpstg-start-updating,\n#wpstg-save-clone-data {\n margin-left: 5px;\n}\n\ninput.wpstg-textbox {\n border: 1px solid #aaa;\n border-radius: .25rem;\n padding: 0.25rem 0.5rem;\n font-size: 14px;\n}\n\ninput.wpstg-textbox:focus {\n outline: 0;\n border-color: #259be6;\n -webkit-box-shadow: 0 0 0 0.1rem rgba(221, 221, 221, .35);\n box-shadow: 0 0 0 0.1rem rgba(221, 221, 221, .35);\n}\n\ninput.wpstg-textbox::placeholder {\n color: #888;\n}\n\n.wpstg--advance-settings--checkbox {\n display: flex;\n align-items: center;\n}\n\n.wpstg--advance-settings--checkbox > label {\n font-size: 14px;\n font-weight: bolder;\n width: 165px;\n display: inline-block;\n}\n\n.wpstg--advance-settings--checkbox > .wpstg--tooltip {\n margin-top: 5px;\n margin-left: 5px;\n position: relative;\n display: inline-block;\n border-bottom: 0px solid transparent;\n}\n\n.wpstg--advance-settings--checkbox > .wpstg--tooltip > .wpstg--tooltiptext {\n top: 18px;\n left: -150px;\n}\n\n\ndiv#wpstg-restore-wait {\n display: none;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n height: 100vh;\n width: 100vw;\n position: fixed;\n top: 0;\n left: 0;\n background: white;\n z-index: 99999;\n}\n\ndiv#wpstg-restore-wait .wpstg-title {\n font-weight: bold;\n}\n\ndiv#wpstg-restore-wait div {\n font-size: 16px;\n margin-top: 12px;\n}\n\n.resumable-browse {\n cursor: pointer;\n}\n\n.resumable-browse a {\n text-decoration: underline;\n}\n\n.wpstg-upload-text {\n font-weight: 600;\n}\n\n.wpstg--modal--backup--import--upload--container.dragover {\n transition: background-color 0.7s;\n background-color: #94dc96;\n color: #FFF;\n}\n\n.wpstg--modal--backup--import--upload--container.dragover * {\n pointer-events: none; /* Avoids flickering when dragging to drop a file */\n}\n\n.wpstg--modal--backup--import--upload--container.dragover .wpstg-upload-text {\n display: none;\n}\n\n.wpstg--modal--backup--import--upload--container.dragover .wpstg-dragover-text {\n display: block;\n}\n\n.wpstg--modal--backup--import--upload--container .wpstg-dragover-text {\n display: none;\n}\n\n#wpstg-invalid-license-message, #wpstg-invalid-license-message a {\n font-weight: 500;\n color: #E01E5A;\n margin-left: 6px;\n}\n\n#wpstg-sidebar--banner {\n max-width: 200px;\n}\n\n@media screen and (max-width: 1234px) {\n .wpstg-h2 {\n font-size: 24px;\n }\n\n #wpstg-welcome li {\n font-size: 14px;\n }\n}\n\n.wpstg-exclamation {\n color: #ffffff;\n border-radius: 100%;\n background-color: #E01E5A;\n width: 20px;\n height: 20px;\n text-align: center;\n font-weight: bold;\n display: inline-block;\n margin: 6px;\n}\n\n.wpstg--tab--contents {\n padding-top: 1px;\n}\n\n.wpstg-swal-show.wpstg--swal2-show {\n -webkit-animation: wpstg-swal-show 0.2s !important;\n animation: wpstg-swal-show 0.2s !important;\n}\n\n@-webkit-keyframes wpstg-swal-show {\n 0% {\n transform: scale(0.3);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes wpstg-swal-show {\n 0% {\n transform: scale(0.3);\n }\n 100% {\n transform: scale(1);\n }\n}\n"]}
1
+ {"version":3,"sources":["wpstg-admin.css"],"names":[],"mappings":"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","file":"wpstg-admin.min.css","sourcesContent":["/**\n * WPSTG Admin CSS\n *\n * @package WPSTG\n * @subpackage Admin CSS\n * @copyright Copyright (c) 2021, René Hermenau\n * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License\n*/\n\n/* Colors */\n\n.wpstg--violet {\n color: #9d37ae;\n}\n\n.wpstg-border--violet {\n border: 1px solid #9d37ae;\n}\n\n.wpstg--red {\n color: #E01E5A;\n}\n\n.wpstg-cta--red {\n color: #fe008f;\n}\n\n.wpstg--blue {\n color: #24a1f0;\n}\n\n.wpstg--darkblue {\n color: #0e86d9;\n}\n\n.wpstg--green {\n color: #83c11f;\n}\n\n.wpstg--grey {\n color: #3e3e3e;\n}\n\n.wpstg--darkgrey {\n color: #1b1b1b;\n}\n\n.wpstg--filter--svg {\n filter: invert(24%) sepia(11%) saturate(558%) hue-rotate(169deg) brightness(97%) contrast(91%);\n}\n\n/* CSS for Tabs */\n\nbody.wp-staging-pro_page_wpstg_backup,\nbody.toplevel_page_wpstg_clone,\nbody.wp-staging-pro_page_wpstg-settings,\nbody.wp-staging-pro_page_wpstg-tools,\nbody.wp-staging-pro_page_wpstg-license {\n background-color: #f3f5f7;\n}\n\n#wpstg-tab-container ul {\n list-style: none;\n margin: 0;\n padding: 0;\n background: #f1f1f1;\n float: left;\n}\n\n#wpstg-tab-container ul li:first-child.selected-tab {\n border-top: none;\n}\n\n#wpstg-tab-container ul li a.selected-tab {\n font-weight: bold;\n text-decoration: none;\n}\n\n#wpstg-tab-container .row {\n padding-top: 10px;\n padding-bottom: 12px;\n}\n\n.wpstg-tabs-container .nav-tab-wrapper {\n padding: 0;\n}\n\n#wpstg-tab-container .row label strong,\n#wpstg-tab-container .row strong {\n font-weight: bold;\n}\n\n.wpstg-tabs a {\n padding: 5px;\n}\n\n#wpstg-tab-container > ul > li.wpstg-tabs.active {\n background-color: white;\n}\n\n#wpstg_settingsgeneral_header .row:nth-child(3),\n#wpstg_settingsgeneral_header .row:nth-child(4) {\n display: none;\n}\n\n#wpstg-tab-container .wpstg-settings-panel {\n padding: 0 20px 20px 20px;\n overflow: auto;\n}\n\n#wpstg-tab-container .wpstg-form-table th {\n vertical-align: top;\n text-align: left;\n padding: 20px 10px 20px 0;\n line-height: 1.3;\n font-weight: bold;\n font-size: 14px;\n color: #484848;\n width: 30%;\n}\n\n#wpstg-tab-container .wpstg-form-table tr {\n border-bottom: 1px solid #E7E7E7;\n}\n\n#wpstg-tab-container span.description {\n display: block;\n font-weight: 400;\n font-style: normal;\n font-size: 13px;\n margin-top: 7px;\n color: #484848;\n}\n\n#wpstg-tab-container .col-title {\n color: #484848;\n}\n\n@media only screen and (max-width: 680px) {\n #wpstg-tab-container ul {\n float: none;\n }\n\n #wpstg-tab-container .wpstg-form-table tr > th {\n width: 100%;\n }\n\n #wpstg-tab-container span.description {\n font-size: 14px;\n }\n\n #wpstg-tab-container .wpstg-form-table tr > th,\n #wpstg-tab-container .wpstg-form-table tr > td {\n padding: 10px;\n }\n}\n\n#wpstg-tab-container ul li {\n margin-bottom: 0;\n}\n\n#wpstg-tab-container ul li a {\n display: block;\n padding: 10px 4px 10px 14px;\n border-width: 1px 0;\n border-style: solid;\n border-top-color: white;\n border-bottom-color: #e7e7e7;\n text-decoration: none;\n color: #0097DF;\n font-weight: bold;\n}\n\n#wpstg-tab-container ul li a:hover {\n background-color: #e5e5e5;\n color: #777777;\n}\n\n.wpstg-logo {\n display: block;\n font-size: 16px;\n padding-top: 20px;\n width: 220px;\n float: left;\n}\n\n.wpstg-logo img {\n max-width: 212px;\n}\n\n.wpstg-version {\n display: block;\n padding-top: 40px;\n color: #9b9b9b;\n}\n\n.wpstg_admin .nav-tab {\n color: #3C3C3C;\n}\n\n#wpstg-tab-container table tbody tr:nth-child(1) > th > div {\n font-size: 20px;\n}\n\n/* Cloning workflow */\n\n#wpstg-clonepage-wrapper {\n margin-bottom: 20px;\n width: 98%;\n}\n\n@media screen and (min-width: 1090px) {\n #wpstg-clonepage-wrapper {\n float: left;\n margin-bottom: 20px;\n }\n}\n\n#wpstg-steps {\n margin-top: 0px;\n margin-left: 20px;\n}\n\n#wpstg-steps li {\n color: #444;\n line-height: 20px;\n padding-right: 10px;\n float: left;\n}\n\n.wpstg-step-num {\n border: 1px solid #3e3e3e;\n border-radius: 3px;\n display: inline-block;\n width: 20px;\n height: 20px;\n text-align: center;\n margin-right: 5px;\n}\n\n.wpstg-current-step {\n font-weight: bold;\n}\n\n.wpstg-current-step .wpstg-step-num {\n background: #3e3e3e;\n color: #eee;\n}\n\n.wpstg-box {\n margin: 10px 0;\n padding: 10px;\n position: relative;\n overflow: hidden;\n transition: border-color .2s ease-in-out;\n}\n\n.wpstg-clone {\n margin-bottom: 10px;\n padding: 16px;\n position: relative;\n transition: border-color .2s ease-in-out;\n background-color: #ffffff;\n color: #3e3e3e;\n border-radius: 3px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .1);\n}\n\n.wpstg-clone.active {\n border-color: #1d94cf;\n}\n\n.wpstg-clone-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.wpstg-clone-title {\n display: inline-block;\n font-size: 15px;\n max-width: 300px;\n text-decoration: none;\n font-weight: bold;\n color: #3e3e3e;\n}\n\n.wpstg-clone-title:hover {\n color: #111111;\n}\n\n.wpstg-clone-actions {\n display: flex;\n margin-top: 5px;\n}\n\n.wpstg-dropdown {\n position: relative;\n}\n\n.wpstg-clone-actions .wpstg-dropdown-toggler {\n text-decoration: none;\n background: #25a1f0;\n padding: 6px 10px;\n border-radius: 2px;\n font-size: 14px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .2);\n color: #ffffff;\n}\n\n.wpstg-clone-actions .wpstg-dropdown-toggler:hover {\n background: #002648;\n color: white;\n}\n\n.wpstg-dropdown {\n position: relative;\n}\n\n.wpstg-dropdown > .wpstg-dropdown-menu {\n background: #fff;\n display: none;\n flex-direction: column;\n position: absolute;\n right: 0;\n top: calc(100% + 4px);\n padding: 8px;\n border-radius: 2px;\n width: 100px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .2);\n z-index: 1000;\n}\n\n.wpstg-dropdown > .wpstg-dropdown-menu.wpstg-menu-dropup {\n top: auto;\n bottom: 100%;\n transform: translate3d(0px, -3px, 0px);\n}\n\n.wpstg-dropdown > .wpstg-dropdown-menu.shown {\n display: flex;\n}\n\n.wpstg-clone-action,\n.wpstg-dropdown-action {\n color: #3e3e3e;\n padding: 6px 8px;\n border-radius: 3px;\n text-decoration: none;\n position: relative;\n transition: color .2s ease-in-out;\n border-bottom: 1px solid #f3f3f3;\n}\n\n.wpstg-clone-action:hover,\n.wpstg-dropdown-action:hover {\n background: rgba(0, 0, 0, 0.05);\n}\n\n.wpstg-dropdown-action {\n color: #3e3e3e;\n background: transparent;\n border: 0 solid black;\n outline: none;\n box-shadow: none;\n}\n\n.wpstg-remove-clone:hover {\n color: #E01E5A;\n}\n\n.wpstg-clone-action:last-child {\n border: none;\n}\n\n.wpstg-clone:hover .wpstg-clone-action {\n display: inline-block;\n}\n\n#wpstg-show-error-details:focus,\n#wpstg-workflow .wpstg-clone-action {\n outline: none;\n box-shadow: none;\n}\n\n.wpstg-link-btn {\n background: #45a1c9;\n color: #fff;\n display: inline-block;\n padding: 5px 10px;\n text-decoration: none;\n vertical-align: baseline;\n transition: all .2s ease-in-out;\n}\n\n.wpstg-link-btn:hover,\n.wpstg-link-btn:focus {\n color: #fff;\n outline: none;\n box-shadow: none;\n}\n\n#wpstg-workflow .wpstg-link-btn:active {\n vertical-align: baseline;\n}\n\n.wpstg-link-btn[disabled] {\n background: #777 !important;\n border-color: #555 !important;\n pointer-events: none;\n}\n\n#wpstg-cancel-cloning,\n#wpstg-cancel-cloning-update {\n margin-top: 5px;\n}\n\n#wpstg-cancel-cloning.success,\n#wpstg-cancel-cloning.success {\n background: #64dd58;\n border-color: #54bd4a;\n}\n\n#wpstg-error-wrapper,\n#wpstg-error-details {\n display: none;\n padding-top: 10px;\n font-size: 13px;\n clear: both;\n}\n\n#wpstg-show-error-details {\n display: inline-block;\n margin-left: 5px;\n color: #555;\n text-decoration: none;\n transition: color .2s ease-in-out;\n}\n\n#wpstg-show-error-details:hover {\n color: #1d94cf;\n}\n\n#wpstg-error-details {\n border-left: 5px solid #E01E5A;\n padding: 10px;\n width: 500px;\n}\n\n#wpstg-try-again {\n display: none;\n}\n\n#wpstg-home-link {\n float: right;\n}\n\n.wpstg-loader {\n content: url('../../img/loading.gif');\n margin-top: 10px;\n display: none;\n}\n\n.wpstg-loader.wpstg-finished {\n display: block;\n content: \"Finished\";\n background-color: #00c89a;\n color: white;\n padding: 2px 10px;\n margin-top: 0;\n border-radius: 3px;\n}\n\n#wpstg-workflow {\n max-width: 800px;\n position: relative;\n clear: both;\n padding-top: 20px;\n float: left;\n min-width: 500px;\n min-height: 380px;\n padding-right: 20px;\n padding-bottom: 20px;\n}\n\n#wpstg-sidebar {\n float: left;\n max-width: 400px;\n display: block;\n margin-left: 10px;\n}\n\n#wpstg-workflow.loading::after,\n#wpstg-removing-clone.loading::after {\n background: rgba(255, 255, 255, .7);\n content: 'Loading... may take a while for huge websites';\n display: block;\n width: 100%;\n height: 100%;\n font-size: 20px;\n padding-top: 100px;\n text-align: center;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 99;\n}\n\n#wpstg-removing-clone.loading::after {\n content: 'REMOVING' !important;\n}\n\n#wpstg-existing-clones,\n#wpstg-removing-clone {\n position: relative;\n}\n\n#wpstg-existing-clones h3 {\n color: #3e3e3e;\n}\n\n#wpstg-removing-clone .wpstg-tab-section {\n display: block;\n}\n\n.wpstg-progress-bar {\n max-width: 900px;\n height: 27px;\n padding: 0;\n background-color: #d6d8d7;\n}\n\n.wpstg-progress {\n float: left;\n background: #3fa5ee;\n width: 0;\n height: 100%;\n transition: width .6s ease;\n color: white;\n line-height: 25px;\n text-align: center;\n overflow: hidden;\n}\n\n.wpstg-progress-files {\n background: #16b4f0;\n width: 0;\n height: 100%;\n transition: width .6s ease;\n color: white;\n line-height: 25px;\n text-align: center;\n}\n\n#wpstg-new-clone-id.wpstg-error-input,\n#wpstg-clone-path.wpstg-error-input {\n border: 1px solid #E01E5A;\n box-shadow: 0 0 2px rgba(255, 66, 53, .8);\n}\n\n#wpstg-new-clone-id {\n width: 450px;\n max-width: 100%;\n margin-left: 15px;\n}\n\n#wpstg-new-clone {\n background: #25a1f0;\n border-color: #2188c9;\n}\n\n#wpstg-new-clone:hover {\n background: #259be6;\n border-color: #2188c9;\n}\n\n#wpstg-clone-path {\n margin-left: 10px;\n width: 350px;\n}\n\n.wpstg-error-msg {\n color: #E01E5A;\n}\n\n#wpstg-clone-id-error {\n display: block;\n background-color: #f0f8ff;\n padding: 10px;\n margin: 20px;\n}\n\n#wpstg-start-cloning + .wpstg-error-msg {\n display: block;\n margin-top: 5px;\n}\n\n.wpstg-size-info {\n color: #999;\n font-weight: normal;\n position: relative;\n left: 2px;\n}\n\n.wpstg-db-table .wpstg-size-info {\n top: 2px;\n}\n\n.wpstg-db-table:hover {\n background-color: #f0f8ff;\n}\n\n#wpstg-workflow #wpstg-start-cloning {\n margin-left: 5px;\n vertical-align: baseline;\n}\n\n\n/* Tabs */\n\n.wpstg-tabs-wrapper {\n max-width: 640px;\n margin: 10px 0;\n}\n\n#wpstg-path-wrapper {\n border-bottom: 2px dashed #ccc;\n padding-bottom: 10px;\n margin-bottom: 10px;\n}\n\n.wpstg-tab-section {\n border-bottom: 1px solid #ddd;\n border-right: none;\n border-left: none;\n display: none;\n width: calc(100% - 72px);\n padding: 0px 36px;\n}\n\n.wpstg-tab-section::after {\n display: block;\n content: '';\n clear: both;\n}\n\n.wpstg-tab-header {\n border-bottom: 1px solid #ddd;\n border-right: none;\n border-left: none;\n color: #444;\n font-size: 16px;\n font-weight: bold;\n display: block;\n padding: 10px;;\n text-decoration: none;\n}\n\n.wpstg-tab-triangle {\n display: inline-block;\n margin-right: 12px;\n animation: transform 0.5s;\n width: 0;\n height: 0;\n margin-top: -3px;\n vertical-align: middle;\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-left: 10px solid;\n transition: transform 0.2s;\n cursor: pointer;\n}\n\n.wpstg-tab-triangle.wpstg-no-icon {\n margin-right: 2px;\n width: auto;\n height: auto;\n vertical-align: auto;\n border-top: 0px solid;\n border-bottom: 0px solid;\n border-left: 0px solid;\n}\n\n.wpstg-tab-triangle.wpstg-rotate-90 {\n transform: rotate(90deg);\n}\n\n.wpstg-tab-header:focus {\n color: #444;\n outline: none;\n box-shadow: none;\n}\n\n#wpstg-large-files {\n display: none;\n border: 1px dashed #ccc;\n padding: 10px 10px 10px;\n margin-top: 20px;\n position: relative;\n font-size: 12px;\n}\n\n#wpstg-large-files h3 {\n background: #fff;\n margin: 0;\n padding: 0 5px;\n position: absolute;\n top: -10px;\n left: 5px;\n}\n\n.wpstg-subdir {\n display: none;\n margin-left: 20px;\n}\n\n.wpstg-subdir.wpstg-push {\n display: block;\n margin-left: 20px;\n}\n\n.wpstg-dir a.disabled {\n color: #888;\n cursor: default;\n text-decoration: none;\n}\n\n.wpstg-check-subdirs {\n display: inline-block;\n margin-left: 10px;\n}\n\n.wpstg-notice-alert {\n display: block;\n background-color: #E01E5A;\n padding: 20px;\n max-width: 600px;\n margin-top: 10px;\n color: white;\n}\n\n.wpstg-notice--white {\n display: block;\n background-color: #ffffff;\n padding: 20px;\n max-width: 600px;\n margin-top: 10px;\n}\n\n.wpstg-notice-alert a {\n color: white;\n}\n\n.wpstg-notice-alert h3 {\n color: white;\n}\n\n.wpstg-header {\n font-weight: 400;\n line-height: 1.6em;\n font-size: 19px;\n border-bottom: 1px solid #DFDFDF;\n clear: both;\n padding-top: 10px;\n}\n\n#wpstg-clone-label {\n font-size: 14px;\n font-weight: bold;\n}\n\n.wpstg-log-details {\n height: 300px;\n overflow: scroll;\n max-width: 650px;\n font-family: monospace;\n font-size: 12px;\n line-height: 15px;\n border: 1px solid #FFF;\n background-color: black;\n color: #c0c0c0;\n padding: 3px;\n white-space: nowrap;\n margin-top: 15px;\n}\n\n#wpstg-finished-result {\n display: none;\n}\n\n#wpstg-remove-cloning {\n background: #ff3428;\n border-color: #e72f24;\n margin-top: 5px;\n}\n\n#wpstg-success-notice {\n padding: 10px;\n background-color: white;\n max-width: 900px;\n border: 1px solid #ccc;\n margin-top: 20px;\n}\n\n.wpstg_beta_notice {\n margin-bottom: 20px;\n}\n\n.wpstg-sysinfo {\n width: 700px;\n height: 700px;\n}\n\n.wpstg-form-table .col-title label {\n font-weight: 600;\n}\n\n.wpstg-form-table td:first-child {\n width: 30%;\n}\n\n.wpstg-share-button-container {\n margin: 5px 0;\n}\n\n.wpstg-share-button-container p {\n margin: 0 0 10px 0;\n}\n\n.wpstg-share-button {\n display: inline-block;\n}\n\n.wpstg-share-button a {\n text-decoration: none;\n}\n\n.wpstg-share-button .wpstg-share {\n font-family: sans-serif;\n font-weight: bold;\n text-decoration: none;\n text-align: center;\n}\n\n.wpstg-share-button .wpstg-share {\n -webkit-border-radius: 2px;\n -moz-border-radius: 2px;\n border-radius: 2px;\n color: #FFF;\n display: inline;\n font-size: 12px;\n padding: 4px 8px;\n}\n\n.wpstg-share-button-twitter .wpstg-share {\n background-color: #00ABF0;\n}\n\n.wpstg-share-button-facebook .wpstg-share {\n background-color: #3b5998;\n}\n\n.wpstg-share-button-googleplus .wpstg-share {\n background-color: #F53424;\n}\n\n.wpstg-share-button-twitter .share:active,\n.wpstg-share-button-facebook .share:active,\n.wpstg-share-button-googleplus .share:active {\n background-color: #353535;\n}\n\n#wpstg-check-space {\n margin-left: 8px;\n}\n\n#wpstg-welcome li {\n font-size: 18px;\n line-height: 29px;\n position: relative;\n padding-left: 23px;\n list-style: none !important;\n}\n\n#wpstg-welcome {\n margin-top: 20px;\n margin-right: 20px;\n background-color: white;\n}\n\n.wpstg-heading-pro {\n font-weight: bold;\n}\n\n.wpstg-h2 {\n margin-top: 0;\n margin-bottom: 1.2rem;\n font-size: 30px;\n line-height: 2.5rem;\n}\n\n#wpstg-welcome li:before {\n width: 1em;\n height: 100%;\n background: url(data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%2377B227%22%20d%3D%22M1671%20566q0%2040%2D28%2068l%2D724%20724%2D136%20136q%2D28%2028%2D68%2028t%2D68%2D28l%2D136%2D136%2D362%2D362q%2D28%2D28%2D28%2D68t28%2D68l136%2D136q28%2D28%2068%2D28t68%2028l294%20295%20656%2D657q28%2D28%2068%2D28t68%2028l136%20136q28%2028%2028%2068z%22%2F%3E%3C%2Fsvg%3E) left .4em no-repeat;\n background-size: contain;\n content: \"\";\n position: absolute;\n top: -2px;\n left: 0;\n color: #77b227;\n}\n\n.wpstg-h1 {\n margin-bottom: 1.35rem;\n font-size: 2.5em;\n line-height: 3.68rem;\n letter-spacing: normal;\n}\n\n.wpstg--swal2-content h1 {\n color: #444;\n}\n\n#wpstg-welcome h2 {\n margin: 0 0 15px;\n}\n\n#wpstg-welcome .wpstg-footer {\n clear: both;\n margin-top: 20px;\n font-style: italic;\n}\n\n#wpstg-footer {\n clear: both;\n margin-top: 20px;\n margin-right: 10px;\n padding-top: 50px;\n}\n\n#wpstg-footer a {\n text-decoration: none;\n}\n\n#wpstg-footer li {\n margin-bottom: 2px;\n list-style: circle;\n}\n\n#wpstg-footer ul {\n margin-left: 15px;\n margin-top: 0px;\n}\n\n.wpstg-footer--title {\n margin-left: 15px;\n}\n\n.wpstg-staging-info {\n margin-top: 8px;\n color: #3e3e3e;\n font-size: 12px;\n}\n\n.wpstg-staging-info a {\n color: #3e3e3e;\n}\n\n.wpstg-staging-info li {\n margin-bottom: 2px;\n}\n\n.wpstg-bold {\n font-weight: 600;\n}\n\n#wpstg-processing-status {\n margin-top: 5px;\n font-size: 13px;\n font-weight: 400;\n float: left;\n}\n\n#wpstg-processing-timer {\n margin-top: 5px;\n font-size: 13px;\n font-weight: 400;\n float: right;\n}\n\n#wpstg-report-issue-button {\n margin-left: 50px;\n border: 1px solid #E01E5A;\n color: #E01E5A;\n background-color: white;\n}\n\n#wpstg-report-issue-button:hover {\n background-color: #dc2b62;\n color: #fff;\n}\n\n.wpstg-blue-primary {\n display: inline-block;\n text-decoration: none;\n font-size: 13px;\n height: 28px;\n margin: 0;\n padding: 0 10px 1px;\n cursor: pointer;\n border-width: 1px;\n border-style: solid;\n -webkit-appearance: none;\n border-radius: 3px;\n white-space: nowrap;\n box-sizing: border-box;\n background: #25a1f0;\n border-color: #2188c9;\n color: #fff;\n text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;\n}\n\na.wpstg-blue-primary {\n padding: 5px 10px;\n height: auto;\n}\n\n.wpstg-blue-primary:hover {\n background-color: #259be6;\n}\n\n.wpstg-report-issue-form {\n position: absolute;\n z-index: 999;\n width: 300px;\n background-color: #fff;\n padding: 15px 15px 10px;\n border: 1px solid #e8e8e8;\n border-radius: 3px;\n box-shadow: 0 1px 0 0 #fff inset;\n display: none;\n right: 0;\n top: 35px;\n}\n\n@media (max-width: 600px) {\n .wpstg-report-issue-form {\n position: relative;\n }\n}\n\n.wpstg-report-show {\n display: block;\n}\n\n.wpstg-field input[type=text],\n.wpstg-field textarea {\n width: 100%;\n font-weight: 400;\n line-height: 1.4;\n margin-bottom: 4px;\n}\n\n.wpstg-report-email,\n.wpstg-report-hosting-provider {\n width: 100%;\n font-weight: 400;\n font-size: .8rem;\n height: 2.3rem;\n line-height: 2.3rem;\n border-radius: 3px;\n margin-bottom: 4px;\n padding: 0 10px;\n}\n\n.wpstg-report-description {\n border-radius: 3px;\n font-size: .8rem;\n padding: 6px 10px;\n resize: none;\n}\n\n.wpstg-report-privacy-policy {\n font-size: 12px;\n margin-bottom: 15px;\n}\n\n#wpstg-report-cancel {\n float: right;\n margin-right: 5px;\n font-weight: bold;\n}\n\n#wpstg-success-button {\n font-weight: bold;\n}\n\n.wpstg-message {\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n background-color: #f5e0de;\n border-radius: 3px;\n color: rgba(0, 0, 0, .6);\n height: auto;\n margin: 10px 0;\n min-height: 18px;\n padding: 6px 10px;\n position: relative;\n}\n\n.wpstg-message.wpstg-error-message {\n background-color: #f5e0de;\n color: #b65147;\n font-size: 12px;\n}\n\n.wpstg-message.wpstg-success-message {\n background-color: #d7f8e0;\n color: #515151;\n}\n\n.wpstg-message p {\n margin: 3px 0;\n font-size: 13px;\n}\n\n.wpstg-warning {\n display: block;\n padding: 10px;\n background-color: #ffb804;\n color: #ffffff;\n margin: 10px 10px 10px 0;\n}\n\n.wpstg-warning a {\n color: #ffffff;\n font-weight: bold;\n text-decoration: underline;\n}\n\n.wpstg-error {\n display: block;\n padding: 10px !important;\n background-color: #E01E5A !important;\n color: #ffffff;\n margin: 10px 10px 10px 0 !important;\n border-color: transparent !important;\n border-left-color: transparent !important;\n box-shadow: none !important;\n}\n\n.wpstg-error a {\n color: #ffffff;\n font-weight: bold;\n text-decoration: underline;\n}\n\n#wpstg-resume-cloning {\n display: none;\n}\n\n#wpstg-external-db th {\n text-align: left;\n width: 120px;\n}\n\n#wpstg-db-connect {\n font-weight: normal;\n}\n\n#wpstg-db-status {\n display: block;\n margin-top: 5px;\n padding: 5px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n text-decoration: none;\n text-align: center;\n}\n\n.wpstg-text-field > #wpstg-db-status {\n margin-top: 8px;\n margin-left: 150px;\n min-width: 300px;\n}\n\n.wpstg-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n\n.wpstg-failed {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n\n#wpstg_select_tables_cloning {\n height: 600px;\n font-size: 13px;\n}\n\n#wpstg_select_tables_pushing {\n height: 400px;\n font-size: 13px;\n}\n\n#wpstg-update-notify {\n background-color: #E01E5A;\n font-size: 14px;\n color: #ffffff;\n line-height: normal;\n padding: 10px;\n}\n\n#wpstg-update-notify a {\n color: #ffffff;\n font-weight: bold;\n}\n\n.wpstg-pointer {\n cursor: pointer;\n}\n\n.wpstg--tab--header {\n background-color: white;\n /* margin-bottom: 10px; */\n /* padding: 16px; */\n position: relative;\n transition: border-color .2s ease-in-out;\n background-color: #ffffff;\n color: #3e3e3e;\n border-radius: 2px;\n box-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .02);\n}\n\n.wpstg--tab--header ul {\n display: flex;\n}\n\n.wpstg--tab--header ul li {\n margin-right: 1em;\n margin-bottom: 0px;\n}\n\n.wpstg--tab--header ul li:last-child {\n margin-right: 0;\n}\n\n.wpstg--tab--header a {\n min-width: 150px;\n text-align: center;\n cursor: pointer;\n display: inline-block;\n padding: 1em 1.25em;\n padding-bottom: 9px;\n color: #c4c4c4;\n font-size: 18px;\n /*\n border: solid 1px;\n */\n}\n\n.wpstg--tab--header a.wpstg--tab--active {\n border-bottom: .4em solid #25A1F0;\n color: #25A1F0;\n}\n\n.wpstg--tab--header a:hover {\n background-color: #fefefe;\n border-bottom: 0.4em solid #25A1F0;\n color: #25A1F0;\n}\n\n.wpstg--tab--content {\n display: none;\n}\n\n.wpstg--tab--active {\n display: block;\n}\n\n.wpstg--text--strong,\n.wpstg--text--strong * {\n font-weight: bold !important;\n}\n\n.wpstg--text--danger {\n color: #a94442;\n}\n\n.wpstg--tooltip {\n position: relative;\n display: inline-block;\n border-bottom: 1px dotted black;\n margin-left: 10px;\n}\n\n.wpstg--tooltip.wpstg--tooltip-normal {\n margin-left: 0;\n border-bottom: 0;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext {\n visibility: hidden;\n width: 300px;\n background-color: #ffffff;\n color: #505050;\n text-align: left;\n padding: 12px;\n border-radius: 3px;\n position: absolute;\n z-index: 1;\n -webkit-box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n -moz-box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;\n}\n\n.wpstg--tooltiptext-backups {\n width: 120px;\n top: 100%;\n left: -150%;\n margin-left: -56px;\n margin-top: 4px;\n}\n\n.wpstg--tooltip.wpstg--exclude-rules--tooltip {\n border-bottom: 0px solid transparent;\n}\n\n.wpstg--tooltip.wpstg--exclude-rules--tooltip > .wpstg--tooltiptext {\n margin-top: 0px;\n margin-left: -150px;\n}\n\n/**\nTooltip top arrow\n */\n\n.wpstg--tooltip .wpstg--tooltiptext-backups::after {\n content: \" \";\n position: absolute;\n bottom: 100%;\n /* At the top of the tooltip */\n left: 50%;\n margin-left: 25px;\n border-width: 5px;\n border-style: solid;\n border-color: transparent transparent white transparent;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext.has-top-arrow {\n margin-top: 6px;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext.has-top-arrow::after {\n content: \" \";\n position: absolute;\n bottom: 100%;\n left: 50%;\n margin-left: -18px;\n border-width: 5px;\n border-style: solid;\n border-color: transparent transparent white transparent;\n}\n\n.wpstg--snaphot-restore-table tr {\n line-height: 12px;\n}\n\n.wpstg-float-left {\n float: left;\n}\n\n.wpstg-beta-notice {\n background-color: #b0e8b0;\n border-radius: 3px;\n padding: 7px;\n margin-bottom: 20px;\n}\n\n#wpstg-backup-name {\n font-size: 1.875em;\n font-weight: 600;\n}\n\n#wpstg_select_tables_cloning option:checked,\n#wpstg_select_tables_pushing option:checked {\n /* Cannot use background color here because Chrome and Firefox ignore it even if set to !important */\n -webkit-appearance: menulist-button;\n background-image: linear-gradient(0deg, #1e90ff 0%, #1e90ff 100%);\n}\n\n.wpstg--btn--cancel {\n background: #ff3428;\n border-color: #e72f24;\n color: #fff;\n height: auto;\n line-height: normal;\n font-size: 16px;\n padding: .5em;\n margin-bottom: 1.5em;\n}\n\n.wpstg--btn--cancel:hover {\n background: #ff3428;\n border-color: #e72f24;\n}\n\n.wpstg--process--content > .wpstg--swal2-html-container {\n padding: 4em 2em !important;\n}\n\n.wpstg--modal--process--logs,\n.wpstg--modal--error--logs {\n background: #ffffff;\n border: 1px solid #a8a8a8;\n border-radius: 3px;\n height: 300px;\n margin-top: 1em;\n display: none;\n padding-top: 10px;\n padding-left: 10px;\n overflow: auto;\n text-align: justify;\n}\n\n.wpstg--modal--error--logs {\n height: auto;\n max-height: 300px;\n}\n\n.wpstg--modal--process--logs p {\n font-size: 12px;\n white-space: nowrap;\n}\n\n.wpstg--modal--process--logs p.wpstg--modal--process--msg--info {\n color: #222222;\n}\n\n.wpstg--modal--process--logs p.wpstg--modal--process--msg--debug {\n color: #757575;\n}\n\n.wpstg--modal--process--title {\n color: #565656;\n margin: .25em 0;\n}\n\n.wpstg--modal--process--subtitle {\n margin: .5em 0;\n color: #565656;\n}\n\n.wpstg--modal--error--logs > p {\n text-align: left;\n font-size: 14px;\n color: #222222;\n}\n\n.wpstg--modal--process--logs p,\n.wpstg--modal--error--logs p {\n margin: 0px;\n margin-bottom: 2px;\n}\n\n.wpstg--modal--process--msg--error {\n color: #E01E5A;\n}\n\n.wpstg--modal--process--msg--critical {\n color: #E01E5A;\n}\n\n.wpstg--modal--process--msg--warning {\n color: darkorange;\n}\n\n.wpstg--modal--process--msg-found {\n font-size: 16px;\n color: #E01E5A;\n font-weight: bold;\n}\n\n.wpstg--modal--delete {\n text-align: left;\n margin-top: 8px;\n color: #565656;\n}\n\n.wpstg-swal-popup .wpstg--swal2-cancel.wpstg--btn--cancel {\n margin-bottom: 0;\n text-shadow: none !important;\n}\n\n.wpstg-swal-popup .wpstg-loader {\n display: inline-block !important;\n}\n\n.wpstg--modal--process--generic-problem {\n display: none;\n border-left: 5px solid #E01E5A;\n margin: .5em 0;\n}\n\n.wpstg--modal--process--logs--tail {\n font-size: 16px;\n color: #565656;\n background: none;\n border: none;\n cursor: pointer;\n}\n\n.wpstg--modal--backup--import--upload--title {\n color: #565656;\n}\n\n.wpstg--modal--backup--import--configure,\n.wpstg--modal--backup--import--upload--status,\n.wpstg--modal--backup--import--upload--container input[type=\"file\"] {\n display: none;\n}\n\n#wpstg--backups--import--file-list {\n font-size: 14px;\n font-weight: bold;\n}\n\n#wpstg--backups--import--file-list-empty {\n color: #E01E5A;\n}\n\n.wpstg--modal--backup--import--filesystem label {\n font-size: 14px;\n}\n\n.wpstg--modal--backup--import--filesystem button {\n margin-bottom: 20px;\n}\n\n.wpstg--modal--backup--import--upload {\n position: relative;\n min-height: 30px;\n}\n\n.wpstg--modal--backup--import--upload {\n color: #505050;\n}\n\n.wpstg--modal--backup--import--upload--container {\n position: relative;\n border-radius: 10px;\n margin: .5em;\n padding: 1em .5em;\n border: 3.5px dashed #dedede;\n transition: background-color 0.3s ease, color 0.3s ease;\n background-color: #f4fbff;\n min-height: 130px;\n}\n\n.wpstg--modal--backup--import--upload--container.wpstg--has-dragover span.wpstg--drop {\n display: inline-flex;\n}\n\n.wpstg--modal--backup--import--upload--container input[type='file'] {\n display: none;\n}\n\n.wpstg--modal--backup--import--upload--container img {\n margin-top: 10px;\n width: 4em;\n align-self: center;\n border: none;\n}\n\n.wpstg--modal--backup--import--upload--container span {\n margin-top: 1em;\n}\n\n.wpstg--backup--import--options > button {\n margin-top: 1em;\n padding: 1em;\n align-self: center;\n width: 185px;\n height: auto;\n line-height: normal;\n}\n\n.wpstg--backup--import--options {\n position: relative;\n display: flex;\n justify-content: center;\n}\n\n.wpstg--backup--import--options ul {\n display: none;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul {\n padding: 0;\n margin: 54px 0 0 0;\n display: block;\n position: absolute;\n width: 185px;\n background: #25a1f0;\n box-sizing: border-box;\n border-radius: 0 0 3px 3px;\n border-width: 1px;\n border-color: #2188c9;\n text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul li {\n border-bottom: .1em solid #25a1f0;\n margin: 0;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul li:hover {\n background-color: #25a1f0;\n}\n\n.wpstg--backup--import--options.wpstg--show-options ul li:last-child {\n border-bottom: none;\n}\n\n.wpstg--backup--import--options ul li button {\n cursor: pointer;\n background: none;\n border: none;\n margin: 0;\n width: 100%;\n color: white;\n height: 40px;\n line-height: 40px;\n}\n\n.wpstg--backup--import--options ul li button:hover {\n background-color: #259be6;\n}\n\n.wpstg--modal--backup--import--search-replace--info {\n margin: 1em 0;\n display: flex;\n flex-direction: row;\n}\n\n.wpstg--modal--backup--import--info p {\n text-align: left;\n margin: 0;\n}\n\n.wpstg--modal--backup--import--search-replace--wrapper button {\n align-self: center;\n}\n\n.wpstg--import--advanced-options--button {\n border: 0;\n border-radius: 3px;\n font-size: 18px;\n text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;\n cursor: pointer;\n}\n\n.wpstg--modal--backup--import--search-replace--new {\n color: white;\n background-color: #25a1f0;\n}\n\n.wpstg--modal--backup--import--search-replace--remove {\n color: white;\n background-color: #25a1f0;\n width: 22px;\n height: 22px;\n margin-left: 5px;\n}\n\n.wpstg--modal--backup--import--search-replace--input-group:first-child button {\n display: none;\n}\n\n.wpstg--modal--backup--import--search-replace--input--container {\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.wpstg--modal--backup--import--search-replace--input-group {\n width: 100%;\n border-bottom: 6px solid #f1f1f1;\n margin-bottom: 10px;\n}\n\n.wpstg--modal--backup--import--search-replace--input-group input {\n min-width: 250px;\n width: calc(50% - 4px - 11px - 5px); /* -4px is half of the padding; -11px is half of the button; -5 is the margin left of the button */\n display: inline-block;\n line-height: 10px;\n border: 1px solid #dedede;\n border-radius: 3px;\n color: #666;\n padding: 8px;\n margin-bottom: 12px;\n}\n\n.wpstg--modal--import--upload--process {\n display: none;\n position: relative;\n height: 30px;\n margin-top: 20px;\n margin-bottom: 20px;\n width: 100%;\n top: 0;\n left: 0;\n text-indent: 1em;\n white-space: nowrap;\n overflow: hidden;\n color: #333333;\n justify-content: center;\n align-items: center;\n}\n\n.wpstg--modal--import--upload--progress {\n position: absolute;\n background: #98d452;\n color: white;\n height: 100%;\n border-radius: 4px;\n left: 0;\n top: 0;\n}\n\n.wpstg--modal--import--upload--progress--title {\n z-index: 9;\n}\n\n.wpstg-fieldset:disabled {\n opacity: 0.8;\n border-top: 1px solid white;\n margin-top: 20px;\n}\n\n.wpstg-fieldset {\n padding-left: 20px;\n}\n\n.wpstg-fs-14 {\n font-size: 14px;\n}\n\n.wpstg-dark-alert {\n font-weight: bold;\n background-color: #0e86d9;\n padding: 15px;\n margin-top: 0px;\n color: white;\n}\n\n.wpstg-dark-alert .wpstg-button--cta-red {\n margin-left:10px;\n}\n\n.wpstg-form-group {\n display: block;\n width: 100%;\n margin-bottom: 8px;\n align-items: center;\n}\n\n.wpstg-form-group > label {\n display: block;\n font-weight: 700;\n}\n\n.wpstg-text-field > input {\n width: 300px;\n display: block;\n line-height: 1.5;\n}\n\n.wpstg-code-segment {\n display: block;\n}\n\n.wpstg-text-field > .wpstg-code-segment {\n margin-top: 4px;\n min-width: 300px;\n}\n\n.wpstg-form-group > .wpstg-checkbox {\n min-width: 100%;\n width: 100%;\n position: relative;\n}\n\n.wpstg-form-group > .wpstg-checkbox > input[type='checkbox'] {\n left: 150px;\n}\n\n.wpstg-rounded {\n border-radius: 3px;\n}\n\n.wpstg-white-border {\n border: 1px solid white !important;\n}\n\n.wpstg-ml-4 {\n margin-left: 4px;\n}\n\n#wpstg-confirm-backup-restore-data {\n margin: 40px;\n text-align: left;\n}\n\n#wpstg-advanced-settings hr {\n margin: 20px 0;\n}\n\n.wpstg-form-row {\n display: block;\n}\n\n.wpstg-form-row label,\n.wpstg-form-row input {\n display: table-cell;\n padding-left: 5px;\n padding-right: 5px;\n margin-top: 3px;\n margin-bottom: 3px;\n}\n\n.wpstg-form-row input {\n width: 400px;\n}\n\n.wpstg-form-row label {\n font-weight: bold;\n width: 1px;\n white-space: nowrap;\n}\n\n#wpstg-db-connect-output #wpstg-db-status {\n width: 390px;\n}\n\n.wpstg-fs-14 {\n font-size: 14px;\n}\n\n.wpstg-code-segment {\n display: block;\n}\n\n.wpstg-form-group > .wpstg-checkbox {\n min-width: 100%;\n width: 100%;\n}\n\n.wpstg-form-group > .wpstg-checkbox > input[type='checkbox'] {\n margin-left: 10px;\n}\n\n@media only screen and (max-width: 768px) {\n .wpstg-form-group > label {\n min-width: auto;\n width: auto;\n }\n\n .wpstg-text-field > input {\n width: 100%;\n }\n\n .wpstg-text-field > .wpstg-code-segment {\n margin-left: 0;\n min-width: 100%;\n }\n\n .wpstg-tab-section {\n width: calc(100vw - 60px);\n max-width: 450px;\n }\n}\n\n.wpstg-rounded {\n border-radius: 3px;\n}\n\n.wpstg-white-border {\n border: 1px solid white !important;\n}\n\n.wpstg-m-0 {\n margin: 0;\n}\n\n.wpstg-mt-10px {\n margin-top: 10px !important;\n}\n\n.wpstg-my-10px {\n margin-top: 10px !important;\n margin-bottom: 10px !important;\n}\n\n.wpstg-w-100 {\n width: 100%;\n}\n\n.wpstg-box-shadow {\n box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);\n}\n\n.wpstg-float-left {\n float: left;\n}\n\n.wpstg-bold-text {\n font-weight: bold;\n}\n\n.wpstg-warning.notice {\n border-left: 4px solid #ffba00;\n}\n\n.wpstg-confirmation-label {\n background-color: #5b9dd9;\n color: #fff;\n padding: 2px;\n border-radius: 3px;\n}\n\n.wpstg-my-6px {\n margin-bottom: 6px;\n margin-top: 6px;\n}\n\n.wpstg-mb-10px {\n margin-bottom: 10px;\n}\n\n.wpstg-clear-both {\n clear: both;\n}\n\n.wpstg-font-italic {\n font-style: italic;\n}\n\n.wpstg-mt-20px {\n margin-top: 20px;\n}\n\n.wpstg-welcome-container {\n border: 2px solid white;\n padding: 20px;\n margin-bottom: 20px;\n}\n\n.wpstg-ml-30px {\n margin-left: 30px;\n}\n\n.wpstg-text-center {\n text-align: center;\n}\n\n.wpstg-feedback-link {\n text-decoration: none;\n}\n\n.wpstg-feedback-span {\n display: block;\n margin-bottom: 3px;\n}\n\n#wpstg-confirm-backup-restore-data {\n margin: 40px;\n text-align: left;\n}\n\n#wpstg-confirm-backup-restore-wrapper {\n margin: 30px;\n margin-top: 0;\n}\n\n#wpstg-confirm-backup-restore-wrapper h3 {\n color: #E01E5A;\n}\n\n#wpstg-progress-db,\n#wpstg-progress-backup {\n background-color: #3fa5ee;\n}\n\n#wpstg-progress-sr,\n#wpstg-progress-files.wpstg-pro {\n background-color: #3c9ee4;\n}\n\n#wpstg-progress-dirs,\n#wpstg-progress-data {\n background-color: #3a96d7;\n}\n\n#wpstg-progress-files:not(.wpstg-pro),\n#wpstg-progress-finishing {\n background-color: #378cc9;\n}\n\n.wpstg-issue-resubmit-confirmation.wpstg--swal2-container,\n.wpstg-swal2-container.wpstg--swal2-container {\n z-index: 10500;\n}\n\n.wpstg-swal2-container.wpstg-swal2-loading .wpstg--swal2-actions,\n.wpstg-swal2-container.wpstg-swal2-loading .wpstg--swal2-header {\n display: none;\n}\n\nbody.toplevel_page_wpstg_backup .wpstg--swal2-container .wpstg--swal2-content,\nbody.toplevel_page_wpstg_clone .wpstg--swal2-container .wpstg--swal2-content {\n z-index: 2;\n}\n\n.toplevel_page_wpstg_clone #swal2-content h2 {\n color: #565656;\n}\n\n.toplevel_page_wpstg_clone #swal2-content {\n line-height: 1.5em;\n}\n\ndiv#exportUploadsWithoutDatabaseWarning {\n font-style: italic;\n font-size: 0.9rem;\n margin: 10px;\n padding: 10px;\n border: 1px solid #e3e3e3;\n border-radius: 5px;\n text-align: center;\n background-color: #fafafa;\n}\n\n.wpstg-advanced-options-dropdown-wrapper {\n display: none; /* ENABLE WHEN WE HAVE ADVANCED OPTIONS FOR EXPORTING */\n margin-top: 20px;\n}\n\n.wpstg--modal--backup--import--search-replace--wrapper {\n text-align: left;\n margin-top: 20px;\n}\n\n.wpstg--modal--backup--import--search-replace--new--wrapper {\n text-align: center;\n}\n\n.wpstg-import-backup-contains li {\n display: inline-block;\n}\n\n.wpstg-import-backup-contains li .wpstg-backups-contains {\n border-radius: 3px;\n color: #979797;\n background-color: #e3e3e3;\n border: 1px solid #c2c2c2;\n width: 17px;\n height: 17px;\n font-size: 17px;\n}\n\n.wpstg-import-backup-contains.wpstg-listing-single-backup li .wpstg-backups-contains {\n padding: 2px;\n background-color: white;\n border: 1px solid #c2c2c2;\n}\n\n.wpstg-import-backup-contains.wpstg-listing-single-backup li .wpstg-backups-contains > .wpstg--dashicons {\n filter: invert(50%);\n}\n\n.wpstg-import-backup-contains .wpstg--tooltiptext {\n width: 50px;\n font-size: x-small;\n padding: 5px;\n left: -25px;\n text-align: center;\n}\n\n.wpstg-import-backup-contains-title {\n display: inline-block;\n}\n\nul.wpstg-import-backup-contains {\n display: inline-block;\n}\n\n.wpstg-import-backup-name {\n display: inline-block;\n font-weight: bold;\n}\n\n.wpstg-backup-more-info-toggle {\n font-size: x-small;\n display: inline-block;\n font-style: italic;\n cursor: pointer;\n}\n\n.wpstg-backup-more-info-toggle::selection {\n background: none;\n}\n\nul.wpstg-import-backup-more-info {\n font-size: 14px;\n text-align: left;\n margin-bottom: 30px;\n margin-top: 10px;\n background-color: #f6f6f6;\n border: 1px solid #878787;\n border-radius: 3px;\n padding: 7px;\n cursor: pointer;\n}\n\nul.wpstg-import-backup-more-info:hover {\n background-color: #def2ff;\n border: 1px solid #25a1f0;\n}\n\nul.wpstg-import-backup-more-info li {\n height: 20px;\n}\n\n.wpstg-backup-list {\n max-width: 800px;\n}\n\n.wpstg-backup-list h3 {\n color:#3e3e3e;\n}\n\n.wpstg-backup-list ul ul {\n margin-block-start: 1em;\n margin-block-end: 1em;\n}\n\n.wpstg-push-confirmation-message {\n text-align: justify;\n font-size: 15px;\n}\n\n.wpstg-settings-row {\n padding-top: 10px;\n padding-bottom: 10px;\n}\n\n.wpstg-settings-title {\n font-weight: 600;\n}\n\n.wpstg-settings-form-group {\n display: flex;\n align-items: center;\n}\n\n.wpstg-settings-form-group > .wpstg-settings-message {\n width: 30%;\n padding: 0;\n margin: 7px 0 0;\n}\n\n/**\n * WP STAGING EXCLUSION RULES TABLE LAYOUT\n */\n\n.wpstg-excluded-filters-container {\n padding: 0;\n margin-top: 10px;\n margin-bottom: 10px;\n max-width: 100%;\n width: 100%;\n}\n\n.wpstg-excluded-filters-container > table {\n width: 100%;\n border-collapse: collapse;\n border-color: transparent;\n}\n\n.wpstg-excluded-filters-container td {\n padding-top: 4px;\n padding-bottom: 4px;\n height: 20px;\n}\n\n.wpstg-excluded-filters-container h4 {\n margin: 0;\n}\n\n.wpstg-exclude-filters-foot {\n display: flex;\n justify-content: flex-start;\n padding: 0;\n}\n\n/**\n * WP STAGING EXCLUSION RULE DROPDOWN STYLE\n */\n\n\n.wpstg-exclude-filter-dropdown > button:hover {\n background: #135e96;;\n border: 1px solid #135e96;;\n}\n\n.wpstg-exclude-filter-dropdown > .wpstg-dropdown-menu {\n width: 128px;\n}\n\n.wpstg-remove-exclude-rule {\n color: #fff !important;\n background-color: #e01e5a;\n border: 1px solid #e01e5a;\n width: 20px;\n height: 20px;\n border-radius: 10px;\n font-size: 24px;\n padding: 0;\n display: inline-flex;\n justify-content: center;\n outline: none;\n box-shadow: none;\n font-weight: 400;\n line-height: 0.7;\n margin-top: 5px;\n cursor: pointer;\n}\n\n.wpstg-remove-exclude-rule:hover {\n background-color: #E01E5A;\n border-color: #E01E5A;\n}\n\n.wpstg-code-block {\n margin-top: 4px;\n font-size: 1.2em;\n background: #f8f8f8;\n border-radius: 2px;\n}\n\n.wpstg-rule-info {\n background: #f8f8f8 !important;\n}\n\ncode.wpstg-code {\n display: inline-block;\n font-size: 11px;\n border: 1px solid #aaa;\n background: #fff;\n padding: 2px 4px;\n margin-bottom: 1px;\n color: #E01E5A;\n}\n\n.wpstg-exclusion-rule-info {\n color: #fff !important;\n background-color: #ffc107;\n border: 1px solid #ffc107;\n width: 14px;\n height: 14px;\n border-radius: 7px;\n font-size: 14px;\n padding: 0;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n outline: none;\n box-shadow: none;\n font-weight: 400;\n vertical-align: middle;\n}\n\n.wpstg-exclusion-rule-info:hover {\n background-color: #ffba0c;\n border: 1px solid #ffba0c;\n}\n\n/**\n * WP STAGING INPUTS EXCLUSION RULES\n */\n\n.wpstg-exclude-rule-input {\n font-size: 12px !important;\n padding: 2px 6px;\n box-shadow: none;\n outline: none !important;\n display: inline-block;\n font-weight: 400;\n line-height: 1.5;\n color: #222;\n border-radius: 0 !important;\n background-color: #fff;\n border: 1px solid #bbb;\n min-height: 24px !important;\n margin-top: 4px;\n margin-left: 4px;\n vertical-align: baseline !important;\n transition: all 0.3s cubic-bezier(.25, .8, .25, 1);\n width: 135px;\n}\n\n.wpstg-excluded-filters-container tbody > tr:last-child .wpstg-exclude-rule-input {\n margin-bottom: 4px;\n}\n\n.wpstg-exclude-rule-input:hover {\n border: 1px solid #999;\n}\n\n.wpstg-exclude-rule-input:focus {\n border: 1px solid #25A0F1 !important;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24) !important;\n}\n\n.wpstg-file-size-exclude-select,\n.wpstg-path-exclude-select {\n width: 135px;\n}\n\n.wpstg-file-size-exclude-select-small {\n width: 52px;\n}\n\n.wpstg-file-size-exclude-input {\n width: 75px;\n}\n\n.wpstg-staging-option-title {\n margin: 15px 0 0;\n}\n\n.wpstg-swal-push-container.wpstg--swal2-container {\n z-index: 9995;\n}\n\n#wpstg-scanning-files {\n padding-bottom: 5px;\n}\n\n#wpstg-scanning-files.wpstg-tab-section, #wpstg-scanning-db.wpstg-tab-section {\n padding-top: 10px;\n}\n\n.wpstg-reset-excludes-container {\n margin: 10px 0;\n}\n\n.wpstg-swal2-ajax-loader {\n width: 100%;\n height: 150px;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n@keyframes wpstg-loading-icon-anim {\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.wpstg-swal2-ajax-loader > img {\n width: 64px;\n height: 64px;\n animation: wpstg-loading-icon-anim 1s infinite linear;\n -webkit-animation: wpstg-loading-icon-anim 1s infinite linear;\n}\n\n.wpstg-swal2-container .wpstg-tab-section {\n width: auto !important;\n}\n\n#wpstg-no-staging-site-results {\n margin-top: 10px;\n max-width: 375px;\n}\n\nli#wpstg-backup-no-results {\n max-width: 500px;\n}\n\nli#wpstg-backup-no-results div, #wpstg-no-staging-site-results div {\n display: inline-block;\n text-align: center;\n}\n\nli#wpstg-backup-no-results .wpstg--dashicons, #wpstg-no-staging-site-results .wpstg--dashicons {\n filter: invert(50%);\n position: absolute;\n margin-top: 1px;\n}\n\nli#wpstg-backup-no-results .no-backups-found-text, #wpstg-no-staging-site-results .no-staging-site-found-text {\n color: #5d5d5d;\n margin-left: 20px;\n}\n\n@media only screen and (max-width: 680px) {\n li#wpstg-backup-no-results div, #wpstg-no-staging-site-results div {\n width: 100%;\n }\n}\n\n#wpstg--modal--backup--download-inner p.wpstg-download-modal-text {\n font-size: 16px;\n color: #565656;\n}\n\n#wpstg--modal--backup--download-inner h2 {\n color: #565656;\n}\n\n.wpstg-backup-restore-contains-database,\n.wpstg-backup-restore-contains-files {\n display: none;\n}\n\n.wpstg-green-button {\n background: #8bc34a;\n border: 1px solid #78a93f;\n color: white;\n text-shadow: 0 -1px 1px #78a93f, 1px 0 1px #78a93f, 0 1px 1px #40c921, -1px 0 1px #78a93f;\n}\n\n.wpstg-green-button:hover {\n background: #78a93f;\n}\n\n.wpstg-is-dir-loading {\n position: absolute;\n margin-top: -2px;\n margin-left: 8px;\n display: none;\n}\n\n.wpstg-ml-8px {\n margin-left: 8px;\n}\n\n.wpstg-mb-8px {\n margin-bottom: 8px;\n}\n\n\n.wpstg-btn-danger {\n background-color: #E01E5A;\n border: 1px solid #E01E5A;\n color: white;\n text-shadow: none;\n}\n\n.wpstg-btn-danger:hover {\n background: #c0194d;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);\n}\n\n.wpstg-swal2-container.wpstg-swal2-loading > .wpstg--swal2-modal {\n height: 200px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container:not(.wpstg-swal2-loading) > .wpstg--swal2-modal {\n max-width: 480px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container .wpstg--swal2-header {\n display: none;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container .wpstg--swal2-content {\n height: auto;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-tabs-wrapper {\n overflow-y: auto;\n height: auto !important;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content {\n font-size: 13px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-dir {\n margin-bottom: 4px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-subdir {\n margin-top: 4px;\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container.has-collapsible-open .wpstg--swal2-modal {\n height: calc(100vh - 70px);\n}\n\n.wpstg-reset-confirmation.wpstg-swal2-container.has-collapsible-open > .wpstg--swal2-modal > .wpstg--swal2-content .wpstg-tabs-wrapper {\n height: calc(100vh - 350px) !important;\n}\n\n.wpstg--swal2-actions.wpstg--modal--actions > button {\n margin-left: 4px;\n margin-right: 4px;\n text-transform: uppercase;\n text-shadow: initial;\n font-weight: 500;\n min-width: 80px;\n}\n\n.wpstg-swal-popup {\n max-width: 1200px !important;\n}\n\n.wpstg-swal-popup.wpstg-push-finished .wpstg--swal2-title {\n color: #a8a8a8;\n}\n\n.wpstg-swal-popup.wpstg-push-finished .wpstg--swal2-content {\n margin-top: 8px;\n color: #a8a8a8;\n}\n\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step.wpstg--swal2-active-progress-step,\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step,\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step-line {\n background: #25a1f0;\n}\n\n.wpstg-swal-popup .wpstg--swal2-progress-steps .wpstg--swal2-progress-step-line {\n width: 2.75em;\n}\n\n.wpstg--dashicons {\n width: 16px;\n height: 16px;\n}\n\n.wpstg--dashicons.wpstg-dashicons-grey {\n filter: invert(20%);\n}\n\n.wpstg--dashicons.wpstg-dashicons-19 {\n width: 19px;\n height: 19px;\n}\n\n.wpstg--dashicons.wpstg-dashicons-21 {\n width: 21px;\n height: 21px;\n}\n\n#wpstg--tab--backup #wpstg-step-1 {\n display: flex;\n align-items: center;\n}\n\n.wpstg-advanced-options .wpstg--tooltip,\n#wpstg--tab--backup #wpstg-step-1 .wpstg--tooltip {\n border-bottom: 0 solid transparent;\n display: inline-flex;\n align-items: center;\n}\n\n#wpstg--tab--backup #wpstg-step-1 .wpstg--tooltip {\n border-bottom: 0 solid transparent;\n display: flex;\n align-items: center;\n}\n\n.wpstg--tooltip .wpstg--tooltiptext-backups::after {\n left: calc(20% + 2px);\n}\n\n.wpstg-listing-single-backup .wpstg--dashicons {\n width: 17px;\n height: 17px;\n}\n\n.wpstg-100-width {\n width: 100px;\n}\n\n.wpstg-caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px solid;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n transition: transform 0.2s;\n cursor: pointer;\n}\n\n.wpstg-caret.wpstg-caret-up {\n transform: rotate(-180deg);\n}\n\n.wpstg-advanced-options-site label {\n font-size: 16px;\n display: block;\n margin: .5em 0;\n}\n\n#wpstg-confirm-backup-restore-data {\n font-size: 18px;\n margin: 0;\n margin-top: 30px;\n}\n\n/* Sweetalert WP STAGING Theme */\n\nbody.toplevel_page_wpstg_backup .wpstg--swal2-container.wpstg--swal2-backdrop-show,\nbody.toplevel_page_wpstg_clone .wpstg--swal2-container.wpstg--swal2-backdrop-show {\n background: rgba(0, 0, 0, .6);\n z-index: 9995;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup {\n border-radius: 8px;\n z-index: 9999;\n padding: 24px;\n color: #565656;\n font-family: Verdana, Geneva, Tahoma, sans-serif;\n}\n\n.wpstg-swal-popup .wpstg--swal2-title {\n font-size: 22px;\n color: #565656;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-title {\n align-self: flex-start; /* For an actual Swal title */\n text-align: left; /* Manually adding this class to a non flex display */\n margin-bottom: 0;\n}\n\n.wpstg-swal-popup .wpstg--swal2-close {\n top: 8px;\n right: 8px;\n z-index: 5;\n}\n\n.wpstg-swal-popup .wpstg--swal2-close:focus {\n outline: none;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-actions {\n justify-content: flex-end;\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button {\n border-radius: 4px;\n font-weight: 900;\n border: 0;\n font-size: 15px;\n padding: 10px 12px;\n text-transform: capitalize;\n line-height: normal;\n height: 40px;\n min-width: 100px;\n text-shadow: none;\n}\n\n.wpstg-swal-popup.wpstg--swal2-popup:not(.centered-modal) .wpstg--swal2-actions > button {\n margin-left: 8px;\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button.wpstg--swal2-cancel {\n border: 1px solid rgba(29, 28, 29, 0.3);\n background: #fff;\n color: rgb(29, 28, 29);\n font-weight: 500;\n width: 100px;\n text-shadow: none;\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button:hover {\n box-shadow: 0 1px 3px 0 rgba(0 0 0 .1);\n}\n\n.wpstg-swal-popup .wpstg--swal2-actions > button.wpstg--swal2-cancel:hover {\n background: rgba(28, 29, 28, .04);\n}\n\n#wpstg-backup-name-input {\n height: 44px;\n font-size: 18px;\n}\n\n.wpstg-restore-finished-container .wpstg--swal2-title {\n color: #565656 !important;\n}\n\n/*#wpstg-restore-success {\n color: #565656;\n}*/\n\n.wpstg-restore-finished-container .wpstg--swal2-content {\n margin-top: 20px;\n color: #a8a8a8;\n}\n\n/* WP Staging Implementation of Windows Style Linear Loader */\n\n.wpstg-linear-loader > span[class*=\"wpstg-linear-loader-item\"] {\n height: 6px;\n width: 6px;\n background: #333;\n display: inline-block;\n margin: 12px 2px;\n border-radius: 100%;\n animation: wpstg_linear_loader 3s infinite;\n animation-timing-function: cubic-bezier(0.030, 0.615, 0.995, 0.415);\n animation-fill-mode: both;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(1) {\n animation-delay: 1s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(2) {\n animation-delay: 0.8s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(3) {\n animation-delay: 0.6s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(4) {\n animation-delay: 0.4s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(5) {\n animation-delay: 0.2s;\n}\n\n.wpstg-linear-loader > span.wpstg-linear-loader-item:nth-child(6) {\n animation-delay: 0s;\n}\n\n@keyframes wpstg_linear_loader {\n 0% {\n transform: translateX(-30px);\n opacity: 0;\n }\n 25% {\n opacity: 1;\n }\n 50% {\n transform: translateX(30px);\n opacity: 0;\n }\n 100% {\n opacity: 0;\n }\n}\n\n/* END - Windows Style Linear Loader */\n\n.wpstg--modal--backup--import--upload--content {\n padding: .75em;\n margin: 1em auto;\n}\n\n.wpstg--modal--backup--import--upload--content .wpstg-linear-loader {\n display: none;\n}\n\n#wpstg-multisite-disabled .wpstg-clone {\n width: 355px;\n}\n\n#wpstg-free-version-backups .wpstg-clone {\n text-align: center;\n}\n\n#wpstg-free-version-backups .wpstg-clone p {\n font-size: 16px;\n}\n\n.wpstg-staging-info li .backup-notes {\n word-break: break-word;\n}\n\n.wpstg--modal--import--upload--progress--title small {\n font-weight: normal;\n}\n\n#wpstg-report-issue-wrapper {\n position: relative;\n}\n\n#wpstg-report-issue-wrapper .arrow-up {\n width: 0;\n height: 0;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-bottom: 8px solid white;\n position: absolute;\n top: -8px;\n right: 40px;\n}\n\n.notice {\n margin: 10px 20px 0 2px;\n}\n\n.wpstg--notice {\n box-shadow: 0 1px 1px rgba(0, 0, 0, .04);\n margin: 20px 20px 20px 0px;\n padding: 1px 12px;\n}\n\n.wpstg--error a:hover {\n color: #eeeeee;\n}\n\n.wpstg--error, .wpstg--error a {\n background: #E01E5A;\n color: white;\n}\n\n/**\n * Buttons\n */\n\n.wpstg-button {\n display: inline-block;\n border-radius: 2px;\n cursor: pointer;\n padding: 2px 10px 2px 10px;\n text-transform: uppercase;\n font-weight: 500;\n outline: 0;\n transition: background-color .1s ease-in;\n text-decoration: none;\n}\n\n.wpstg-button.wpstg-save {\n background-color: #1687A7;\n color: white;\n}\n\n.wpstg-button.wpstg-save:hover {\n background-color: #276678;\n}\n\n\n.wpstg-button.wpstg-button-light {\n background-color: #f8f8f8;\n border: 1px solid #eee;\n color: #333;\n animation: background-color 0.3s;\n}\n\n.wpstg-button.wpstg-button-light:hover {\n background-color: #e0e0e0;\n border: 1px solid #e0e0e0;\n}\n\n.wpstg-buttons .spinner {\n float: none;\n margin: 0 0 0 5px;\n}\n\n.wpstg-button.danger {\n display: inline-block;\n text-decoration: none;\n text-align: center;\n text-transform: inherit;\n background-color: #E01E5A;\n color: white;\n border-radius: 2px;\n border-color: transparent;\n}\n\n.wpstg-button.danger:hover {\n background-color: #c0194d;\n}\n\n.wpstg-button--big {\n display: inline-block;\n padding: 10px;\n min-width: 170px;\n font-size: 16px;\n text-decoration: none;\n text-align: center;\n margin-top: 20px;\n color: white;\n border-radius: 3px;\n}\n\n.wpstg-button--primary {\n display: inline-block;\n text-decoration: none;\n font-size: 13px;\n line-height: 2.15384615;\n min-height: 30px;\n margin: 0;\n padding: 0 10px;\n cursor: pointer;\n border: 1px solid rgba(29, 28, 29, 0.3);\n -webkit-appearance: none;\n border-radius: 2px;\n white-space: nowrap;\n box-sizing: border-box;\n color: #171717;\n}\n\n.wpstg-button--primary:hover {\n background: rgba(28, 29, 28, .04);\n color: black;\n}\n\n.wpstg-button--secondary {\n display: inline-block;\n background-color: transparent;\n color: #95a5a6;\n border-radius: 2px;\n border: 1px solid rgba(29, 28, 29, 0.3);\n cursor: pointer;\n padding: 4px 10px 2px 10px;\n font-weight: 500;\n outline: 0;\n transition: background-color .1s ease-in;\n text-decoration: none;\n}\n\n.wpstg-button--red {\n background-color: #E01E5A;\n border-color: #E01E5A;\n color: white;\n}\n\n.wpstg-button--red:hover {\n background-color: #d02358;\n border-color: #e0255f;\n color: white;\n}\n\n.wpstg-button--cta-red {\n background-color: #fe008f;\n border-color: #E01E5A;\n color: white;\n}\n\n.wpstg-button--cta-red:hover {\n background-color: #f31391;\n border-color: #e0255f;\n color: white;\n}\n\n.wpstg-button--blue {\n background-color: #25A0F1;\n border-color: #25A0F1;\n color: white;\n}\n\n.wpstg-button--blue:hover {\n background-color: #259be6;\n border-color: #259be6;\n color: white;\n}\n\n#wpstg-button-backup-upgrade {\n font-size: 16px;\n}\n\n.wpstg-staging-status {\n color: #E01E5A;\n}\n\n#wpstg-push-changes,\n#wpstg-start-updating,\n#wpstg-save-clone-data {\n margin-left: 5px;\n}\n\ninput.wpstg-textbox {\n border: 1px solid #aaa;\n border-radius: .25rem;\n padding: 0.25rem 0.5rem;\n font-size: 14px;\n}\n\ninput.wpstg-textbox:focus {\n outline: 0;\n border-color: #259be6;\n -webkit-box-shadow: 0 0 0 0.1rem rgba(221, 221, 221, .35);\n box-shadow: 0 0 0 0.1rem rgba(221, 221, 221, .35);\n}\n\ninput.wpstg-textbox::placeholder {\n color: #888;\n}\n\n.wpstg--advance-settings--checkbox {\n display: flex;\n align-items: center;\n}\n\n.wpstg--advance-settings--checkbox > label {\n font-size: 14px;\n font-weight: bolder;\n width: 165px;\n display: inline-block;\n}\n\n.wpstg--advance-settings--checkbox > .wpstg--tooltip {\n margin-top: 5px;\n margin-left: 5px;\n position: relative;\n display: inline-block;\n border-bottom: 0px solid transparent;\n}\n\n.wpstg--advance-settings--checkbox > .wpstg--tooltip > .wpstg--tooltiptext {\n top: 18px;\n left: -150px;\n}\n\n\ndiv#wpstg-restore-wait {\n display: none;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n height: 100vh;\n width: 100vw;\n position: fixed;\n top: 0;\n left: 0;\n background: white;\n z-index: 99999;\n}\n\ndiv#wpstg-restore-wait .wpstg-title {\n font-weight: bold;\n}\n\ndiv#wpstg-restore-wait div {\n font-size: 16px;\n margin-top: 12px;\n}\n\n.resumable-browse {\n cursor: pointer;\n}\n\n.resumable-browse a {\n text-decoration: underline;\n}\n\n.wpstg-upload-text {\n font-weight: 600;\n}\n\n.wpstg--modal--backup--import--upload--container.dragover {\n transition: background-color 0.7s;\n background-color: #94dc96;\n color: #FFF;\n}\n\n.wpstg--modal--backup--import--upload--container.dragover * {\n pointer-events: none; /* Avoids flickering when dragging to drop a file */\n}\n\n.wpstg--modal--backup--import--upload--container.dragover .wpstg-upload-text {\n display: none;\n}\n\n.wpstg--modal--backup--import--upload--container.dragover .wpstg-dragover-text {\n display: block;\n}\n\n.wpstg--modal--backup--import--upload--container .wpstg-dragover-text {\n display: none;\n}\n\n#wpstg-invalid-license-message, #wpstg-invalid-license-message a {\n font-weight: 500;\n color: #E01E5A;\n margin-left: 6px;\n}\n\n#wpstg-sidebar--banner {\n max-width: 200px;\n}\n\n@media screen and (max-width: 1234px) {\n .wpstg-h2 {\n font-size: 24px;\n }\n\n #wpstg-welcome li {\n font-size: 14px;\n }\n}\n\n.wpstg-exclamation {\n color: #ffffff;\n border-radius: 100%;\n background-color: #E01E5A;\n width: 20px;\n height: 20px;\n text-align: center;\n font-weight: bold;\n display: inline-block;\n margin: 6px;\n}\n\n.wpstg--tab--contents {\n padding-top: 1px;\n}\n\n.wpstg-swal-show.wpstg--swal2-show {\n -webkit-animation: wpstg-swal-show 0.2s !important;\n animation: wpstg-swal-show 0.2s !important;\n}\n\n@-webkit-keyframes wpstg-swal-show {\n 0% {\n transform: scale(0.3);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes wpstg-swal-show {\n 0% {\n transform: scale(0.3);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n.wpstg-tab-item--vert-center {\n display: flex;\n align-items: center;\n}\n\n.wpstg-db-comparison-modal {\n padding-left: 10px;\n padding-right: 10px;\n}\n\n.wpstg-db-comparison-table {\n font-size: 13px;\n width: 100%;\n}\n\n.wpstg-db-comparison-table tbody td {\n padding-top: 6px;\n}\n\n.wpstg-db-comparison-table tr > td:first-child,\n.wpstg-db-comparison-table tr > th:first-child {\n text-align: left;\n}\n\n.wpstg-css-tick {\n display: inline-block;\n transform: rotate(45deg);\n height: 12px;\n width: 6px;\n border-bottom: 3px solid #78b13f;\n border-right: 3px solid #78b13f;\n}\n\n.wpstg-css-cross {\n position: relative;\n top: -8px;\n left: -2px;\n width: 16px;\n height: 16px;\n}\n\n.wpstg-css-cross:before, .wpstg-css-cross:after {\n position: absolute;\n content: ' ';\n height: 17px;\n width: 3px;\n background-color: #E01E5A;\n}\n\n.wpstg-css-cross:before {\n transform: rotate(45deg);\n}\n\n.wpstg-css-cross:after {\n transform: rotate(-45deg);\n}\n\n.wpstg-selection-preview {\n font-size: 12px;\n margin-left: 20px;\n color: #3216;\n}\n\n.wpstg-selection-preview.danger {\n color: #E01E5A;\n}\n"]}
assets/js/dist/wpstg-admin-plugins.js CHANGED
@@ -3,11 +3,11 @@
3
 
4
  jQuery(document).ready(function ($) {
5
  /**
6
- * DEACTIVATION FEEDBACK FORM
7
- */
8
  // show overlay when clicked on "deactivate"
9
- wpstg_deactivate_link = $('.wp-admin.plugins-php tr[data-slug="wp-staging"] .row-actions .deactivate a');
10
- wpstg_deactivate_link_url = wpstg_deactivate_link.attr('href');
11
  wpstg_deactivate_link.on('click', function (e) {
12
  e.preventDefault(); // only show feedback form once per 30 days
13
 
3
 
4
  jQuery(document).ready(function ($) {
5
  /**
6
+ * DEACTIVATION FEEDBACK FORM
7
+ */
8
  // show overlay when clicked on "deactivate"
9
+ var wpstg_deactivate_link = $('.wp-admin.plugins-php tr[data-slug="wp-staging"] .row-actions .deactivate a');
10
+ var wpstg_deactivate_link_url = wpstg_deactivate_link.attr('href');
11
  wpstg_deactivate_link.on('click', function (e) {
12
  e.preventDefault(); // only show feedback form once per 30 days
13
 
assets/js/dist/wpstg-admin-plugins.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wpstg-admin-plugins.js","sources":["../src/wpstg-admin-plugins.js"],"sourcesContent":["let strict;\n\njQuery(document).ready(function($) {\n /**\n * DEACTIVATION FEEDBACK FORM\n */\n // show overlay when clicked on \"deactivate\"\n wpstg_deactivate_link = $('.wp-admin.plugins-php tr[data-slug=\"wp-staging\"] .row-actions .deactivate a');\n wpstg_deactivate_link_url = wpstg_deactivate_link.attr('href');\n\n wpstg_deactivate_link.on('click', function(e) {\n e.preventDefault();\n\n // only show feedback form once per 30 days\n const c_value = wpstg_admin_get_cookie('wpstg_hide_feedback');\n\n if (c_value === undefined) {\n $('#wpstg-feedback-overlay').show();\n } else {\n // click on the link\n window.location.href = wpstg_deactivate_link_url;\n }\n });\n // show text fields\n $('#wpstg-feedback-content input[type=\"radio\"]').on('click', function() {\n // show text field if there is one\n $(this).parents('li').next('li').children('input[type=\"text\"], textarea').show();\n });\n // send form or close it\n $('#wpstg-feedback-content .button').on('click', function(e) {\n e.preventDefault();\n // set cookie for 30 days\n const exdate = new Date();\n exdate.setSeconds(exdate.getSeconds() + 2592000);\n document.cookie = 'wpstg_hide_feedback=1; expires=' + exdate.toUTCString() + '; path=/';\n\n $('#wpstg-feedback-overlay').hide();\n if ('wpstg-feedback-submit' === this.id) {\n // Send form data\n $.ajax({\n type: 'POST',\n url: ajaxurl,\n dataType: 'json',\n data: {\n action: 'wpstg_send_feedback',\n data: $('#wpstg-feedback-content form').serialize(),\n },\n complete: function(MLHttpRequest, textStatus, errorThrown) {\n // deactivate the plugin and close the popup\n $('#wpstg-feedback-overlay').remove();\n window.location.href = wpstg_deactivate_link_url;\n },\n });\n } else {\n $('#wpstg-feedback-overlay').remove();\n window.location.href = wpstg_deactivate_link_url;\n }\n });\n // close form without doing anything\n $('.wpstg-feedback-not-deactivate').on('click', function(e) {\n $('#wpstg-feedback-overlay').hide();\n });\n\n function wpstg_admin_get_cookie(name) {\n let i; let x; let y; const wpstg_cookies = document.cookie.split( ';' );\n for (i = 0; i < wpstg_cookies.length; i++) {\n x = wpstg_cookies[i].substr( 0, wpstg_cookies[i].indexOf( '=' ) );\n y = wpstg_cookies[i].substr( wpstg_cookies[i].indexOf( '=' ) + 1 );\n x = x.replace( /^\\s+|\\s+$/g, '' );\n if (x === name) {\n return unescape( y );\n }\n }\n }\n});\n"],"names":["jQuery","document","ready","$","wpstg_deactivate_link","wpstg_deactivate_link_url","attr","on","e","preventDefault","c_value","wpstg_admin_get_cookie","undefined","show","window","location","href","parents","next","children","exdate","Date","setSeconds","getSeconds","cookie","toUTCString","hide","id","ajax","type","url","ajaxurl","dataType","data","action","serialize","complete","MLHttpRequest","textStatus","errorThrown","remove","name","i","x","y","wpstg_cookies","split","length","substr","indexOf","replace","unescape"],"mappings":"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"}
1
+ {"version":3,"file":"wpstg-admin-plugins.js","sources":["../src/wpstg-admin-plugins.js"],"sourcesContent":["let strict;\n\njQuery(document).ready(function($) {\n /**\n * DEACTIVATION FEEDBACK FORM\n */\n // show overlay when clicked on \"deactivate\"\n const wpstg_deactivate_link = $('.wp-admin.plugins-php tr[data-slug=\"wp-staging\"] .row-actions .deactivate a');\n const wpstg_deactivate_link_url = wpstg_deactivate_link.attr('href');\n\n wpstg_deactivate_link.on('click', function(e) {\n e.preventDefault();\n\n // only show feedback form once per 30 days\n const c_value = wpstg_admin_get_cookie('wpstg_hide_feedback');\n\n if (c_value === undefined) {\n $('#wpstg-feedback-overlay').show();\n } else {\n // click on the link\n window.location.href = wpstg_deactivate_link_url;\n }\n });\n // show text fields\n $('#wpstg-feedback-content input[type=\"radio\"]').on('click', function() {\n // show text field if there is one\n $(this).parents('li').next('li').children('input[type=\"text\"], textarea').show();\n });\n // send form or close it\n $('#wpstg-feedback-content .button').on('click', function(e) {\n e.preventDefault();\n // set cookie for 30 days\n const exdate = new Date();\n exdate.setSeconds(exdate.getSeconds() + 2592000);\n document.cookie = 'wpstg_hide_feedback=1; expires=' + exdate.toUTCString() + '; path=/';\n\n $('#wpstg-feedback-overlay').hide();\n if ('wpstg-feedback-submit' === this.id) {\n // Send form data\n $.ajax({\n type: 'POST',\n url: ajaxurl,\n dataType: 'json',\n data: {\n action: 'wpstg_send_feedback',\n data: $('#wpstg-feedback-content form').serialize(),\n },\n complete: function(MLHttpRequest, textStatus, errorThrown) {\n // deactivate the plugin and close the popup\n $('#wpstg-feedback-overlay').remove();\n window.location.href = wpstg_deactivate_link_url;\n },\n });\n } else {\n $('#wpstg-feedback-overlay').remove();\n window.location.href = wpstg_deactivate_link_url;\n }\n });\n // close form without doing anything\n $('.wpstg-feedback-not-deactivate').on('click', function(e) {\n $('#wpstg-feedback-overlay').hide();\n });\n\n function wpstg_admin_get_cookie(name) {\n let i; let x; let y; const wpstg_cookies = document.cookie.split( ';' );\n for (i = 0; i < wpstg_cookies.length; i++) {\n x = wpstg_cookies[i].substr( 0, wpstg_cookies[i].indexOf( '=' ) );\n y = wpstg_cookies[i].substr( wpstg_cookies[i].indexOf( '=' ) + 1 );\n x = x.replace( /^\\s+|\\s+$/g, '' );\n if (x === name) {\n return unescape( y );\n }\n }\n }\n});\n"],"names":["jQuery","document","ready","$","wpstg_deactivate_link","wpstg_deactivate_link_url","attr","on","e","preventDefault","c_value","wpstg_admin_get_cookie","undefined","show","window","location","href","parents","next","children","exdate","Date","setSeconds","getSeconds","cookie","toUTCString","hide","id","ajax","type","url","ajaxurl","dataType","data","action","serialize","complete","MLHttpRequest","textStatus","errorThrown","remove","name","i","x","y","wpstg_cookies","split","length","substr","indexOf","replace","unescape"],"mappings":";;;EAEAA,MAAM,CAACC,QAAD,CAAN,CAAiBC,KAAjB,CAAuB,UAASC,CAAT,EAAY;EACjC;EACF;EACA;EACE;EACA,MAAMC,qBAAqB,GAAGD,CAAC,CAAC,6EAAD,CAA/B;EACA,MAAME,yBAAyB,GAAGD,qBAAqB,CAACE,IAAtB,CAA2B,MAA3B,CAAlC;EAEAF,EAAAA,qBAAqB,CAACG,EAAtB,CAAyB,OAAzB,EAAkC,UAASC,CAAT,EAAY;EAC5CA,IAAAA,CAAC,CAACC,cAAF,GAD4C;;EAI5C,QAAMC,OAAO,GAAGC,sBAAsB,CAAC,qBAAD,CAAtC;;EAEA,QAAID,OAAO,KAAKE,SAAhB,EAA2B;EACzBT,MAAAA,CAAC,CAAC,yBAAD,CAAD,CAA6BU,IAA7B;EACD,KAFD,MAEO;EACL;EACAC,MAAAA,MAAM,CAACC,QAAP,CAAgBC,IAAhB,GAAuBX,yBAAvB;EACD;EACF,GAZD,EARiC;;EAsBjCF,EAAAA,CAAC,CAAC,6CAAD,CAAD,CAAiDI,EAAjD,CAAoD,OAApD,EAA6D,YAAW;EACtE;EACAJ,IAAAA,CAAC,CAAC,IAAD,CAAD,CAAQc,OAAR,CAAgB,IAAhB,EAAsBC,IAAtB,CAA2B,IAA3B,EAAiCC,QAAjC,CAA0C,8BAA1C,EAA0EN,IAA1E;EACD,GAHD,EAtBiC;;EA2BjCV,EAAAA,CAAC,CAAC,iCAAD,CAAD,CAAqCI,EAArC,CAAwC,OAAxC,EAAiD,UAASC,CAAT,EAAY;EAC3DA,IAAAA,CAAC,CAACC,cAAF,GAD2D;;EAG3D,QAAMW,MAAM,GAAG,IAAIC,IAAJ,EAAf;EACAD,IAAAA,MAAM,CAACE,UAAP,CAAkBF,MAAM,CAACG,UAAP,KAAsB,OAAxC;EACAtB,IAAAA,QAAQ,CAACuB,MAAT,GAAkB,oCAAoCJ,MAAM,CAACK,WAAP,EAApC,GAA2D,UAA7E;EAEAtB,IAAAA,CAAC,CAAC,yBAAD,CAAD,CAA6BuB,IAA7B;;EACA,QAAI,4BAA4B,KAAKC,EAArC,EAAyC;EACvC;EACAxB,MAAAA,CAAC,CAACyB,IAAF,CAAO;EACLC,QAAAA,IAAI,EAAE,MADD;EAELC,QAAAA,GAAG,EAAEC,OAFA;EAGLC,QAAAA,QAAQ,EAAE,MAHL;EAILC,QAAAA,IAAI,EAAE;EACJC,UAAAA,MAAM,EAAE,qBADJ;EAEJD,UAAAA,IAAI,EAAE9B,CAAC,CAAC,8BAAD,CAAD,CAAkCgC,SAAlC;EAFF,SAJD;EAQLC,QAAAA,QAAQ,EAAE,kBAASC,aAAT,EAAwBC,UAAxB,EAAoCC,WAApC,EAAiD;EACzD;EACApC,UAAAA,CAAC,CAAC,yBAAD,CAAD,CAA6BqC,MAA7B;EACA1B,UAAAA,MAAM,CAACC,QAAP,CAAgBC,IAAhB,GAAuBX,yBAAvB;EACD;EAZI,OAAP;EAcD,KAhBD,MAgBO;EACLF,MAAAA,CAAC,CAAC,yBAAD,CAAD,CAA6BqC,MAA7B;EACA1B,MAAAA,MAAM,CAACC,QAAP,CAAgBC,IAAhB,GAAuBX,yBAAvB;EACD;EACF,GA5BD,EA3BiC;;EAyDjCF,EAAAA,CAAC,CAAC,gCAAD,CAAD,CAAoCI,EAApC,CAAuC,OAAvC,EAAgD,UAASC,CAAT,EAAY;EAC1DL,IAAAA,CAAC,CAAC,yBAAD,CAAD,CAA6BuB,IAA7B;EACD,GAFD;;EAIA,WAASf,sBAAT,CAAgC8B,IAAhC,EAAsC;EACpC,QAAIC,CAAJ;EAAO,QAAIC,CAAJ;EAAO,QAAIC,CAAJ;EAAO,QAAMC,aAAa,GAAG5C,QAAQ,CAACuB,MAAT,CAAgBsB,KAAhB,CAAuB,GAAvB,CAAtB;;EACrB,SAAKJ,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGG,aAAa,CAACE,MAA9B,EAAsCL,CAAC,EAAvC,EAA2C;EACzCC,MAAAA,CAAC,GAAGE,aAAa,CAACH,CAAD,CAAb,CAAiBM,MAAjB,CAAyB,CAAzB,EAA4BH,aAAa,CAACH,CAAD,CAAb,CAAiBO,OAAjB,CAA0B,GAA1B,CAA5B,CAAJ;EACAL,MAAAA,CAAC,GAAGC,aAAa,CAACH,CAAD,CAAb,CAAiBM,MAAjB,CAAyBH,aAAa,CAACH,CAAD,CAAb,CAAiBO,OAAjB,CAA0B,GAA1B,IAAkC,CAA3D,CAAJ;EACAN,MAAAA,CAAC,GAAGA,CAAC,CAACO,OAAF,CAAW,YAAX,EAAyB,EAAzB,CAAJ;;EACA,UAAIP,CAAC,KAAKF,IAAV,EAAgB;EACd,eAAOU,QAAQ,CAAEP,CAAF,CAAf;EACD;EACF;EACF;EACF,CAxED;;;;;;"}
assets/js/dist/wpstg-admin-plugins.min.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(){"use strict";jQuery(document).ready((function(e){wpstg_deactivate_link=e('.wp-admin.plugins-php tr[data-slug="wp-staging"] .row-actions .deactivate a'),wpstg_deactivate_link_url=wpstg_deactivate_link.attr("href"),wpstg_deactivate_link.on("click",(function(t){t.preventDefault(),void 0===function(e){var t,a,n,i=document.cookie.split(";");for(t=0;t<i.length;t++)if(a=i[t].substr(0,i[t].indexOf("=")),n=i[t].substr(i[t].indexOf("=")+1),(a=a.replace(/^\s+|\s+$/g,""))===e)return unescape(n)}("wpstg_hide_feedback")?e("#wpstg-feedback-overlay").show():window.location.href=wpstg_deactivate_link_url})),e('#wpstg-feedback-content input[type="radio"]').on("click",(function(){e(this).parents("li").next("li").children('input[type="text"], textarea').show()})),e("#wpstg-feedback-content .button").on("click",(function(t){t.preventDefault();var a=new Date;a.setSeconds(a.getSeconds()+2592e3),document.cookie="wpstg_hide_feedback=1; expires="+a.toUTCString()+"; path=/",e("#wpstg-feedback-overlay").hide(),"wpstg-feedback-submit"===this.id?e.ajax({type:"POST",url:ajaxurl,dataType:"json",data:{action:"wpstg_send_feedback",data:e("#wpstg-feedback-content form").serialize()},complete:function(t,a,n){e("#wpstg-feedback-overlay").remove(),window.location.href=wpstg_deactivate_link_url}}):(e("#wpstg-feedback-overlay").remove(),window.location.href=wpstg_deactivate_link_url)})),e(".wpstg-feedback-not-deactivate").on("click",(function(t){e("#wpstg-feedback-overlay").hide()}))}))}();
2
  //# sourceMappingURL=wpstg-admin-plugins.min.js.map
1
+ !function(){"use strict";jQuery(document).ready((function(e){var t=e('.wp-admin.plugins-php tr[data-slug="wp-staging"] .row-actions .deactivate a'),n=t.attr("href");t.on("click",(function(t){t.preventDefault(),void 0===function(e){var t,n,a,o=document.cookie.split(";");for(t=0;t<o.length;t++)if(n=o[t].substr(0,o[t].indexOf("=")),a=o[t].substr(o[t].indexOf("=")+1),(n=n.replace(/^\s+|\s+$/g,""))===e)return unescape(a)}("wpstg_hide_feedback")?e("#wpstg-feedback-overlay").show():window.location.href=n})),e('#wpstg-feedback-content input[type="radio"]').on("click",(function(){e(this).parents("li").next("li").children('input[type="text"], textarea').show()})),e("#wpstg-feedback-content .button").on("click",(function(t){t.preventDefault();var a=new Date;a.setSeconds(a.getSeconds()+2592e3),document.cookie="wpstg_hide_feedback=1; expires="+a.toUTCString()+"; path=/",e("#wpstg-feedback-overlay").hide(),"wpstg-feedback-submit"===this.id?e.ajax({type:"POST",url:ajaxurl,dataType:"json",data:{action:"wpstg_send_feedback",data:e("#wpstg-feedback-content form").serialize()},complete:function(t,a,o){e("#wpstg-feedback-overlay").remove(),window.location.href=n}}):(e("#wpstg-feedback-overlay").remove(),window.location.href=n)})),e(".wpstg-feedback-not-deactivate").on("click",(function(t){e("#wpstg-feedback-overlay").hide()}))}))}();
2
  //# sourceMappingURL=wpstg-admin-plugins.min.js.map
assets/js/dist/wpstg-admin-plugins.min.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wpstg-admin-plugins.min.js","sources":["../src/wpstg-admin-plugins.js"],"sourcesContent":["let strict;\n\njQuery(document).ready(function($) {\n /**\n * DEACTIVATION FEEDBACK FORM\n */\n // show overlay when clicked on \"deactivate\"\n wpstg_deactivate_link = $('.wp-admin.plugins-php tr[data-slug=\"wp-staging\"] .row-actions .deactivate a');\n wpstg_deactivate_link_url = wpstg_deactivate_link.attr('href');\n\n wpstg_deactivate_link.on('click', function(e) {\n e.preventDefault();\n\n // only show feedback form once per 30 days\n const c_value = wpstg_admin_get_cookie('wpstg_hide_feedback');\n\n if (c_value === undefined) {\n $('#wpstg-feedback-overlay').show();\n } else {\n // click on the link\n window.location.href = wpstg_deactivate_link_url;\n }\n });\n // show text fields\n $('#wpstg-feedback-content input[type=\"radio\"]').on('click', function() {\n // show text field if there is one\n $(this).parents('li').next('li').children('input[type=\"text\"], textarea').show();\n });\n // send form or close it\n $('#wpstg-feedback-content .button').on('click', function(e) {\n e.preventDefault();\n // set cookie for 30 days\n const exdate = new Date();\n exdate.setSeconds(exdate.getSeconds() + 2592000);\n document.cookie = 'wpstg_hide_feedback=1; expires=' + exdate.toUTCString() + '; path=/';\n\n $('#wpstg-feedback-overlay').hide();\n if ('wpstg-feedback-submit' === this.id) {\n // Send form data\n $.ajax({\n type: 'POST',\n url: ajaxurl,\n dataType: 'json',\n data: {\n action: 'wpstg_send_feedback',\n data: $('#wpstg-feedback-content form').serialize(),\n },\n complete: function(MLHttpRequest, textStatus, errorThrown) {\n // deactivate the plugin and close the popup\n $('#wpstg-feedback-overlay').remove();\n window.location.href = wpstg_deactivate_link_url;\n },\n });\n } else {\n $('#wpstg-feedback-overlay').remove();\n window.location.href = wpstg_deactivate_link_url;\n }\n });\n // close form without doing anything\n $('.wpstg-feedback-not-deactivate').on('click', function(e) {\n $('#wpstg-feedback-overlay').hide();\n });\n\n function wpstg_admin_get_cookie(name) {\n let i; let x; let y; const wpstg_cookies = document.cookie.split( ';' );\n for (i = 0; i < wpstg_cookies.length; i++) {\n x = wpstg_cookies[i].substr( 0, wpstg_cookies[i].indexOf( '=' ) );\n y = wpstg_cookies[i].substr( wpstg_cookies[i].indexOf( '=' ) + 1 );\n x = x.replace( /^\\s+|\\s+$/g, '' );\n if (x === name) {\n return unescape( y );\n }\n }\n }\n});\n"],"names":["jQuery","document","ready","$","wpstg_deactivate_link","wpstg_deactivate_link_url","attr","on","e","preventDefault","undefined","name","i","x","y","wpstg_cookies","cookie","split","length","substr","indexOf","replace","unescape","wpstg_admin_get_cookie","show","window","location","href","this","parents","next","children","exdate","Date","setSeconds","getSeconds","toUTCString","hide","id","ajax","type","url","ajaxurl","dataType","data","action","serialize","complete","MLHttpRequest","textStatus","errorThrown","remove"],"mappings":"yBAEAA,OAAOC,UAAUC,OAAM,SAASC,GAK9BC,sBAAwBD,EAAE,+EAC1BE,0BAA4BD,sBAAsBE,KAAK,QAEvDF,sBAAsBG,GAAG,SAAS,SAASC,GACzCA,EAAEC,sBAKcC,aA+CcC,OAC1BC,EAAOC,EAAOC,EAASC,EAAgBd,SAASe,OAAOC,MAAO,SAC7DL,EAAI,EAAGA,EAAIG,EAAcG,OAAQN,OACpCC,EAAIE,EAAcH,GAAGO,OAAQ,EAAGJ,EAAcH,GAAGQ,QAAS,MAC1DN,EAAIC,EAAcH,GAAGO,OAAQJ,EAAcH,GAAGQ,QAAS,KAAQ,IAC/DP,EAAIA,EAAEQ,QAAS,aAAc,OACnBV,SACDW,SAAUR,GAxDLS,CAAuB,uBAGrCpB,EAAE,2BAA2BqB,OAG7BC,OAAOC,SAASC,KAAOtB,6BAI3BF,EAAE,+CAA+CI,GAAG,SAAS,WAE3DJ,EAAEyB,MAAMC,QAAQ,MAAMC,KAAK,MAAMC,SAAS,gCAAgCP,UAG5ErB,EAAE,mCAAmCI,GAAG,SAAS,SAASC,GACxDA,EAAEC,qBAEIuB,EAAS,IAAIC,KACnBD,EAAOE,WAAWF,EAAOG,aAAe,QACxClC,SAASe,OAAS,kCAAoCgB,EAAOI,cAAgB,WAE7EjC,EAAE,2BAA2BkC,OACzB,0BAA4BT,KAAKU,GAEnCnC,EAAEoC,KAAK,CACLC,KAAM,OACNC,IAAKC,QACLC,SAAU,OACVC,KAAM,CACJC,OAAQ,sBACRD,KAAMzC,EAAE,gCAAgC2C,aAE1CC,SAAU,SAASC,EAAeC,EAAYC,GAE5C/C,EAAE,2BAA2BgD,SAC7B1B,OAAOC,SAASC,KAAOtB,8BAI3BF,EAAE,2BAA2BgD,SAC7B1B,OAAOC,SAASC,KAAOtB,8BAI3BF,EAAE,kCAAkCI,GAAG,SAAS,SAASC,GACvDL,EAAE,2BAA2BkC"}
1
+ {"version":3,"file":"wpstg-admin-plugins.min.js","sources":["../src/wpstg-admin-plugins.js"],"sourcesContent":["let strict;\n\njQuery(document).ready(function($) {\n /**\n * DEACTIVATION FEEDBACK FORM\n */\n // show overlay when clicked on \"deactivate\"\n const wpstg_deactivate_link = $('.wp-admin.plugins-php tr[data-slug=\"wp-staging\"] .row-actions .deactivate a');\n const wpstg_deactivate_link_url = wpstg_deactivate_link.attr('href');\n\n wpstg_deactivate_link.on('click', function(e) {\n e.preventDefault();\n\n // only show feedback form once per 30 days\n const c_value = wpstg_admin_get_cookie('wpstg_hide_feedback');\n\n if (c_value === undefined) {\n $('#wpstg-feedback-overlay').show();\n } else {\n // click on the link\n window.location.href = wpstg_deactivate_link_url;\n }\n });\n // show text fields\n $('#wpstg-feedback-content input[type=\"radio\"]').on('click', function() {\n // show text field if there is one\n $(this).parents('li').next('li').children('input[type=\"text\"], textarea').show();\n });\n // send form or close it\n $('#wpstg-feedback-content .button').on('click', function(e) {\n e.preventDefault();\n // set cookie for 30 days\n const exdate = new Date();\n exdate.setSeconds(exdate.getSeconds() + 2592000);\n document.cookie = 'wpstg_hide_feedback=1; expires=' + exdate.toUTCString() + '; path=/';\n\n $('#wpstg-feedback-overlay').hide();\n if ('wpstg-feedback-submit' === this.id) {\n // Send form data\n $.ajax({\n type: 'POST',\n url: ajaxurl,\n dataType: 'json',\n data: {\n action: 'wpstg_send_feedback',\n data: $('#wpstg-feedback-content form').serialize(),\n },\n complete: function(MLHttpRequest, textStatus, errorThrown) {\n // deactivate the plugin and close the popup\n $('#wpstg-feedback-overlay').remove();\n window.location.href = wpstg_deactivate_link_url;\n },\n });\n } else {\n $('#wpstg-feedback-overlay').remove();\n window.location.href = wpstg_deactivate_link_url;\n }\n });\n // close form without doing anything\n $('.wpstg-feedback-not-deactivate').on('click', function(e) {\n $('#wpstg-feedback-overlay').hide();\n });\n\n function wpstg_admin_get_cookie(name) {\n let i; let x; let y; const wpstg_cookies = document.cookie.split( ';' );\n for (i = 0; i < wpstg_cookies.length; i++) {\n x = wpstg_cookies[i].substr( 0, wpstg_cookies[i].indexOf( '=' ) );\n y = wpstg_cookies[i].substr( wpstg_cookies[i].indexOf( '=' ) + 1 );\n x = x.replace( /^\\s+|\\s+$/g, '' );\n if (x === name) {\n return unescape( y );\n }\n }\n }\n});\n"],"names":["jQuery","document","ready","$","wpstg_deactivate_link","wpstg_deactivate_link_url","attr","on","e","preventDefault","undefined","name","i","x","y","wpstg_cookies","cookie","split","length","substr","indexOf","replace","unescape","wpstg_admin_get_cookie","show","window","location","href","this","parents","next","children","exdate","Date","setSeconds","getSeconds","toUTCString","hide","id","ajax","type","url","ajaxurl","dataType","data","action","serialize","complete","MLHttpRequest","textStatus","errorThrown","remove"],"mappings":"yBAEAA,OAAOC,UAAUC,OAAM,SAASC,OAKxBC,EAAwBD,EAAE,+EAC1BE,EAA4BD,EAAsBE,KAAK,QAE7DF,EAAsBG,GAAG,SAAS,SAASC,GACzCA,EAAEC,sBAKcC,aA+CcC,OAC1BC,EAAOC,EAAOC,EAASC,EAAgBd,SAASe,OAAOC,MAAO,SAC7DL,EAAI,EAAGA,EAAIG,EAAcG,OAAQN,OACpCC,EAAIE,EAAcH,GAAGO,OAAQ,EAAGJ,EAAcH,GAAGQ,QAAS,MAC1DN,EAAIC,EAAcH,GAAGO,OAAQJ,EAAcH,GAAGQ,QAAS,KAAQ,IAC/DP,EAAIA,EAAEQ,QAAS,aAAc,OACnBV,SACDW,SAAUR,GAxDLS,CAAuB,uBAGrCpB,EAAE,2BAA2BqB,OAG7BC,OAAOC,SAASC,KAAOtB,KAI3BF,EAAE,+CAA+CI,GAAG,SAAS,WAE3DJ,EAAEyB,MAAMC,QAAQ,MAAMC,KAAK,MAAMC,SAAS,gCAAgCP,UAG5ErB,EAAE,mCAAmCI,GAAG,SAAS,SAASC,GACxDA,EAAEC,qBAEIuB,EAAS,IAAIC,KACnBD,EAAOE,WAAWF,EAAOG,aAAe,QACxClC,SAASe,OAAS,kCAAoCgB,EAAOI,cAAgB,WAE7EjC,EAAE,2BAA2BkC,OACzB,0BAA4BT,KAAKU,GAEnCnC,EAAEoC,KAAK,CACLC,KAAM,OACNC,IAAKC,QACLC,SAAU,OACVC,KAAM,CACJC,OAAQ,sBACRD,KAAMzC,EAAE,gCAAgC2C,aAE1CC,SAAU,SAASC,EAAeC,EAAYC,GAE5C/C,EAAE,2BAA2BgD,SAC7B1B,OAAOC,SAASC,KAAOtB,MAI3BF,EAAE,2BAA2BgD,SAC7B1B,OAAOC,SAASC,KAAOtB,MAI3BF,EAAE,kCAAkCI,GAAG,SAAS,SAASC,GACvDL,EAAE,2BAA2BkC"}
assets/js/dist/wpstg-admin.js CHANGED
@@ -940,6 +940,12 @@
940
  selector.elements[selector] = $(selector);
941
  }
942
  },
 
 
 
 
 
 
943
  listenTooltip: function listenTooltip() {
944
  wpstgHoverIntent(document, '.wpstg--tooltip', function (target, event) {
945
  target.querySelector('.wpstg--tooltiptext').style.visibility = 'visible';
@@ -1679,7 +1685,19 @@
1679
  cache.get('#wpstg-error-details').show().html(message);
1680
  cache.get('#wpstg-removing-clone').removeClass('loading');
1681
  cache.get('.wpstg-loader').hide();
1682
- $('.wpstg--modal--process--generic-problem').show().html(message);
 
 
 
 
 
 
 
 
 
 
 
 
1683
  };
1684
  /**
1685
  * Show warning during cloning or push process when closing tab or browser, or changing page
@@ -1742,7 +1760,10 @@
1742
  urlSpinner += '.gif';
1743
  ajaxSpinner = '<img src=\'\'' + urlSpinner + '\' alt=\'\' class=\'ajax-spinner general-spinner\' />';
1744
 
1745
- $workFlow // Check / Un-check All Database Tables New
 
 
 
1746
  .on('click', '.wpstg-button-unselect', function (e) {
1747
  e.preventDefault();
1748
 
@@ -1766,20 +1787,16 @@
1766
  .on('click', '.wpstg-button-select', function (e) {
1767
  e.preventDefault();
1768
  $('#wpstg_select_tables_cloning .wpstg-db-table').each(function () {
1769
- if (wpstg.isMultisite == 1) {
1770
- if ($(this).attr('name').match('^' + wpstg.tblprefix + '([^0-9])_*')) {
1771
- $(this).prop('selected', 'selected');
1772
- } else {
1773
- $(this).prop('selected', false);
1774
- }
1775
  }
1776
 
1777
- if (wpstg.isMultisite == 0) {
1778
- if ($(this).attr('name').match('^' + wpstg.tblprefix)) {
1779
- $(this).prop('selected', 'selected');
1780
- } else {
1781
- $(this).prop('selected', false);
1782
- }
1783
  }
1784
  });
1785
  }) // Expand Directories
@@ -2078,7 +2095,7 @@
2078
  }
2079
 
2080
  tryCount = 'undefined' === typeof tryCount ? 0 : tryCount;
2081
- var retryLimit = 10;
2082
  var retryTimeout = 10000 * tryCount;
2083
  incrementRatio = parseInt(incrementRatio);
2084
 
@@ -2097,11 +2114,13 @@
2097
  tryCount++;
2098
 
2099
  if (tryCount <= retryLimit) {
 
2100
  setTimeout(function () {
2101
  ajax(data, callback, dataType, showErrors, tryCount, incrementRatio);
2102
  return;
2103
  }, retryTimeout);
2104
  } else {
 
2105
  var errorCode = 'undefined' === typeof xhr.status ? 'Unknown' : xhr.status;
2106
  showError('Fatal Error: ' + errorCode + ' Please try the <a href=\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\' target=\'_blank\'>WP Staging Small Server Settings</a> or submit an error report and contact us.');
2107
  }
@@ -2267,24 +2286,26 @@
2267
 
2268
  if (response.error_type === 'comparison') {
2269
  cache.get('.wpstg-loader').hide();
2270
- var render = '<table style="width: 100%;"><thead><tr><th>Property</th><th>Production DB</th><th>Staging DB</th><th>Status</th></tr></thead><tbody>';
2271
  response.checks.forEach(function (x) {
2272
- var icon = '<i style="color: #00ff00">✔</i>';
2273
 
2274
  if (x.production !== x.staging) {
2275
- icon = '<i style="color: #ff0000">❌</i>';
2276
  }
2277
 
2278
  render += '<tr><td>' + x.name + '</td><td>' + x.production + '</td><td>' + x.staging + '</td><td>' + icon + '</td></tr>';
2279
  });
2280
- render += '</tbody></table><p>Note: Some mySQL properties do not match. You may proceed but the staging site may not work as expected.</p>';
2281
- WPStagingCommon.getSwalModal().fire({
 
 
2282
  title: 'Different Database Properties',
2283
  icon: 'warning',
2284
  html: render,
2285
  width: '650px',
2286
  focusConfirm: false,
2287
- confirmButtonText: 'Proceed Anyway',
2288
  showCancelButton: true
2289
  }).then(function (result) {
2290
  if (result.value) {
@@ -2348,6 +2369,7 @@
2348
  that.data.cloneDir = encodeURIComponent($.trim(cloneDir));
2349
  that.data.cloneHostname = $('#wpstg_clone_hostname').val();
2350
  that.data.emailsAllowed = $('#wpstg_allow_emails').is(':checked');
 
2351
  that.data.uploadsSymlinked = $('#wpstg_symlink_upload').is(':checked');
2352
  that.data.cleanPluginsThemes = $('#wpstg-clean-plugins-themes').is(':checked');
2353
  that.data.cleanUploadsDir = $('#wpstg-clean-uploads').is(':checked');
@@ -3151,6 +3173,21 @@
3151
 
3152
  $('.wpstg-caret').removeClass('wpstg-caret-up');
3153
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3154
  });
3155
  });
3156
 
940
  selector.elements[selector] = $(selector);
941
  }
942
  },
943
+ setJobId: function setJobId(jobId) {
944
+ localStorage.setItem('jobIdBeingProcessed', jobId);
945
+ },
946
+ getJobId: function getJobId() {
947
+ return localStorage.getItem('jobIdBeingProcessed');
948
+ },
949
  listenTooltip: function listenTooltip() {
950
  wpstgHoverIntent(document, '.wpstg--tooltip', function (target, event) {
951
  target.querySelector('.wpstg--tooltiptext').style.visibility = 'visible';
1685
  cache.get('#wpstg-error-details').show().html(message);
1686
  cache.get('#wpstg-removing-clone').removeClass('loading');
1687
  cache.get('.wpstg-loader').hide();
1688
+ $('.wpstg--modal--process--generic-problem').show().html(message); // Error event information for Staging
1689
+
1690
+ $.ajax({
1691
+ url: ajaxurl,
1692
+ type: 'POST',
1693
+ dataType: 'json',
1694
+ data: {
1695
+ 'action': 'wpstg_staging_job_error',
1696
+ 'accessToken': wpstg.accessToken,
1697
+ 'nonce': wpstg.nonce,
1698
+ 'error_message': message
1699
+ }
1700
+ });
1701
  };
1702
  /**
1703
  * Show warning during cloning or push process when closing tab or browser, or changing page
1760
  urlSpinner += '.gif';
1761
  ajaxSpinner = '<img src=\'\'' + urlSpinner + '\' alt=\'\' class=\'ajax-spinner general-spinner\' />';
1762
 
1763
+ $workFlow.on('change', '#wpstg_network_clone', function (e) {
1764
+ e.preventDefault();
1765
+ $('.wpstg-button-select').trigger('click');
1766
+ }) // Check / Un-check All Database Tables New
1767
  .on('click', '.wpstg-button-unselect', function (e) {
1768
  e.preventDefault();
1769
 
1787
  .on('click', '.wpstg-button-select', function (e) {
1788
  e.preventDefault();
1789
  $('#wpstg_select_tables_cloning .wpstg-db-table').each(function () {
1790
+ var regex = '^' + wpstg.tblprefix;
1791
+
1792
+ if (wpstg.isMultisite === '1' && !$('#wpstg_network_clone').is(':checked')) {
1793
+ regex += '([^0-9])_*';
 
 
1794
  }
1795
 
1796
+ if ($(this).attr('name').match(regex)) {
1797
+ $(this).prop('selected', 'selected');
1798
+ } else {
1799
+ $(this).prop('selected', false);
 
 
1800
  }
1801
  });
1802
  }) // Expand Directories
2095
  }
2096
 
2097
  tryCount = 'undefined' === typeof tryCount ? 0 : tryCount;
2098
+ var retryLimit = 5;
2099
  var retryTimeout = 10000 * tryCount;
2100
  incrementRatio = parseInt(incrementRatio);
2101
 
2114
  tryCount++;
2115
 
2116
  if (tryCount <= retryLimit) {
2117
+ console.log('RETRYING ' + tryCount + '/' + retryLimit);
2118
  setTimeout(function () {
2119
  ajax(data, callback, dataType, showErrors, tryCount, incrementRatio);
2120
  return;
2121
  }, retryTimeout);
2122
  } else {
2123
+ console.log('RETRYING LIMIT');
2124
  var errorCode = 'undefined' === typeof xhr.status ? 'Unknown' : xhr.status;
2125
  showError('Fatal Error: ' + errorCode + ' Please try the <a href=\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\' target=\'_blank\'>WP Staging Small Server Settings</a> or submit an error report and contact us.');
2126
  }
2286
 
2287
  if (response.error_type === 'comparison') {
2288
  cache.get('.wpstg-loader').hide();
2289
+ var render = '<table class="wpstg-db-comparison-table"><thead><tr><th>Property</th><th>Production DB</th><th>Staging DB</th><th>Status</th></tr></thead><tbody>';
2290
  response.checks.forEach(function (x) {
2291
+ var icon = '<span class="wpstg-css-tick"></span>';
2292
 
2293
  if (x.production !== x.staging) {
2294
+ icon = '<span class="wpstg-css-cross"></span>';
2295
  }
2296
 
2297
  render += '<tr><td>' + x.name + '</td><td>' + x.production + '</td><td>' + x.staging + '</td><td>' + icon + '</td></tr>';
2298
  });
2299
+ render += '</tbody></table><p>Note: Some MySQL/MariaDB properties do not match. You may proceed but the staging site may not work as expected.</p>';
2300
+ WPStagingCommon.getSwalModal(true, {
2301
+ popup: 'wpstg-swal-popup wpstg-db-comparison-modal centered-modal'
2302
+ }).fire({
2303
  title: 'Different Database Properties',
2304
  icon: 'warning',
2305
  html: render,
2306
  width: '650px',
2307
  focusConfirm: false,
2308
+ confirmButtonText: 'Proceed',
2309
  showCancelButton: true
2310
  }).then(function (result) {
2311
  if (result.value) {
2369
  that.data.cloneDir = encodeURIComponent($.trim(cloneDir));
2370
  that.data.cloneHostname = $('#wpstg_clone_hostname').val();
2371
  that.data.emailsAllowed = $('#wpstg_allow_emails').is(':checked');
2372
+ that.data.networkClone = $('#wpstg_network_clone').is(':checked');
2373
  that.data.uploadsSymlinked = $('#wpstg_symlink_upload').is(':checked');
2374
  that.data.cleanPluginsThemes = $('#wpstg-clean-plugins-themes').is(':checked');
2375
  that.data.cleanUploadsDir = $('#wpstg-clean-uploads').is(':checked');
3173
 
3174
  $('.wpstg-caret').removeClass('wpstg-caret-up');
3175
  }
3176
+ }); // "Event info" for backup errors
3177
+
3178
+ window.addEventListener('finishedProcessWithError', function (customEvent) {
3179
+ $.ajax({
3180
+ url: ajaxurl,
3181
+ type: 'POST',
3182
+ dataType: 'json',
3183
+ data: {
3184
+ 'action': 'wpstg_job_error',
3185
+ 'accessToken': wpstg.accessToken,
3186
+ 'nonce': wpstg.nonce,
3187
+ 'error_message': customEvent.detail.error,
3188
+ 'job_id': WPStagingCommon.getJobId()
3189
+ }
3190
+ });
3191
  });
3192
  });
3193
 
assets/js/dist/wpstg-admin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wpstg-admin.js","sources":["../src/modules/wpstg-dom-utils.js","../src/modules/wpstg-clone-staging.js","../src/modules/wpstg-directory-navigation.js","../src/modules/wpstg-exclude-filters.js","../src/modules/wpstg-modal.js","../src/modules/wpstg-hover-intent.js","../src/wpstg.js","../src/modules/wpstg-reset-modal.js","../src/modules/wpstg-cloning-advance-settings.js","../src/modules/wpstg-main-menu.js","../src/wpstg-admin.js"],"sourcesContent":["/**\n * WP STAGING basic jQuery replacement\n */\n\n/**\n * Shortcut for document.querySelector() or jQuery's $()\n * Return single element only\n */\nexport function qs(selector) {\n return document.querySelector(selector);\n}\n\n/**\n * Shortcut for document.querySelector() or jQuery's $()\n * Return collection of elements\n */\nexport function all(selector) {\n return document.querySelectorAll(selector);\n}\n\n/**\n * alternative of jQuery - $(parent).on(event, selector, handler)\n */\nexport function addEvent(parent, evt, selector, handler) {\n parent.addEventListener(evt, function(event) {\n if (event.target.matches(selector + ', ' + selector + ' *')) {\n handler(event.target.closest(selector), event);\n }\n }, false);\n}\n\nexport function slideDown(element, duration = 400) {\n element.style.display = 'block';\n element.style.overflow = 'hidden';\n const height = element.offsetHeight;\n element.style.height = '0px';\n element.style.transitionProperty = 'height';\n element.style.transitionDuration = duration + 'ms';\n setTimeout(() => {\n element.style.height = height + 'px';\n window.setTimeout(() => {\n element.style.removeProperty('height');\n element.style.removeProperty('overflow');\n element.style.removeProperty('transition-duration');\n element.style.removeProperty('transition-property');\n }, duration);\n }, 0);\n}\n\nexport function slideUp(element, duration = 400) {\n element.style.display = 'block';\n element.style.overflow = 'hidden';\n const height = element.offsetHeight;\n element.style.height = height + 'px';\n element.style.transitionProperty = 'height';\n element.style.transitionDuration = duration + 'ms';\n setTimeout(() => {\n element.style.height = '0px';\n window.setTimeout(() => {\n element.style.display = 'none';\n element.style.removeProperty('height');\n element.style.removeProperty('overflow');\n element.style.removeProperty('transition-duration');\n element.style.removeProperty('transition-property');\n }, duration);\n }, 0);\n}\n\nexport function getNextSibling(element, selector) {\n let sibling = element.nextElementSibling;\n\n while (sibling) {\n if (sibling.matches(selector)) {\n return sibling;\n }\n\n sibling = sibling.nextElementSibling;\n }\n};\n\nexport function getParents(element, selector) {\n const result = [];\n for (let parent = element && element.parentElement; parent; parent = parent.parentElement) {\n if (parent.matches(selector)) {\n result.push(parent);\n }\n }\n\n return result;\n}\n\n/**\n * Check if element has class name\n * @param element\n * @param className\n * @return {boolean}\n */\nexport function hasClass(element, className) {\n return (' ' + element.className + ' ').indexOf(' ' + className+ ' ') > -1;\n}\n","import * as dom from './wpstg-dom-utils.js';\n\n/**\n * Enable/Disable cloning for staging site\n */\nexport default class WpstgCloneStaging {\n constructor(\n pageWrapperId = '#wpstg-clonepage-wrapper',\n wpstgObject = wpstg,\n ) {\n this.pageWrapper = dom.qs(pageWrapperId);\n this.wpstgObject = wpstgObject;\n this.enableButtonId = '#wpstg-enable-staging-cloning';\n this.enableAction = 'wpstg_enable_staging_cloning';\n\n this.notyf = new Notyf({\n duration: 10000,\n position: {\n x: 'center',\n y: 'bottom',\n },\n dismissible: true,\n types: [\n {\n type: 'warning',\n background: 'orange',\n icon: false,\n },\n ],\n });\n this.init();\n }\n\n addEvents() {\n if (this.pageWrapper === null) {\n return;\n }\n\n dom.addEvent(this.pageWrapper, 'click', this.enableButtonId, () => {\n this.sendRequest(this.enableAction);\n });\n }\n\n init() {\n this.addEvents();\n }\n\n sendRequest(action) {\n fetch(this.wpstgObject.ajaxUrl, {\n method: 'POST',\n credentials: 'same-origin',\n body: new URLSearchParams({\n action: action,\n accessToken: this.wpstgObject.accessToken,\n nonce: this.wpstgObject.nonce,\n }),\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n }).then((response) => {\n if (response.ok) {\n return response.json();\n }\n\n return Promise.reject(response);\n }).then((data) => {\n // Reload current page if successful.\n if ('undefined' !== typeof (data.success) && data.success) {\n location.reload();\n return;\n }\n\n // There will be message probably in case of error\n if ('undefined' !== typeof (data.message)) {\n this.notyf.error(data.message);\n return;\n }\n\n this.notyf.error(this.wpstgObject.i18n['somethingWentWrong']);\n }).catch((error) => {\n console.warn(this.wpstgObject.i18n['somethingWentWrong'], error);\n });\n }\n}\n","import * as dom from './wpstg-dom-utils.js';\n\n/**\n * Fetch directory direct child directories\n */\nexport default class WpstgDirectoryNavigation {\n constructor(\n directoryListingSelector = '#wpstg-directories-listing',\n wpstgObject = wpstg,\n notyf = null,\n ) {\n this.directoryListingContainer = dom.qs(directoryListingSelector);\n this.wpstgObject = wpstgObject;\n this.dirCheckboxSelector = '.wpstg-check-dir';\n this.dirExpandSelector = '.wpstg-expand-dirs';\n this.unselectAllDirsSelector = '.wpstg-unselect-dirs';\n this.selectDefaultDirsSelector = '.wpstg-select-dirs-default';\n this.fetchChildrenAction = 'wpstg_fetch_dir_childrens';\n this.currentCheckboxElement = null;\n this.currentParentDiv = null;\n this.currentLoader = null;\n this.existingExcludes = [];\n this.excludedDirectories = [];\n this.isDefaultSelected = false;\n this.notyf = notyf;\n\n this.init();\n }\n\n addEvents() {\n if (this.directoryListingContainer === null) {\n console.log('Error: directory navigation add events');\n return;\n }\n\n dom.addEvent(this.directoryListingContainer, 'click', this.dirExpandSelector, (element, event) => {\n event.preventDefault();\n if (this.toggleDirExpand(element)) {\n this.sendRequest(this.fetchChildrenAction, element);\n }\n });\n\n dom.addEvent(this.directoryListingContainer, 'click', this.unselectAllDirsSelector, () => {\n this.unselectAll();\n });\n\n dom.addEvent(this.directoryListingContainer, 'click', this.selectDefaultDirsSelector, () => {\n this.selectDefault();\n });\n }\n\n init() {\n this.addEvents();\n this.parseExcludes();\n }\n\n /**\n * Toggle Dir Expand,\n * Return true if children aren't fetched\n * @param {HTMLElement} element\n * @return {boolean}\n */\n toggleDirExpand(element) {\n this.currentParentDiv = element.parentElement;\n this.currentCheckboxElement = element.previousSibling;\n this.currentLoader = this.currentParentDiv.querySelector('.wpstg-is-dir-loading');\n if (this.currentCheckboxElement.getAttribute('data-navigateable', 'false') === 'false') {\n return false;\n }\n\n if (this.currentCheckboxElement.getAttribute('data-scanned', 'false') === 'false') {\n return true;\n }\n\n return false;\n }\n\n sendRequest(action) {\n if (this.currentLoader !== null) {\n this.currentLoader.style.display = 'inline-block';\n }\n\n fetch(this.wpstgObject.ajaxUrl, {\n method: 'POST',\n credentials: 'same-origin',\n body: new URLSearchParams({\n action: action,\n accessToken: this.wpstgObject.accessToken,\n nonce: this.wpstgObject.nonce,\n dirPath: this.currentCheckboxElement.value,\n isChecked: this.currentCheckboxElement.checked,\n forceDefault: this.isDefaultSelected,\n }),\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n }).then((response) => {\n if (response.ok) {\n return response.json();\n }\n\n return Promise.reject(response);\n }).then((data) => {\n if ('undefined' !== typeof (data.success) && data.success) {\n this.currentCheckboxElement.setAttribute('data-scanned', true);\n const dirContainer = document.createElement('div');\n dirContainer.classList.add('wpstg-dir');\n dirContainer.classList.add('wpstg-subdir');\n dirContainer.innerHTML = JSON.parse(data.directoryListing);\n this.currentParentDiv.appendChild(dirContainer);\n if (this.currentLoader !== null) {\n this.currentLoader.style.display = 'none';\n }\n\n dom.slideDown(dirContainer);\n\n return;\n }\n\n if (this.notyf !== null) {\n this.notyf.error(this.wpstgObject.i18n['somethingWentWrong']);\n } else {\n alert('Error: ' + this.wpstgObject.i18n['somethingWentWrong']);\n }\n }).catch((error) => {\n console.warn(this.wpstgObject.i18n['somethingWentWrong'], error);\n });\n }\n\n getExcludedDirectories() {\n this.excludedDirectories = [];\n this.directoryListingContainer.querySelectorAll('.wpstg-dir input:not(:checked)').forEach((element) => {\n if (!this.isParentExcluded(element.value)) {\n this.excludedDirectories.push(element.value);\n }\n });\n\n this.existingExcludes.forEach((exclude) => {\n if (!this.isParentExcluded(exclude) && !this.isExcludeScanned(exclude)) {\n this.excludedDirectories.push(exclude);\n }\n });\n\n return this.excludedDirectories.join(this.wpstgObject.settings.directorySeparator);\n }\n\n /**\n * @param {string} path\n * @return {bool}\n */\n isParentExcluded(path) {\n let isParentAlreadyExcluded = false;\n this.excludedDirectories.forEach((dir) => {\n if (path.startsWith(dir + '/')) {\n isParentAlreadyExcluded = true;\n }\n });\n\n return isParentAlreadyExcluded;\n }\n\n getExtraDirectoriesRootOnly() {\n this.getExcludedDirectories();\n const extraDirectories = [];\n this.directoryListingContainer.querySelectorAll(':not(.wpstg-subdir)>.wpstg-dir>input.wpstg-wp-non-core-dir:checked').forEach((element) => {\n extraDirectories.push(element.value);\n });\n\n // Check if extra directories text area exists\n // TODO: remove extraCustomDirectories code if no one require extraCustomDirectories...\n const extraDirectoriesTextArea = dom.qs('#wpstg_extraDirectories');\n if (extraDirectoriesTextArea === null || extraDirectoriesTextArea.value === '') {\n return extraDirectories.join(this.wpstgObject.settings.directorySeparator);\n }\n\n const extraCustomDirectories = extraDirectoriesTextArea.value.split(/\\r?\\n/);\n\n return extraDirectories.concat(extraCustomDirectories).join(this.wpstgObject.settings.directorySeparator);\n }\n\n unselectAll() {\n this.directoryListingContainer.querySelectorAll('.wpstg-dir input').forEach((element) => {\n element.checked = false;\n });\n }\n\n selectDefault() {\n // unselect all checkboxes\n this.unselectAll();\n\n // only select those checkboxes whose class is wpstg-wp-core-dir\n this.directoryListingContainer.querySelectorAll('.wpstg-dir input.wpstg-wp-core-dir').forEach((element) => {\n element.checked = true;\n });\n\n // then unselect those checkboxes whose parent has wpstg extra checkbox\n this.directoryListingContainer.querySelectorAll('.wpstg-dir > .wpstg-wp-non-core-dir').forEach((element) => {\n element.parentElement.querySelectorAll('input.wpstg-wp-core-dir').forEach((element) => {\n element.checked = false;\n });\n });\n\n this.isDefaultSelected = true;\n }\n\n parseExcludes() {\n this.existingExcludes = this.directoryListingContainer.getAttribute('data-existing-excludes', []);\n if (this.existingExcludes === '') {\n this.existingExcludes = [];\n }\n\n if (this.existingExcludes.length !== 0) {\n this.existingExcludes = this.existingExcludes.split(',');\n }\n }\n\n isExcludeScanned(exclude) {\n this.directoryListingContainer.querySelectorAll('.wpstg-dir input').forEach((element) => {\n if (element.value === exclude) {\n return true;\n }\n });\n\n return false;\n }\n}\n","import * as dom from './wpstg-dom-utils.js';\n\n/**\n * Rich Exclude Filter Module\n */\nexport default class WpstgExcludeFilters {\n constructor(\n excludeFilterContainerSelector = '#wpstg-exclude-filters-container',\n wpstgObject = wpstg,\n ) {\n this.excludeContainer = dom.qs(excludeFilterContainerSelector);\n this.excludeTableBody = dom.qs(`${excludeFilterContainerSelector} tbody`);\n this.wpstgObject = wpstgObject;\n this.init();\n }\n\n addEvents() {\n dom.addEvent(this.excludeContainer, 'click', '.wpstg-file-size-rule', () => {\n this.addFileSizeExclude();\n });\n\n dom.addEvent(this.excludeContainer, 'click', '.wpstg-file-ext-rule', () => {\n this.addFileExtExclude();\n });\n\n dom.addEvent(this.excludeContainer, 'click', '.wpstg-file-name-rule', () => {\n this.addFileNameExclude();\n });\n\n dom.addEvent(this.excludeContainer, 'click', '.wpstg-dir-name-rule', () => {\n this.addDirNameExclude();\n });\n\n dom.addEvent(this.excludeContainer, 'click', '.wpstg-clear-all-rules', () => {\n this.clearExcludes();\n });\n\n dom.addEvent(this.excludeContainer, 'click', '.wpstg-remove-exclude-rule', (target) => {\n this.removeExclude(target);\n });\n }\n\n init() {\n if (this.excludeContainer === null) {\n console.log('Error: Given table selector not found!');\n return;\n }\n\n this.addEvents();\n }\n\n addFileSizeExclude() {\n this.addExcludeRuleRow('#wpstg-file-size-exclude-filter-template');\n }\n\n addFileExtExclude() {\n this.addExcludeRuleRow('#wpstg-file-ext-exclude-filter-template');\n }\n\n addFileNameExclude() {\n this.addExcludeRuleRow('#wpstg-file-name-exclude-filter-template');\n }\n\n addDirNameExclude() {\n this.addExcludeRuleRow('#wpstg-dir-name-exclude-filter-template');\n }\n\n addExcludeRuleRow(templateName) {\n const excludeRowTemplate = dom.qs(templateName);\n if (excludeRowTemplate !== null) {\n const clone = excludeRowTemplate.content.cloneNode(true);\n const excludeRow = clone.querySelector('tr');\n\n this.excludeTableBody.appendChild(excludeRow);\n dom.all('.wpstg-has-exclude-rules').forEach((e) => {\n e.style.display = 'inherit';\n });\n }\n }\n\n clearExcludes() {\n this.excludeTableBody.innerHTML = '';\n dom.all('.wpstg-has-exclude-rules').forEach((e) => {\n e.style.display = 'none';\n });\n }\n\n removeExclude(target) {\n if (target.parentElement !== null && target.parentElement.parentElement !== null) {\n this.excludeTableBody.removeChild(target.parentElement.parentElement);\n }\n\n if (this.excludeTableBody.innerHTML.trim() === '') {\n dom.all('.wpstg-has-exclude-rules').forEach((e) => {\n e.style.display = 'none';\n });\n }\n }\n\n /**\n * Converts all the exclude filters arrays into one single string to keep size of post request small\n * @return {string}\n */\n getExcludeFilters() {\n const globExcludes = [];\n const sizeExcludes = [];\n\n const sizeCompares = this.excludeTableBody.querySelectorAll('select[name=\"wpstgFileSizeExcludeRuleCompare[]\"]');\n const sizeSizes = this.excludeTableBody.querySelectorAll('input[name=\"wpstgFileSizeExcludeRuleSize[]\"]');\n const sizeByte = this.excludeTableBody.querySelectorAll('select[name=\"wpstgFileSizeExcludeRuleByte[]\"]');\n for (const [key, sizeInput] of Object.entries(sizeSizes)) {\n if (sizeInput.value !== '') {\n sizeExcludes.push(sizeCompares[key].value + ' ' + sizeInput.value + sizeByte[key].value);\n }\n }\n\n const extensionInputs = this.excludeTableBody.querySelectorAll('input[name=\"wpstgFileExtExcludeRule[]\"]');\n extensionInputs.forEach((x) => {\n const ext = this.cleanStringForGlob(x.value);\n if (ext !== '') {\n globExcludes.push('ext:' + ext.trim());\n }\n });\n\n const fileNamesPos = this.excludeTableBody.querySelectorAll('select[name=\"wpstgFileNameExcludeRulePos[]\"]');\n const fileNames = this.excludeTableBody.querySelectorAll('input[name=\"wpstgFileNameExcludeRulePath[]\"]');\n for (const [key, fileInput] of Object.entries(fileNames)) {\n const fileName = this.cleanStringForGlob(fileInput.value);\n if (fileName !== '') {\n globExcludes.push('file:' + fileNamesPos[key].value + ' ' + fileName.trim());\n }\n }\n\n const dirNamesPos = this.excludeTableBody.querySelectorAll('select[name=\"wpstgDirNameExcludeRulePos[]\"]');\n const dirNames = this.excludeTableBody.querySelectorAll('input[name=\"wpstgDirNameExcludeRulePath[]\"]');\n for (const [key, dirInput] of Object.entries(dirNames)) {\n const dirName = this.cleanStringForGlob(dirInput.value);\n if (dirName !== '') {\n globExcludes.push('dir:' + dirNamesPos[key].value + ' ' + dirName.trim());\n }\n }\n\n return {\n 'sizes': sizeExcludes.filter(this.onlyUnique).join(','),\n // return set of unique rules\n 'globs': globExcludes.filter(this.onlyUnique).join(','),\n };\n }\n\n onlyUnique(value, index, self) {\n return self.indexOf(value) === index;\n }\n\n /**\n * Remove most of the comment glob characters from the string\n * @param {String} value\n * @return {String}\n */\n cleanStringForGlob(value) {\n // will replace character like * ^ / \\ ! ? [ from the string\n return value.replace(/[*^//!\\.[?]/g, '');\n }\n}\n","/**\n * Basic WP Staging Modal implemented with help of Sweetalerts\n */\nexport default class WpstgModal {\n constructor(\n confirmAction,\n wpstgObject = wpstg,\n ) {\n this.confirmAction = confirmAction;\n this.wpstgObject = wpstgObject;\n }\n\n show(swalOptions, additionalParams = {}, callback = null) {\n wpstgSwal.fire(swalOptions).then((result) => {\n if (result.value && this.error !== null) {\n this.triggerConfirmAction(additionalParams, callback);\n }\n });\n }\n\n triggerConfirmAction(additionalParams = {}, callback = null) {\n fetch(this.wpstgObject.ajaxUrl, {\n method: 'POST',\n credentials: 'same-origin',\n body: new URLSearchParams(Object.assign({\n action: this.confirmAction,\n accessToken: this.wpstgObject.accessToken,\n nonce: this.wpstgObject.nonce,\n }, additionalParams)),\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n }).then((response) => {\n if (response.ok) {\n return response.json();\n }\n\n return Promise.reject(response);\n }).then((response) => {\n if (callback !== null) {\n callback(response);\n }\n }).catch((error) => {\n console.log(this.wpstgObject.i18n['somethingWentWrong'], error);\n });\n }\n}\n","'use strict';\n\n/**\n * This is a namespaced port of https://github.com/tristen/hoverintent,\n * with slight modification to accept selector with dynamically added element in dom,\n * instead of just already present element.\n *\n * @param {HTMLElement} parent\n * @param {string} selector\n * @param {CallableFunction} onOver\n * @param {CallableFunction} onOut\n *\n * @return {object}\n */\nexport default function(parent, selector, onOver, onOut) {\n let x; let y; let pX; let pY;\n let mouseOver = false;\n let focused = false;\n const h = {};\n let state = 0;\n let timer = 0;\n\n let options = {\n sensitivity: 7,\n interval: 100,\n timeout: 0,\n handleFocus: false,\n };\n\n function delay(el, e) {\n if (timer) {\n timer = clearTimeout(timer);\n }\n\n state = 0;\n return focused ? undefined : onOut(el, e);\n }\n\n function tracker(e) {\n x = e.clientX;\n y = e.clientY;\n }\n\n function compare(el, e) {\n if (timer) timer = clearTimeout(timer);\n if ((Math.abs(pX - x) + Math.abs(pY - y)) < options.sensitivity) {\n state = 1;\n return focused ? undefined : onOver(el, e);\n } else {\n pX = x;\n pY = y;\n timer = setTimeout(function() {\n compare(el, e);\n }, options.interval);\n }\n }\n\n // Public methods\n h.options = function(opt) {\n const focusOptionChanged = opt.handleFocus !== options.handleFocus;\n options = Object.assign({}, options, opt);\n if (focusOptionChanged) {\n options.handleFocus ? addFocus() : removeFocus();\n }\n\n return h;\n };\n\n function dispatchOver(el, e) {\n mouseOver = true;\n if (timer) {\n timer = clearTimeout(timer);\n }\n\n el.removeEventListener('mousemove', tracker, false);\n\n if (state !== 1) {\n pX = e.clientX;\n pY = e.clientY;\n\n el.addEventListener('mousemove', tracker, false);\n\n timer = setTimeout(function() {\n compare(el, e);\n }, options.interval);\n }\n\n return this;\n }\n\n /**\n * Newly added method,\n * A wrapper around dispatchOver to support dynamically added elements to dom\n */\n function onMouseOver(event) {\n if (event.target.matches(selector + ', ' + selector + ' *')) {\n dispatchOver(event.target.closest(selector), event);\n }\n };\n\n function dispatchOut(el, e) {\n mouseOver = false;\n if (timer) {\n timer = clearTimeout(timer);\n }\n\n el.removeEventListener('mousemove', tracker, false);\n\n if (state === 1) {\n timer = setTimeout(function() {\n delay(el, e);\n }, options.timeout);\n }\n\n return this;\n }\n\n /**\n * Newly added method,\n * A wrapper around dispatchOut to support dynamically added elements to dom\n */\n function onMouseOut(event) {\n if (event.target.matches(selector + ', ' + selector + ' *')) {\n dispatchOut(event.target.closest(selector), event);\n }\n };\n\n function dispatchFocus(el, e) {\n if (!mouseOver) {\n focused = true;\n onOver(el, e);\n }\n }\n\n /**\n * Newly added method,\n * A wrapper around dispatchFocus to support dynamically added elements to dom\n */\n function onFocus(event) {\n if (event.target.matches(selector + ', ' + selector + ' *')) {\n dispatchFocus(event.target.closest(selector), event);\n }\n };\n\n function dispatchBlur(el, e) {\n if (!mouseOver && focused) {\n focused = false;\n onOut(el, e);\n }\n }\n\n /**\n * Newly added method,\n * A wrapper around dispatchBlur to support dynamically added elements to dom\n */\n function onBlur(event) {\n if (event.target.matches(selector + ', ' + selector + ' *')) {\n dispatchBlur(event.target.closest(selector), event);\n }\n };\n\n /**\n * Modified to support dynamically added element\n */\n function addFocus() {\n parent.addEventListener('focus', onFocus, false);\n parent.addEventListener('blur', onBlur, false);\n }\n\n /**\n * Modified to support dynamically added element\n */\n function removeFocus() {\n parent.removeEventListener('focus', onFocus, false);\n parent.removeEventListener('blur', onBlur, false);\n }\n\n /**\n * Modified to support dynamically added element\n */\n h.remove = function() {\n if (!parent) {\n return;\n }\n\n parent.removeEventListener('mouseover', onMouseOver, false);\n parent.removeEventListener('mouseout', onMouseOut, false);\n removeFocus();\n };\n\n /**\n * Modified to support dynamically added element\n */\n if (parent) {\n parent.addEventListener('mouseover', onMouseOver, false);\n parent.addEventListener('mouseout', onMouseOut, false);\n }\n\n return h;\n};\n","import wpstgHoverIntent from './modules/wpstg-hover-intent';\n\nexport default (function($) {\n const WPStagingCommon = {\n continueErrorHandle: true,\n cache: {\n elements: [],\n get: function(selector) {\n // It is already cached!\n if ($.inArray(selector, this.elements) !== -1) {\n return this.elements[selector];\n }\n\n // Create cache and return\n this.elements[selector] = $(selector);\n\n return this.elements[selector];\n },\n refresh: function(selector) {\n selector.elements[selector] = $(selector);\n },\n },\n listenTooltip: function() {\n wpstgHoverIntent(document, '.wpstg--tooltip', function(target, event) {\n target.querySelector('.wpstg--tooltiptext').style.visibility = 'visible';\n }, function(target, event) {\n target.querySelector('.wpstg--tooltiptext').style.visibility = 'hidden';\n });\n },\n isEmpty: function(obj) {\n for (const prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n return false;\n }\n }\n\n return true;\n },\n // Get the custom themed Swal Modal for WP Staging\n // Easy to maintain now in one place now\n getSwalModal: function(isContentCentered = false, customClasses = {}) {\n // common style for all swal modal used in WP Staging\n const defaultCustomClasses = {\n confirmButton: 'wpstg--btn--confirm wpstg-blue-primary wpstg-button wpstg-link-btn wpstg-100-width',\n cancelButton: 'wpstg--btn--cancel wpstg-blue-primary wpstg-link-btn wpstg-100-width',\n actions: 'wpstg--modal--actions',\n popup: isContentCentered ? 'wpstg-swal-popup centered-modal' : 'wpstg-swal-popup',\n };\n\n // If a attribute exists in both default and additional attributes,\n // The class(es) of the additional attribute will overrite the default one.\n const options = {\n customClass: Object.assign(defaultCustomClasses, customClasses),\n buttonsStyling: false,\n reverseButtons: true,\n showClass: {\n popup: 'wpstg--swal2-show wpstg-swal-show',\n },\n };\n\n return wpstgSwal.mixin(options);\n },\n showSuccessModal: function(htmlContent) {\n this.getSwalModal().fire({\n showConfirmButton: false,\n showCancelButton: true,\n cancelButtonText: 'OK',\n icon: 'success',\n title: 'Success!',\n html: '<div class=\"wpstg--grey\" style=\"text-align: left; margin-top: 8px;\">' + htmlContent + '</div>',\n });\n },\n showWarningModal: function(htmlContent) {\n this.getSwalModal().fire({\n showConfirmButton: false,\n showCancelButton: true,\n cancelButtonText: 'OK',\n icon: 'warning',\n title: '',\n html: '<div class=\"wpstg--grey\" style=\"text-align: left; margin-top: 8px;\">' + htmlContent + '</div>',\n });\n },\n showErrorModal: function(htmlContent) {\n this.getSwalModal().fire({\n showConfirmButton: false,\n showCancelButton: true,\n cancelButtonText: 'OK',\n icon: 'error',\n title: 'Error!',\n html: '<div class=\"wpstg--grey\" style=\"text-align: left; margin-top: 8px;\">' + htmlContent + '</div>',\n });\n },\n getSwalContainer: function() {\n return wpstgSwal.getContainer();\n },\n closeSwalModal: function() {\n wpstgSwal.close();\n },\n /**\n * Treats a default response object generated by WordPress's\n * wp_send_json_success() or wp_send_json_error() functions in\n * PHP, parses it in JavaScript, and either throws if it's an error,\n * or returns the data if the response is successful.\n *\n * @param {object} response\n * @return {*}\n */\n getDataFromWordPressResponse(response) {\n if (typeof response !== 'object') {\n throw new Error('Unexpected response (ERR 1341)');\n }\n\n if (!response.hasOwnProperty('success')) {\n throw new Error('Unexpected response (ERR 1342)');\n }\n\n if (!response.hasOwnProperty('data')) {\n throw new Error('Unexpected response (ERR 1343)');\n }\n\n if (response.success === false) {\n if (response.data instanceof Array && response.data.length > 0) {\n throw new Error(response.data.shift());\n } else {\n throw new Error('Response was not successful');\n }\n } else {\n // Successful response. Return the data.\n return response.data;\n }\n },\n isLoading: function(isLoading) {\n if (!isLoading || isLoading === false) {\n WPStagingCommon.cache.get('.wpstg-loader').hide();\n } else {\n WPStagingCommon.cache.get('.wpstg-loader').show();\n }\n },\n /**\n * Convert the given url to make it slug compatible\n * @param {string} url\n */\n slugify: function(url) {\n return url.toString()\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/&/g, '-and-')\n .replace(/[^a-z0-9\\-]/g, '')\n .replace(/-+/g, '-')\n .replace(/^-*/, '')\n .replace(/-*$/, '')\n ;\n },\n showAjaxFatalError: function(response, prependMessage, appendMessage) {\n prependMessage = prependMessage ? prependMessage + '<br/><br/>' : 'Something went wrong! <br/><br/>';\n appendMessage = appendMessage ? appendMessage + '<br/><br/>' : '<br/><br/>Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.';\n\n if (response === false) {\n WPStagingCommon.showError(prependMessage + ' Error: No response.' + appendMessage);\n window.removeEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n return;\n }\n\n if (typeof response.error !== 'undefined' && response.error) {\n WPStagingCommon.showError(prependMessage + ' Error: ' + response.message + appendMessage);\n window.removeEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n return;\n }\n },\n handleFetchErrors: function(response) {\n if (!response.ok) {\n WPStagingCommon.showError('Error: ' + response.status + ' - ' + response.statusText + '. Please try again or contact support.');\n }\n return response;\n },\n showError: function(message) {\n WPStagingCommon.cache.get('#wpstg-try-again').css('display', 'inline-block');\n WPStagingCommon.cache.get('#wpstg-cancel-cloning').text('Reset');\n WPStagingCommon.cache.get('#wpstg-resume-cloning').show();\n WPStagingCommon.cache.get('#wpstg-error-wrapper').show();\n WPStagingCommon.cache.get('#wpstg-error-details').show().html(message);\n WPStagingCommon.cache.get('#wpstg-removing-clone').removeClass('loading');\n WPStagingCommon.cache.get('.wpstg-loader').hide();\n $('.wpstg--modal--process--generic-problem').show().html(message);\n },\n resetErrors: function() {\n WPStagingCommon.cache.get('#wpstg-error-details').hide().html('');\n },\n /**\n * Ajax Requests\n * @param {Object} data\n * @param {Function} callback\n * @param {string} dataType\n * @param {bool} showErrors\n * @param {int} tryCount\n * @param {float} incrementRatio\n * @param errorCallback\n */\n ajax: function(data, callback, dataType, showErrors, tryCount, incrementRatio = null, errorCallback = null) {\n if ('undefined' === typeof (dataType)) {\n dataType = 'json';\n }\n\n if (false !== showErrors) {\n showErrors = true;\n }\n\n tryCount = 'undefined' === typeof (tryCount) ? 0 : tryCount;\n\n const retryLimit = 10;\n\n let retryTimeout = 10000 * tryCount;\n\n incrementRatio = parseInt(incrementRatio);\n if (!isNaN(incrementRatio)) {\n retryTimeout *= incrementRatio;\n }\n\n $.ajax({\n url: ajaxurl + '?action=wpstg_processing&_=' + (Date.now() / 1000),\n type: 'POST',\n dataType: dataType,\n cache: false,\n data: data,\n error: function(xhr, textStatus, errorThrown) {\n console.log(xhr.status + ' ' + xhr.statusText + '---' + textStatus);\n\n if (typeof (errorCallback) === 'function') {\n // Custom error handler\n errorCallback(xhr, textStatus, errorThrown);\n\n if (!WPStagingCommon.continueErrorHandle) {\n // Reset state\n WPStagingCommon.continueErrorHandle = true;\n\n return;\n }\n }\n\n // Default error handler\n tryCount++;\n if (tryCount <= retryLimit) {\n setTimeout(function() {\n WPStagingCommon.ajax(data, callback, dataType, showErrors, tryCount, incrementRatio);\n return;\n }, retryTimeout);\n } else {\n const errorCode = 'undefined' === typeof (xhr.status) ? 'Unknown' : xhr.status;\n WPStagingCommon.showError(\n 'Fatal Error: ' + errorCode + ' Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.',\n );\n }\n },\n success: function(data) {\n if ('function' === typeof (callback)) {\n callback(data);\n }\n },\n statusCode: {\n 404: function() {\n if (tryCount >= retryLimit) {\n WPStagingCommon.showError('Error 404 - Can\\'t find ajax request URL! Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.');\n }\n },\n 500: function() {\n if (tryCount >= retryLimit) {\n WPStagingCommon.showError('Fatal Error 500 - Internal server error while processing the request! Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.');\n }\n },\n 504: function() {\n if (tryCount > retryLimit) {\n WPStagingCommon.showError('Error 504 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 502: function() {\n if (tryCount >= retryLimit) {\n WPStagingCommon.showError('Error 502 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 503: function() {\n if (tryCount >= retryLimit) {\n WPStagingCommon.showError('Error 503 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 429: function() {\n if (tryCount >= retryLimit) {\n WPStagingCommon.showError('Error 429 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 403: function() {\n if (tryCount >= retryLimit) {\n WPStagingCommon.showError('Refresh page or login again! The process should be finished successfully. \\n\\ ');\n }\n },\n },\n });\n },\n };\n\n return WPStagingCommon;\n})(jQuery);\n","\nimport * as dom from './wpstg-dom-utils.js';\nimport WpstgDirectoryNavigation from './wpstg-directory-navigation.js';\nimport WpstgExcludeFilters from './wpstg-exclude-filters.js';\nimport WpstgModal from './wpstg-modal.js';\nimport WPStagingCommon from './../wpstg.js';\n\n/**\n * Manage RESET MODAL\n */\nexport default class WpstgResetModal {\n constructor(\n cloneID,\n workflowSelector = '#wpstg-workflow',\n fetchExcludeSettingsAction = 'wpstg_clone_excludes_settings',\n modalErrorAction = 'wpstg_modal_error',\n wpstgObject = wpstg,\n ) {\n this.cloneID = cloneID;\n this.workflow = dom.qs(workflowSelector);\n this.wpstgObject = wpstgObject;\n this.fetchExcludeSettingsAction = fetchExcludeSettingsAction;\n this.modalErrorAction = modalErrorAction;\n this.resetButtonClass = 'wpstg-confirm-reset-clone';\n this.resetModalContainerClass = 'wpstg-reset-confirmation';\n this.resetTabSelector = '.wpstg-reset-exclude-tab';\n this.directoryNavigator = null;\n this.excludeFilters = null;\n this.isAllTablesChecked = true;\n }\n\n addEvents() {\n const resetModalContainer = dom.qs('.' + this.resetModalContainerClass);\n if (resetModalContainer === null) {\n console.log('Exit');\n return;\n }\n\n dom.addEvent(resetModalContainer, 'click', this.resetTabSelector, (target) => {\n this.toggleContent(target);\n });\n\n dom.addEvent(resetModalContainer, 'click', '.wpstg-button-select', () => {\n this.selectDefaultTables();\n });\n\n dom.addEvent(resetModalContainer, 'click', '.wpstg-button-unselect', () => {\n this.toggleTableSelection();\n });\n\n dom.addEvent(resetModalContainer, 'click', '.wpstg-expand-dirs', (target, event) => {\n event.preventDefault();\n this.toggleDirectoryNavigation(target);\n });\n\n dom.addEvent(resetModalContainer, 'change', 'input.wpstg-check-dir', (target) => {\n this.updateDirectorySelection(target);\n });\n }\n\n init() {\n this.addEvents();\n }\n\n toggleContent(target) {\n const resetModalContainer = dom.qs('.' + this.resetModalContainerClass);\n const contentId = target.getAttribute('data-id');\n const tabTriangle = target.querySelector('.wpstg-tab-triangle');\n const isCollapsed = target.getAttribute('data-collapsed', 'true');\n const content = dom.qs(contentId);\n if (isCollapsed === 'true') {\n if (resetModalContainer.classList.contains('has-collapsible-open')) {\n resetModalContainer.classList.add('has-collapsible-open-2');\n } else {\n resetModalContainer.classList.add('has-collapsible-open');\n }\n\n dom.slideDown(content);\n tabTriangle.style.transform = 'rotate(90deg)';\n target.setAttribute('data-collapsed', 'false');\n } else {\n if (resetModalContainer.classList.contains('has-collapsible-open-2')) {\n resetModalContainer.classList.remove('has-collapsible-open-2');\n } else {\n resetModalContainer.classList.remove('has-collapsible-open');\n }\n\n dom.slideUp(content);\n tabTriangle.style.removeProperty('transform');\n target.setAttribute('data-collapsed', 'true');\n }\n }\n\n /**\n * Show Swal alert with loader and send ajax request to fetch content of alert.\n * @return Promise\n */\n showModal() {\n const swalPromise = this.loadModal();\n this.init();\n this.fetchCloneExcludes();\n return swalPromise;\n }\n\n loadModal() {\n return WPStagingCommon.getSwalModal(false, {\n confirmButton: this.resetButtonClass + ' wpstg-confirm-reset-clone wpstg--btn--confirm wpstg-blue-primary wpstg-button wpstg-link-btn',\n container: this.resetModalContainerClass + ' wpstg-swal2-container wpstg-swal2-loading',\n }).fire({\n title: '',\n icon: 'warning',\n html: this.getAjaxLoader(),\n width: '400px',\n focusConfirm: false,\n confirmButtonText: this.wpstgObject.i18n.resetClone,\n showCancelButton: true,\n });\n }\n\n fetchCloneExcludes() {\n this.error = null;\n // send ajax request and fetch preserved exclude settings\n fetch(this.wpstgObject.ajaxUrl, {\n method: 'POST',\n credentials: 'same-origin',\n body: new URLSearchParams({\n action: this.fetchExcludeSettingsAction,\n accessToken: this.wpstgObject.accessToken,\n nonce: this.wpstgObject.nonce,\n clone: this.cloneID,\n job: 'resetting',\n }),\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n }).then((response) => {\n if (response.ok) {\n return response.json();\n }\n\n return Promise.reject(response);\n }).then((data) => {\n if (!data.success) {\n const errorModal = new WpstgModal(this.modalErrorAction, this.wpstgObject);\n errorModal.show(Object.assign({\n title: 'Error',\n icon: 'error',\n html: this.wpstgObject.i18n['somethingWentWrong'],\n width: '500px',\n confirmButtonText: 'Ok',\n showCancelButton: false,\n customClass: {\n confirmButton: 'wpstg--btn--confirm wpstg-blue-primary wpstg-button wpstg-link-btn',\n cancelButton: 'wpstg--btn--cancel wpstg-blue-primary wpstg-link-btn',\n actions: 'wpstg--modal--actions',\n popup: 'wpstg-swal-popup centered-modal',\n },\n buttonsStyling: false,\n reverseButtons: true,\n }, data.swalOptions), {\n type: data.type,\n });\n\n return;\n }\n\n const modal = dom.qs('.wpstg-reset-confirmation');\n modal.classList.remove('wpstg-swal2-loading');\n modal.querySelector('.wpstg--swal2-popup').style.width = '500px';\n modal.querySelector('.wpstg--swal2-content').innerHTML = data.html;\n this.directoryNavigator = new WpstgDirectoryNavigation();\n this.excludeFilters = new WpstgExcludeFilters();\n }).catch((error) => {\n this.renderError({\n 'html': this.wpstgObject.i18n['somethingWentWrong'] + ' ' + error,\n });\n });\n }\n\n getDirectoryNavigator() {\n return this.directoryNavigator;\n }\n\n getExcludeFilters() {\n return this.excludeFilters;\n }\n\n getAjaxLoader() {\n return '<div class=\"wpstg-swal2-ajax-loader\"><img src=\"' + this.wpstgObject.wpstgIcon + '\" /></div>';\n }\n\n toggleDirectoryNavigation(element) {\n const cbElement = element.previousSibling;\n if (cbElement.getAttribute('data-navigateable', 'false') === 'false') {\n return;\n }\n\n if (cbElement.getAttribute('data-scanned', 'false') === 'false') {\n return;\n }\n\n const subDirectories = dom.getNextSibling(element, '.wpstg-subdir');\n\n if (subDirectories.style.display === 'none') {\n dom.slideDown(subDirectories);\n } else {\n dom.slideUp(subDirectories);\n }\n }\n\n updateDirectorySelection(element) {\n const parent = element.parentElement;\n if (element.checked) {\n dom.getParents(parent, '.wpstg-dir').forEach((parElem) => {\n for (let i = 0; i < parElem.children.length; i++) {\n if (parElem.children[i].matches('.wpstg-check-dir')) {\n parElem.children[i].checked = true;\n }\n }\n });\n parent.querySelectorAll('.wpstg-expand-dirs').forEach((x) => {\n x.classList.remove('disabled');\n });\n parent.querySelectorAll('.wpstg-subdir .wpstg-check-dir').forEach((x) => {\n x.checked = true;\n });\n } else {\n parent.querySelectorAll('.wpstg-expand-dirs, .wpstg-check-subdirs').forEach((x) => {\n x.classList.add('disabled');\n });\n parent.querySelectorAll('.wpstg-dir .wpstg-check-dir').forEach((x) => {\n x.checked = false;\n });\n }\n }\n\n selectDefaultTables() {\n const resetModalContainer = dom.qs('.' + this.resetModalContainerClass);\n const options = resetModalContainer.querySelectorAll('#wpstg_select_tables_cloning .wpstg-db-table');\n const multisitePattern = '^' + this.wpstgObject.tblprefix + '([^0-9])_*';\n const singleSitePattern = '^' + this.wpstgObject.tblprefix;\n options.forEach((option) => {\n const name = option.getAttribute('name', '');\n if (this.wpstgObject.isMultisite === '1' && name.match(multisitePattern)) {\n option.setAttribute('selected', 'selected');\n } else if (this.wpstgObject.isMultisite === '' && name.match(singleSitePattern)) {\n option.setAttribute('selected', 'selected');\n } else {\n option.removeAttribute('selected');\n }\n });\n }\n\n toggleTableSelection() {\n const resetModalContainer = dom.qs('.' + this.resetModalContainerClass);\n if (false === this.isAllTablesChecked) {\n resetModalContainer.querySelectorAll('#wpstg_select_tables_cloning .wpstg-db-table').forEach((option) => {\n option.setAttribute('selected', 'selected');\n });\n resetModalContainer.querySelector('.wpstg-button-unselect').innerHTML = 'Unselect All';\n // cache.get('.wpstg-db-table-checkboxes').prop('checked', true);\n this.isAllTablesChecked = true;\n } else {\n resetModalContainer.querySelectorAll('#wpstg_select_tables_cloning .wpstg-db-table').forEach((option) => {\n option.removeAttribute('selected');\n });\n resetModalContainer.querySelector('.wpstg-button-unselect').innerHTML = 'Select All';\n // cache.get('.wpstg-db-table-checkboxes').prop('checked', false);\n this.isAllTablesChecked = false;\n }\n }\n}\n","import * as dom from './wpstg-dom-utils.js';\n\n/**\n * Handle toggle of advance settings checkboxes\n */\nexport default class WpstgCloningAdvanceSettings {\n constructor(\n baseContainerSelector = '#wpstg-clonepage-wrapper',\n ) {\n this.baseContainer = dom.qs(baseContainerSelector);\n this.checkBoxSettingTogglerSelector = '.wpstg-toggle-advance-settings-section';\n this.init();\n }\n\n /**\n * Add events\n * @return {void}\n */\n addEvents() {\n if (this.baseContainer === null) {\n return;\n }\n\n dom.addEvent(this.baseContainer, 'change', this.checkBoxSettingTogglerSelector, (element) => {\n this.toggleSettings(element);\n });\n }\n\n /**\n * @return {void}\n */\n init() {\n this.addEvents();\n }\n\n /**\n * Expand/Collapse checkbox content on change\n * @return {void}\n */\n toggleSettings(element) {\n const target = dom.qs('#' + element.getAttribute('data-id'));\n if (element.checked) {\n dom.slideDown(target);\n } else {\n dom.slideUp(target);\n }\n }\n}\n","import * as dom from './wpstg-dom-utils.js';\n\nexport default class WpstgMainMenu {\n constructor() {\n this.activeTabClass = 'wpstg--tab--active';\n this.mainMenu();\n }\n\n mainMenu() {\n const tabHeader = dom.qs('.wpstg--tab--header');\n // Early bail if tab header is not available\n if (tabHeader === null) {\n return;\n }\n\n dom.addEvent(dom.qs('.wpstg--tab--header'), 'click', '.wpstg-button', (element) => {\n const $this = element;\n const target = $this.getAttribute('data-target');\n const targetElements = dom.all(target);\n const menuItems = dom.all('.wpstg--tab--header a[data-target]');\n const contents = dom.all('.wpstg--tab--contents > .wpstg--tab--content');\n\n contents.forEach((content) => {\n // active tab class is without the css dot class prefix\n if (content.matches('.' + this.activeTabClass + ':not(' + target + ')')) {\n content.classList.remove(this.activeTabClass);\n }\n });\n\n menuItems.forEach((menuItem) => {\n if (menuItem !== $this) {\n menuItem.classList.remove(this.activeTabClass);\n }\n });\n\n $this.classList.add(this.activeTabClass);\n\n targetElements.forEach((targetElement) => {\n targetElement.classList.add(this.activeTabClass);\n });\n\n if ('#wpstg--tab--backup' === target) {\n window.dispatchEvent(new Event('backups-tab'));\n }\n });\n };\n}\n","import WpstgCloneStaging from './modules/wpstg-clone-staging.js';\nimport WpstgDirectoryNavigation from './modules/wpstg-directory-navigation.js';\nimport WpstgExcludeFilters from './modules/wpstg-exclude-filters.js';\nimport WpstgResetModal from './modules/wpstg-reset-modal.js';\nimport WpstgModal from './modules/wpstg-modal.js';\nimport WpstgCloningAdvanceSettings from './modules/wpstg-cloning-advance-settings.js';\nimport WpstgMainMenu from './modules/wpstg-main-menu.js';\nimport WPStagingCommon from './wpstg.js';\n\nvar WPStaging = (function($) {\n const that = {\n isCancelled: false,\n isFinished: false,\n getLogs: false,\n time: 1,\n executionTime: false,\n progressBar: 0,\n cloneExcludeFilters: null,\n directoryNavigator: null,\n notyf: null,\n areAllTablesChecked: true,\n };\n const cache = {elements: []};\n let timeout; let ajaxSpinner;\n\n /**\n * Get / Set Cache for Selector\n * @param {String} selector\n * @return {*}\n */\n cache.get = function(selector) {\n // It is already cached!\n if ($.inArray(selector, cache.elements) !== -1) {\n return cache.elements[selector];\n }\n\n // Create cache and return\n cache.elements[selector] = jQuery(selector);\n\n return cache.elements[selector];\n };\n\n /**\n * Refreshes given cache\n * @param {String} selector\n */\n cache.refresh = function(selector) {\n selector.elements[selector] = jQuery(selector);\n };\n\n /**\n * Show and Log Error Message\n * @param {String} message\n */\n const showError = function(message) {\n cache.get('#wpstg-try-again').css('display', 'inline-block');\n cache.get('#wpstg-cancel-cloning').text('Reset');\n cache.get('#wpstg-resume-cloning').show();\n cache.get('#wpstg-error-wrapper').show();\n cache.get('#wpstg-error-details').show().html(message);\n cache.get('#wpstg-removing-clone').removeClass('loading');\n cache.get('.wpstg-loader').hide();\n $('.wpstg--modal--process--generic-problem').show().html(message);\n };\n\n /**\n * Show warning during cloning or push process when closing tab or browser, or changing page\n * @param {beforeunload} event\n * @return {null}\n */\n that.warnIfClosingDuringProcess = function(event) {\n // Only some browsers show the message below, most say something like \"Changes you made may not be saved\" (Chrome) or \"You have unsaved changes. Exit?\"\n event.returnValue = 'You MUST leave this window open while cloning/pushing. Please wait...';\n return null;\n };\n\n /**\n *\n * @param response the error object\n * @param prependMessage Overwrite default error message at beginning\n * @param appendMessage Overwrite default error message at end\n * @returns void\n */\n\n const showAjaxFatalError = function(response, prependMessage, appendMessage) {\n prependMessage = prependMessage ? prependMessage + '<br/><br/>' : 'Something went wrong! <br/><br/>';\n appendMessage = appendMessage ? appendMessage + '<br/><br/>' : '<br/><br/>Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.';\n\n if (response === false) {\n showError(prependMessage + ' Error: No response.' + appendMessage);\n window.removeEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n return;\n }\n\n if (typeof response.error !== 'undefined' && response.error) {\n console.error(response.message);\n showError(prependMessage + ' Error: ' + response.message + appendMessage);\n window.removeEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n return;\n }\n };\n\n /**\n *\n * @param response\n * @return {{ok}|*}\n */\n const handleFetchErrors = function(response) {\n if (!response.ok) {\n showError('Error: ' + response.status + ' - ' + response.statusText + '. Please try again or contact support.');\n }\n return response;\n };\n\n /** Hide and reset previous thrown visible errors */\n const resetErrors = function() {\n cache.get('#wpstg-error-details').hide().html('');\n };\n\n /**\n * Common Elements\n */\n const elements = function() {\n const $workFlow = cache.get('#wpstg-workflow');\n let urlSpinner = ajaxurl.replace('/admin-ajax.php', '') + '/images/spinner';\n let timer;\n\n if (2 < window.devicePixelRatio) {\n urlSpinner += '-2x';\n }\n\n urlSpinner += '.gif';\n\n ajaxSpinner = '<img src=\\'\\'' + urlSpinner + '\\' alt=\\'\\' class=\\'ajax-spinner general-spinner\\' />';\n\n const getBaseValues = function() {\n const path = $('#wpstg-use-target-dir').data('base-path');\n const uri = $('#wpstg-use-target-hostname').data('base-uri');\n return {\n path,\n };\n };\n\n $workFlow\n // Check / Un-check All Database Tables New\n .on('click', '.wpstg-button-unselect', function(e) {\n e.preventDefault();\n\n if (false === that.areAllTablesChecked) {\n cache.get('#wpstg_select_tables_cloning .wpstg-db-table').prop('selected', 'selected');\n cache.get('.wpstg-button-unselect').text('Unselect All');\n cache.get('.wpstg-db-table-checkboxes').prop('checked', true);\n that.areAllTablesChecked = true;\n } else {\n cache.get('#wpstg_select_tables_cloning .wpstg-db-table').prop('selected', false);\n cache.get('.wpstg-button-unselect').text('Select All');\n cache.get('.wpstg-db-table-checkboxes').prop('checked', false);\n that.areAllTablesChecked = false;\n }\n })\n\n /**\n * Select tables with certain tbl prefix | NEW\n * @param obj e\n * @returns {undefined}\n */\n .on('click', '.wpstg-button-select', function(e) {\n e.preventDefault();\n $('#wpstg_select_tables_cloning .wpstg-db-table').each(function() {\n if (wpstg.isMultisite == 1) {\n if ($(this).attr('name').match('^' + wpstg.tblprefix + '([^0-9])_*')) {\n $(this).prop('selected', 'selected');\n } else {\n $(this).prop('selected', false);\n }\n }\n\n if (wpstg.isMultisite == 0) {\n if ($(this).attr('name').match('^' + wpstg.tblprefix)) {\n $(this).prop('selected', 'selected');\n } else {\n $(this).prop('selected', false);\n }\n }\n });\n })\n // Expand Directories\n .on('click', '.wpstg-expand-dirs', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n\n $this.siblings('.wpstg-subdir').slideToggle();\n })\n // When a directory checkbox is Selected\n .on('change', 'input.wpstg-check-dir', function() {\n const $directory = $(this).parent('.wpstg-dir');\n\n if (this.checked) {\n $directory.parents('.wpstg-dir').children('.wpstg-check-dir').prop('checked', true);\n $directory.find('.wpstg-expand-dirs').removeClass('disabled');\n $directory.find('.wpstg-subdir .wpstg-check-dir').prop('checked', true);\n } else {\n $directory.find('.wpstg-dir .wpstg-check-dir').prop('checked', false);\n $directory.find('.wpstg-expand-dirs, .wpstg-check-subdirs').addClass('disabled');\n $directory.find('.wpstg-check-subdirs').data('action', 'check').text('check');\n }\n })\n // When a directory name is Selected\n .on('change', 'href.wpstg-check-dir', function() {\n const $directory = $(this).parent('.wpstg-dir');\n\n if (this.checked) {\n $directory.parents('.wpstg-dir').children('.wpstg-check-dir').prop('checked', true);\n $directory.find('.wpstg-expand-dirs').removeClass('disabled');\n $directory.find('.wpstg-subdir .wpstg-check-dir').prop('checked', true);\n } else {\n $directory.find('.wpstg-dir .wpstg-check-dir').prop('checked', false);\n $directory.find('.wpstg-expand-dirs, .wpstg-check-subdirs').addClass('disabled');\n $directory.find('.wpstg-check-subdirs').data('action', 'check').text('check');\n }\n })\n // Check the max length of the clone name and if the clone name already exists\n .on('keyup', '#wpstg-new-clone-id', function() {\n // Hide previous errors\n document.getElementById('wpstg-error-details').style.display = 'none';\n\n // This request was already sent, clear it up!\n if ('number' === typeof (timer)) {\n clearInterval(timer);\n }\n\n // Early bail if site name is empty\n if (this.value === undefined || this.value === '') {\n cache.get('#wpstg-new-clone-id').removeClass('wpstg-error-input');\n cache.get('#wpstg-start-cloning').removeAttr('disabled');\n cache.get('#wpstg-clone-id-error').text('').hide();\n return;\n }\n\n // Convert the site name to directory name (slugify the site name to create directory name)\n const cloneDirectoryName = WPStagingCommon.slugify(this.value);\n\n timer = setTimeout(\n function() {\n ajax(\n {\n action: 'wpstg_check_clone',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n directoryName: cloneDirectoryName,\n },\n function(response) {\n if (response.status === 'success') {\n cache.get('#wpstg-new-clone-id').removeClass('wpstg-error-input');\n cache.get('#wpstg-start-cloning').removeAttr('disabled');\n cache.get('#wpstg-clone-id-error').text('').hide();\n } else {\n cache.get('#wpstg-new-clone-id').addClass('wpstg-error-input');\n cache.get('#wpstg-start-cloning').prop('disabled', true);\n cache.get('#wpstg-clone-id-error').text(response.message).show();\n }\n },\n );\n },\n 500,\n );\n })\n // Restart cloning process\n .on('click', '#wpstg-start-cloning', function() {\n resetErrors();\n that.isCancelled = false;\n that.getLogs = false;\n that.progressBar = 0;\n })\n .on('input', '#wpstg-new-clone-id', function() {\n if ($('#wpstg-clone-directory').length < 1) {\n return;\n }\n\n const slug = WPStagingCommon.slugify(this.value);\n const $targetDir = $('#wpstg-use-target-dir');\n const $targetUri = $('#wpstg-use-target-hostname');\n let path = $targetDir.data('base-path');\n let uri = $targetUri.data('base-uri');\n\n if (path) {\n path = path.replace(/\\/+$/g, '') + '/' + slug + '/';\n }\n\n if (uri) {\n uri = uri.replace(/\\/+$/g, '') + '/' + slug;\n }\n\n\n $('.wpstg-use-target-dir--value').text(path);\n $('.wpstg-use-target-hostname--value').text(uri);\n\n $targetDir.attr('data-path', path);\n $targetUri.attr('data-uri', uri);\n $('#wpstg_clone_dir').attr('placeholder', path);\n $('#wpstg_clone_hostname').attr('placeholder', uri);\n })\n .on('input', '#wpstg_clone_hostname', function() {\n if ($(this).val() === '' || validateTargetHost()) {\n $('#wpstg_clone_hostname_error').remove();\n return;\n }\n if (!validateTargetHost() && !$('#wpstg_clone_hostname_error').length) {\n $('#wpstg-clone-directory tr:last-of-type').after('<tr><td>&nbsp;</td><td><p id=\"wpstg_clone_hostname_error\" style=\"color: red;\">&nbsp;Invalid host name. Please provide it in a format like http://example.com</p></td></tr>');\n }\n })\n ;\n\n cloneActions();\n };\n\n /* @returns {boolean} */\n var validateTargetHost = function() {\n const the_domain = $('#wpstg_clone_hostname').val();\n\n if (the_domain === '') {\n return true;\n }\n\n const reg = /^http(s)?:\\/\\/.*$/;\n if (reg.test(the_domain) === false) {\n return false;\n }\n return true;\n };\n\n /**\n * Clone actions\n */\n var cloneActions = function() {\n const $workFlow = cache.get('#wpstg-workflow');\n\n $workFlow\n // Cancel cloning\n .on('click', '#wpstg-cancel-cloning', function() {\n if (!confirm('Are you sure you want to cancel cloning process?')) {\n return false;\n }\n\n const $this = $(this);\n\n $('#wpstg-try-again, #wpstg-home-link').hide();\n $this.prop('disabled', true);\n\n that.isCancelled = true;\n that.progressBar = 0;\n\n $('#wpstg-processing-status').text('Please wait...this can take up a while.');\n $('.wpstg-loader, #wpstg-show-log-button').hide();\n\n $this.parent().append(ajaxSpinner);\n\n cancelCloning();\n })\n // Resume cloning\n .on('click', '#wpstg-resume-cloning', function() {\n resetErrors();\n const $this = $(this);\n\n $('#wpstg-try-again, #wpstg-home-link').hide();\n\n that.isCancelled = false;\n\n $('#wpstg-processing-status').text('Try to resume cloning process...');\n $('#wpstg-error-details').hide();\n $('.wpstg-loader').show();\n\n $this.parent().append(ajaxSpinner);\n\n that.startCloning();\n })\n // Cancel update cloning\n .on('click', '#wpstg-cancel-cloning-update', function() {\n resetErrors();\n\n const $this = $(this);\n\n $('#wpstg-try-again, #wpstg-home-link').hide();\n $this.prop('disabled', true);\n\n that.isCancelled = true;\n\n $('#wpstg-cloning-result').text('Please wait...this can take up a while.');\n $('.wpstg-loader, #wpstg-show-log-button').hide();\n\n $this.parent().append(ajaxSpinner);\n\n cancelCloningUpdate();\n })\n // Restart cloning\n .on('click', '#wpstg-restart-cloning', function() {\n resetErrors();\n\n const $this = $(this);\n\n $('#wpstg-try-again, #wpstg-home-link').hide();\n $this.prop('disabled', true);\n\n that.isCancelled = true;\n\n $('#wpstg-cloning-result').text('Please wait...this can take up a while.');\n $('.wpstg-loader, #wpstg-show-log-button').hide();\n\n $this.parent().append(ajaxSpinner);\n\n restart();\n })\n // Delete clone - confirmation\n .on('click', '.wpstg-remove-clone[data-clone]', function(e) {\n resetErrors();\n e.preventDefault();\n\n const $existingClones = cache.get('#wpstg-existing-clones');\n\n $workFlow.removeClass('active');\n\n cache.get('.wpstg-loader').show();\n\n ajax(\n {\n action: 'wpstg_confirm_delete_clone',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n clone: $(this).data('clone'),\n },\n function(response) {\n cache.get('#wpstg-removing-clone').html(response);\n\n $existingClones.children('img').remove();\n\n cache.get('.wpstg-loader').hide();\n\n $('html, body').animate({\n // This logic is meant to be a \"scrollBottom\"\n scrollTop: $('#wpstg-remove-clone').offset().top - $(window).height() +\n $('#wpstg-remove-clone').height() + 50,\n }, 100);\n },\n 'HTML',\n );\n })\n // Delete clone - confirmed\n .on('click', '#wpstg-remove-clone', function(e) {\n resetErrors();\n e.preventDefault();\n\n cache.get('#wpstg-removing-clone').addClass('loading');\n\n cache.get('.wpstg-loader').show();\n\n deleteClone($(this).data('clone'));\n })\n // Cancel deleting clone\n .on('click', '#wpstg-cancel-removing', function(e) {\n e.preventDefault();\n $('.wpstg-clone').removeClass('active');\n cache.get('#wpstg-removing-clone').html('');\n })\n // Update\n .on('click', '.wpstg-execute-clone', function(e) {\n e.preventDefault();\n\n const clone = $(this).data('clone');\n\n $workFlow.addClass('loading');\n that.cloneExcludeFilters = null;\n ajax(\n {\n action: 'wpstg_scanning',\n clone: clone,\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n },\n function(response) {\n if (response.length < 1) {\n showError(\n 'Something went wrong! Error: No response. Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.',\n );\n }\n\n const jsonResponse = tryParseJson(response);\n if (jsonResponse !== false && jsonResponse.success === false) {\n $workFlow.removeClass('loading');\n showErrorModal(jsonResponse);\n\n return;\n }\n\n $workFlow.removeClass('loading').html(response);\n // register check disk space function for clone update process.\n checkDiskSpace();\n that.directoryNavigator = new WpstgDirectoryNavigation('#wpstg-directories-listing', wpstg, that.notyf);\n that.cloneExcludeFilters = new WpstgExcludeFilters();\n that.switchStep(2);\n },\n 'HTML',\n );\n })\n // Reset Clone\n .on('click', '.wpstg-reset-clone', function(e) {\n e.preventDefault();\n const clone = $(this).data('clone');\n const resetModal = new WpstgResetModal(clone);\n const promise = resetModal.showModal();\n that.areAllTablesChecked = true;\n\n promise.then((result) => {\n if (result.value) {\n const dirNavigator = resetModal.getDirectoryNavigator();\n const exclFilters = resetModal.getExcludeFilters().getExcludeFilters();\n resetClone(clone, {\n includedTables: getIncludedTables(),\n excludeSizeRules: encodeURIComponent(exclFilters.sizes),\n excludeGlobRules: encodeURIComponent(exclFilters.globs),\n excludedDirectories: dirNavigator.getExcludedDirectories(),\n extraDirectories: dirNavigator.getExtraDirectoriesRootOnly(),\n });\n }\n });\n\n return;\n });\n };\n\n /**\n * Ajax Requests\n * @param Object data\n * @param Function callback\n * @param string dataType\n * @param bool showErrors\n * @param int tryCount\n * @param float incrementRatio\n */\n var ajax = function(data, callback, dataType, showErrors, tryCount, incrementRatio = null) {\n if ('undefined' === typeof (dataType)) {\n dataType = 'json';\n }\n\n if (false !== showErrors) {\n showErrors = true;\n }\n\n tryCount = 'undefined' === typeof (tryCount) ? 0 : tryCount;\n\n const retryLimit = 10;\n\n let retryTimeout = 10000 * tryCount;\n\n incrementRatio = parseInt(incrementRatio);\n if (!isNaN(incrementRatio)) {\n retryTimeout *= incrementRatio;\n }\n\n $.ajax({\n url: ajaxurl + '?action=wpstg_processing&_=' + (Date.now() / 1000),\n type: 'POST',\n dataType: dataType,\n cache: false,\n data: data,\n error: function(xhr, textStatus, errorThrown) {\n // try again after 10 seconds\n tryCount++;\n if (tryCount <= retryLimit) {\n setTimeout(function() {\n ajax(data, callback, dataType, showErrors, tryCount, incrementRatio);\n return;\n }, retryTimeout);\n } else {\n const errorCode = 'undefined' === typeof (xhr.status) ? 'Unknown' : xhr.status;\n showError(\n 'Fatal Error: ' + errorCode + ' Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.',\n );\n }\n },\n success: function(data) {\n if ('function' === typeof (callback)) {\n callback(data);\n }\n },\n statusCode: {\n 404: function() {\n if (tryCount >= retryLimit) {\n showError('Error 404 - Can\\'t find ajax request URL! Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.');\n }\n },\n 500: function() {\n if (tryCount >= retryLimit) {\n showError('Fatal Error 500 - Internal server error while processing the request! Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.');\n }\n },\n 504: function() {\n if (tryCount > retryLimit) {\n showError('Error 504 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 502: function() {\n if (tryCount >= retryLimit) {\n showError('Error 502 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 503: function() {\n if (tryCount >= retryLimit) {\n showError('Error 503 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 429: function() {\n if (tryCount >= retryLimit) {\n showError('Error 429 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 403: function() {\n if (tryCount >= retryLimit) {\n showError('Refresh page or login again! The process should be finished successfully. \\n\\ ');\n }\n },\n },\n });\n };\n\n /**\n * Next / Previous Step Clicks to Navigate Through Staging Job\n */\n const stepButtons = function() {\n const $workFlow = cache.get('#wpstg-workflow');\n\n $workFlow\n // Next Button\n .on('click', '.wpstg-next-step-link', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n const isScan = false;\n\n if ($('#wpstg_clone_hostname').length && !validateTargetHost()) {\n $('#wpstg_clone_hostname').focus();\n return false;\n }\n\n if ($this.data('action') === 'wpstg_update' || $this.data('action') === 'wpstg_reset') {\n // Update / Reset Clone - confirmed\n let onlyUpdateMessage = '';\n if ($this.data('action') === 'wpstg_update') {\n onlyUpdateMessage = ' \\n\\nExclude all tables and folders you do not want to overwrite, first! \\n\\nDo not cancel the updating process! This can break your staging site. \\n\\n\\Create a backup of your staging website before you proceed.';\n }\n\n if (!confirm('STOP! This will overwrite your staging site with all selected data from the production site! This should be used only if you want to clone again your production site. Are you sure you want to do this?' + onlyUpdateMessage)) {\n return false;\n }\n }\n\n // Button is disabled\n if ($this.attr('disabled')) {\n return false;\n }\n\n if ($this.data('action') === 'wpstg_cloning') {\n // Verify External Database If Checked and Not Skipped\n if ($('#wpstg-ext-db').is(':checked')) {\n verifyExternalDatabase($this, $workFlow);\n return;\n }\n }\n\n proceedCloning($this, $workFlow);\n })\n // Previous Button\n .on('click', '.wpstg-prev-step-link', function(e) {\n e.preventDefault();\n cache.get('.wpstg-loader').removeClass('wpstg-finished');\n cache.get('.wpstg-loader').hide();\n loadOverview();\n });\n };\n\n /**\n * Get Included (Checked) Database Tables\n * @return {Array}\n */\n const getIncludedTables = function() {\n const includedTables = [];\n\n $('#wpstg_select_tables_cloning option:selected').each(function() {\n includedTables.push(this.value);\n });\n\n return includedTables;\n };\n\n /**\n * Get Excluded (Unchecked) Database Tables\n * Not used anymore!\n * @return {Array}\n */\n const getExcludedTables = function() {\n const excludedTables = [];\n\n $('.wpstg-db-table input:not(:checked)').each(function() {\n excludedTables.push(this.name);\n });\n\n return excludedTables;\n };\n\n /**\n * Verify External Database for Cloning\n */\n var verifyExternalDatabase = function($this, workflow) {\n cache.get('.wpstg-loader').show();\n ajax(\n {\n action: 'wpstg_database_verification',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n databaseUser: cache.get('#wpstg_db_username').val(),\n databasePassword: cache.get('#wpstg_db_password').val(),\n databaseServer: cache.get('#wpstg_db_server').val(),\n databaseDatabase: cache.get('#wpstg_db_database').val(),\n },\n function(response) {\n // Undefined Error\n if (false === response) {\n showError(\n 'Something went wrong! Error: No response.' +\n 'Please try again. If that does not help, ' +\n '<a href=\\'https://wp-staging.com/support/\\' target=\\'_blank\\'>open a support ticket</a> ',\n );\n cache.get('.wpstg-loader').hide();\n return;\n }\n\n // Throw Error\n if ('undefined' === typeof (response.success)) {\n showError(\n 'Something went wrong! Error: Invalid response.' +\n 'Please try again. If that does not help, ' +\n '<a href=\\'https://wp-staging.com/support/\\' target=\\'_blank\\'>open a support ticket</a> ',\n );\n cache.get('.wpstg-loader').hide();\n return;\n }\n\n if (response.success) {\n cache.get('.wpstg-loader').hide();\n proceedCloning($this, workflow);\n return;\n }\n\n if (response.error_type === 'comparison') {\n cache.get('.wpstg-loader').hide();\n let render = '<table style=\"width: 100%;\"><thead><tr><th>Property</th><th>Production DB</th><th>Staging DB</th><th>Status</th></tr></thead><tbody>';\n response.checks.forEach((x) => {\n let icon = '<i style=\"color: #00ff00\">✔</i>';\n if (x.production !== x.staging) {\n icon = '<i style=\"color: #ff0000\">❌</i>';\n }\n render += '<tr><td>' + x.name + '</td><td>' + x.production + '</td><td>' + x.staging + '</td><td>' + icon + '</td></tr>';\n });\n render += '</tbody></table><p>Note: Some mySQL properties do not match. You may proceed but the staging site may not work as expected.</p>';\n WPStagingCommon.getSwalModal().fire({\n title: 'Different Database Properties',\n icon: 'warning',\n html: render,\n width: '650px',\n focusConfirm: false,\n confirmButtonText: 'Proceed Anyway',\n showCancelButton: true,\n }).then(function(result) {\n if (result.value) {\n proceedCloning($this, workflow);\n }\n });\n return;\n }\n\n WPStagingCommon.getSwalModal(true).fire({\n title: 'Different Database Properties',\n icon: 'error',\n html: response.message,\n focusConfirm: true,\n confirmButtonText: 'Ok',\n showCancelButton: false,\n });\n cache.get('.wpstg-loader').hide();\n },\n 'json',\n false,\n );\n };\n\n /**\n * Get Cloning Step Data\n */\n const getCloningData = function() {\n if ('wpstg_cloning' !== that.data.action && 'wpstg_update' !== that.data.action && 'wpstg_reset' !== that.data.action) {\n return;\n }\n\n that.data.cloneID = new Date().getTime().toString();\n if ('wpstg_update' === that.data.action) {\n that.data.cloneID = $('#wpstg-new-clone-id').data('clone');\n }\n\n that.data.cloneName = $('#wpstg-new-clone-id').val() || that.data.cloneID;\n\n // Remove this to keep &_POST[] small otherwise mod_security will throw error 404\n // that.data.excludedTables = getExcludedTables();\n\n if (that.directoryNavigator !== null) {\n that.data.excludedDirectories = encodeURIComponent(that.directoryNavigator.getExcludedDirectories());\n that.data.extraDirectories = encodeURIComponent(that.directoryNavigator.getExtraDirectoriesRootOnly());\n }\n\n that.data.excludeGlobRules = '';\n that.data.excludeSizeRules = '';\n if (that.cloneExcludeFilters instanceof WpstgExcludeFilters) {\n const rules = that.cloneExcludeFilters.getExcludeFilters();\n that.data.excludeGlobRules = encodeURIComponent(rules.globs);\n that.data.excludeSizeRules = encodeURIComponent(rules.sizes);\n }\n\n that.data.includedTables = getIncludedTables();\n that.data.databaseServer = $('#wpstg_db_server').val();\n that.data.databaseUser = $('#wpstg_db_username').val();\n that.data.databasePassword = $('#wpstg_db_password').val();\n that.data.databaseDatabase = $('#wpstg_db_database').val();\n that.data.databasePrefix = $('#wpstg_db_prefix').val();\n const cloneDir = $('#wpstg_clone_dir').val();\n that.data.cloneDir = encodeURIComponent($.trim(cloneDir));\n that.data.cloneHostname = $('#wpstg_clone_hostname').val();\n that.data.emailsAllowed = $('#wpstg_allow_emails').is(':checked');\n that.data.uploadsSymlinked = $('#wpstg_symlink_upload').is(':checked');\n that.data.cleanPluginsThemes = $('#wpstg-clean-plugins-themes').is(':checked');\n that.data.cleanUploadsDir = $('#wpstg-clean-uploads').is(':checked');\n };\n\n var proceedCloning = function($this, workflow) {\n // Add loading overlay\n workflow.addClass('loading');\n\n // Prepare data\n that.data = {\n action: $this.data('action'),\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n };\n\n // Cloning data\n getCloningData();\n\n sendCloningAjax(workflow);\n };\n\n var sendCloningAjax = function(workflow) {\n // Send ajax request\n ajax(\n that.data,\n function(response) {\n // Undefined Error\n if (false === response) {\n showError(\n 'Something went wrong!<br/><br/> Go to WP Staging > Settings and lower \\'File Copy Limit\\' and \\'DB Query Limit\\'. Also set \\'CPU Load Priority to low \\'' +\n 'and try again. If that does not help, ' +\n '<a href=\\'https://wp-staging.com/support/\\' target=\\'_blank\\'>open a support ticket</a> ',\n );\n }\n\n\n if (response.length < 1) {\n showError(\n 'Something went wrong! No response. Go to WP Staging > Settings and lower \\'File Copy Limit\\' and \\'DB Query Limit\\'. Also set \\'CPU Load Priority to low \\'' +\n 'and try again. If that does not help, ' +\n '<a href=\\'https://wp-staging.com/support/\\' target=\\'_blank\\'>open a support ticket</a> ',\n );\n }\n\n const jsonResponse = tryParseJson(response);\n if (jsonResponse !== false && jsonResponse.success === false) {\n workflow.removeClass('loading');\n showErrorModal(jsonResponse);\n\n return;\n }\n\n // Styling of elements\n workflow.removeClass('loading').html(response);\n that.cloneExcludeFilters = null;\n if (that.data.action === 'wpstg_scanning') {\n that.areAllTablesChecked = true;\n that.directoryNavigator = new WpstgDirectoryNavigation('#wpstg-directories-listing', wpstg, that.notyf);\n that.switchStep(2);\n that.cloneExcludeFilters = new WpstgExcludeFilters();\n } else if (that.data.action === 'wpstg_cloning' || that.data.action === 'wpstg_update' || that.data.action === 'wpstg_reset') {\n that.switchStep(3);\n }\n\n // Start cloning\n that.startCloning();\n },\n 'HTML',\n );\n };\n\n var showErrorModal = function(response) {\n const errorModal = new WpstgModal('wpstg_modal_error', wpstg);\n errorModal.show(Object.assign({\n title: 'Error',\n icon: 'error',\n html: wpstg.i18n['somethingWentWrong'],\n width: '500px',\n confirmButtonText: 'Ok',\n showCancelButton: false,\n customClass: {\n confirmButton: 'wpstg--btn--confirm wpstg-blue-primary wpstg-button wpstg-link-btn',\n cancelButton: 'wpstg--btn--cancel wpstg-blue-primary wpstg-link-btn',\n actions: 'wpstg--modal--actions',\n popup: 'wpstg-swal-popup centered-modal',\n },\n buttonsStyling: false,\n reverseButtons: true,\n }, response.swalOptions), {\n type: response.type,\n });\n };\n\n const tryParseJson = function(json) {\n // early bail if not string\n if (!json) {\n return false;\n }\n\n try {\n const object = JSON.parse(json);\n if (object && typeof object === 'object') {\n return object;\n }\n } catch (e) {\n // do nothing on catch\n }\n\n return false;\n };\n\n var resetClone = function(clone, excludeOptions) {\n that.data = {\n action: 'wpstg_reset',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n cloneID: clone,\n };\n\n that.data = {...that.data, ...excludeOptions};\n\n const $workFlow = cache.get('#wpstg-workflow');\n sendCloningAjax($workFlow);\n };\n\n /**\n * Loads Overview (first step) of Staging Job\n */\n var loadOverview = function() {\n const $workFlow = cache.get('#wpstg-workflow');\n\n $workFlow.addClass('loading');\n\n ajax(\n {\n action: 'wpstg_overview',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n },\n function(response) {\n if (response.length < 1) {\n showError(\n 'Something went wrong! No response. Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report.',\n );\n }\n\n const $currentStep = cache.get('.wpstg-current-step');\n\n // Styling of elements\n $workFlow.removeClass('loading').html(response);\n },\n 'HTML',\n );\n\n that.switchStep(1);\n cache.get('.wpstg-step3-cloning').show();\n cache.get('.wpstg-step3-pushing').hide();\n };\n\n /**\n * Load Tabs\n */\n const tabs = function() {\n cache.get('#wpstg-workflow').on('click', '.wpstg-tab-header', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n const $section = cache.get($this.data('id'));\n\n $this.toggleClass('expand');\n\n $section.slideToggle();\n\n const tabTriangle = $this.find('.wpstg-tab-triangle');\n\n if ($this.hasClass('expand')) {\n tabTriangle.removeClass('wpstg-no-icon');\n tabTriangle.text('');\n tabTriangle.addClass('wpstg-rotate-90');\n } else {\n tabTriangle.removeClass('wpstg-rotate-90');\n }\n });\n };\n\n /**\n * Delete Clone\n * @param {String} clone\n */\n var deleteClone = function(clone) {\n const deleteDir = $('#deleteDirectory:checked').data('deletepath');\n\n ajax(\n {\n action: 'wpstg_delete_clone',\n clone: clone,\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n excludedTables: getExcludedTables(),\n deleteDir: deleteDir,\n },\n function(response) {\n if (response) {\n showAjaxFatalError(response);\n\n // Finished\n if ('undefined' !== typeof response.delete && (response.delete === 'finished' || response.delete === 'unfinished')) {\n cache.get('#wpstg-removing-clone').removeClass('loading').html('');\n\n if (response.delete === 'finished' && response.error === undefined) {\n $('.wpstg-clone[data-clone-id=\"' + clone + '\"]').remove();\n }\n\n // No staging site message is also of type/class .wpstg-class but hidden\n // We have just excluded that from search when counting no of clones\n if ($('#wpstg-existing-clones .wpstg-clone').length < 1) {\n cache.get('#wpstg-existing-clones').find('h3').text('');\n cache.get('#wpstg-no-staging-site-results').show();\n }\n\n cache.get('.wpstg-loader').hide();\n return;\n }\n }\n // continue\n if (true !== response) {\n deleteClone(clone);\n return;\n }\n },\n );\n };\n\n /**\n * Cancel Cloning Process\n */\n var cancelCloning = function() {\n that.timer('stop');\n\n\n if (true === that.isFinished) {\n return true;\n }\n\n ajax(\n {\n action: 'wpstg_cancel_clone',\n clone: that.data.cloneID,\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n },\n function(response) {\n if (response && 'undefined' !== typeof (response.delete) && response.delete === 'finished') {\n cache.get('.wpstg-loader').hide();\n // Load overview\n loadOverview();\n return;\n }\n\n if (true !== response) {\n // continue\n cancelCloning();\n return;\n }\n\n // Load overview\n loadOverview();\n },\n );\n };\n\n /**\n * Cancel Cloning Process\n */\n var cancelCloningUpdate = function() {\n if (true === that.isFinished) {\n return true;\n }\n\n ajax(\n {\n action: 'wpstg_cancel_update',\n clone: that.data.cloneID,\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n },\n function(response) {\n if (response && 'undefined' !== typeof (response.delete) && response.delete === 'finished') {\n // Load overview\n loadOverview();\n return;\n }\n\n if (true !== response) {\n // continue\n cancelCloningUpdate();\n return;\n }\n\n // Load overview\n loadOverview();\n },\n );\n };\n\n /**\n * Cancel Cloning Process\n */\n var restart = function() {\n if (true === that.isFinished) {\n return true;\n }\n\n ajax(\n {\n action: 'wpstg_restart',\n // clone: that.data.cloneID,\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n },\n function(response) {\n if (response && 'undefined' !== typeof (response.delete) && response.delete === 'finished') {\n // Load overview\n loadOverview();\n return;\n }\n\n if (true !== response) {\n // continue\n cancelCloningUpdate();\n return;\n }\n\n // Load overview\n loadOverview();\n },\n );\n };\n\n /**\n * Scroll the window log to bottom\n * @return void\n */\n const logscroll = function() {\n const $div = cache.get('.wpstg-log-details');\n if ('undefined' !== typeof ($div[0])) {\n $div.scrollTop($div[0].scrollHeight);\n }\n };\n\n /**\n * Append the log to the logging window\n * @param string log\n * @return void\n */\n const getLogs = function(log) {\n if (log != null && 'undefined' !== typeof (log)) {\n if (log.constructor === Array) {\n $.each(log, function(index, value) {\n if (value === null) {\n return;\n }\n if (value.type === 'ERROR') {\n cache.get('.wpstg-log-details').append('<span class=\"wpstg--red\">[' + value.type + ']</span>-' + '[' + value.date + '] ' + value.message + '</br>');\n } else {\n cache.get('.wpstg-log-details').append('[' + value.type + ']-' + '[' + value.date + '] ' + value.message + '</br>');\n }\n });\n } else {\n cache.get('.wpstg-log-details').append('[' + log.type + ']-' + '[' + log.date + '] ' + log.message + '</br>');\n }\n }\n logscroll();\n };\n\n /**\n * Check diskspace\n * @return string json\n */\n var checkDiskSpace = function() {\n cache.get('#wpstg-check-space').on('click', function(e) {\n cache.get('.wpstg-loader').show();\n const excludedDirectories = encodeURIComponent(that.directoryNavigator.getExcludedDirectories());\n const extraDirectories = encodeURIComponent(that.directoryNavigator.getExtraDirectoriesRootOnly());\n\n ajax(\n {\n action: 'wpstg_check_disk_space',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n excludedDirectories: excludedDirectories,\n extraDirectories: extraDirectories,\n },\n function(response) {\n if (false === response) {\n cache.get('#wpstg-clone-id-error').text('Can not detect required disk space').show();\n cache.get('.wpstg-loader').hide();\n return;\n }\n\n // Show required disk space\n cache.get('#wpstg-clone-id-error').html(\n 'Estimated necessary disk space: ' + response.requiredSpace +\n (response.errorMessage !== null ? ('<br>' + response.errorMessage) : '') +\n '<br> <span style=\"color:#444;\">Before you proceed ensure your account has enough free disk space to hold the entire instance of the production site. You can check the available space from your hosting account (cPanel or similar).</span>').show();\n cache.get('.wpstg-loader').hide();\n },\n 'json',\n false,\n );\n });\n };\n\n /**\n * Show or hide animated loading icon\n * @param isLoading bool\n */\n const isLoading = function(isLoading) {\n if (!isLoading || isLoading === false) {\n cache.get('.wpstg-loader').hide();\n } else {\n cache.get('.wpstg-loader').show();\n }\n };\n\n /**\n * Count up processing execution time\n * @param string status\n * @return html\n */\n that.timer = function(status) {\n if (status === 'stop') {\n const time = that.time;\n that.time = 1;\n clearInterval(that.executionTime);\n return that.convertSeconds(time);\n }\n\n\n that.executionTime = setInterval(function() {\n if (null !== document.getElementById('wpstg-processing-timer')) {\n document.getElementById('wpstg-processing-timer').innerHTML = 'Elapsed Time: ' + that.convertSeconds(that.time);\n }\n that.time++;\n if (status === 'stop') {\n that.time = 1;\n clearInterval(that.executionTime);\n }\n }, 1000);\n };\n\n /**\n * Convert seconds to hourly format\n * @param int seconds\n * @return string\n */\n that.convertSeconds = function(seconds) {\n const date = new Date(null);\n date.setSeconds(seconds); // specify value for SECONDS here\n return date.toISOString().substr(11, 8);\n };\n\n /**\n * Start Cloning Process\n * @type {Function}\n */\n that.startCloning = (function() {\n resetErrors();\n\n // Register function for checking disk space\n checkDiskSpace();\n\n if ('wpstg_cloning' !== that.data.action && 'wpstg_update' !== that.data.action && 'wpstg_reset' !== that.data.action) {\n return;\n }\n\n that.isCancelled = false;\n\n // Start the process\n start();\n\n // Functions\n // Start\n function start() {\n cache.get('.wpstg-loader').show();\n cache.get('#wpstg-cancel-cloning').text('Cancel');\n cache.get('#wpstg-resume-cloning').hide();\n cache.get('#wpstg-error-details').hide();\n\n\n // Clone Database\n setTimeout(function() {\n // cloneDatabase();\n window.addEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n processing();\n }, wpstg.delayReq);\n\n that.timer('start');\n }\n\n\n /**\n * Start ajax processing\n * @return string\n */\n var processing = function() {\n if (true === that.isCancelled) {\n window.removeEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n return false;\n }\n\n isLoading(true);\n\n let excludedDirectories = '';\n let extraDirectories = '';\n if (that.directoryNavigator !== null) {\n excludedDirectories = that.directoryNavigator.getExcludedDirectories();\n extraDirectories = that.directoryNavigator.getExtraDirectoriesRootOnly();\n }\n\n // Show logging window\n cache.get('.wpstg-log-details').show();\n\n WPStaging.ajax(\n {\n action: 'wpstg_processing',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n excludedTables: getExcludedTables(),\n excludedDirectories: encodeURIComponent(excludedDirectories),\n extraDirectories: encodeURIComponent(extraDirectories),\n },\n function(response) {\n showAjaxFatalError(response);\n\n // Add Log messages\n if ('undefined' !== typeof (response.last_msg) && response.last_msg) {\n getLogs(response.last_msg);\n }\n // Continue processing\n if (false === response.status) {\n progressBar(response);\n\n setTimeout(function() {\n cache.get('.wpstg-loader').show();\n processing();\n }, wpstg.delayReq);\n } else if (true === response.status && 'finished' !== response.status) {\n cache.get('#wpstg-error-details').hide();\n cache.get('#wpstg-error-wrapper').hide();\n progressBar(response, true);\n processing();\n } else if ('finished' === response.status || ('undefined' !== typeof (response.job_done) && response.job_done)) {\n window.removeEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n finish(response);\n }\n ;\n },\n 'json',\n false,\n );\n };\n\n // Finish\n function finish(response) {\n if (true === that.getLogs) {\n getLogs();\n }\n\n progressBar(response);\n\n // Add Log\n if ('undefined' !== typeof (response.last_msg)) {\n getLogs(response.last_msg);\n }\n\n cache.get('.wpstg-loader').hide();\n cache.get('#wpstg-processing-header').html('Processing Complete');\n $('#wpstg-processing-status').text('Succesfully finished');\n\n cache.get('#wpstg_staging_name').html(that.data.cloneID);\n cache.get('#wpstg-finished-result').show();\n cache.get('#wpstg-cancel-cloning').hide();\n cache.get('#wpstg-resume-cloning').hide();\n cache.get('#wpstg-cancel-cloning-update').prop('disabled', true);\n\n const $link1 = cache.get('#wpstg-clone-url-1');\n const $link = cache.get('#wpstg-clone-url');\n $link1.attr('href', response.url);\n $link1.html(response.url);\n $link.attr('href', response.url);\n\n cache.get('#wpstg-remove-clone').data('clone', that.data.cloneID);\n\n // Finished\n that.isFinished = true;\n that.timer('stop');\n\n\n cache.get('.wpstg-loader').hide();\n cache.get('#wpstg-processing-header').html('Processing Complete');\n\n // show alert\n let msg = wpstg.i18n.cloneResetComplete;\n if (that.data.action === 'wpstg_update') {\n msg = wpstg.i18n.cloneUpdateComplete;\n }\n\n if (that.data.action === 'wpstg_update' || that.data.action === 'wpstg_reset') {\n cache.get('#wpstg-cancel-cloning-update').hide();\n cache.get('.wpstg-prev-step-link').show();\n\n WPStagingCommon.getSwalModal(true, {\n confirmButton: 'wpstg--btn--confirm wpstg-green-button wpstg-button wpstg-link-btn wpstg-100-width',\n }).fire({\n title: '',\n icon: 'success',\n html: msg,\n width: '500px',\n focusConfirm: true,\n });\n }\n\n return false;\n }\n\n /**\n * Add percentage progress bar\n * @param object response\n * @return {Boolean}\n */\n var progressBar = function(response, restart) {\n if ('undefined' === typeof (response.percentage)) {\n return false;\n }\n\n if (response.job === 'database') {\n cache.get('#wpstg-progress-db').width(response.percentage * 0.2 + '%').html(response.percentage + '%');\n cache.get('#wpstg-processing-status').html(response.percentage.toFixed(0) + '%' + ' - Step 1 of 4 Cloning Database Tables...');\n }\n\n if (response.job === 'SearchReplace') {\n cache.get('#wpstg-progress-db').css('background-color', '#3bc36b');\n cache.get('#wpstg-progress-db').html('1. Database');\n // Assumption: All previous steps are done.\n // This avoids bugs where some steps are skipped and the progress bar is incomplete as a result\n cache.get('#wpstg-progress-db').width('20%');\n\n cache.get('#wpstg-progress-sr').width(response.percentage * 0.1 + '%').html(response.percentage + '%');\n cache.get('#wpstg-processing-status').html(response.percentage.toFixed(0) + '%' + ' - Step 2 of 4 Preparing Database Data...');\n }\n\n if (response.job === 'directories') {\n cache.get('#wpstg-progress-sr').css('background-color', '#3bc36b');\n cache.get('#wpstg-progress-sr').html('2. Data');\n cache.get('#wpstg-progress-sr').width('10%');\n\n cache.get('#wpstg-progress-dirs').width(response.percentage * 0.1 + '%').html(response.percentage + '%');\n cache.get('#wpstg-processing-status').html(response.percentage.toFixed(0) + '%' + ' - Step 3 of 4 Getting files...');\n }\n if (response.job === 'files') {\n cache.get('#wpstg-progress-dirs').css('background-color', '#3bc36b');\n cache.get('#wpstg-progress-dirs').html('3. Files');\n cache.get('#wpstg-progress-dirs').width('10%');\n\n cache.get('#wpstg-progress-files').width(response.percentage * 0.6 + '%').html(response.percentage + '%');\n cache.get('#wpstg-processing-status').html(response.percentage.toFixed(0) + '%' + ' - Step 4 of 4 Copy files...');\n }\n if (response.job === 'finish') {\n cache.get('#wpstg-progress-files').css('background-color', '#3bc36b');\n cache.get('#wpstg-progress-files').html('4. Copy Files');\n cache.get('#wpstg-progress-files').width('60%');\n\n cache.get('#wpstg-processing-status').html(response.percentage.toFixed(0) + '%' + ' - Cloning Process Finished');\n }\n };\n });\n\n that.switchStep = function(step) {\n cache.get('.wpstg-current-step')\n .removeClass('wpstg-current-step');\n cache.get('.wpstg-step' + step)\n .addClass('wpstg-current-step');\n };\n\n /**\n * Initiation\n * @type {Function}\n */\n that.init = (function() {\n loadOverview();\n elements();\n stepButtons();\n tabs();\n WPStagingCommon.listenTooltip();\n new WpstgMainMenu();\n new WpstgCloneStaging();\n new WpstgCloningAdvanceSettings();\n that.notyf = new Notyf({\n duration: 10000,\n position: {\n x: 'center',\n y: 'bottom',\n },\n dismissible: true,\n types: [\n {\n type: 'warning',\n background: 'orange',\n icon: false,\n },\n ],\n });\n });\n\n /**\n * Ajax call\n * @type {ajax}\n */\n that.ajax = ajax;\n that.showError = showError;\n that.getLogs = getLogs;\n that.loadOverview = loadOverview;\n\n return that;\n})(jQuery);\n\njQuery(document).ready(function() {\n WPStaging.init();\n // This is necessary to make WPStaging var accessibile in WP Staging PRO js script\n window.WPStaging = WPStaging;\n});\n\n/**\n * Report Issue modal\n */\njQuery(document).ready(function($) {\n $('body').on('click', '#wpstg-report-issue-button', function(e) {\n console.log('REPORT');\n $('.wpstg--tab--active .wpstg-report-issue-form').toggleClass('wpstg-report-show');\n e.preventDefault();\n });\n\n $('body').on('click', '#wpstg-backups-report-issue-button', function(e) {\n $('.wpstg--tab--active .wpstg-report-issue-form').toggleClass('wpstg-report-show');\n e.preventDefault();\n });\n\n $('body').on('click', '#wpstg-report-cancel', function(e) {\n $('.wpstg--tab--active .wpstg-report-issue-form').removeClass('wpstg-report-show');\n e.preventDefault();\n });\n\n $('body').on('click', '.wpstg--tab--active #wpstg-report-submit', function(e) {\n const self = $(this);\n sendIssueReport(self, 'false');\n e.preventDefault();\n });\n\n /*\n * Close Success Modal\n */\n\n $('body').on('click', '#wpstg-success-button', function(e) {\n e.preventDefault();\n $('.wpstg-report-issue-form').removeClass('wpstg-report-show');\n });\n\n function sendIssueReport(button, forceSend = 'false') {\n const spinner = button.next();\n const email = $('.wpstg--tab--active .wpstg-report-email').val();\n const hosting_provider = $('.wpstg--tab--active .wpstg-report-hosting-provider').val();\n const message = $('.wpstg--tab--active .wpstg-report-description').val();\n const syslog = $('.wpstg--tab--active .wpstg-report-syslog').is(':checked');\n const terms = $('.wpstg--tab--active .wpstg-report-terms').is(':checked');\n\n button.attr('disabled', true);\n spinner.css('visibility', 'visible');\n\n $.ajax({\n url: ajaxurl,\n type: 'POST',\n dataType: 'json',\n async: true,\n data: {\n 'action': 'wpstg_send_report',\n 'accessToken': wpstg.accessToken,\n 'nonce': wpstg.nonce,\n 'wpstg_email': email,\n 'wpstg_provider': hosting_provider,\n 'wpstg_message': message,\n 'wpstg_syslog': +syslog,\n 'wpstg_terms': +terms,\n 'wpstg_force_send': forceSend,\n },\n }).done(function(data) {\n button.attr('disabled', false);\n spinner.css('visibility', 'hidden');\n\n if (data.errors.length > 0) {\n $('.wpstg--tab--active .wpstg-report-issue-form .wpstg-message').remove();\n\n let errorMessage = $('<div />').addClass('wpstg-message wpstg-error-message');\n $.each(data.errors, function(key, value) {\n if (value.status === 'already_submitted') {\n errorMessage = '';\n // TODO: remove default custom classes\n WPStagingCommon.getSwalModal(true, {\n container: 'wpstg-issue-resubmit-confirmation',\n }).fire({\n title: '',\n icon: 'warning',\n html: value.message,\n showCancelButton: true,\n focusConfirm: false,\n confirmButtonText: 'Yes',\n cancelButtonText: 'No',\n }).then((result) => {\n if (result.isConfirmed) {\n sendIssueReport(button, 'true');\n }\n });\n } else {\n errorMessage.append('<p>' + value + '</p>');\n }\n });\n\n $('.wpstg--tab--active .wpstg-report-issue-form').prepend(errorMessage);\n } else {\n const successMessage = $('<div />').addClass('wpstg-message wpstg-success-message');\n successMessage.append('<p>Thanks for submitting your request! You should receive an auto reply mail with your ticket ID immediately for confirmation!<br><br>If you do not get that mail please contact us directly at <strong>support@wp-staging.com</strong></p>');\n\n $('.wpstg--tab--active .wpstg-report-issue-form').html(successMessage);\n $('.wpstg--tab--active .wpstg-success-message').append('<div style=\"float:right;margin-top:10px;\"><a id=\"wpstg-success-button\" href=\"#\" class=\"wpstg--red\">[X] CLOSE</a></div>');\n\n // Hide message\n setTimeout(function() {\n $('.wpstg--tab--active .wpstg-report-issue-form').removeClass('wpstg-report-active');\n }, 2000);\n }\n });\n }\n\n // Open/close actions drop down menu\n $(document).on('click', '.wpstg-dropdown>.wpstg-dropdown-toggler', function(e) {\n e.preventDefault();\n $(e.target).next('.wpstg-dropdown-menu').toggleClass('shown');\n\n $(e.target).find('.wpstg-caret').toggleClass('wpstg-caret-up');\n });\n\n $(document).on('click', '.wpstg-caret', function(e) {\n e.preventDefault();\n\n const toggler = $(e.target).closest('.wpstg-dropdown-toggler');\n\n if (toggler) {\n toggler.trigger('click');\n }\n });\n\n // Close action drop down menu if clicked anywhere outside\n document.addEventListener('click', function(event) {\n const isClickInside = event.target.closest('.wpstg-dropdown-toggler');\n if (!isClickInside) {\n const dropDown = document.getElementsByClassName('wpstg-dropdown-menu');\n for (let i = 0; i < dropDown.length; i++) {\n dropDown[i].classList.remove('shown');\n }\n $('.wpstg-caret').removeClass('wpstg-caret-up');\n }\n });\n});\n"],"names":["qs","selector","document","querySelector","all","querySelectorAll","addEvent","parent","evt","handler","addEventListener","event","target","matches","closest","slideDown","element","duration","style","display","overflow","height","offsetHeight","transitionProperty","transitionDuration","setTimeout","window","removeProperty","slideUp","getNextSibling","sibling","nextElementSibling","getParents","result","parentElement","push","WpstgCloneStaging","pageWrapperId","wpstgObject","wpstg","pageWrapper","dom","enableButtonId","enableAction","notyf","Notyf","position","x","y","dismissible","types","type","background","icon","init","addEvents","sendRequest","action","fetch","ajaxUrl","method","credentials","body","URLSearchParams","accessToken","nonce","headers","then","response","ok","json","Promise","reject","data","success","location","reload","message","error","i18n","console","warn","WpstgDirectoryNavigation","directoryListingSelector","directoryListingContainer","dirCheckboxSelector","dirExpandSelector","unselectAllDirsSelector","selectDefaultDirsSelector","fetchChildrenAction","currentCheckboxElement","currentParentDiv","currentLoader","existingExcludes","excludedDirectories","isDefaultSelected","log","preventDefault","toggleDirExpand","unselectAll","selectDefault","parseExcludes","previousSibling","getAttribute","dirPath","value","isChecked","checked","forceDefault","setAttribute","dirContainer","createElement","classList","add","innerHTML","JSON","parse","directoryListing","appendChild","alert","getExcludedDirectories","forEach","isParentExcluded","exclude","isExcludeScanned","join","settings","directorySeparator","path","isParentAlreadyExcluded","dir","startsWith","getExtraDirectoriesRootOnly","extraDirectories","extraDirectoriesTextArea","extraCustomDirectories","split","concat","length","WpstgExcludeFilters","excludeFilterContainerSelector","excludeContainer","excludeTableBody","addFileSizeExclude","addFileExtExclude","addFileNameExclude","addDirNameExclude","clearExcludes","removeExclude","addExcludeRuleRow","templateName","excludeRowTemplate","clone","content","cloneNode","excludeRow","e","removeChild","trim","getExcludeFilters","globExcludes","sizeExcludes","sizeCompares","sizeSizes","sizeByte","Object","entries","key","sizeInput","extensionInputs","ext","cleanStringForGlob","fileNamesPos","fileNames","fileInput","fileName","dirNamesPos","dirNames","dirInput","dirName","filter","onlyUnique","index","self","indexOf","replace","WpstgModal","confirmAction","show","swalOptions","additionalParams","callback","wpstgSwal","fire","triggerConfirmAction","assign","onOver","onOut","pX","pY","mouseOver","focused","h","state","timer","options","sensitivity","interval","timeout","handleFocus","delay","el","clearTimeout","undefined","tracker","clientX","clientY","compare","Math","abs","opt","focusOptionChanged","addFocus","removeFocus","dispatchOver","removeEventListener","onMouseOver","dispatchOut","onMouseOut","dispatchFocus","onFocus","dispatchBlur","onBlur","remove","$","WPStagingCommon","continueErrorHandle","cache","elements","get","inArray","refresh","listenTooltip","wpstgHoverIntent","visibility","isEmpty","obj","prop","hasOwnProperty","getSwalModal","isContentCentered","customClasses","defaultCustomClasses","confirmButton","cancelButton","actions","popup","customClass","buttonsStyling","reverseButtons","showClass","mixin","showSuccessModal","htmlContent","showConfirmButton","showCancelButton","cancelButtonText","title","html","showWarningModal","showErrorModal","getSwalContainer","getContainer","closeSwalModal","close","getDataFromWordPressResponse","Error","Array","shift","isLoading","hide","slugify","url","toString","toLowerCase","normalize","showAjaxFatalError","prependMessage","appendMessage","showError","WPStaging","warnIfClosingDuringProcess","handleFetchErrors","status","statusText","css","text","removeClass","resetErrors","ajax","dataType","showErrors","tryCount","incrementRatio","errorCallback","retryLimit","retryTimeout","parseInt","isNaN","ajaxurl","Date","now","xhr","textStatus","errorThrown","errorCode","statusCode","jQuery","WpstgResetModal","cloneID","workflowSelector","fetchExcludeSettingsAction","modalErrorAction","workflow","resetButtonClass","resetModalContainerClass","resetTabSelector","directoryNavigator","excludeFilters","isAllTablesChecked","resetModalContainer","toggleContent","selectDefaultTables","toggleTableSelection","toggleDirectoryNavigation","updateDirectorySelection","contentId","tabTriangle","isCollapsed","contains","transform","showModal","swalPromise","loadModal","fetchCloneExcludes","container","getAjaxLoader","width","focusConfirm","confirmButtonText","resetClone","job","errorModal","modal","renderError","getDirectoryNavigator","wpstgIcon","cbElement","subDirectories","parElem","i","children","multisitePattern","tblprefix","singleSitePattern","option","name","isMultisite","match","removeAttribute","WpstgCloningAdvanceSettings","baseContainerSelector","baseContainer","checkBoxSettingTogglerSelector","toggleSettings","WpstgMainMenu","activeTabClass","mainMenu","tabHeader","$this","targetElements","menuItems","contents","menuItem","targetElement","dispatchEvent","Event","that","isCancelled","isFinished","getLogs","time","executionTime","progressBar","cloneExcludeFilters","areAllTablesChecked","ajaxSpinner","returnValue","$workFlow","urlSpinner","devicePixelRatio","on","each","attr","siblings","slideToggle","$directory","parents","find","addClass","getElementById","clearInterval","removeAttr","cloneDirectoryName","directoryName","slug","$targetDir","$targetUri","uri","val","validateTargetHost","after","cloneActions","the_domain","reg","test","confirm","append","cancelCloning","startCloning","cancelCloningUpdate","restart","$existingClones","animate","scrollTop","offset","top","deleteClone","jsonResponse","tryParseJson","checkDiskSpace","switchStep","resetModal","promise","dirNavigator","exclFilters","includedTables","getIncludedTables","excludeSizeRules","encodeURIComponent","sizes","excludeGlobRules","globs","stepButtons","focus","onlyUpdateMessage","is","verifyExternalDatabase","proceedCloning","loadOverview","getExcludedTables","excludedTables","databaseUser","databasePassword","databaseServer","databaseDatabase","error_type","render","checks","production","staging","getCloningData","getTime","cloneName","rules","databasePrefix","cloneDir","cloneHostname","emailsAllowed","uploadsSymlinked","cleanPluginsThemes","cleanUploadsDir","sendCloningAjax","object","excludeOptions","tabs","$section","toggleClass","hasClass","deleteDir","logscroll","$div","scrollHeight","constructor","date","requiredSpace","errorMessage","convertSeconds","setInterval","seconds","setSeconds","toISOString","substr","start","processing","delayReq","last_msg","job_done","finish","$link1","$link","msg","cloneResetComplete","cloneUpdateComplete","percentage","toFixed","step","ready","sendIssueReport","button","forceSend","spinner","next","email","hosting_provider","syslog","terms","async","done","errors","isConfirmed","prepend","successMessage","toggler","trigger","isClickInside","dropDown","getElementsByClassName"],"mappings":"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"}
1
+ {"version":3,"file":"wpstg-admin.js","sources":["../src/modules/wpstg-dom-utils.js","../src/modules/wpstg-clone-staging.js","../src/modules/wpstg-directory-navigation.js","../src/modules/wpstg-exclude-filters.js","../src/modules/wpstg-modal.js","../src/modules/wpstg-hover-intent.js","../src/wpstg.js","../src/modules/wpstg-reset-modal.js","../src/modules/wpstg-cloning-advance-settings.js","../src/modules/wpstg-main-menu.js","../src/wpstg-admin.js"],"sourcesContent":["/**\n * WP STAGING basic jQuery replacement\n */\n\n/**\n * Shortcut for document.querySelector() or jQuery's $()\n * Return single element only\n */\nexport function qs(selector) {\n return document.querySelector(selector);\n}\n\n/**\n * Shortcut for document.querySelector() or jQuery's $()\n * Return collection of elements\n */\nexport function all(selector) {\n return document.querySelectorAll(selector);\n}\n\n/**\n * alternative of jQuery - $(parent).on(event, selector, handler)\n */\nexport function addEvent(parent, evt, selector, handler) {\n parent.addEventListener(evt, function(event) {\n if (event.target.matches(selector + ', ' + selector + ' *')) {\n handler(event.target.closest(selector), event);\n }\n }, false);\n}\n\nexport function slideDown(element, duration = 400) {\n element.style.display = 'block';\n element.style.overflow = 'hidden';\n const height = element.offsetHeight;\n element.style.height = '0px';\n element.style.transitionProperty = 'height';\n element.style.transitionDuration = duration + 'ms';\n setTimeout(() => {\n element.style.height = height + 'px';\n window.setTimeout(() => {\n element.style.removeProperty('height');\n element.style.removeProperty('overflow');\n element.style.removeProperty('transition-duration');\n element.style.removeProperty('transition-property');\n }, duration);\n }, 0);\n}\n\nexport function slideUp(element, duration = 400) {\n element.style.display = 'block';\n element.style.overflow = 'hidden';\n const height = element.offsetHeight;\n element.style.height = height + 'px';\n element.style.transitionProperty = 'height';\n element.style.transitionDuration = duration + 'ms';\n setTimeout(() => {\n element.style.height = '0px';\n window.setTimeout(() => {\n element.style.display = 'none';\n element.style.removeProperty('height');\n element.style.removeProperty('overflow');\n element.style.removeProperty('transition-duration');\n element.style.removeProperty('transition-property');\n }, duration);\n }, 0);\n}\n\nexport function fadeOut(element, duration = 300) {\n element.style.opacity = 1;\n element.style.transitionProperty = 'opacity';\n element.style.transitionDuration = duration + 'ms';\n setTimeout(() => {\n element.style.opacity = 0;\n window.setTimeout(() => {\n element.style.display = 'none';\n element.style.removeProperty('opacity');\n element.style.removeProperty('transition-duration');\n element.style.removeProperty('transition-property');\n }, duration);\n }, 0);\n}\n\nexport function getNextSibling(element, selector) {\n let sibling = element.nextElementSibling;\n\n while (sibling) {\n if (sibling.matches(selector)) {\n return sibling;\n }\n\n sibling = sibling.nextElementSibling;\n }\n};\n\nexport function getParents(element, selector) {\n const result = [];\n for (let parent = element && element.parentElement; parent; parent = parent.parentElement) {\n if (parent.matches(selector)) {\n result.push(parent);\n }\n }\n\n return result;\n}\n\n/**\n * Check if element has class name\n * @param element\n * @param className\n * @return {boolean}\n */\nexport function hasClass(element, className) {\n return (' ' + element.className + ' ').indexOf(' ' + className+ ' ') > -1;\n}\n","import * as dom from './wpstg-dom-utils.js';\n\n/**\n * Enable/Disable cloning for staging site\n */\nexport default class WpstgCloneStaging {\n constructor(\n pageWrapperId = '#wpstg-clonepage-wrapper',\n wpstgObject = wpstg,\n ) {\n this.pageWrapper = dom.qs(pageWrapperId);\n this.wpstgObject = wpstgObject;\n this.enableButtonId = '#wpstg-enable-staging-cloning';\n this.enableAction = 'wpstg_enable_staging_cloning';\n\n this.notyf = new Notyf({\n duration: 10000,\n position: {\n x: 'center',\n y: 'bottom',\n },\n dismissible: true,\n types: [\n {\n type: 'warning',\n background: 'orange',\n icon: false,\n },\n ],\n });\n this.init();\n }\n\n addEvents() {\n if (this.pageWrapper === null) {\n return;\n }\n\n dom.addEvent(this.pageWrapper, 'click', this.enableButtonId, () => {\n this.sendRequest(this.enableAction);\n });\n }\n\n init() {\n this.addEvents();\n }\n\n sendRequest(action) {\n fetch(this.wpstgObject.ajaxUrl, {\n method: 'POST',\n credentials: 'same-origin',\n body: new URLSearchParams({\n action: action,\n accessToken: this.wpstgObject.accessToken,\n nonce: this.wpstgObject.nonce,\n }),\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n }).then((response) => {\n if (response.ok) {\n return response.json();\n }\n\n return Promise.reject(response);\n }).then((data) => {\n // Reload current page if successful.\n if ('undefined' !== typeof (data.success) && data.success) {\n location.reload();\n return;\n }\n\n // There will be message probably in case of error\n if ('undefined' !== typeof (data.message)) {\n this.notyf.error(data.message);\n return;\n }\n\n this.notyf.error(this.wpstgObject.i18n['somethingWentWrong']);\n }).catch((error) => {\n console.warn(this.wpstgObject.i18n['somethingWentWrong'], error);\n });\n }\n}\n","import * as dom from './wpstg-dom-utils.js';\n\n/**\n * Fetch directory direct child directories\n */\nexport default class WpstgDirectoryNavigation {\n constructor(\n directoryListingSelector = '#wpstg-directories-listing',\n wpstgObject = wpstg,\n notyf = null,\n ) {\n this.directoryListingContainer = dom.qs(directoryListingSelector);\n this.wpstgObject = wpstgObject;\n this.dirCheckboxSelector = '.wpstg-check-dir';\n this.dirExpandSelector = '.wpstg-expand-dirs';\n this.unselectAllDirsSelector = '.wpstg-unselect-dirs';\n this.selectDefaultDirsSelector = '.wpstg-select-dirs-default';\n this.fetchChildrenAction = 'wpstg_fetch_dir_childrens';\n this.currentCheckboxElement = null;\n this.currentParentDiv = null;\n this.currentLoader = null;\n this.existingExcludes = [];\n this.excludedDirectories = [];\n this.isDefaultSelected = false;\n this.notyf = notyf;\n\n this.init();\n }\n\n addEvents() {\n if (this.directoryListingContainer === null) {\n console.log('Error: directory navigation add events');\n return;\n }\n\n dom.addEvent(this.directoryListingContainer, 'click', this.dirExpandSelector, (element, event) => {\n event.preventDefault();\n if (this.toggleDirExpand(element)) {\n this.sendRequest(this.fetchChildrenAction, element);\n }\n });\n\n dom.addEvent(this.directoryListingContainer, 'click', this.unselectAllDirsSelector, () => {\n this.unselectAll();\n });\n\n dom.addEvent(this.directoryListingContainer, 'click', this.selectDefaultDirsSelector, () => {\n this.selectDefault();\n });\n }\n\n init() {\n this.addEvents();\n this.parseExcludes();\n }\n\n /**\n * Toggle Dir Expand,\n * Return true if children aren't fetched\n * @param {HTMLElement} element\n * @return {boolean}\n */\n toggleDirExpand(element) {\n this.currentParentDiv = element.parentElement;\n this.currentCheckboxElement = element.previousSibling;\n this.currentLoader = this.currentParentDiv.querySelector('.wpstg-is-dir-loading');\n if (this.currentCheckboxElement.getAttribute('data-navigateable', 'false') === 'false') {\n return false;\n }\n\n if (this.currentCheckboxElement.getAttribute('data-scanned', 'false') === 'false') {\n return true;\n }\n\n return false;\n }\n\n sendRequest(action) {\n if (this.currentLoader !== null) {\n this.currentLoader.style.display = 'inline-block';\n }\n\n fetch(this.wpstgObject.ajaxUrl, {\n method: 'POST',\n credentials: 'same-origin',\n body: new URLSearchParams({\n action: action,\n accessToken: this.wpstgObject.accessToken,\n nonce: this.wpstgObject.nonce,\n dirPath: this.currentCheckboxElement.value,\n isChecked: this.currentCheckboxElement.checked,\n forceDefault: this.isDefaultSelected,\n }),\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n }).then((response) => {\n if (response.ok) {\n return response.json();\n }\n\n return Promise.reject(response);\n }).then((data) => {\n if ('undefined' !== typeof (data.success) && data.success) {\n this.currentCheckboxElement.setAttribute('data-scanned', true);\n const dirContainer = document.createElement('div');\n dirContainer.classList.add('wpstg-dir');\n dirContainer.classList.add('wpstg-subdir');\n dirContainer.innerHTML = JSON.parse(data.directoryListing);\n this.currentParentDiv.appendChild(dirContainer);\n if (this.currentLoader !== null) {\n this.currentLoader.style.display = 'none';\n }\n\n dom.slideDown(dirContainer);\n\n return;\n }\n\n if (this.notyf !== null) {\n this.notyf.error(this.wpstgObject.i18n['somethingWentWrong']);\n } else {\n alert('Error: ' + this.wpstgObject.i18n['somethingWentWrong']);\n }\n }).catch((error) => {\n console.warn(this.wpstgObject.i18n['somethingWentWrong'], error);\n });\n }\n\n getExcludedDirectories() {\n this.excludedDirectories = [];\n this.directoryListingContainer.querySelectorAll('.wpstg-dir input:not(:checked)').forEach((element) => {\n if (!this.isParentExcluded(element.value)) {\n this.excludedDirectories.push(element.value);\n }\n });\n\n this.existingExcludes.forEach((exclude) => {\n if (!this.isParentExcluded(exclude) && !this.isExcludeScanned(exclude)) {\n this.excludedDirectories.push(exclude);\n }\n });\n\n return this.excludedDirectories.join(this.wpstgObject.settings.directorySeparator);\n }\n\n /**\n * @param {string} path\n * @return {bool}\n */\n isParentExcluded(path) {\n let isParentAlreadyExcluded = false;\n this.excludedDirectories.forEach((dir) => {\n if (path.startsWith(dir + '/')) {\n isParentAlreadyExcluded = true;\n }\n });\n\n return isParentAlreadyExcluded;\n }\n\n getExtraDirectoriesRootOnly() {\n this.getExcludedDirectories();\n const extraDirectories = [];\n this.directoryListingContainer.querySelectorAll(':not(.wpstg-subdir)>.wpstg-dir>input.wpstg-wp-non-core-dir:checked').forEach((element) => {\n extraDirectories.push(element.value);\n });\n\n // Check if extra directories text area exists\n // TODO: remove extraCustomDirectories code if no one require extraCustomDirectories...\n const extraDirectoriesTextArea = dom.qs('#wpstg_extraDirectories');\n if (extraDirectoriesTextArea === null || extraDirectoriesTextArea.value === '') {\n return extraDirectories.join(this.wpstgObject.settings.directorySeparator);\n }\n\n const extraCustomDirectories = extraDirectoriesTextArea.value.split(/\\r?\\n/);\n\n return extraDirectories.concat(extraCustomDirectories).join(this.wpstgObject.settings.directorySeparator);\n }\n\n unselectAll() {\n this.directoryListingContainer.querySelectorAll('.wpstg-dir input').forEach((element) => {\n element.checked = false;\n });\n }\n\n selectDefault() {\n // unselect all checkboxes\n this.unselectAll();\n\n // only select those checkboxes whose class is wpstg-wp-core-dir\n this.directoryListingContainer.querySelectorAll('.wpstg-dir input.wpstg-wp-core-dir').forEach((element) => {\n element.checked = true;\n });\n\n // then unselect those checkboxes whose parent has wpstg extra checkbox\n this.directoryListingContainer.querySelectorAll('.wpstg-dir > .wpstg-wp-non-core-dir').forEach((element) => {\n element.parentElement.querySelectorAll('input.wpstg-wp-core-dir').forEach((element) => {\n element.checked = false;\n });\n });\n\n this.isDefaultSelected = true;\n }\n\n parseExcludes() {\n this.existingExcludes = this.directoryListingContainer.getAttribute('data-existing-excludes', []);\n if (this.existingExcludes === '') {\n this.existingExcludes = [];\n }\n\n if (this.existingExcludes.length !== 0) {\n this.existingExcludes = this.existingExcludes.split(',');\n }\n }\n\n isExcludeScanned(exclude) {\n this.directoryListingContainer.querySelectorAll('.wpstg-dir input').forEach((element) => {\n if (element.value === exclude) {\n return true;\n }\n });\n\n return false;\n }\n}\n","import * as dom from './wpstg-dom-utils.js';\n\n/**\n * Rich Exclude Filter Module\n */\nexport default class WpstgExcludeFilters {\n constructor(\n excludeFilterContainerSelector = '#wpstg-exclude-filters-container',\n wpstgObject = wpstg,\n ) {\n this.excludeContainer = dom.qs(excludeFilterContainerSelector);\n this.excludeTableBody = dom.qs(`${excludeFilterContainerSelector} tbody`);\n this.wpstgObject = wpstgObject;\n this.init();\n }\n\n addEvents() {\n dom.addEvent(this.excludeContainer, 'click', '.wpstg-file-size-rule', () => {\n this.addFileSizeExclude();\n });\n\n dom.addEvent(this.excludeContainer, 'click', '.wpstg-file-ext-rule', () => {\n this.addFileExtExclude();\n });\n\n dom.addEvent(this.excludeContainer, 'click', '.wpstg-file-name-rule', () => {\n this.addFileNameExclude();\n });\n\n dom.addEvent(this.excludeContainer, 'click', '.wpstg-dir-name-rule', () => {\n this.addDirNameExclude();\n });\n\n dom.addEvent(this.excludeContainer, 'click', '.wpstg-clear-all-rules', () => {\n this.clearExcludes();\n });\n\n dom.addEvent(this.excludeContainer, 'click', '.wpstg-remove-exclude-rule', (target) => {\n this.removeExclude(target);\n });\n }\n\n init() {\n if (this.excludeContainer === null) {\n console.log('Error: Given table selector not found!');\n return;\n }\n\n this.addEvents();\n }\n\n addFileSizeExclude() {\n this.addExcludeRuleRow('#wpstg-file-size-exclude-filter-template');\n }\n\n addFileExtExclude() {\n this.addExcludeRuleRow('#wpstg-file-ext-exclude-filter-template');\n }\n\n addFileNameExclude() {\n this.addExcludeRuleRow('#wpstg-file-name-exclude-filter-template');\n }\n\n addDirNameExclude() {\n this.addExcludeRuleRow('#wpstg-dir-name-exclude-filter-template');\n }\n\n addExcludeRuleRow(templateName) {\n const excludeRowTemplate = dom.qs(templateName);\n if (excludeRowTemplate !== null) {\n const clone = excludeRowTemplate.content.cloneNode(true);\n const excludeRow = clone.querySelector('tr');\n\n this.excludeTableBody.appendChild(excludeRow);\n dom.all('.wpstg-has-exclude-rules').forEach((e) => {\n e.style.display = 'inherit';\n });\n }\n }\n\n clearExcludes() {\n this.excludeTableBody.innerHTML = '';\n dom.all('.wpstg-has-exclude-rules').forEach((e) => {\n e.style.display = 'none';\n });\n }\n\n removeExclude(target) {\n if (target.parentElement !== null && target.parentElement.parentElement !== null) {\n this.excludeTableBody.removeChild(target.parentElement.parentElement);\n }\n\n if (this.excludeTableBody.innerHTML.trim() === '') {\n dom.all('.wpstg-has-exclude-rules').forEach((e) => {\n e.style.display = 'none';\n });\n }\n }\n\n /**\n * Converts all the exclude filters arrays into one single string to keep size of post request small\n * @return {string}\n */\n getExcludeFilters() {\n const globExcludes = [];\n const sizeExcludes = [];\n\n const sizeCompares = this.excludeTableBody.querySelectorAll('select[name=\"wpstgFileSizeExcludeRuleCompare[]\"]');\n const sizeSizes = this.excludeTableBody.querySelectorAll('input[name=\"wpstgFileSizeExcludeRuleSize[]\"]');\n const sizeByte = this.excludeTableBody.querySelectorAll('select[name=\"wpstgFileSizeExcludeRuleByte[]\"]');\n for (const [key, sizeInput] of Object.entries(sizeSizes)) {\n if (sizeInput.value !== '') {\n sizeExcludes.push(sizeCompares[key].value + ' ' + sizeInput.value + sizeByte[key].value);\n }\n }\n\n const extensionInputs = this.excludeTableBody.querySelectorAll('input[name=\"wpstgFileExtExcludeRule[]\"]');\n extensionInputs.forEach((x) => {\n const ext = this.cleanStringForGlob(x.value);\n if (ext !== '') {\n globExcludes.push('ext:' + ext.trim());\n }\n });\n\n const fileNamesPos = this.excludeTableBody.querySelectorAll('select[name=\"wpstgFileNameExcludeRulePos[]\"]');\n const fileNames = this.excludeTableBody.querySelectorAll('input[name=\"wpstgFileNameExcludeRulePath[]\"]');\n for (const [key, fileInput] of Object.entries(fileNames)) {\n const fileName = this.cleanStringForGlob(fileInput.value);\n if (fileName !== '') {\n globExcludes.push('file:' + fileNamesPos[key].value + ' ' + fileName.trim());\n }\n }\n\n const dirNamesPos = this.excludeTableBody.querySelectorAll('select[name=\"wpstgDirNameExcludeRulePos[]\"]');\n const dirNames = this.excludeTableBody.querySelectorAll('input[name=\"wpstgDirNameExcludeRulePath[]\"]');\n for (const [key, dirInput] of Object.entries(dirNames)) {\n const dirName = this.cleanStringForGlob(dirInput.value);\n if (dirName !== '') {\n globExcludes.push('dir:' + dirNamesPos[key].value + ' ' + dirName.trim());\n }\n }\n\n return {\n 'sizes': sizeExcludes.filter(this.onlyUnique).join(','),\n // return set of unique rules\n 'globs': globExcludes.filter(this.onlyUnique).join(','),\n };\n }\n\n onlyUnique(value, index, self) {\n return self.indexOf(value) === index;\n }\n\n /**\n * Remove most of the comment glob characters from the string\n * @param {String} value\n * @return {String}\n */\n cleanStringForGlob(value) {\n // will replace character like * ^ / \\ ! ? [ from the string\n return value.replace(/[*^//!\\.[?]/g, '');\n }\n}\n","/**\n * Basic WP Staging Modal implemented with help of Sweetalerts\n */\nexport default class WpstgModal {\n constructor(\n confirmAction,\n wpstgObject = wpstg,\n ) {\n this.confirmAction = confirmAction;\n this.wpstgObject = wpstgObject;\n }\n\n show(swalOptions, additionalParams = {}, callback = null) {\n wpstgSwal.fire(swalOptions).then((result) => {\n if (result.value && this.error !== null) {\n this.triggerConfirmAction(additionalParams, callback);\n }\n });\n }\n\n triggerConfirmAction(additionalParams = {}, callback = null) {\n fetch(this.wpstgObject.ajaxUrl, {\n method: 'POST',\n credentials: 'same-origin',\n body: new URLSearchParams(Object.assign({\n action: this.confirmAction,\n accessToken: this.wpstgObject.accessToken,\n nonce: this.wpstgObject.nonce,\n }, additionalParams)),\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n }).then((response) => {\n if (response.ok) {\n return response.json();\n }\n\n return Promise.reject(response);\n }).then((response) => {\n if (callback !== null) {\n callback(response);\n }\n }).catch((error) => {\n console.log(this.wpstgObject.i18n['somethingWentWrong'], error);\n });\n }\n}\n","'use strict';\n\n/**\n * This is a namespaced port of https://github.com/tristen/hoverintent,\n * with slight modification to accept selector with dynamically added element in dom,\n * instead of just already present element.\n *\n * @param {HTMLElement} parent\n * @param {string} selector\n * @param {CallableFunction} onOver\n * @param {CallableFunction} onOut\n *\n * @return {object}\n */\nexport default function(parent, selector, onOver, onOut) {\n let x; let y; let pX; let pY;\n let mouseOver = false;\n let focused = false;\n const h = {};\n let state = 0;\n let timer = 0;\n\n let options = {\n sensitivity: 7,\n interval: 100,\n timeout: 0,\n handleFocus: false,\n };\n\n function delay(el, e) {\n if (timer) {\n timer = clearTimeout(timer);\n }\n\n state = 0;\n return focused ? undefined : onOut(el, e);\n }\n\n function tracker(e) {\n x = e.clientX;\n y = e.clientY;\n }\n\n function compare(el, e) {\n if (timer) timer = clearTimeout(timer);\n if ((Math.abs(pX - x) + Math.abs(pY - y)) < options.sensitivity) {\n state = 1;\n return focused ? undefined : onOver(el, e);\n } else {\n pX = x;\n pY = y;\n timer = setTimeout(function() {\n compare(el, e);\n }, options.interval);\n }\n }\n\n // Public methods\n h.options = function(opt) {\n const focusOptionChanged = opt.handleFocus !== options.handleFocus;\n options = Object.assign({}, options, opt);\n if (focusOptionChanged) {\n options.handleFocus ? addFocus() : removeFocus();\n }\n\n return h;\n };\n\n function dispatchOver(el, e) {\n mouseOver = true;\n if (timer) {\n timer = clearTimeout(timer);\n }\n\n el.removeEventListener('mousemove', tracker, false);\n\n if (state !== 1) {\n pX = e.clientX;\n pY = e.clientY;\n\n el.addEventListener('mousemove', tracker, false);\n\n timer = setTimeout(function() {\n compare(el, e);\n }, options.interval);\n }\n\n return this;\n }\n\n /**\n * Newly added method,\n * A wrapper around dispatchOver to support dynamically added elements to dom\n */\n function onMouseOver(event) {\n if (event.target.matches(selector + ', ' + selector + ' *')) {\n dispatchOver(event.target.closest(selector), event);\n }\n };\n\n function dispatchOut(el, e) {\n mouseOver = false;\n if (timer) {\n timer = clearTimeout(timer);\n }\n\n el.removeEventListener('mousemove', tracker, false);\n\n if (state === 1) {\n timer = setTimeout(function() {\n delay(el, e);\n }, options.timeout);\n }\n\n return this;\n }\n\n /**\n * Newly added method,\n * A wrapper around dispatchOut to support dynamically added elements to dom\n */\n function onMouseOut(event) {\n if (event.target.matches(selector + ', ' + selector + ' *')) {\n dispatchOut(event.target.closest(selector), event);\n }\n };\n\n function dispatchFocus(el, e) {\n if (!mouseOver) {\n focused = true;\n onOver(el, e);\n }\n }\n\n /**\n * Newly added method,\n * A wrapper around dispatchFocus to support dynamically added elements to dom\n */\n function onFocus(event) {\n if (event.target.matches(selector + ', ' + selector + ' *')) {\n dispatchFocus(event.target.closest(selector), event);\n }\n };\n\n function dispatchBlur(el, e) {\n if (!mouseOver && focused) {\n focused = false;\n onOut(el, e);\n }\n }\n\n /**\n * Newly added method,\n * A wrapper around dispatchBlur to support dynamically added elements to dom\n */\n function onBlur(event) {\n if (event.target.matches(selector + ', ' + selector + ' *')) {\n dispatchBlur(event.target.closest(selector), event);\n }\n };\n\n /**\n * Modified to support dynamically added element\n */\n function addFocus() {\n parent.addEventListener('focus', onFocus, false);\n parent.addEventListener('blur', onBlur, false);\n }\n\n /**\n * Modified to support dynamically added element\n */\n function removeFocus() {\n parent.removeEventListener('focus', onFocus, false);\n parent.removeEventListener('blur', onBlur, false);\n }\n\n /**\n * Modified to support dynamically added element\n */\n h.remove = function() {\n if (!parent) {\n return;\n }\n\n parent.removeEventListener('mouseover', onMouseOver, false);\n parent.removeEventListener('mouseout', onMouseOut, false);\n removeFocus();\n };\n\n /**\n * Modified to support dynamically added element\n */\n if (parent) {\n parent.addEventListener('mouseover', onMouseOver, false);\n parent.addEventListener('mouseout', onMouseOut, false);\n }\n\n return h;\n};\n","import wpstgHoverIntent from './modules/wpstg-hover-intent';\n\nexport default (function($) {\n const WPStagingCommon = {\n continueErrorHandle: true,\n cache: {\n elements: [],\n get: function(selector) {\n // It is already cached!\n if ($.inArray(selector, this.elements) !== -1) {\n return this.elements[selector];\n }\n\n // Create cache and return\n this.elements[selector] = $(selector);\n\n return this.elements[selector];\n },\n refresh: function(selector) {\n selector.elements[selector] = $(selector);\n },\n },\n setJobId: function(jobId) {\n localStorage.setItem('jobIdBeingProcessed', jobId);\n },\n getJobId: function() {\n return localStorage.getItem('jobIdBeingProcessed');\n },\n listenTooltip: function() {\n wpstgHoverIntent(document, '.wpstg--tooltip', function(target, event) {\n target.querySelector('.wpstg--tooltiptext').style.visibility = 'visible';\n }, function(target, event) {\n target.querySelector('.wpstg--tooltiptext').style.visibility = 'hidden';\n });\n },\n isEmpty: function(obj) {\n for (const prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n return false;\n }\n }\n\n return true;\n },\n // Get the custom themed Swal Modal for WP Staging\n // Easy to maintain now in one place now\n getSwalModal: function(isContentCentered = false, customClasses = {}) {\n // common style for all swal modal used in WP Staging\n const defaultCustomClasses = {\n confirmButton: 'wpstg--btn--confirm wpstg-blue-primary wpstg-button wpstg-link-btn wpstg-100-width',\n cancelButton: 'wpstg--btn--cancel wpstg-blue-primary wpstg-link-btn wpstg-100-width',\n actions: 'wpstg--modal--actions',\n popup: isContentCentered ? 'wpstg-swal-popup centered-modal' : 'wpstg-swal-popup',\n };\n\n // If a attribute exists in both default and additional attributes,\n // The class(es) of the additional attribute will overrite the default one.\n const options = {\n customClass: Object.assign(defaultCustomClasses, customClasses),\n buttonsStyling: false,\n reverseButtons: true,\n showClass: {\n popup: 'wpstg--swal2-show wpstg-swal-show',\n },\n };\n\n return wpstgSwal.mixin(options);\n },\n showSuccessModal: function(htmlContent) {\n this.getSwalModal().fire({\n showConfirmButton: false,\n showCancelButton: true,\n cancelButtonText: 'OK',\n icon: 'success',\n title: 'Success!',\n html: '<div class=\"wpstg--grey\" style=\"text-align: left; margin-top: 8px;\">' + htmlContent + '</div>',\n });\n },\n showWarningModal: function(htmlContent) {\n this.getSwalModal().fire({\n showConfirmButton: false,\n showCancelButton: true,\n cancelButtonText: 'OK',\n icon: 'warning',\n title: '',\n html: '<div class=\"wpstg--grey\" style=\"text-align: left; margin-top: 8px;\">' + htmlContent + '</div>',\n });\n },\n showErrorModal: function(htmlContent) {\n this.getSwalModal().fire({\n showConfirmButton: false,\n showCancelButton: true,\n cancelButtonText: 'OK',\n icon: 'error',\n title: 'Error!',\n html: '<div class=\"wpstg--grey\" style=\"text-align: left; margin-top: 8px;\">' + htmlContent + '</div>',\n });\n },\n getSwalContainer: function() {\n return wpstgSwal.getContainer();\n },\n closeSwalModal: function() {\n wpstgSwal.close();\n },\n /**\n * Treats a default response object generated by WordPress's\n * wp_send_json_success() or wp_send_json_error() functions in\n * PHP, parses it in JavaScript, and either throws if it's an error,\n * or returns the data if the response is successful.\n *\n * @param {object} response\n * @return {*}\n */\n getDataFromWordPressResponse(response) {\n if (typeof response !== 'object') {\n throw new Error('Unexpected response (ERR 1341)');\n }\n\n if (!response.hasOwnProperty('success')) {\n throw new Error('Unexpected response (ERR 1342)');\n }\n\n if (!response.hasOwnProperty('data')) {\n throw new Error('Unexpected response (ERR 1343)');\n }\n\n if (response.success === false) {\n if (response.data instanceof Array && response.data.length > 0) {\n throw new Error(response.data.shift());\n } else {\n throw new Error('Response was not successful');\n }\n } else {\n // Successful response. Return the data.\n return response.data;\n }\n },\n isLoading: function(isLoading) {\n if (!isLoading || isLoading === false) {\n WPStagingCommon.cache.get('.wpstg-loader').hide();\n } else {\n WPStagingCommon.cache.get('.wpstg-loader').show();\n }\n },\n /**\n * Convert the given url to make it slug compatible\n * @param {string} url\n */\n slugify: function(url) {\n return url.toString()\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/&/g, '-and-')\n .replace(/[^a-z0-9\\-]/g, '')\n .replace(/-+/g, '-')\n .replace(/^-*/, '')\n .replace(/-*$/, '')\n ;\n },\n showAjaxFatalError: function(response, prependMessage, appendMessage) {\n prependMessage = prependMessage ? prependMessage + '<br/><br/>' : 'Something went wrong! <br/><br/>';\n appendMessage = appendMessage ? appendMessage + '<br/><br/>' : '<br/><br/>Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.';\n\n if (response === false) {\n WPStagingCommon.showError(prependMessage + ' Error: No response.' + appendMessage);\n window.removeEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n return;\n }\n\n if (typeof response.error !== 'undefined' && response.error) {\n WPStagingCommon.showError(prependMessage + ' Error: ' + response.message + appendMessage);\n window.removeEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n return;\n }\n },\n handleFetchErrors: function(response) {\n if (!response.ok) {\n WPStagingCommon.showError('Error: ' + response.status + ' - ' + response.statusText + '. Please try again or contact support.');\n }\n return response;\n },\n showError: function(message) {\n WPStagingCommon.cache.get('#wpstg-try-again').css('display', 'inline-block');\n WPStagingCommon.cache.get('#wpstg-cancel-cloning').text('Reset');\n WPStagingCommon.cache.get('#wpstg-resume-cloning').show();\n WPStagingCommon.cache.get('#wpstg-error-wrapper').show();\n WPStagingCommon.cache.get('#wpstg-error-details').show().html(message);\n WPStagingCommon.cache.get('#wpstg-removing-clone').removeClass('loading');\n WPStagingCommon.cache.get('.wpstg-loader').hide();\n $('.wpstg--modal--process--generic-problem').show().html(message);\n },\n resetErrors: function() {\n WPStagingCommon.cache.get('#wpstg-error-details').hide().html('');\n },\n /**\n * Ajax Requests\n * @param {Object} data\n * @param {Function} callback\n * @param {string} dataType\n * @param {bool} showErrors\n * @param {int} tryCount\n * @param {float} incrementRatio\n * @param errorCallback\n */\n ajax: function(data, callback, dataType, showErrors, tryCount, incrementRatio = null, errorCallback = null) {\n if ('undefined' === typeof (dataType)) {\n dataType = 'json';\n }\n\n if (false !== showErrors) {\n showErrors = true;\n }\n\n tryCount = 'undefined' === typeof (tryCount) ? 0 : tryCount;\n\n const retryLimit = 10;\n\n let retryTimeout = 10000 * tryCount;\n\n incrementRatio = parseInt(incrementRatio);\n if (!isNaN(incrementRatio)) {\n retryTimeout *= incrementRatio;\n }\n\n $.ajax({\n url: ajaxurl + '?action=wpstg_processing&_=' + (Date.now() / 1000),\n type: 'POST',\n dataType: dataType,\n cache: false,\n data: data,\n error: function(xhr, textStatus, errorThrown) {\n console.log(xhr.status + ' ' + xhr.statusText + '---' + textStatus);\n\n if (typeof (errorCallback) === 'function') {\n // Custom error handler\n errorCallback(xhr, textStatus, errorThrown);\n\n if (!WPStagingCommon.continueErrorHandle) {\n // Reset state\n WPStagingCommon.continueErrorHandle = true;\n\n return;\n }\n }\n\n // Default error handler\n tryCount++;\n if (tryCount <= retryLimit) {\n setTimeout(function() {\n WPStagingCommon.ajax(data, callback, dataType, showErrors, tryCount, incrementRatio);\n return;\n }, retryTimeout);\n } else {\n const errorCode = 'undefined' === typeof (xhr.status) ? 'Unknown' : xhr.status;\n WPStagingCommon.showError(\n 'Fatal Error: ' + errorCode + ' Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.',\n );\n }\n },\n success: function(data) {\n if ('function' === typeof (callback)) {\n callback(data);\n }\n },\n statusCode: {\n 404: function() {\n if (tryCount >= retryLimit) {\n WPStagingCommon.showError('Error 404 - Can\\'t find ajax request URL! Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.');\n }\n },\n 500: function() {\n if (tryCount >= retryLimit) {\n WPStagingCommon.showError('Fatal Error 500 - Internal server error while processing the request! Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.');\n }\n },\n 504: function() {\n if (tryCount > retryLimit) {\n WPStagingCommon.showError('Error 504 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 502: function() {\n if (tryCount >= retryLimit) {\n WPStagingCommon.showError('Error 502 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 503: function() {\n if (tryCount >= retryLimit) {\n WPStagingCommon.showError('Error 503 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 429: function() {\n if (tryCount >= retryLimit) {\n WPStagingCommon.showError('Error 429 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 403: function() {\n if (tryCount >= retryLimit) {\n WPStagingCommon.showError('Refresh page or login again! The process should be finished successfully. \\n\\ ');\n }\n },\n },\n });\n },\n };\n\n return WPStagingCommon;\n})(jQuery);\n","\nimport * as dom from './wpstg-dom-utils.js';\nimport WpstgDirectoryNavigation from './wpstg-directory-navigation.js';\nimport WpstgExcludeFilters from './wpstg-exclude-filters.js';\nimport WpstgModal from './wpstg-modal.js';\nimport WPStagingCommon from './../wpstg.js';\n\n/**\n * Manage RESET MODAL\n */\nexport default class WpstgResetModal {\n constructor(\n cloneID,\n workflowSelector = '#wpstg-workflow',\n fetchExcludeSettingsAction = 'wpstg_clone_excludes_settings',\n modalErrorAction = 'wpstg_modal_error',\n wpstgObject = wpstg,\n ) {\n this.cloneID = cloneID;\n this.workflow = dom.qs(workflowSelector);\n this.wpstgObject = wpstgObject;\n this.fetchExcludeSettingsAction = fetchExcludeSettingsAction;\n this.modalErrorAction = modalErrorAction;\n this.resetButtonClass = 'wpstg-confirm-reset-clone';\n this.resetModalContainerClass = 'wpstg-reset-confirmation';\n this.resetTabSelector = '.wpstg-reset-exclude-tab';\n this.directoryNavigator = null;\n this.excludeFilters = null;\n this.isAllTablesChecked = true;\n }\n\n addEvents() {\n const resetModalContainer = dom.qs('.' + this.resetModalContainerClass);\n if (resetModalContainer === null) {\n console.log('Exit');\n return;\n }\n\n dom.addEvent(resetModalContainer, 'click', this.resetTabSelector, (target) => {\n this.toggleContent(target);\n });\n\n dom.addEvent(resetModalContainer, 'click', '.wpstg-button-select', () => {\n this.selectDefaultTables();\n });\n\n dom.addEvent(resetModalContainer, 'click', '.wpstg-button-unselect', () => {\n this.toggleTableSelection();\n });\n\n dom.addEvent(resetModalContainer, 'click', '.wpstg-expand-dirs', (target, event) => {\n event.preventDefault();\n this.toggleDirectoryNavigation(target);\n });\n\n dom.addEvent(resetModalContainer, 'change', 'input.wpstg-check-dir', (target) => {\n this.updateDirectorySelection(target);\n });\n }\n\n init() {\n this.addEvents();\n }\n\n toggleContent(target) {\n const resetModalContainer = dom.qs('.' + this.resetModalContainerClass);\n const contentId = target.getAttribute('data-id');\n const tabTriangle = target.querySelector('.wpstg-tab-triangle');\n const isCollapsed = target.getAttribute('data-collapsed', 'true');\n const content = dom.qs(contentId);\n if (isCollapsed === 'true') {\n if (resetModalContainer.classList.contains('has-collapsible-open')) {\n resetModalContainer.classList.add('has-collapsible-open-2');\n } else {\n resetModalContainer.classList.add('has-collapsible-open');\n }\n\n dom.slideDown(content);\n tabTriangle.style.transform = 'rotate(90deg)';\n target.setAttribute('data-collapsed', 'false');\n } else {\n if (resetModalContainer.classList.contains('has-collapsible-open-2')) {\n resetModalContainer.classList.remove('has-collapsible-open-2');\n } else {\n resetModalContainer.classList.remove('has-collapsible-open');\n }\n\n dom.slideUp(content);\n tabTriangle.style.removeProperty('transform');\n target.setAttribute('data-collapsed', 'true');\n }\n }\n\n /**\n * Show Swal alert with loader and send ajax request to fetch content of alert.\n * @return Promise\n */\n showModal() {\n const swalPromise = this.loadModal();\n this.init();\n this.fetchCloneExcludes();\n return swalPromise;\n }\n\n loadModal() {\n return WPStagingCommon.getSwalModal(false, {\n confirmButton: this.resetButtonClass + ' wpstg-confirm-reset-clone wpstg--btn--confirm wpstg-blue-primary wpstg-button wpstg-link-btn',\n container: this.resetModalContainerClass + ' wpstg-swal2-container wpstg-swal2-loading',\n }).fire({\n title: '',\n icon: 'warning',\n html: this.getAjaxLoader(),\n width: '400px',\n focusConfirm: false,\n confirmButtonText: this.wpstgObject.i18n.resetClone,\n showCancelButton: true,\n });\n }\n\n fetchCloneExcludes() {\n this.error = null;\n // send ajax request and fetch preserved exclude settings\n fetch(this.wpstgObject.ajaxUrl, {\n method: 'POST',\n credentials: 'same-origin',\n body: new URLSearchParams({\n action: this.fetchExcludeSettingsAction,\n accessToken: this.wpstgObject.accessToken,\n nonce: this.wpstgObject.nonce,\n clone: this.cloneID,\n job: 'resetting',\n }),\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n }).then((response) => {\n if (response.ok) {\n return response.json();\n }\n\n return Promise.reject(response);\n }).then((data) => {\n if (!data.success) {\n const errorModal = new WpstgModal(this.modalErrorAction, this.wpstgObject);\n errorModal.show(Object.assign({\n title: 'Error',\n icon: 'error',\n html: this.wpstgObject.i18n['somethingWentWrong'],\n width: '500px',\n confirmButtonText: 'Ok',\n showCancelButton: false,\n customClass: {\n confirmButton: 'wpstg--btn--confirm wpstg-blue-primary wpstg-button wpstg-link-btn',\n cancelButton: 'wpstg--btn--cancel wpstg-blue-primary wpstg-link-btn',\n actions: 'wpstg--modal--actions',\n popup: 'wpstg-swal-popup centered-modal',\n },\n buttonsStyling: false,\n reverseButtons: true,\n }, data.swalOptions), {\n type: data.type,\n });\n\n return;\n }\n\n const modal = dom.qs('.wpstg-reset-confirmation');\n modal.classList.remove('wpstg-swal2-loading');\n modal.querySelector('.wpstg--swal2-popup').style.width = '500px';\n modal.querySelector('.wpstg--swal2-content').innerHTML = data.html;\n this.directoryNavigator = new WpstgDirectoryNavigation();\n this.excludeFilters = new WpstgExcludeFilters();\n }).catch((error) => {\n this.renderError({\n 'html': this.wpstgObject.i18n['somethingWentWrong'] + ' ' + error,\n });\n });\n }\n\n getDirectoryNavigator() {\n return this.directoryNavigator;\n }\n\n getExcludeFilters() {\n return this.excludeFilters;\n }\n\n getAjaxLoader() {\n return '<div class=\"wpstg-swal2-ajax-loader\"><img src=\"' + this.wpstgObject.wpstgIcon + '\" /></div>';\n }\n\n toggleDirectoryNavigation(element) {\n const cbElement = element.previousSibling;\n if (cbElement.getAttribute('data-navigateable', 'false') === 'false') {\n return;\n }\n\n if (cbElement.getAttribute('data-scanned', 'false') === 'false') {\n return;\n }\n\n const subDirectories = dom.getNextSibling(element, '.wpstg-subdir');\n\n if (subDirectories.style.display === 'none') {\n dom.slideDown(subDirectories);\n } else {\n dom.slideUp(subDirectories);\n }\n }\n\n updateDirectorySelection(element) {\n const parent = element.parentElement;\n if (element.checked) {\n dom.getParents(parent, '.wpstg-dir').forEach((parElem) => {\n for (let i = 0; i < parElem.children.length; i++) {\n if (parElem.children[i].matches('.wpstg-check-dir')) {\n parElem.children[i].checked = true;\n }\n }\n });\n parent.querySelectorAll('.wpstg-expand-dirs').forEach((x) => {\n x.classList.remove('disabled');\n });\n parent.querySelectorAll('.wpstg-subdir .wpstg-check-dir').forEach((x) => {\n x.checked = true;\n });\n } else {\n parent.querySelectorAll('.wpstg-expand-dirs, .wpstg-check-subdirs').forEach((x) => {\n x.classList.add('disabled');\n });\n parent.querySelectorAll('.wpstg-dir .wpstg-check-dir').forEach((x) => {\n x.checked = false;\n });\n }\n }\n\n selectDefaultTables() {\n const resetModalContainer = dom.qs('.' + this.resetModalContainerClass);\n const options = resetModalContainer.querySelectorAll('#wpstg_select_tables_cloning .wpstg-db-table');\n const multisitePattern = '^' + this.wpstgObject.tblprefix + '([^0-9])_*';\n const singleSitePattern = '^' + this.wpstgObject.tblprefix;\n options.forEach((option) => {\n const name = option.getAttribute('name', '');\n if (this.wpstgObject.isMultisite === '1' && name.match(multisitePattern)) {\n option.setAttribute('selected', 'selected');\n } else if (this.wpstgObject.isMultisite === '' && name.match(singleSitePattern)) {\n option.setAttribute('selected', 'selected');\n } else {\n option.removeAttribute('selected');\n }\n });\n }\n\n toggleTableSelection() {\n const resetModalContainer = dom.qs('.' + this.resetModalContainerClass);\n if (false === this.isAllTablesChecked) {\n resetModalContainer.querySelectorAll('#wpstg_select_tables_cloning .wpstg-db-table').forEach((option) => {\n option.setAttribute('selected', 'selected');\n });\n resetModalContainer.querySelector('.wpstg-button-unselect').innerHTML = 'Unselect All';\n // cache.get('.wpstg-db-table-checkboxes').prop('checked', true);\n this.isAllTablesChecked = true;\n } else {\n resetModalContainer.querySelectorAll('#wpstg_select_tables_cloning .wpstg-db-table').forEach((option) => {\n option.removeAttribute('selected');\n });\n resetModalContainer.querySelector('.wpstg-button-unselect').innerHTML = 'Select All';\n // cache.get('.wpstg-db-table-checkboxes').prop('checked', false);\n this.isAllTablesChecked = false;\n }\n }\n}\n","import * as dom from './wpstg-dom-utils.js';\n\n/**\n * Handle toggle of advance settings checkboxes\n */\nexport default class WpstgCloningAdvanceSettings {\n constructor(\n baseContainerSelector = '#wpstg-clonepage-wrapper',\n ) {\n this.baseContainer = dom.qs(baseContainerSelector);\n this.checkBoxSettingTogglerSelector = '.wpstg-toggle-advance-settings-section';\n this.init();\n }\n\n /**\n * Add events\n * @return {void}\n */\n addEvents() {\n if (this.baseContainer === null) {\n return;\n }\n\n dom.addEvent(this.baseContainer, 'change', this.checkBoxSettingTogglerSelector, (element) => {\n this.toggleSettings(element);\n });\n }\n\n /**\n * @return {void}\n */\n init() {\n this.addEvents();\n }\n\n /**\n * Expand/Collapse checkbox content on change\n * @return {void}\n */\n toggleSettings(element) {\n const target = dom.qs('#' + element.getAttribute('data-id'));\n if (element.checked) {\n dom.slideDown(target);\n } else {\n dom.slideUp(target);\n }\n }\n}\n","import * as dom from './wpstg-dom-utils.js';\n\nexport default class WpstgMainMenu {\n constructor() {\n this.activeTabClass = 'wpstg--tab--active';\n this.mainMenu();\n }\n\n mainMenu() {\n const tabHeader = dom.qs('.wpstg--tab--header');\n // Early bail if tab header is not available\n if (tabHeader === null) {\n return;\n }\n\n dom.addEvent(dom.qs('.wpstg--tab--header'), 'click', '.wpstg-button', (element) => {\n const $this = element;\n const target = $this.getAttribute('data-target');\n const targetElements = dom.all(target);\n const menuItems = dom.all('.wpstg--tab--header a[data-target]');\n const contents = dom.all('.wpstg--tab--contents > .wpstg--tab--content');\n\n contents.forEach((content) => {\n // active tab class is without the css dot class prefix\n if (content.matches('.' + this.activeTabClass + ':not(' + target + ')')) {\n content.classList.remove(this.activeTabClass);\n }\n });\n\n menuItems.forEach((menuItem) => {\n if (menuItem !== $this) {\n menuItem.classList.remove(this.activeTabClass);\n }\n });\n\n $this.classList.add(this.activeTabClass);\n\n targetElements.forEach((targetElement) => {\n targetElement.classList.add(this.activeTabClass);\n });\n\n if ('#wpstg--tab--backup' === target) {\n window.dispatchEvent(new Event('backups-tab'));\n }\n });\n };\n}\n","import WpstgCloneStaging from './modules/wpstg-clone-staging.js';\nimport WpstgDirectoryNavigation from './modules/wpstg-directory-navigation.js';\nimport WpstgExcludeFilters from './modules/wpstg-exclude-filters.js';\nimport WpstgResetModal from './modules/wpstg-reset-modal.js';\nimport WpstgModal from './modules/wpstg-modal.js';\nimport WpstgCloningAdvanceSettings from './modules/wpstg-cloning-advance-settings.js';\nimport WpstgMainMenu from './modules/wpstg-main-menu.js';\nimport WPStagingCommon from './wpstg.js';\n\nvar WPStaging = (function($) {\n const that = {\n isCancelled: false,\n isFinished: false,\n getLogs: false,\n time: 1,\n executionTime: false,\n progressBar: 0,\n cloneExcludeFilters: null,\n directoryNavigator: null,\n notyf: null,\n areAllTablesChecked: true,\n };\n const cache = {elements: []};\n let timeout; let ajaxSpinner;\n\n /**\n * Get / Set Cache for Selector\n * @param {String} selector\n * @return {*}\n */\n cache.get = function(selector) {\n // It is already cached!\n if ($.inArray(selector, cache.elements) !== -1) {\n return cache.elements[selector];\n }\n\n // Create cache and return\n cache.elements[selector] = jQuery(selector);\n\n return cache.elements[selector];\n };\n\n /**\n * Refreshes given cache\n * @param {String} selector\n */\n cache.refresh = function(selector) {\n selector.elements[selector] = jQuery(selector);\n };\n\n /**\n * Show and Log Error Message\n * @param {String} message\n */\n const showError = function(message) {\n cache.get('#wpstg-try-again').css('display', 'inline-block');\n cache.get('#wpstg-cancel-cloning').text('Reset');\n cache.get('#wpstg-resume-cloning').show();\n cache.get('#wpstg-error-wrapper').show();\n cache.get('#wpstg-error-details').show().html(message);\n cache.get('#wpstg-removing-clone').removeClass('loading');\n cache.get('.wpstg-loader').hide();\n $('.wpstg--modal--process--generic-problem').show().html(message);\n\n // Error event information for Staging\n $.ajax({\n url: ajaxurl,\n type: 'POST',\n dataType: 'json',\n data: {\n 'action': 'wpstg_staging_job_error',\n 'accessToken': wpstg.accessToken,\n 'nonce': wpstg.nonce,\n 'error_message': message,\n },\n });\n };\n\n /**\n * Show warning during cloning or push process when closing tab or browser, or changing page\n * @param {beforeunload} event\n * @return {null}\n */\n that.warnIfClosingDuringProcess = function(event) {\n // Only some browsers show the message below, most say something like \"Changes you made may not be saved\" (Chrome) or \"You have unsaved changes. Exit?\"\n event.returnValue = 'You MUST leave this window open while cloning/pushing. Please wait...';\n return null;\n };\n\n /**\n *\n * @param response the error object\n * @param prependMessage Overwrite default error message at beginning\n * @param appendMessage Overwrite default error message at end\n * @returns void\n */\n\n const showAjaxFatalError = function(response, prependMessage, appendMessage) {\n prependMessage = prependMessage ? prependMessage + '<br/><br/>' : 'Something went wrong! <br/><br/>';\n appendMessage = appendMessage ? appendMessage + '<br/><br/>' : '<br/><br/>Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.';\n\n if (response === false) {\n showError(prependMessage + ' Error: No response.' + appendMessage);\n window.removeEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n return;\n }\n\n if (typeof response.error !== 'undefined' && response.error) {\n console.error(response.message);\n showError(prependMessage + ' Error: ' + response.message + appendMessage);\n window.removeEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n return;\n }\n };\n\n /**\n *\n * @param response\n * @return {{ok}|*}\n */\n const handleFetchErrors = function(response) {\n if (!response.ok) {\n showError('Error: ' + response.status + ' - ' + response.statusText + '. Please try again or contact support.');\n }\n return response;\n };\n\n /** Hide and reset previous thrown visible errors */\n const resetErrors = function() {\n cache.get('#wpstg-error-details').hide().html('');\n };\n\n /**\n * Common Elements\n */\n const elements = function() {\n const $workFlow = cache.get('#wpstg-workflow');\n let urlSpinner = ajaxurl.replace('/admin-ajax.php', '') + '/images/spinner';\n let timer;\n\n if (2 < window.devicePixelRatio) {\n urlSpinner += '-2x';\n }\n\n urlSpinner += '.gif';\n\n ajaxSpinner = '<img src=\\'\\'' + urlSpinner + '\\' alt=\\'\\' class=\\'ajax-spinner general-spinner\\' />';\n\n const getBaseValues = function() {\n const path = $('#wpstg-use-target-dir').data('base-path');\n const uri = $('#wpstg-use-target-hostname').data('base-uri');\n return {\n path,\n };\n };\n\n $workFlow\n .on('change', '#wpstg_network_clone', function(e) {\n e.preventDefault();\n $('.wpstg-button-select').trigger('click');\n })\n // Check / Un-check All Database Tables New\n .on('click', '.wpstg-button-unselect', function(e) {\n e.preventDefault();\n\n if (false === that.areAllTablesChecked) {\n cache.get('#wpstg_select_tables_cloning .wpstg-db-table').prop('selected', 'selected');\n cache.get('.wpstg-button-unselect').text('Unselect All');\n cache.get('.wpstg-db-table-checkboxes').prop('checked', true);\n that.areAllTablesChecked = true;\n } else {\n cache.get('#wpstg_select_tables_cloning .wpstg-db-table').prop('selected', false);\n cache.get('.wpstg-button-unselect').text('Select All');\n cache.get('.wpstg-db-table-checkboxes').prop('checked', false);\n that.areAllTablesChecked = false;\n }\n })\n\n /**\n * Select tables with certain tbl prefix | NEW\n * @param obj e\n * @returns {undefined}\n */\n .on('click', '.wpstg-button-select', function(e) {\n e.preventDefault();\n $('#wpstg_select_tables_cloning .wpstg-db-table').each(function() {\n let regex = '^' + wpstg.tblprefix;\n if (wpstg.isMultisite === '1' && !$('#wpstg_network_clone').is(':checked')) {\n regex += '([^0-9])_*';\n }\n\n if ($(this).attr('name').match(regex)) {\n $(this).prop('selected', 'selected');\n } else {\n $(this).prop('selected', false);\n }\n });\n })\n // Expand Directories\n .on('click', '.wpstg-expand-dirs', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n\n $this.siblings('.wpstg-subdir').slideToggle();\n })\n // When a directory checkbox is Selected\n .on('change', 'input.wpstg-check-dir', function() {\n const $directory = $(this).parent('.wpstg-dir');\n\n if (this.checked) {\n $directory.parents('.wpstg-dir').children('.wpstg-check-dir').prop('checked', true);\n $directory.find('.wpstg-expand-dirs').removeClass('disabled');\n $directory.find('.wpstg-subdir .wpstg-check-dir').prop('checked', true);\n } else {\n $directory.find('.wpstg-dir .wpstg-check-dir').prop('checked', false);\n $directory.find('.wpstg-expand-dirs, .wpstg-check-subdirs').addClass('disabled');\n $directory.find('.wpstg-check-subdirs').data('action', 'check').text('check');\n }\n })\n // When a directory name is Selected\n .on('change', 'href.wpstg-check-dir', function() {\n const $directory = $(this).parent('.wpstg-dir');\n\n if (this.checked) {\n $directory.parents('.wpstg-dir').children('.wpstg-check-dir').prop('checked', true);\n $directory.find('.wpstg-expand-dirs').removeClass('disabled');\n $directory.find('.wpstg-subdir .wpstg-check-dir').prop('checked', true);\n } else {\n $directory.find('.wpstg-dir .wpstg-check-dir').prop('checked', false);\n $directory.find('.wpstg-expand-dirs, .wpstg-check-subdirs').addClass('disabled');\n $directory.find('.wpstg-check-subdirs').data('action', 'check').text('check');\n }\n })\n // Check the max length of the clone name and if the clone name already exists\n .on('keyup', '#wpstg-new-clone-id', function() {\n // Hide previous errors\n document.getElementById('wpstg-error-details').style.display = 'none';\n\n // This request was already sent, clear it up!\n if ('number' === typeof (timer)) {\n clearInterval(timer);\n }\n\n // Early bail if site name is empty\n if (this.value === undefined || this.value === '') {\n cache.get('#wpstg-new-clone-id').removeClass('wpstg-error-input');\n cache.get('#wpstg-start-cloning').removeAttr('disabled');\n cache.get('#wpstg-clone-id-error').text('').hide();\n return;\n }\n\n // Convert the site name to directory name (slugify the site name to create directory name)\n const cloneDirectoryName = WPStagingCommon.slugify(this.value);\n\n timer = setTimeout(\n function() {\n ajax(\n {\n action: 'wpstg_check_clone',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n directoryName: cloneDirectoryName,\n },\n function(response) {\n if (response.status === 'success') {\n cache.get('#wpstg-new-clone-id').removeClass('wpstg-error-input');\n cache.get('#wpstg-start-cloning').removeAttr('disabled');\n cache.get('#wpstg-clone-id-error').text('').hide();\n } else {\n cache.get('#wpstg-new-clone-id').addClass('wpstg-error-input');\n cache.get('#wpstg-start-cloning').prop('disabled', true);\n cache.get('#wpstg-clone-id-error').text(response.message).show();\n }\n },\n );\n },\n 500,\n );\n })\n // Restart cloning process\n .on('click', '#wpstg-start-cloning', function() {\n resetErrors();\n that.isCancelled = false;\n that.getLogs = false;\n that.progressBar = 0;\n })\n .on('input', '#wpstg-new-clone-id', function() {\n if ($('#wpstg-clone-directory').length < 1) {\n return;\n }\n\n const slug = WPStagingCommon.slugify(this.value);\n const $targetDir = $('#wpstg-use-target-dir');\n const $targetUri = $('#wpstg-use-target-hostname');\n let path = $targetDir.data('base-path');\n let uri = $targetUri.data('base-uri');\n\n if (path) {\n path = path.replace(/\\/+$/g, '') + '/' + slug + '/';\n }\n\n if (uri) {\n uri = uri.replace(/\\/+$/g, '') + '/' + slug;\n }\n\n\n $('.wpstg-use-target-dir--value').text(path);\n $('.wpstg-use-target-hostname--value').text(uri);\n\n $targetDir.attr('data-path', path);\n $targetUri.attr('data-uri', uri);\n $('#wpstg_clone_dir').attr('placeholder', path);\n $('#wpstg_clone_hostname').attr('placeholder', uri);\n })\n .on('input', '#wpstg_clone_hostname', function() {\n if ($(this).val() === '' || validateTargetHost()) {\n $('#wpstg_clone_hostname_error').remove();\n return;\n }\n if (!validateTargetHost() && !$('#wpstg_clone_hostname_error').length) {\n $('#wpstg-clone-directory tr:last-of-type').after('<tr><td>&nbsp;</td><td><p id=\"wpstg_clone_hostname_error\" style=\"color: red;\">&nbsp;Invalid host name. Please provide it in a format like http://example.com</p></td></tr>');\n }\n })\n ;\n\n cloneActions();\n };\n\n /* @returns {boolean} */\n var validateTargetHost = function() {\n const the_domain = $('#wpstg_clone_hostname').val();\n\n if (the_domain === '') {\n return true;\n }\n\n const reg = /^http(s)?:\\/\\/.*$/;\n if (reg.test(the_domain) === false) {\n return false;\n }\n return true;\n };\n\n /**\n * Clone actions\n */\n var cloneActions = function() {\n const $workFlow = cache.get('#wpstg-workflow');\n\n $workFlow\n // Cancel cloning\n .on('click', '#wpstg-cancel-cloning', function() {\n if (!confirm('Are you sure you want to cancel cloning process?')) {\n return false;\n }\n\n const $this = $(this);\n\n $('#wpstg-try-again, #wpstg-home-link').hide();\n $this.prop('disabled', true);\n\n that.isCancelled = true;\n that.progressBar = 0;\n\n $('#wpstg-processing-status').text('Please wait...this can take up a while.');\n $('.wpstg-loader, #wpstg-show-log-button').hide();\n\n $this.parent().append(ajaxSpinner);\n\n cancelCloning();\n })\n // Resume cloning\n .on('click', '#wpstg-resume-cloning', function() {\n resetErrors();\n const $this = $(this);\n\n $('#wpstg-try-again, #wpstg-home-link').hide();\n\n that.isCancelled = false;\n\n $('#wpstg-processing-status').text('Try to resume cloning process...');\n $('#wpstg-error-details').hide();\n $('.wpstg-loader').show();\n\n $this.parent().append(ajaxSpinner);\n\n that.startCloning();\n })\n // Cancel update cloning\n .on('click', '#wpstg-cancel-cloning-update', function() {\n resetErrors();\n\n const $this = $(this);\n\n $('#wpstg-try-again, #wpstg-home-link').hide();\n $this.prop('disabled', true);\n\n that.isCancelled = true;\n\n $('#wpstg-cloning-result').text('Please wait...this can take up a while.');\n $('.wpstg-loader, #wpstg-show-log-button').hide();\n\n $this.parent().append(ajaxSpinner);\n\n cancelCloningUpdate();\n })\n // Restart cloning\n .on('click', '#wpstg-restart-cloning', function() {\n resetErrors();\n\n const $this = $(this);\n\n $('#wpstg-try-again, #wpstg-home-link').hide();\n $this.prop('disabled', true);\n\n that.isCancelled = true;\n\n $('#wpstg-cloning-result').text('Please wait...this can take up a while.');\n $('.wpstg-loader, #wpstg-show-log-button').hide();\n\n $this.parent().append(ajaxSpinner);\n\n restart();\n })\n // Delete clone - confirmation\n .on('click', '.wpstg-remove-clone[data-clone]', function(e) {\n resetErrors();\n e.preventDefault();\n\n const $existingClones = cache.get('#wpstg-existing-clones');\n\n $workFlow.removeClass('active');\n\n cache.get('.wpstg-loader').show();\n\n ajax(\n {\n action: 'wpstg_confirm_delete_clone',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n clone: $(this).data('clone'),\n },\n function(response) {\n cache.get('#wpstg-removing-clone').html(response);\n\n $existingClones.children('img').remove();\n\n cache.get('.wpstg-loader').hide();\n\n $('html, body').animate({\n // This logic is meant to be a \"scrollBottom\"\n scrollTop: $('#wpstg-remove-clone').offset().top - $(window).height() +\n $('#wpstg-remove-clone').height() + 50,\n }, 100);\n },\n 'HTML',\n );\n })\n // Delete clone - confirmed\n .on('click', '#wpstg-remove-clone', function(e) {\n resetErrors();\n e.preventDefault();\n\n cache.get('#wpstg-removing-clone').addClass('loading');\n\n cache.get('.wpstg-loader').show();\n\n deleteClone($(this).data('clone'));\n })\n // Cancel deleting clone\n .on('click', '#wpstg-cancel-removing', function(e) {\n e.preventDefault();\n $('.wpstg-clone').removeClass('active');\n cache.get('#wpstg-removing-clone').html('');\n })\n // Update\n .on('click', '.wpstg-execute-clone', function(e) {\n e.preventDefault();\n\n const clone = $(this).data('clone');\n\n $workFlow.addClass('loading');\n that.cloneExcludeFilters = null;\n ajax(\n {\n action: 'wpstg_scanning',\n clone: clone,\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n },\n function(response) {\n if (response.length < 1) {\n showError(\n 'Something went wrong! Error: No response. Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.',\n );\n }\n\n const jsonResponse = tryParseJson(response);\n if (jsonResponse !== false && jsonResponse.success === false) {\n $workFlow.removeClass('loading');\n showErrorModal(jsonResponse);\n\n return;\n }\n\n $workFlow.removeClass('loading').html(response);\n // register check disk space function for clone update process.\n checkDiskSpace();\n that.directoryNavigator = new WpstgDirectoryNavigation('#wpstg-directories-listing', wpstg, that.notyf);\n that.cloneExcludeFilters = new WpstgExcludeFilters();\n that.switchStep(2);\n },\n 'HTML',\n );\n })\n // Reset Clone\n .on('click', '.wpstg-reset-clone', function(e) {\n e.preventDefault();\n const clone = $(this).data('clone');\n const resetModal = new WpstgResetModal(clone);\n const promise = resetModal.showModal();\n that.areAllTablesChecked = true;\n\n promise.then((result) => {\n if (result.value) {\n const dirNavigator = resetModal.getDirectoryNavigator();\n const exclFilters = resetModal.getExcludeFilters().getExcludeFilters();\n resetClone(clone, {\n includedTables: getIncludedTables(),\n excludeSizeRules: encodeURIComponent(exclFilters.sizes),\n excludeGlobRules: encodeURIComponent(exclFilters.globs),\n excludedDirectories: dirNavigator.getExcludedDirectories(),\n extraDirectories: dirNavigator.getExtraDirectoriesRootOnly(),\n });\n }\n });\n\n return;\n });\n };\n\n /**\n * Ajax Requests\n * @param Object data\n * @param Function callback\n * @param string dataType\n * @param bool showErrors\n * @param int tryCount\n * @param float incrementRatio\n */\n var ajax = function(data, callback, dataType, showErrors, tryCount, incrementRatio = null) {\n if ('undefined' === typeof (dataType)) {\n dataType = 'json';\n }\n\n if (false !== showErrors) {\n showErrors = true;\n }\n\n tryCount = 'undefined' === typeof (tryCount) ? 0 : tryCount;\n\n const retryLimit = 5;\n\n let retryTimeout = 10000 * tryCount;\n\n incrementRatio = parseInt(incrementRatio);\n if (!isNaN(incrementRatio)) {\n retryTimeout *= incrementRatio;\n }\n\n $.ajax({\n url: ajaxurl + '?action=wpstg_processing&_=' + (Date.now() / 1000),\n type: 'POST',\n dataType: dataType,\n cache: false,\n data: data,\n error: function(xhr, textStatus, errorThrown) {\n // try again after 10 seconds\n tryCount++;\n if (tryCount <= retryLimit) {\n console.log('RETRYING ' + tryCount + '/' + retryLimit);\n setTimeout(function() {\n ajax(data, callback, dataType, showErrors, tryCount, incrementRatio);\n return;\n }, retryTimeout);\n } else {\n console.log('RETRYING LIMIT');\n const errorCode = 'undefined' === typeof (xhr.status) ? 'Unknown' : xhr.status;\n showError(\n 'Fatal Error: ' + errorCode + ' Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.',\n );\n }\n },\n success: function(data) {\n if ('function' === typeof (callback)) {\n callback(data);\n }\n },\n statusCode: {\n 404: function() {\n if (tryCount >= retryLimit) {\n showError('Error 404 - Can\\'t find ajax request URL! Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.');\n }\n },\n 500: function() {\n if (tryCount >= retryLimit) {\n showError('Fatal Error 500 - Internal server error while processing the request! Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.');\n }\n },\n 504: function() {\n if (tryCount > retryLimit) {\n showError('Error 504 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 502: function() {\n if (tryCount >= retryLimit) {\n showError('Error 502 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 503: function() {\n if (tryCount >= retryLimit) {\n showError('Error 503 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 429: function() {\n if (tryCount >= retryLimit) {\n showError('Error 429 - It looks like your server is rate limiting ajax requests. Please try to resume after a minute. If this still not works try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report and contact us.\\n\\ ');\n }\n },\n 403: function() {\n if (tryCount >= retryLimit) {\n showError('Refresh page or login again! The process should be finished successfully. \\n\\ ');\n }\n },\n },\n });\n };\n\n /**\n * Next / Previous Step Clicks to Navigate Through Staging Job\n */\n const stepButtons = function() {\n const $workFlow = cache.get('#wpstg-workflow');\n\n $workFlow\n // Next Button\n .on('click', '.wpstg-next-step-link', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n const isScan = false;\n\n if ($('#wpstg_clone_hostname').length && !validateTargetHost()) {\n $('#wpstg_clone_hostname').focus();\n return false;\n }\n\n if ($this.data('action') === 'wpstg_update' || $this.data('action') === 'wpstg_reset') {\n // Update / Reset Clone - confirmed\n let onlyUpdateMessage = '';\n if ($this.data('action') === 'wpstg_update') {\n onlyUpdateMessage = ' \\n\\nExclude all tables and folders you do not want to overwrite, first! \\n\\nDo not cancel the updating process! This can break your staging site. \\n\\n\\Create a backup of your staging website before you proceed.';\n }\n\n if (!confirm('STOP! This will overwrite your staging site with all selected data from the production site! This should be used only if you want to clone again your production site. Are you sure you want to do this?' + onlyUpdateMessage)) {\n return false;\n }\n }\n\n // Button is disabled\n if ($this.attr('disabled')) {\n return false;\n }\n\n if ($this.data('action') === 'wpstg_cloning') {\n // Verify External Database If Checked and Not Skipped\n if ($('#wpstg-ext-db').is(':checked')) {\n verifyExternalDatabase($this, $workFlow);\n return;\n }\n }\n\n proceedCloning($this, $workFlow);\n })\n // Previous Button\n .on('click', '.wpstg-prev-step-link', function(e) {\n e.preventDefault();\n cache.get('.wpstg-loader').removeClass('wpstg-finished');\n cache.get('.wpstg-loader').hide();\n loadOverview();\n });\n };\n\n /**\n * Get Included (Checked) Database Tables\n * @return {Array}\n */\n const getIncludedTables = function() {\n const includedTables = [];\n\n $('#wpstg_select_tables_cloning option:selected').each(function() {\n includedTables.push(this.value);\n });\n\n return includedTables;\n };\n\n /**\n * Get Excluded (Unchecked) Database Tables\n * Not used anymore!\n * @return {Array}\n */\n const getExcludedTables = function() {\n const excludedTables = [];\n\n $('.wpstg-db-table input:not(:checked)').each(function() {\n excludedTables.push(this.name);\n });\n\n return excludedTables;\n };\n\n /**\n * Verify External Database for Cloning\n */\n var verifyExternalDatabase = function($this, workflow) {\n cache.get('.wpstg-loader').show();\n ajax(\n {\n action: 'wpstg_database_verification',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n databaseUser: cache.get('#wpstg_db_username').val(),\n databasePassword: cache.get('#wpstg_db_password').val(),\n databaseServer: cache.get('#wpstg_db_server').val(),\n databaseDatabase: cache.get('#wpstg_db_database').val(),\n },\n function(response) {\n // Undefined Error\n if (false === response) {\n showError(\n 'Something went wrong! Error: No response.' +\n 'Please try again. If that does not help, ' +\n '<a href=\\'https://wp-staging.com/support/\\' target=\\'_blank\\'>open a support ticket</a> ',\n );\n cache.get('.wpstg-loader').hide();\n return;\n }\n\n // Throw Error\n if ('undefined' === typeof (response.success)) {\n showError(\n 'Something went wrong! Error: Invalid response.' +\n 'Please try again. If that does not help, ' +\n '<a href=\\'https://wp-staging.com/support/\\' target=\\'_blank\\'>open a support ticket</a> ',\n );\n cache.get('.wpstg-loader').hide();\n return;\n }\n\n if (response.success) {\n cache.get('.wpstg-loader').hide();\n proceedCloning($this, workflow);\n return;\n }\n\n if (response.error_type === 'comparison') {\n cache.get('.wpstg-loader').hide();\n let render = '<table class=\"wpstg-db-comparison-table\"><thead><tr><th>Property</th><th>Production DB</th><th>Staging DB</th><th>Status</th></tr></thead><tbody>';\n response.checks.forEach((x) => {\n let icon = '<span class=\"wpstg-css-tick\"></span>';\n if (x.production !== x.staging) {\n icon = '<span class=\"wpstg-css-cross\"></span>';\n }\n render += '<tr><td>' + x.name + '</td><td>' + x.production + '</td><td>' + x.staging + '</td><td>' + icon + '</td></tr>';\n });\n render += '</tbody></table><p>Note: Some MySQL/MariaDB properties do not match. You may proceed but the staging site may not work as expected.</p>';\n WPStagingCommon.getSwalModal(true, {\n popup: 'wpstg-swal-popup wpstg-db-comparison-modal centered-modal',\n }).fire({\n title: 'Different Database Properties',\n icon: 'warning',\n html: render,\n width: '650px',\n focusConfirm: false,\n confirmButtonText: 'Proceed',\n showCancelButton: true,\n }).then(function(result) {\n if (result.value) {\n proceedCloning($this, workflow);\n }\n });\n return;\n }\n\n WPStagingCommon.getSwalModal(true).fire({\n title: 'Different Database Properties',\n icon: 'error',\n html: response.message,\n focusConfirm: true,\n confirmButtonText: 'Ok',\n showCancelButton: false,\n });\n cache.get('.wpstg-loader').hide();\n },\n 'json',\n false,\n );\n };\n\n /**\n * Get Cloning Step Data\n */\n const getCloningData = function() {\n if ('wpstg_cloning' !== that.data.action && 'wpstg_update' !== that.data.action && 'wpstg_reset' !== that.data.action) {\n return;\n }\n\n that.data.cloneID = new Date().getTime().toString();\n if ('wpstg_update' === that.data.action) {\n that.data.cloneID = $('#wpstg-new-clone-id').data('clone');\n }\n\n that.data.cloneName = $('#wpstg-new-clone-id').val() || that.data.cloneID;\n\n // Remove this to keep &_POST[] small otherwise mod_security will throw error 404\n // that.data.excludedTables = getExcludedTables();\n\n if (that.directoryNavigator !== null) {\n that.data.excludedDirectories = encodeURIComponent(that.directoryNavigator.getExcludedDirectories());\n that.data.extraDirectories = encodeURIComponent(that.directoryNavigator.getExtraDirectoriesRootOnly());\n }\n\n that.data.excludeGlobRules = '';\n that.data.excludeSizeRules = '';\n if (that.cloneExcludeFilters instanceof WpstgExcludeFilters) {\n const rules = that.cloneExcludeFilters.getExcludeFilters();\n that.data.excludeGlobRules = encodeURIComponent(rules.globs);\n that.data.excludeSizeRules = encodeURIComponent(rules.sizes);\n }\n\n that.data.includedTables = getIncludedTables();\n that.data.databaseServer = $('#wpstg_db_server').val();\n that.data.databaseUser = $('#wpstg_db_username').val();\n that.data.databasePassword = $('#wpstg_db_password').val();\n that.data.databaseDatabase = $('#wpstg_db_database').val();\n that.data.databasePrefix = $('#wpstg_db_prefix').val();\n const cloneDir = $('#wpstg_clone_dir').val();\n that.data.cloneDir = encodeURIComponent($.trim(cloneDir));\n that.data.cloneHostname = $('#wpstg_clone_hostname').val();\n that.data.emailsAllowed = $('#wpstg_allow_emails').is(':checked');\n that.data.networkClone = $('#wpstg_network_clone').is(':checked');\n that.data.uploadsSymlinked = $('#wpstg_symlink_upload').is(':checked');\n that.data.cleanPluginsThemes = $('#wpstg-clean-plugins-themes').is(':checked');\n that.data.cleanUploadsDir = $('#wpstg-clean-uploads').is(':checked');\n };\n\n var proceedCloning = function($this, workflow) {\n // Add loading overlay\n workflow.addClass('loading');\n\n // Prepare data\n that.data = {\n action: $this.data('action'),\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n };\n\n // Cloning data\n getCloningData();\n\n sendCloningAjax(workflow);\n };\n\n var sendCloningAjax = function(workflow) {\n // Send ajax request\n ajax(\n that.data,\n function(response) {\n // Undefined Error\n if (false === response) {\n showError(\n 'Something went wrong!<br/><br/> Go to WP Staging > Settings and lower \\'File Copy Limit\\' and \\'DB Query Limit\\'. Also set \\'CPU Load Priority to low \\'' +\n 'and try again. If that does not help, ' +\n '<a href=\\'https://wp-staging.com/support/\\' target=\\'_blank\\'>open a support ticket</a> ',\n );\n }\n\n\n if (response.length < 1) {\n showError(\n 'Something went wrong! No response. Go to WP Staging > Settings and lower \\'File Copy Limit\\' and \\'DB Query Limit\\'. Also set \\'CPU Load Priority to low \\'' +\n 'and try again. If that does not help, ' +\n '<a href=\\'https://wp-staging.com/support/\\' target=\\'_blank\\'>open a support ticket</a> ',\n );\n }\n\n const jsonResponse = tryParseJson(response);\n if (jsonResponse !== false && jsonResponse.success === false) {\n workflow.removeClass('loading');\n showErrorModal(jsonResponse);\n\n return;\n }\n\n // Styling of elements\n workflow.removeClass('loading').html(response);\n that.cloneExcludeFilters = null;\n if (that.data.action === 'wpstg_scanning') {\n that.areAllTablesChecked = true;\n that.directoryNavigator = new WpstgDirectoryNavigation('#wpstg-directories-listing', wpstg, that.notyf);\n that.switchStep(2);\n that.cloneExcludeFilters = new WpstgExcludeFilters();\n } else if (that.data.action === 'wpstg_cloning' || that.data.action === 'wpstg_update' || that.data.action === 'wpstg_reset') {\n that.switchStep(3);\n }\n\n // Start cloning\n that.startCloning();\n },\n 'HTML',\n );\n };\n\n var showErrorModal = function(response) {\n const errorModal = new WpstgModal('wpstg_modal_error', wpstg);\n errorModal.show(Object.assign({\n title: 'Error',\n icon: 'error',\n html: wpstg.i18n['somethingWentWrong'],\n width: '500px',\n confirmButtonText: 'Ok',\n showCancelButton: false,\n customClass: {\n confirmButton: 'wpstg--btn--confirm wpstg-blue-primary wpstg-button wpstg-link-btn',\n cancelButton: 'wpstg--btn--cancel wpstg-blue-primary wpstg-link-btn',\n actions: 'wpstg--modal--actions',\n popup: 'wpstg-swal-popup centered-modal',\n },\n buttonsStyling: false,\n reverseButtons: true,\n }, response.swalOptions), {\n type: response.type,\n });\n };\n\n const tryParseJson = function(json) {\n // early bail if not string\n if (!json) {\n return false;\n }\n\n try {\n const object = JSON.parse(json);\n if (object && typeof object === 'object') {\n return object;\n }\n } catch (e) {\n // do nothing on catch\n }\n\n return false;\n };\n\n var resetClone = function(clone, excludeOptions) {\n that.data = {\n action: 'wpstg_reset',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n cloneID: clone,\n };\n\n that.data = {...that.data, ...excludeOptions};\n\n const $workFlow = cache.get('#wpstg-workflow');\n sendCloningAjax($workFlow);\n };\n\n /**\n * Loads Overview (first step) of Staging Job\n */\n var loadOverview = function() {\n const $workFlow = cache.get('#wpstg-workflow');\n\n $workFlow.addClass('loading');\n\n ajax(\n {\n action: 'wpstg_overview',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n },\n function(response) {\n if (response.length < 1) {\n showError(\n 'Something went wrong! No response. Please try the <a href=\\'https://wp-staging.com/docs/wp-staging-settings-for-small-servers/\\' target=\\'_blank\\'>WP Staging Small Server Settings</a> or submit an error report.',\n );\n }\n\n const $currentStep = cache.get('.wpstg-current-step');\n\n // Styling of elements\n $workFlow.removeClass('loading').html(response);\n },\n 'HTML',\n );\n\n that.switchStep(1);\n cache.get('.wpstg-step3-cloning').show();\n cache.get('.wpstg-step3-pushing').hide();\n };\n\n /**\n * Load Tabs\n */\n const tabs = function() {\n cache.get('#wpstg-workflow').on('click', '.wpstg-tab-header', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n const $section = cache.get($this.data('id'));\n\n $this.toggleClass('expand');\n\n $section.slideToggle();\n\n const tabTriangle = $this.find('.wpstg-tab-triangle');\n\n if ($this.hasClass('expand')) {\n tabTriangle.removeClass('wpstg-no-icon');\n tabTriangle.text('');\n tabTriangle.addClass('wpstg-rotate-90');\n } else {\n tabTriangle.removeClass('wpstg-rotate-90');\n }\n });\n };\n\n /**\n * Delete Clone\n * @param {String} clone\n */\n var deleteClone = function(clone) {\n const deleteDir = $('#deleteDirectory:checked').data('deletepath');\n\n ajax(\n {\n action: 'wpstg_delete_clone',\n clone: clone,\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n excludedTables: getExcludedTables(),\n deleteDir: deleteDir,\n },\n function(response) {\n if (response) {\n showAjaxFatalError(response);\n\n // Finished\n if ('undefined' !== typeof response.delete && (response.delete === 'finished' || response.delete === 'unfinished')) {\n cache.get('#wpstg-removing-clone').removeClass('loading').html('');\n\n if (response.delete === 'finished' && response.error === undefined) {\n $('.wpstg-clone[data-clone-id=\"' + clone + '\"]').remove();\n }\n\n // No staging site message is also of type/class .wpstg-class but hidden\n // We have just excluded that from search when counting no of clones\n if ($('#wpstg-existing-clones .wpstg-clone').length < 1) {\n cache.get('#wpstg-existing-clones').find('h3').text('');\n cache.get('#wpstg-no-staging-site-results').show();\n }\n\n cache.get('.wpstg-loader').hide();\n return;\n }\n }\n // continue\n if (true !== response) {\n deleteClone(clone);\n return;\n }\n },\n );\n };\n\n /**\n * Cancel Cloning Process\n */\n var cancelCloning = function() {\n that.timer('stop');\n\n\n if (true === that.isFinished) {\n return true;\n }\n\n ajax(\n {\n action: 'wpstg_cancel_clone',\n clone: that.data.cloneID,\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n },\n function(response) {\n if (response && 'undefined' !== typeof (response.delete) && response.delete === 'finished') {\n cache.get('.wpstg-loader').hide();\n // Load overview\n loadOverview();\n return;\n }\n\n if (true !== response) {\n // continue\n cancelCloning();\n return;\n }\n\n // Load overview\n loadOverview();\n },\n );\n };\n\n /**\n * Cancel Cloning Process\n */\n var cancelCloningUpdate = function() {\n if (true === that.isFinished) {\n return true;\n }\n\n ajax(\n {\n action: 'wpstg_cancel_update',\n clone: that.data.cloneID,\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n },\n function(response) {\n if (response && 'undefined' !== typeof (response.delete) && response.delete === 'finished') {\n // Load overview\n loadOverview();\n return;\n }\n\n if (true !== response) {\n // continue\n cancelCloningUpdate();\n return;\n }\n\n // Load overview\n loadOverview();\n },\n );\n };\n\n /**\n * Cancel Cloning Process\n */\n var restart = function() {\n if (true === that.isFinished) {\n return true;\n }\n\n ajax(\n {\n action: 'wpstg_restart',\n // clone: that.data.cloneID,\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n },\n function(response) {\n if (response && 'undefined' !== typeof (response.delete) && response.delete === 'finished') {\n // Load overview\n loadOverview();\n return;\n }\n\n if (true !== response) {\n // continue\n cancelCloningUpdate();\n return;\n }\n\n // Load overview\n loadOverview();\n },\n );\n };\n\n /**\n * Scroll the window log to bottom\n * @return void\n */\n const logscroll = function() {\n const $div = cache.get('.wpstg-log-details');\n if ('undefined' !== typeof ($div[0])) {\n $div.scrollTop($div[0].scrollHeight);\n }\n };\n\n /**\n * Append the log to the logging window\n * @param string log\n * @return void\n */\n const getLogs = function(log) {\n if (log != null && 'undefined' !== typeof (log)) {\n if (log.constructor === Array) {\n $.each(log, function(index, value) {\n if (value === null) {\n return;\n }\n if (value.type === 'ERROR') {\n cache.get('.wpstg-log-details').append('<span class=\"wpstg--red\">[' + value.type + ']</span>-' + '[' + value.date + '] ' + value.message + '</br>');\n } else {\n cache.get('.wpstg-log-details').append('[' + value.type + ']-' + '[' + value.date + '] ' + value.message + '</br>');\n }\n });\n } else {\n cache.get('.wpstg-log-details').append('[' + log.type + ']-' + '[' + log.date + '] ' + log.message + '</br>');\n }\n }\n logscroll();\n };\n\n /**\n * Check diskspace\n * @return string json\n */\n var checkDiskSpace = function() {\n cache.get('#wpstg-check-space').on('click', function(e) {\n cache.get('.wpstg-loader').show();\n const excludedDirectories = encodeURIComponent(that.directoryNavigator.getExcludedDirectories());\n const extraDirectories = encodeURIComponent(that.directoryNavigator.getExtraDirectoriesRootOnly());\n\n ajax(\n {\n action: 'wpstg_check_disk_space',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n excludedDirectories: excludedDirectories,\n extraDirectories: extraDirectories,\n },\n function(response) {\n if (false === response) {\n cache.get('#wpstg-clone-id-error').text('Can not detect required disk space').show();\n cache.get('.wpstg-loader').hide();\n return;\n }\n\n // Show required disk space\n cache.get('#wpstg-clone-id-error').html(\n 'Estimated necessary disk space: ' + response.requiredSpace +\n (response.errorMessage !== null ? ('<br>' + response.errorMessage) : '') +\n '<br> <span style=\"color:#444;\">Before you proceed ensure your account has enough free disk space to hold the entire instance of the production site. You can check the available space from your hosting account (cPanel or similar).</span>').show();\n cache.get('.wpstg-loader').hide();\n },\n 'json',\n false,\n );\n });\n };\n\n /**\n * Show or hide animated loading icon\n * @param isLoading bool\n */\n const isLoading = function(isLoading) {\n if (!isLoading || isLoading === false) {\n cache.get('.wpstg-loader').hide();\n } else {\n cache.get('.wpstg-loader').show();\n }\n };\n\n /**\n * Count up processing execution time\n * @param string status\n * @return html\n */\n that.timer = function(status) {\n if (status === 'stop') {\n const time = that.time;\n that.time = 1;\n clearInterval(that.executionTime);\n return that.convertSeconds(time);\n }\n\n\n that.executionTime = setInterval(function() {\n if (null !== document.getElementById('wpstg-processing-timer')) {\n document.getElementById('wpstg-processing-timer').innerHTML = 'Elapsed Time: ' + that.convertSeconds(that.time);\n }\n that.time++;\n if (status === 'stop') {\n that.time = 1;\n clearInterval(that.executionTime);\n }\n }, 1000);\n };\n\n /**\n * Convert seconds to hourly format\n * @param int seconds\n * @return string\n */\n that.convertSeconds = function(seconds) {\n const date = new Date(null);\n date.setSeconds(seconds); // specify value for SECONDS here\n return date.toISOString().substr(11, 8);\n };\n\n /**\n * Start Cloning Process\n * @type {Function}\n */\n that.startCloning = (function() {\n resetErrors();\n\n // Register function for checking disk space\n checkDiskSpace();\n\n if ('wpstg_cloning' !== that.data.action && 'wpstg_update' !== that.data.action && 'wpstg_reset' !== that.data.action) {\n return;\n }\n\n that.isCancelled = false;\n\n // Start the process\n start();\n\n // Functions\n // Start\n function start() {\n cache.get('.wpstg-loader').show();\n cache.get('#wpstg-cancel-cloning').text('Cancel');\n cache.get('#wpstg-resume-cloning').hide();\n cache.get('#wpstg-error-details').hide();\n\n\n // Clone Database\n setTimeout(function() {\n // cloneDatabase();\n window.addEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n processing();\n }, wpstg.delayReq);\n\n that.timer('start');\n }\n\n\n /**\n * Start ajax processing\n * @return string\n */\n var processing = function() {\n if (true === that.isCancelled) {\n window.removeEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n return false;\n }\n\n isLoading(true);\n\n let excludedDirectories = '';\n let extraDirectories = '';\n if (that.directoryNavigator !== null) {\n excludedDirectories = that.directoryNavigator.getExcludedDirectories();\n extraDirectories = that.directoryNavigator.getExtraDirectoriesRootOnly();\n }\n\n // Show logging window\n cache.get('.wpstg-log-details').show();\n\n WPStaging.ajax(\n {\n action: 'wpstg_processing',\n accessToken: wpstg.accessToken,\n nonce: wpstg.nonce,\n excludedTables: getExcludedTables(),\n excludedDirectories: encodeURIComponent(excludedDirectories),\n extraDirectories: encodeURIComponent(extraDirectories),\n },\n function(response) {\n showAjaxFatalError(response);\n\n // Add Log messages\n if ('undefined' !== typeof (response.last_msg) && response.last_msg) {\n getLogs(response.last_msg);\n }\n // Continue processing\n if (false === response.status) {\n progressBar(response);\n\n setTimeout(function() {\n cache.get('.wpstg-loader').show();\n processing();\n }, wpstg.delayReq);\n } else if (true === response.status && 'finished' !== response.status) {\n cache.get('#wpstg-error-details').hide();\n cache.get('#wpstg-error-wrapper').hide();\n progressBar(response, true);\n processing();\n } else if ('finished' === response.status || ('undefined' !== typeof (response.job_done) && response.job_done)) {\n window.removeEventListener('beforeunload', WPStaging.warnIfClosingDuringProcess);\n finish(response);\n }\n ;\n },\n 'json',\n false,\n );\n };\n\n // Finish\n function finish(response) {\n if (true === that.getLogs) {\n getLogs();\n }\n\n progressBar(response);\n\n // Add Log\n if ('undefined' !== typeof (response.last_msg)) {\n getLogs(response.last_msg);\n }\n\n cache.get('.wpstg-loader').hide();\n cache.get('#wpstg-processing-header').html('Processing Complete');\n $('#wpstg-processing-status').text('Succesfully finished');\n\n cache.get('#wpstg_staging_name').html(that.data.cloneID);\n cache.get('#wpstg-finished-result').show();\n cache.get('#wpstg-cancel-cloning').hide();\n cache.get('#wpstg-resume-cloning').hide();\n cache.get('#wpstg-cancel-cloning-update').prop('disabled', true);\n\n const $link1 = cache.get('#wpstg-clone-url-1');\n const $link = cache.get('#wpstg-clone-url');\n $link1.attr('href', response.url);\n $link1.html(response.url);\n $link.attr('href', response.url);\n\n cache.get('#wpstg-remove-clone').data('clone', that.data.cloneID);\n\n // Finished\n that.isFinished = true;\n that.timer('stop');\n\n\n cache.get('.wpstg-loader').hide();\n cache.get('#wpstg-processing-header').html('Processing Complete');\n\n // show alert\n let msg = wpstg.i18n.cloneResetComplete;\n if (that.data.action === 'wpstg_update') {\n msg = wpstg.i18n.cloneUpdateComplete;\n }\n\n if (that.data.action === 'wpstg_update' || that.data.action === 'wpstg_reset') {\n cache.get('#wpstg-cancel-cloning-update').hide();\n cache.get('.wpstg-prev-step-link').show();\n\n WPStagingCommon.getSwalModal(true, {\n confirmButton: 'wpstg--btn--confirm wpstg-green-button wpstg-button wpstg-link-btn wpstg-100-width',\n }).fire({\n title: '',\n icon: 'success',\n html: msg,\n width: '500px',\n focusConfirm: true,\n });\n }\n\n return false;\n }\n\n /**\n * Add percentage progress bar\n * @param object response\n * @return {Boolean}\n */\n var progressBar = function(response, restart) {\n if ('undefined' === typeof (response.percentage)) {\n return false;\n }\n\n if (response.job === 'database') {\n cache.get('#wpstg-progress-db').width(response.percentage * 0.2 + '%').html(response.percentage + '%');\n cache.get('#wpstg-processing-status').html(response.percentage.toFixed(0) + '%' + ' - Step 1 of 4 Cloning Database Tables...');\n }\n\n if (response.job === 'SearchReplace') {\n cache.get('#wpstg-progress-db').css('background-color', '#3bc36b');\n cache.get('#wpstg-progress-db').html('1. Database');\n // Assumption: All previous steps are done.\n // This avoids bugs where some steps are skipped and the progress bar is incomplete as a result\n cache.get('#wpstg-progress-db').width('20%');\n\n cache.get('#wpstg-progress-sr').width(response.percentage * 0.1 + '%').html(response.percentage + '%');\n cache.get('#wpstg-processing-status').html(response.percentage.toFixed(0) + '%' + ' - Step 2 of 4 Preparing Database Data...');\n }\n\n if (response.job === 'directories') {\n cache.get('#wpstg-progress-sr').css('background-color', '#3bc36b');\n cache.get('#wpstg-progress-sr').html('2. Data');\n cache.get('#wpstg-progress-sr').width('10%');\n\n cache.get('#wpstg-progress-dirs').width(response.percentage * 0.1 + '%').html(response.percentage + '%');\n cache.get('#wpstg-processing-status').html(response.percentage.toFixed(0) + '%' + ' - Step 3 of 4 Getting files...');\n }\n if (response.job === 'files') {\n cache.get('#wpstg-progress-dirs').css('background-color', '#3bc36b');\n cache.get('#wpstg-progress-dirs').html('3. Files');\n cache.get('#wpstg-progress-dirs').width('10%');\n\n cache.get('#wpstg-progress-files').width(response.percentage * 0.6 + '%').html(response.percentage + '%');\n cache.get('#wpstg-processing-status').html(response.percentage.toFixed(0) + '%' + ' - Step 4 of 4 Copy files...');\n }\n if (response.job === 'finish') {\n cache.get('#wpstg-progress-files').css('background-color', '#3bc36b');\n cache.get('#wpstg-progress-files').html('4. Copy Files');\n cache.get('#wpstg-progress-files').width('60%');\n\n cache.get('#wpstg-processing-status').html(response.percentage.toFixed(0) + '%' + ' - Cloning Process Finished');\n }\n };\n });\n\n that.switchStep = function(step) {\n cache.get('.wpstg-current-step')\n .removeClass('wpstg-current-step');\n cache.get('.wpstg-step' + step)\n .addClass('wpstg-current-step');\n };\n\n /**\n * Initiation\n * @type {Function}\n */\n that.init = (function() {\n loadOverview();\n elements();\n stepButtons();\n tabs();\n WPStagingCommon.listenTooltip();\n new WpstgMainMenu();\n new WpstgCloneStaging();\n new WpstgCloningAdvanceSettings();\n that.notyf = new Notyf({\n duration: 10000,\n position: {\n x: 'center',\n y: 'bottom',\n },\n dismissible: true,\n types: [\n {\n type: 'warning',\n background: 'orange',\n icon: false,\n },\n ],\n });\n });\n\n /**\n * Ajax call\n * @type {ajax}\n */\n that.ajax = ajax;\n that.showError = showError;\n that.getLogs = getLogs;\n that.loadOverview = loadOverview;\n\n return that;\n})(jQuery);\n\njQuery(document).ready(function() {\n WPStaging.init();\n // This is necessary to make WPStaging var accessibile in WP Staging PRO js script\n window.WPStaging = WPStaging;\n});\n\n/**\n * Report Issue modal\n */\njQuery(document).ready(function($) {\n $('body').on('click', '#wpstg-report-issue-button', function(e) {\n console.log('REPORT');\n $('.wpstg--tab--active .wpstg-report-issue-form').toggleClass('wpstg-report-show');\n e.preventDefault();\n });\n\n $('body').on('click', '#wpstg-backups-report-issue-button', function(e) {\n $('.wpstg--tab--active .wpstg-report-issue-form').toggleClass('wpstg-report-show');\n e.preventDefault();\n });\n\n $('body').on('click', '#wpstg-report-cancel', function(e) {\n $('.wpstg--tab--active .wpstg-report-issue-form').removeClass('wpstg-report-show');\n e.preventDefault();\n });\n\n $('body').on('click', '.wpstg--tab--active #wpstg-report-submit', function(e) {\n const self = $(this);\n sendIssueReport(self, 'false');\n e.preventDefault();\n });\n\n /*\n * Close Success Modal\n */\n\n $('body').on('click', '#wpstg-success-button', function(e) {\n e.preventDefault();\n $('.wpstg-report-issue-form').removeClass('wpstg-report-show');\n });\n\n function sendIssueReport(button, forceSend = 'false') {\n const spinner = button.next();\n const email = $('.wpstg--tab--active .wpstg-report-email').val();\n const hosting_provider = $('.wpstg--tab--active .wpstg-report-hosting-provider').val();\n const message = $('.wpstg--tab--active .wpstg-report-description').val();\n const syslog = $('.wpstg--tab--active .wpstg-report-syslog').is(':checked');\n const terms = $('.wpstg--tab--active .wpstg-report-terms').is(':checked');\n\n button.attr('disabled', true);\n spinner.css('visibility', 'visible');\n\n $.ajax({\n url: ajaxurl,\n type: 'POST',\n dataType: 'json',\n async: true,\n data: {\n 'action': 'wpstg_send_report',\n 'accessToken': wpstg.accessToken,\n 'nonce': wpstg.nonce,\n 'wpstg_email': email,\n 'wpstg_provider': hosting_provider,\n 'wpstg_message': message,\n 'wpstg_syslog': +syslog,\n 'wpstg_terms': +terms,\n 'wpstg_force_send': forceSend,\n },\n }).done(function(data) {\n button.attr('disabled', false);\n spinner.css('visibility', 'hidden');\n\n if (data.errors.length > 0) {\n $('.wpstg--tab--active .wpstg-report-issue-form .wpstg-message').remove();\n\n let errorMessage = $('<div />').addClass('wpstg-message wpstg-error-message');\n $.each(data.errors, function(key, value) {\n if (value.status === 'already_submitted') {\n errorMessage = '';\n // TODO: remove default custom classes\n WPStagingCommon.getSwalModal(true, {\n container: 'wpstg-issue-resubmit-confirmation',\n }).fire({\n title: '',\n icon: 'warning',\n html: value.message,\n showCancelButton: true,\n focusConfirm: false,\n confirmButtonText: 'Yes',\n cancelButtonText: 'No',\n }).then((result) => {\n if (result.isConfirmed) {\n sendIssueReport(button, 'true');\n }\n });\n } else {\n errorMessage.append('<p>' + value + '</p>');\n }\n });\n\n $('.wpstg--tab--active .wpstg-report-issue-form').prepend(errorMessage);\n } else {\n const successMessage = $('<div />').addClass('wpstg-message wpstg-success-message');\n successMessage.append('<p>Thanks for submitting your request! You should receive an auto reply mail with your ticket ID immediately for confirmation!<br><br>If you do not get that mail please contact us directly at <strong>support@wp-staging.com</strong></p>');\n\n $('.wpstg--tab--active .wpstg-report-issue-form').html(successMessage);\n $('.wpstg--tab--active .wpstg-success-message').append('<div style=\"float:right;margin-top:10px;\"><a id=\"wpstg-success-button\" href=\"#\" class=\"wpstg--red\">[X] CLOSE</a></div>');\n\n // Hide message\n setTimeout(function() {\n $('.wpstg--tab--active .wpstg-report-issue-form').removeClass('wpstg-report-active');\n }, 2000);\n }\n });\n }\n\n // Open/close actions drop down menu\n $(document).on('click', '.wpstg-dropdown>.wpstg-dropdown-toggler', function(e) {\n e.preventDefault();\n $(e.target).next('.wpstg-dropdown-menu').toggleClass('shown');\n\n $(e.target).find('.wpstg-caret').toggleClass('wpstg-caret-up');\n });\n\n $(document).on('click', '.wpstg-caret', function(e) {\n e.preventDefault();\n\n const toggler = $(e.target).closest('.wpstg-dropdown-toggler');\n\n if (toggler) {\n toggler.trigger('click');\n }\n });\n\n // Close action drop down menu if clicked anywhere outside\n document.addEventListener('click', function(event) {\n const isClickInside = event.target.closest('.wpstg-dropdown-toggler');\n if (!isClickInside) {\n const dropDown = document.getElementsByClassName('wpstg-dropdown-menu');\n for (let i = 0; i < dropDown.length; i++) {\n dropDown[i].classList.remove('shown');\n }\n $('.wpstg-caret').removeClass('wpstg-caret-up');\n }\n });\n\n // \"Event info\" for backup errors\n window.addEventListener('finishedProcessWithError', function(customEvent) {\n $.ajax({\n url: ajaxurl,\n type: 'POST',\n dataType: 'json',\n data: {\n 'action': 'wpstg_job_error',\n 'accessToken': wpstg.accessToken,\n 'nonce': wpstg.nonce,\n 'error_message': customEvent.detail.error,\n 'job_id': WPStagingCommon.getJobId(),\n },\n });\n });\n});\n"],"names":["qs","selector","document","querySelector","all","querySelectorAll","addEvent","parent","evt","handler","addEventListener","event","target","matches","closest","slideDown","element","duration","style","display","overflow","height","offsetHeight","transitionProperty","transitionDuration","setTimeout","window","removeProperty","slideUp","getNextSibling","sibling","nextElementSibling","getParents","result","parentElement","push","WpstgCloneStaging","pageWrapperId","wpstgObject","wpstg","pageWrapper","dom","enableButtonId","enableAction","notyf","Notyf","position","x","y","dismissible","types","type","background","icon","init","addEvents","sendRequest","action","fetch","ajaxUrl","method","credentials","body","URLSearchParams","accessToken","nonce","headers","then","response","ok","json","Promise","reject","data","success","location","reload","message","error","i18n","console","warn","WpstgDirectoryNavigation","directoryListingSelector","directoryListingContainer","dirCheckboxSelector","dirExpandSelector","unselectAllDirsSelector","selectDefaultDirsSelector","fetchChildrenAction","currentCheckboxElement","currentParentDiv","currentLoader","existingExcludes","excludedDirectories","isDefaultSelected","log","preventDefault","toggleDirExpand","unselectAll","selectDefault","parseExcludes","previousSibling","getAttribute","dirPath","value","isChecked","checked","forceDefault","setAttribute","dirContainer","createElement","classList","add","innerHTML","JSON","parse","directoryListing","appendChild","alert","getExcludedDirectories","forEach","isParentExcluded","exclude","isExcludeScanned","join","settings","directorySeparator","path","isParentAlreadyExcluded","dir","startsWith","getExtraDirectoriesRootOnly","extraDirectories","extraDirectoriesTextArea","extraCustomDirectories","split","concat","length","WpstgExcludeFilters","excludeFilterContainerSelector","excludeContainer","excludeTableBody","addFileSizeExclude","addFileExtExclude","addFileNameExclude","addDirNameExclude","clearExcludes","removeExclude","addExcludeRuleRow","templateName","excludeRowTemplate","clone","content","cloneNode","excludeRow","e","removeChild","trim","getExcludeFilters","globExcludes","sizeExcludes","sizeCompares","sizeSizes","sizeByte","Object","entries","key","sizeInput","extensionInputs","ext","cleanStringForGlob","fileNamesPos","fileNames","fileInput","fileName","dirNamesPos","dirNames","dirInput","dirName","filter","onlyUnique","index","self","indexOf","replace","WpstgModal","confirmAction","show","swalOptions","additionalParams","callback","wpstgSwal","fire","triggerConfirmAction","assign","onOver","onOut","pX","pY","mouseOver","focused","h","state","timer","options","sensitivity","interval","timeout","handleFocus","delay","el","clearTimeout","undefined","tracker","clientX","clientY","compare","Math","abs","opt","focusOptionChanged","addFocus","removeFocus","dispatchOver","removeEventListener","onMouseOver","dispatchOut","onMouseOut","dispatchFocus","onFocus","dispatchBlur","onBlur","remove","$","WPStagingCommon","continueErrorHandle","cache","elements","get","inArray","refresh","setJobId","jobId","localStorage","setItem","getJobId","getItem","listenTooltip","wpstgHoverIntent","visibility","isEmpty","obj","prop","hasOwnProperty","getSwalModal","isContentCentered","customClasses","defaultCustomClasses","confirmButton","cancelButton","actions","popup","customClass","buttonsStyling","reverseButtons","showClass","mixin","showSuccessModal","htmlContent","showConfirmButton","showCancelButton","cancelButtonText","title","html","showWarningModal","showErrorModal","getSwalContainer","getContainer","closeSwalModal","close","getDataFromWordPressResponse","Error","Array","shift","isLoading","hide","slugify","url","toString","toLowerCase","normalize","showAjaxFatalError","prependMessage","appendMessage","showError","WPStaging","warnIfClosingDuringProcess","handleFetchErrors","status","statusText","css","text","removeClass","resetErrors","ajax","dataType","showErrors","tryCount","incrementRatio","errorCallback","retryLimit","retryTimeout","parseInt","isNaN","ajaxurl","Date","now","xhr","textStatus","errorThrown","errorCode","statusCode","jQuery","WpstgResetModal","cloneID","workflowSelector","fetchExcludeSettingsAction","modalErrorAction","workflow","resetButtonClass","resetModalContainerClass","resetTabSelector","directoryNavigator","excludeFilters","isAllTablesChecked","resetModalContainer","toggleContent","selectDefaultTables","toggleTableSelection","toggleDirectoryNavigation","updateDirectorySelection","contentId","tabTriangle","isCollapsed","contains","transform","showModal","swalPromise","loadModal","fetchCloneExcludes","container","getAjaxLoader","width","focusConfirm","confirmButtonText","resetClone","job","errorModal","modal","renderError","getDirectoryNavigator","wpstgIcon","cbElement","subDirectories","parElem","i","children","multisitePattern","tblprefix","singleSitePattern","option","name","isMultisite","match","removeAttribute","WpstgCloningAdvanceSettings","baseContainerSelector","baseContainer","checkBoxSettingTogglerSelector","toggleSettings","WpstgMainMenu","activeTabClass","mainMenu","tabHeader","$this","targetElements","menuItems","contents","menuItem","targetElement","dispatchEvent","Event","that","isCancelled","isFinished","getLogs","time","executionTime","progressBar","cloneExcludeFilters","areAllTablesChecked","ajaxSpinner","returnValue","$workFlow","urlSpinner","devicePixelRatio","on","trigger","each","regex","is","attr","siblings","slideToggle","$directory","parents","find","addClass","getElementById","clearInterval","removeAttr","cloneDirectoryName","directoryName","slug","$targetDir","$targetUri","uri","val","validateTargetHost","after","cloneActions","the_domain","reg","test","confirm","append","cancelCloning","startCloning","cancelCloningUpdate","restart","$existingClones","animate","scrollTop","offset","top","deleteClone","jsonResponse","tryParseJson","checkDiskSpace","switchStep","resetModal","promise","dirNavigator","exclFilters","includedTables","getIncludedTables","excludeSizeRules","encodeURIComponent","sizes","excludeGlobRules","globs","stepButtons","focus","onlyUpdateMessage","verifyExternalDatabase","proceedCloning","loadOverview","getExcludedTables","excludedTables","databaseUser","databasePassword","databaseServer","databaseDatabase","error_type","render","checks","production","staging","getCloningData","getTime","cloneName","rules","databasePrefix","cloneDir","cloneHostname","emailsAllowed","networkClone","uploadsSymlinked","cleanPluginsThemes","cleanUploadsDir","sendCloningAjax","object","excludeOptions","tabs","$section","toggleClass","hasClass","deleteDir","logscroll","$div","scrollHeight","constructor","date","requiredSpace","errorMessage","convertSeconds","setInterval","seconds","setSeconds","toISOString","substr","start","processing","delayReq","last_msg","job_done","finish","$link1","$link","msg","cloneResetComplete","cloneUpdateComplete","percentage","toFixed","step","ready","sendIssueReport","button","forceSend","spinner","next","email","hosting_provider","syslog","terms","async","done","errors","isConfirmed","prepend","successMessage","toggler","isClickInside","dropDown","getElementsByClassName","customEvent","detail"],"mappings":"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