PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backups, Restore, Migration & Clone / trunk
WP STAGING – WordPress Backups, Restore, Migration & Clone vtrunk
4.11.1 4.11.0 4.10.0 4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Staging / Ajax / AbstractAjaxPrepare.php
wp-staging / Staging / Ajax Last commit date
Create 1 week ago Delete 1 week ago Reset 1 week ago Update 1 week ago AbstractAjaxPrepare.php 1 week ago Create.php 1 week ago Delete.php 1 week ago DirectoryChildren.php 1 week ago Listing.php 1 week ago Repair.php 1 week ago Reset.php 1 week ago Setup.php 1 week ago SizeCalculator.php 1 week ago StagingSiteDataChecker.php 1 week ago Update.php 1 week ago
AbstractAjaxPrepare.php
131 lines
1 <?php
2
3 namespace WPStaging\Staging\Ajax;
4
5 use WPStaging\Core\WPStaging;
6 use WPStaging\Framework\Facades\Sanitize;
7 use WPStaging\Framework\Filesystem\Scanning\ScanConst;
8 use WPStaging\Framework\Job\Ajax\PrepareJob;
9 use WPStaging\Framework\Job\Exception\ProcessLockedException;
10 use WPStaging\Staging\Service\StagingEngine;
11
12 abstract class AbstractAjaxPrepare extends PrepareJob
13 {
14
15 protected $postDataKey = '';
16
17
18
19
20
21 public function ajaxPrepare($data)
22 {
23 if (!$this->auth->isAuthenticatedRequest()) {
24 wp_send_json_error(null, 401);
25 }
26
27 if (!WPStaging::make(StagingEngine::class)->isNextGenEnabled()) {
28 wp_send_json_error(esc_html__('The Next-Gen engine is temporarily unavailable. Please use the Classic engine.', 'wp-staging'), 403);
29 }
30
31 try {
32 $this->processLock->lockProcess();
33 } catch (ProcessLockedException $e) {
34 wp_send_json_error($e->getMessage(), $e->getCode());
35 }
36
37 $response = $this->prepare($data);
38
39 if ($response instanceof \WP_Error) {
40 wp_send_json_error($response->get_error_message(), $response->get_error_code());
41 }
42
43 wp_send_json_success();
44 }
45
46
47
48
49
50 public function prepare($data = null)
51 {
52 if (empty($this->postDataKey)) {
53 return new \WP_Error(400, "Invalid request. Missing 'postDataKey' in Ajax Prepare class.");
54 }
55
56 if (empty($data) && array_key_exists($this->postDataKey, $_POST)) {
57 $data = $this->postDataSanitization();
58 }
59
60 try {
61 $sanitizedData = $this->setupInitialJob($data);
62 } catch (\Exception $e) {
63 return new \WP_Error(400, $e->getMessage());
64 }
65
66 $this->deleteSseCacheFiles();
67
68 return $sanitizedData;
69 }
70
71
72
73
74
75 public function validateAndSanitizeData($data): array
76 {
77 if (empty($data)) {
78 $data = [];
79 }
80
81
82 foreach ($data as $key => $value) {
83 if ($value === '' || $value === null) {
84 unset($data[$key]);
85 }
86 }
87
88 $defaults = $this->getDefaults();
89
90 $data = wp_parse_args($data, $defaults);
91
92
93 $data = array_intersect_key($data, $defaults);
94
95
96 foreach ($defaults as $expectedKey => $value) {
97 if (!array_key_exists($expectedKey, $data)) {
98 throw new \UnexpectedValueException("Invalid request. Missing '$expectedKey'.");
99 }
100 }
101
102 $data = $this->additionalSanitization($data);
103
104 return $data;
105 }
106
107 abstract protected function getDefaults(): array;
108
109 abstract protected function postDataSanitization(): array;
110
111 abstract protected function additionalSanitization(array $data): array;
112
113 protected function parseAndSanitizeTables(string $tables): array
114 {
115 $tables = $tables === '' ? [] : explode(ScanConst::DIRECTORIES_SEPARATOR, $tables);
116
117 return array_map('sanitize_text_field', $tables);
118 }
119
120 protected function parseAndSanitizeDirectories(string $directories): array
121 {
122
123
124 $directories = $directories === '' ? [] : explode(ScanConst::DIRECTORIES_SEPARATOR, wpstg_urldecode(Sanitize::sanitizeString($directories)));
125
126 return array_map('sanitize_text_field', $directories);
127 }
128
129 abstract protected function prepareStagingSiteDto();
130 }
131