PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backups, Restore, Migration & Clone / 4.11.2
WP STAGING – WordPress Backups, Restore, Migration & Clone v4.11.2
4.12.0 4.11.2 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 / Setup.php
wp-staging / Staging / Ajax Last commit date
Create 2 weeks ago Delete 2 weeks ago Reset 2 weeks ago Update 2 weeks ago AbstractAjaxPrepare.php 2 weeks ago Create.php 2 weeks ago Delete.php 2 weeks ago DirectoryChildren.php 2 weeks ago Listing.php 2 weeks ago Repair.php 2 weeks ago Reset.php 2 weeks ago Setup.php 2 weeks ago SizeCalculator.php 2 weeks ago StagingSiteDataChecker.php 2 weeks ago Update.php 2 weeks ago
Setup.php
188 lines
1 <?php
2
3 namespace WPStaging\Staging\Ajax;
4
5 use WPStaging\Backend\Modules\Jobs\Job;
6 use WPStaging\Core\WPStaging;
7 use WPStaging\Framework\Component\AbstractTemplateComponent;
8 use WPStaging\Framework\Facades\Sanitize;
9 use WPStaging\Framework\Job\Exception\ProcessLockedException;
10 use WPStaging\Framework\Job\ProcessLock;
11 use WPStaging\Framework\TemplateEngine\TemplateEngine;
12 use WPStaging\Staging\Dto\StagingSiteDto;
13 use WPStaging\Staging\Service\LegacyOptionsCache;
14 use WPStaging\Staging\Service\AbstractStagingSetup;
15 use WPStaging\Staging\Service\DirectoryScanner;
16 use WPStaging\Staging\Service\TableScanner;
17 use WPStaging\Staging\Sites;
18
19
20
21
22 class Setup extends AbstractTemplateComponent
23 {
24
25
26
27 private $stagingSetup;
28
29
30
31
32 private $directoryScanner;
33
34
35
36
37 private $tableScanner;
38
39
40
41
42 private $processLock;
43
44 public function __construct(TemplateEngine $templateEngine, AbstractStagingSetup $stagingSetup, DirectoryScanner $directoryScanner, TableScanner $tableScanner, ProcessLock $processLock)
45 {
46 parent::__construct($templateEngine);
47 $this->stagingSetup = $stagingSetup;
48 $this->processLock = $processLock;
49 $this->directoryScanner = $directoryScanner;
50 $this->tableScanner = $tableScanner;
51 }
52
53
54
55
56 public function ajaxSetup()
57 {
58 if (!$this->canRenderAjax()) {
59 return;
60 }
61
62 try {
63 $this->processLock->lockProcess();
64 } catch (ProcessLockedException $e) {
65 wp_send_json_error($e->getMessage(), $e->getCode());
66 }
67
68 $cloneId = $this->getValidatedCloneId();
69 $isReset = $this->getIsReset();
70 $isCreateModal = $this->getIsCreateModal();
71 $isUpdateModal = $this->getIsUpdateModal();
72 if (empty($cloneId)) {
73 $this->stagingSetup->initNewStagingSite();
74 $this->prepareNewStagingSiteDto();
75 } elseif ($isReset) {
76 $this->stagingSetup->initResetJob($this->getStagingSiteDtoByCloneId($cloneId));
77 } else {
78 $this->stagingSetup->initUpdateJob($this->getStagingSiteDtoByCloneId($cloneId));
79 }
80
81 $this->directoryScanner->setStagingSetup($this->stagingSetup);
82 $this->tableScanner->setStagingSetup($this->stagingSetup);
83 $this->maybePrepareLegacyOptionsCache($cloneId, $isReset);
84
85 $templateData = [
86 'stagingSetup' => $this->stagingSetup,
87 'stagingSiteDto' => $this->stagingSetup->getStagingSiteDto(),
88 'directoryScanner' => $this->directoryScanner,
89 'tableScanner' => $this->tableScanner,
90 ];
91
92 $modalSetupMode = '';
93 if ($isReset) {
94 $modalSetupMode = 'reset';
95 } elseif ($isUpdateModal && !empty($cloneId)) {
96 $modalSetupMode = 'update';
97 $this->directoryScanner->setShowFileDestination(false);
98 } elseif ($isCreateModal && empty($cloneId)) {
99 $modalSetupMode = 'create';
100 }
101
102 if ($modalSetupMode !== '') {
103 $templateData['setupMode'] = $modalSetupMode;
104 }
105
106 $result = $this->templateEngine->render('staging/setup.php', $templateData);
107
108 wp_send_json_success($result);
109 }
110
111 private function maybePrepareLegacyOptionsCache(string $cloneId, bool $isReset)
112 {
113 WPStaging::make(LegacyOptionsCache::class)->prepare($this->getLegacyMainJob($cloneId, $isReset), $cloneId);
114 }
115
116 private function prepareNewStagingSiteDto()
117 {
118 $cloneId = (string)time();
119 $stagingSiteDto = $this->stagingSetup->getStagingSiteDto();
120 $siteName = WPStaging::make(Sites::class)->generateStagingSiteName($cloneId);
121
122 $stagingSiteDto->setCloneId($cloneId);
123 $stagingSiteDto->setCloneName($siteName);
124 $stagingSiteDto->setDirectoryName($siteName);
125 }
126
127 private function getLegacyMainJob(string $cloneId, bool $isReset): string
128 {
129 if (empty($cloneId)) {
130 return Job::STAGING;
131 }
132
133 return $isReset ? Job::RESET : Job::UPDATE;
134 }
135
136 private function getValidatedCloneId(): string
137 {
138 if (empty($_POST['cloneId'])) {
139 return '';
140 }
141
142 return Sanitize::sanitizeString($_POST['cloneId']);
143 }
144
145 private function getIsReset(): bool
146 {
147 if (empty($_POST['reset'])) {
148 return false;
149 }
150
151 return Sanitize::sanitizeString($_POST['reset']) === 'true';
152 }
153
154 private function getIsCreateModal(): bool
155 {
156 if (empty($_POST['createModal'])) {
157 return false;
158 }
159
160 return Sanitize::sanitizeString($_POST['createModal']) === 'true';
161 }
162
163 private function getIsUpdateModal(): bool
164 {
165 if (empty($_POST['updateModal'])) {
166 return false;
167 }
168
169 return Sanitize::sanitizeString($_POST['updateModal']) === 'true';
170 }
171
172
173
174
175
176
177 private function getStagingSiteDtoByCloneId(string $cloneId): StagingSiteDto
178 {
179
180
181
182
183 $stagingSitesService = WPStaging::make(Sites::class);
184
185 return $stagingSitesService->getStagingSiteDtoByCloneId($cloneId);
186 }
187 }
188