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 | 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
- Backend/Administrator.php +61 -31
- Backend/Feedback/Feedback.php +4 -4
- Backend/Modules/Jobs/Cancel.php +6 -0
- Backend/Modules/Jobs/CancelUpdate.php +6 -0
- Backend/Modules/Jobs/Cloning.php +32 -8
- Backend/Modules/Jobs/Data.php +11 -199
- Backend/Modules/Jobs/Database.php +50 -25
- Backend/Modules/Jobs/Delete.php +31 -17
- Backend/Modules/Jobs/Files.php +2 -4
- Backend/Modules/Jobs/Finish.php +15 -0
- Backend/Modules/Jobs/Job.php +17 -3
- Backend/Modules/Jobs/SearchReplace.php +12 -11
- Backend/Modules/SystemInfo.php +20 -23
- Backend/Notices/DisabledItemsNotice.php +8 -2
- Backend/Notices/Notices.php +10 -1
- Backend/Notices/OutdatedWpStagingNotice.php +29 -3
- Backend/Notices/WarningsNotice.php +45 -0
- Backend/Optimizer/wp-staging-optimizer.php +1 -1
- Backend/Pluginmeta/Pluginmeta.php +1 -3
- Backend/Upgrade/Upgrade.php +2 -3
- Backend/views/_main/header.php +4 -2
- Backend/views/clone/ajax/delete-confirmation.php +15 -3
- Backend/views/clone/ajax/scan.php +11 -0
- Backend/views/clone/ajax/single-overview.php +1 -1
- Backend/views/clone/ajax/start.php +1 -1
- Backend/views/clone/index.php +1 -1
- Backend/views/notices/analytics-consent-failed.php +12 -0
- Backend/views/notices/analytics-consent-refused.php +5 -0
- Backend/views/notices/analytics-consent.php +18 -0
- Backend/views/notices/warnings-notice.php +25 -0
- Backend/views/settings/tabs/general.php +28 -2
- Backend/views/tools/tabs/system_info.php +8 -0
- Core/Utils/Htaccess.php +27 -0
- Core/Utils/Logger.php +3 -3
- Core/Utils/functions.php +1 -32
- Core/WPStaging.php +30 -0
- Framework/Adapter/Database/MysqlAdapter.php +1 -3
- Framework/Adapter/DateTimeAdapter.php +1 -1
- Framework/Adapter/Directory.php +1 -1
- Framework/Analytics/Actions/AnalyticsBackupCreate.php +40 -0
- Framework/Analytics/Actions/AnalyticsBackupRestore.php +33 -0
- Framework/Analytics/Actions/AnalyticsStagingCreate.php +56 -0
- Framework/Analytics/Actions/AnalyticsStagingPush.php +31 -0
- Framework/Analytics/Actions/AnalyticsStagingReset.php +26 -0
- Framework/Analytics/Actions/AnalyticsStagingUpdate.php +31 -0
- Framework/Analytics/AnalyticsCleanup.php +31 -0
- Framework/Analytics/AnalyticsConsent.php +212 -0
- Framework/Analytics/AnalyticsEventDto.php +209 -0
- Framework/Analytics/AnalyticsSender.php +163 -0
- Framework/Analytics/WithAnalyticsAPI.php +44 -0
- Framework/Analytics/WithAnalyticsSiteInfo.php +170 -0
- Framework/AnalyticsServiceProvider.php +91 -0
- Framework/Assets/Assets.php +25 -20
- Framework/BackgroundProcessing/Demo.php +2 -2
- Framework/BackgroundProcessing/Queue.php +9 -9
- Framework/BackgroundProcessing/WithQueueAwareness.php +1 -1
- Framework/CloningProcess/Data/CloningService.php +26 -1
- Framework/CloningProcess/Data/DBCloningService.php +29 -7
- Framework/CloningProcess/Data/DataCloningDto.php +46 -4
- Framework/CloningProcess/Data/Job.php +211 -0
- Framework/CloningProcess/Data/MultisiteAddNetworkAdministrators.php +5 -5
- Framework/CloningProcess/Data/MultisiteUpdateActivePlugins.php +0 -2
- Framework/CloningProcess/Data/ResetIndexPhp.php +0 -1
- Framework/CloningProcess/Data/UpdateSiteUrlAndHome.php +118 -8
- Framework/CloningProcess/Data/UpdateStagingOptionsTable.php +47 -8
- Framework/CloningProcess/Data/UpdateTablePrefix.php +13 -3
- Framework/CloningProcess/Data/UpdateWpConfigConstants.php +18 -6
- Framework/CloningProcess/Data/UpdateWpOptionsTablePrefix.php +50 -12
- Framework/CloningProcess/Database/DatabaseCloningService.php +132 -61
- Framework/CommonServiceProvider.php +15 -0
- Framework/DI/Container.php +1 -3
- Framework/Database/ExcludedTables.php +18 -5
- Framework/Database/QueryBuilder/SelectQuery.php +156 -0
- Framework/Database/SearchReplace.php +1 -1
- Framework/Filesystem/DebugLogReader.php +93 -0
- Framework/Filesystem/DirectoryListing.php +1 -3
- Framework/Filesystem/DiskWriteCheck.php +1 -1
- Framework/Filesystem/Filesystem.php +28 -3
- Framework/Filesystem/LogCleanup.php +7 -0
- Framework/Notices/DismissNotice.php +65 -0
- Framework/Queue/Storage/ArrayStorage.php +2 -2
- Framework/Rest/Rest.php +17 -4
- Framework/SiteInfo.php +6 -6
- Framework/Staging/CloneOptions.php +4 -3
- Framework/Staging/FirstRun.php +12 -3
- Framework/Staging/Sites.php +67 -12
- Framework/Support/ThirdParty/WordFence.php +18 -0
- Framework/Traits/DbRowsGeneratorTrait.php +3 -7
- Framework/Traits/DeveloperTimerTrait.php +1 -1
- Framework/Traits/HydrateTrait.php +1 -3
- Framework/Traits/MySQLRowsGeneratorTrait.php +7 -8
- Framework/Traits/ResourceTrait.php +1 -1
- Framework/Utils/Strings.php +17 -0
- Frontend/Frontend.php +1 -1
- Frontend/views/header.php +7 -0
- assets/css/dist/wpstg-admin.css +91 -5
- assets/css/dist/wpstg-admin.css.map +1 -1
- assets/css/dist/wpstg-admin.min.css +1 -1
- assets/css/dist/wpstg-admin.min.css.map +1 -1
- assets/js/dist/wpstg-admin-plugins.js +4 -4
- assets/js/dist/wpstg-admin-plugins.js.map +1 -1
- assets/js/dist/wpstg-admin-plugins.min.js +1 -1
- assets/js/dist/wpstg-admin-plugins.min.js.map +1 -1
- assets/js/dist/wpstg-admin.js +58 -21
- 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->
|
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 |
-
|
|
|
|
|
|
|
|
|
897 |
}
|
898 |
|
899 |
/**
|
@@ -954,25 +965,9 @@ class Administrator
|
|
954 |
return;
|
955 |
}
|
956 |
|
957 |
-
|
958 |
-
|
959 |
-
|
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'] :
|
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 |
-
|
69 |
-
|
70 |
|
71 |
if ($success) {
|
72 |
wp_die(1);
|
@@ -143,8 +143,8 @@ class Feedback
|
|
143 |
// wp_die( 1 );
|
144 |
// }
|
145 |
// wp_die( 0 );
|
146 |
-
//
|
147 |
-
//
|
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 |
-
|
|
|
|
|
|
|
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
|
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
|
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) ===
|
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
|
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
|
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 |
-
|
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 |
-
|
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
|
142 |
* @return void
|
143 |
*/
|
144 |
protected function calculateTotalSteps()
|
145 |
{
|
146 |
-
|
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 |
-
|
170 |
-
|
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 $
|
246 |
-
* @param string $
|
247 |
*/
|
248 |
-
private function copyData($
|
249 |
{
|
250 |
-
$this->databaseCloningService->copyData($
|
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($
|
260 |
{
|
261 |
-
$
|
262 |
-
|
|
|
263 |
|
264 |
if ($this->isMultisiteAndPro()) {
|
265 |
-
//
|
266 |
-
if ($this->databaseCloningService->removeDBPrefix($
|
267 |
-
$
|
268 |
}
|
269 |
-
//
|
270 |
-
if ($this->databaseCloningService->removeDBPrefix($
|
271 |
-
$
|
272 |
}
|
273 |
}
|
274 |
|
275 |
-
if (!$this->isCopyProcessStarted() && $this->shouldAbortIfTableExist($
|
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(), $
|
277 |
return true;
|
278 |
}
|
279 |
|
280 |
-
|
281 |
-
$this->databaseCloningService->dropTable($newTableName);
|
282 |
-
}
|
283 |
-
|
284 |
-
$this->setJob($newTableName);
|
285 |
|
286 |
-
if (!$this->startJob($
|
287 |
return true;
|
288 |
}
|
289 |
|
290 |
-
$this->copyData($
|
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->
|
337 |
return true;
|
338 |
}
|
339 |
|
340 |
try {
|
341 |
$this->options->job->total = 0;
|
342 |
-
$this->options->job->total = $this->databaseCloningService->createTable($
|
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 |
-
|
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
|
154 |
-
$this->returnException("Couldn't find clone name
|
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(
|
172 |
|
173 |
// Escape "_" to allow searching for that character
|
174 |
-
$prefix =
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
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. '
|
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"
|
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() &&
|
346 |
-
$this->log("Fatal Error: Trying to delete table
|
347 |
}
|
348 |
|
349 |
-
$this->wpdb->query("DROP 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
|
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 |
-
|
156 |
-
|
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 |
-
|
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
|
250 |
{
|
251 |
-
$
|
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 |
-
$
|
265 |
}
|
266 |
}
|
267 |
}
|
268 |
-
|
|
|
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->
|
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($
|
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
|
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 |
-
|
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
|
33 |
*/
|
34 |
private $helper;
|
35 |
|
@@ -145,7 +144,7 @@ class SystemInfo
|
|
145 |
|
146 |
$multisite = new Multisite();
|
147 |
|
148 |
-
$output = $this->info("Multisite:",
|
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(
|
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:",
|
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 |
-
|
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
|
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 (
|
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 ||
|
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
|
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("
|
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
|
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 |
-
|
78 |
-
|
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 |
-
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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("
|
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 |
-
|
|
|
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("
|
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") : ' ';
|
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')
|
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->
|
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
|
103 |
-
* @param
|
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" =>
|
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 |
-
|
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() .
|
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 |
-
*
|
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
|
48 |
* @return string
|
49 |
*/
|
50 |
public function getAssetsUrlWithVersion($assetsFile, $assetsVersion = '')
|
@@ -55,7 +56,7 @@ class Assets
|
|
55 |
}
|
56 |
|
57 |
/**
|
58 |
-
*
|
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 (
|
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
|
295 |
$limit = min($limit, $upperLimit);
|
296 |
|
297 |
-
// Do not allow
|
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 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
28 |
}
|
29 |
}
|
30 |
|
@@ -33,6 +33,6 @@ class Demo
|
|
33 |
$interval = mt_rand(0, 2);
|
34 |
sleep($interval);
|
35 |
$pid = getmypid();
|
36 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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(
|
76 |
}
|
77 |
|
78 |
/**
|
@@ -82,19 +89,29 @@ abstract class DBCloningService extends CloningService
|
|
82 |
*/
|
83 |
protected function updateDbOption($name, $value)
|
84 |
{
|
85 |
-
|
|
|
|
|
|
|
86 |
$this->dto->getStagingDb()->prepare(
|
87 |
-
"UPDATE {$this->dto->getPrefix()}
|
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}
|
111 |
$name
|
112 |
)
|
113 |
);
|
|
|
|
|
|
|
114 |
return $db->query(
|
115 |
$db->prepare(
|
116 |
-
"INSERT INTO {$prefix}
|
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()}
|
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
|
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
|
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 |
-
|
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 |
-
$
|
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 = $
|
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 .= $
|
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 |
-
$
|
66 |
$queries = array_filter(explode(";\n", $sqlbatch));
|
67 |
|
68 |
foreach ($queries as $query) {
|
69 |
-
if ($
|
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->
|
16 |
-
$this->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
return true;
|
18 |
}
|
19 |
|
20 |
-
$this->log("Updating siteurl and homeurl in {$this->dto->getPrefix()}
|
21 |
// Replace URLs
|
22 |
$result = $this->dto->getStagingDb()->query(
|
23 |
$this->dto->getStagingDb()->prepare(
|
24 |
-
"UPDATE {$this->dto->getPrefix()}
|
25 |
-
$
|
26 |
)
|
27 |
);
|
28 |
|
29 |
if ($result === false) {
|
30 |
-
throw new FatalException("Failed to update siteurl and homeurl in {$this->dto->getPrefix()}
|
31 |
-
}
|
32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
20 |
-
|
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 (
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
$
|
31 |
$prefix,
|
32 |
-
$
|
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__ . "
|
|
|
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 |
-
|
34 |
-
$
|
35 |
-
|
36 |
-
|
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 |
-
$
|
13 |
$stagingDb = $this->dto->getStagingDb();
|
14 |
$productionDb = $this->dto->getProductionDb();
|
15 |
-
$this->log("Updating db prefix in {$prefix}options.");
|
16 |
|
17 |
-
|
|
|
|
|
18 |
return true;
|
19 |
}
|
20 |
|
21 |
-
|
22 |
-
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 {$
|
46 |
-
$
|
47 |
-
$
|
48 |
-
$
|
49 |
)
|
50 |
);
|
51 |
|
52 |
if ($updateOptions === false) {
|
53 |
-
$this->log("Error on Query: UPDATE IGNORE {$
|
54 |
-
throw new FatalException("Failed to update db option_names in {$
|
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 $
|
29 |
-
* @param string $
|
30 |
* @param int $offset
|
31 |
* @param int $limit
|
32 |
*/
|
33 |
-
public function copyData($
|
34 |
{
|
35 |
-
|
36 |
-
$
|
37 |
-
|
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}
|
44 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
// Get data from production site
|
46 |
-
$rows = $this->dto->getProductionDb()->get_results(
|
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 `
|
56 |
if ($stagingDb->query($query) === false) {
|
57 |
-
$this->log("Can not insert data into table
|
58 |
-
$this->debugLog("Failed Query: "
|
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 |
-
$
|
72 |
-
|
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 |
-
*
|
|
|
|
|
84 |
*/
|
85 |
-
|
86 |
{
|
|
|
|
|
|
|
|
|
87 |
$stagingDb = $this->dto->getStagingDb();
|
88 |
-
$this->log("
|
89 |
$stagingDb->query("SET FOREIGN_KEY_CHECKS=0");
|
90 |
-
$stagingDb->query("DROP TABLE {$
|
91 |
$stagingDb->query("SET FOREIGN_KEY_CHECKS=1");
|
92 |
}
|
93 |
|
94 |
/**
|
95 |
-
* @param
|
96 |
-
*
|
97 |
-
* @return boolean
|
98 |
*/
|
99 |
-
|
100 |
{
|
101 |
-
$
|
102 |
-
if ($
|
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
|
112 |
-
* @
|
113 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
114 |
*/
|
115 |
-
public function createTable($
|
116 |
{
|
|
|
|
|
|
|
|
|
117 |
$stagingDb = $this->dto->getStagingDb();
|
118 |
$productionDb = $this->dto->getProductionDb();
|
119 |
if ($this->dto->isExternal()) {
|
120 |
-
$this->log("
|
121 |
-
$sql = $this->getTableCreateStatement($
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
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 |
-
|
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:
|
142 |
}
|
143 |
} else {
|
144 |
-
$this->log("Creating table
|
145 |
-
$
|
|
|
|
|
|
|
146 |
}
|
147 |
-
$rowsInTable = (int)$productionDb->get_var("SELECT COUNT(1) FROM
|
148 |
-
$this->log("Table
|
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
|
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 |
-
//
|
233 |
if ($this->removeDBBasePrefix($tableName) === 'users') {
|
234 |
$statement = str_replace($tableName, $productionDb->prefix . 'users', $statement);
|
235 |
}
|
236 |
-
//
|
237 |
if ($this->removeDBBasePrefix($tableName) === 'usermeta') {
|
238 |
$statement = str_replace($tableName, $productionDb->prefix . 'usermeta', $statement);
|
239 |
}
|
240 |
}
|
241 |
|
242 |
-
//
|
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 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
18 |
}
|
19 |
|
20 |
/**
|
@@ -23,7 +23,7 @@ class ArrayStorage implements StorageInterface
|
|
23 |
*/
|
24 |
public function setKey($key)
|
25 |
{
|
26 |
-
|
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,
|
26 |
$url .= 'index.php';
|
27 |
}
|
28 |
|
29 |
$url = add_query_arg('rest_route', '/', $url);
|
30 |
-
$restPath =
|
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 =
|
|
|
|
|
|
|
|
|
|
|
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
|
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->
|
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
|
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->
|
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->
|
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 (!(
|
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 (!(
|
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 (!(
|
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())->
|
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 |
-
(
|
|
|
|
|
|
|
|
|
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 |
-
*
|
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 |
-
$
|
73 |
|
74 |
// Early bail: No sites to migrate
|
75 |
-
if (empty($
|
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 = $
|
83 |
|
84 |
-
foreach ($
|
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(
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
141 |
$db->freeResult($result);
|
|
|
|
|
|
|
142 |
$jobDataDto->setLastQueryInfoJSON('');
|
143 |
|
144 |
if (!empty($db->error())) {
|
145 |
-
|
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 |
-
|
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 |
-
|
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())->
|
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:
|
1300 |
-
-moz-box-shadow:
|
1301 |
-
box-shadow:
|
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 |
-
|
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
|
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":"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"}
|
assets/js/dist/wpstg-admin-plugins.min.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
!function(){"use strict";jQuery(document).ready((function(e){
|
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
|
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
|
|
|
|
|
|
|
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 |
-
|
1770 |
-
|
1771 |
-
|
1772 |
-
|
1773 |
-
$(this).prop('selected', false);
|
1774 |
-
}
|
1775 |
}
|
1776 |
|
1777 |
-
if (
|
1778 |
-
|
1779 |
-
|
1780 |
-
|
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 =
|
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
|
2271 |
response.checks.forEach(function (x) {
|
2272 |
-
var icon = '<
|
2273 |
|
2274 |
if (x.production !== x.staging) {
|
2275 |
-
icon = '<
|
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
|
2281 |
-
WPStagingCommon.getSwalModal(
|
|
|
|
|
2282 |
title: 'Different Database Properties',
|
2283 |
icon: 'warning',
|
2284 |
html: render,
|
2285 |
width: '650px',
|
2286 |
focusConfirm: false,
|
2287 |
-
confirmButtonText: 'Proceed
|
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> </td><td><p id=\"wpstg_clone_hostname_error\" style=\"color: red;\"> 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> </td><td><p id=\"wpstg_clone_hostname_error\" style=\"color: red;\"> 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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
|