PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backups, Restore, Migration & Clone / 4.11.2
WP STAGING – WordPress Backups, Restore, Migration & Clone v4.11.2
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 / Backup / Job / Jobs / JobBackup.php
wp-staging / Backup / Job / Jobs Last commit date
JobBackup.php 4 days ago JobRestore.php 1 week ago
JobBackup.php
328 lines
1 <?php
2
3
4
5
6
7
8
9
10 namespace WPStaging\Backup\Job\Jobs;
11
12 use WPStaging\Backup\Dto\Job\JobBackupDataDto;
13 use WPStaging\Backup\Exceptions\MissingBackupPartException;
14 use WPStaging\Backup\Exceptions\NothingToBackupException;
15 use WPStaging\Backup\Task\Tasks\JobBackup\BackupMuPluginsTask;
16 use WPStaging\Backup\Task\Tasks\JobBackup\BackupOtherFilesTask;
17 use WPStaging\Backup\Task\Tasks\JobBackup\BackupOtherWpRootFilesTask;
18 use WPStaging\Backup\Task\Tasks\JobBackup\BackupPluginsTask;
19 use WPStaging\Backup\Task\Tasks\JobBackup\BackupRequirementsCheckTask;
20 use WPStaging\Backup\Task\Tasks\JobBackup\CleanupValidationFilesTask;
21 use WPStaging\Backup\Task\Tasks\JobBackup\BackupThemesTask;
22 use WPStaging\Backup\Task\Tasks\JobBackup\BackupUploadsTask;
23 use WPStaging\Backup\Task\Tasks\JobBackup\DatabaseBackupTask;
24 use WPStaging\Backup\Task\Tasks\JobBackup\FilesystemScannerTask;
25 use WPStaging\Backup\Task\Tasks\JobBackup\FinalizeBackupTask;
26 use WPStaging\Backup\Task\Tasks\JobBackup\FinishBackupTask;
27 use WPStaging\Backup\Task\Tasks\JobBackup\IncludeDatabaseTask;
28 use WPStaging\Backup\Task\Tasks\JobBackup\RecalibrateFilesCountTask;
29 use WPStaging\Backup\Task\Tasks\JobBackup\ScheduleBackupTask;
30 use WPStaging\Backup\Task\Tasks\JobBackup\SignBackupTask;
31 use WPStaging\Backup\Task\Tasks\JobBackup\ValidateBackupTask;
32 use WPStaging\Core\WPStaging;
33 use WPStaging\Framework\Analytics\Actions\AnalyticsBackupCreate;
34 use WPStaging\Framework\Job\Dto\TaskResponseDto;
35 use WPStaging\Framework\Job\AbstractJob;
36 use WPStaging\Framework\Job\JobTransientCache;
37 use WPStaging\Framework\Job\Task\AbstractTask;
38
39 class JobBackup extends AbstractJob
40 {
41
42 const JOB_STATUS_NOTHING_TO_BACKUP = 'JOB_NOTHING_TO_BACKUP';
43
44
45 protected $jobDataDto;
46
47
48 protected $tasks = [];
49
50 public static function getJobName()
51 {
52 return 'backup_job';
53 }
54
55 protected function getJobTasks()
56 {
57 return $this->tasks;
58 }
59
60 protected function execute()
61 {
62
63
64 try {
65 $response = $this->getResponse($this->currentTask->execute());
66 } catch (MissingBackupPartException $e) {
67 return $this->getMissingPartFailResponse($e);
68 } catch (NothingToBackupException $e) {
69 return $this->getNothingToBackupResponse($e->getMessage());
70 } catch (\Exception $e) {
71 $this->currentTask->getLogger()->critical($this->getCurrentTaskTitle() . ' failed! Error: ' . $e->getMessage());
72 $response = $this->getResponse($this->currentTask->generateResponse(false));
73 }
74
75
76
77 return $response;
78 }
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 protected function getMissingPartFailResponse(MissingBackupPartException $e): TaskResponseDto
95 {
96 $this->currentTask->getLogger()->critical($this->getCurrentTaskTitle() . ' failed! Error: ' . $e->getMessage());
97
98 return $this->getJobFailResponse($e->getMessage());
99 }
100
101
102
103
104 protected function getCurrentTaskTitle(): string
105 {
106 $title = $this->currentTask->getTaskTitle();
107
108 return empty($title) ? 'Backup job' : $title;
109 }
110
111
112
113
114
115
116
117
118 protected function getNothingToBackupResponse(string $message): TaskResponseDto
119 {
120 $this->currentTask->getLogger()->warning($message);
121
122 WPStaging::make(AnalyticsBackupCreate::class)->enqueueFinishEvent($this->jobDataDto->getId(), $this->jobDataDto);
123
124 $this->jobDataDto->setFinished(true);
125 $this->persistJobDataDto();
126
127 $response = $this->currentTask->generateResponse(false);
128 $response->setIsRunning(false);
129 $response->setJobStatus(self::JOB_STATUS_NOTHING_TO_BACKUP);
130
131 $this->jobTransientCache->failJob(esc_html__('Nothing to backup', 'wp-staging'), $message, JobTransientCache::SEVERITY_NOTICE);
132
133 return $response;
134 }
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166 protected function getResponse(TaskResponseDto $response)
167 {
168 $response = parent::getResponse($response);
169
170 if ($this->currentTask instanceof AbstractTask) {
171 $this->jobDataDto->setQueueOffset($this->currentTask->getQueue()->getOffset());
172 $this->currentTask->persistStepsDto();
173 }
174
175 $this->persistJobDataDto();
176
177 return $response;
178 }
179
180
181
182
183 protected function init()
184 {
185 $this->setRequirementTask();
186
187 if ($this->jobDataDto->getRepeatBackupOnSchedule() && !$this->jobDataDto->getIsCreateScheduleBackupNow()) {
188 $this->addSchedulerTask();
189 $this->addFinishBackupTask();
190 return;
191 }
192
193 if ($this->jobDataDto->getIsCreateBackupInBackground()) {
194 if ($this->jobDataDto->getRepeatBackupOnSchedule()) {
195 $this->addSchedulerTask();
196 }
197
198 $this->addFinishBackupTask();
199 return;
200 }
201
202 $this->setScannerTask();
203 if ($this->jobDataDto->getIsExportingOtherWpContentFiles()) {
204 $this->tasks[] = BackupOtherFilesTask::class;
205 }
206
207 if ($this->jobDataDto->getIsExportingPlugins()) {
208 $this->tasks[] = BackupPluginsTask::class;
209 }
210
211 if ($this->jobDataDto->getIsExportingMuPlugins()) {
212 $this->tasks[] = BackupMuPluginsTask::class;
213 }
214
215 if ($this->jobDataDto->getIsExportingThemes()) {
216 $this->tasks[] = BackupThemesTask::class;
217 }
218
219 if ($this->jobDataDto->getIsExportingUploads()) {
220 $this->tasks[] = BackupUploadsTask::class;
221 }
222
223 $this->addBackupOtherWpRootFilesTasks();
224
225 $this->addDatabaseTasks();
226
227 $this->addFinalizeTask();
228 if ($this->jobDataDto->getRepeatBackupOnSchedule()) {
229 $this->addSchedulerTask();
230 }
231
232 if (!$this->jobDataDto->getIsMultipartBackup()) {
233 $this->tasks[] = RecalibrateFilesCountTask::class;
234 }
235
236
237
238
239
240
241 $this->addValidationTasks();
242
243 $this->tasks[] = SignBackupTask::class;
244
245 $this->addStoragesTasks();
246 $this->addFinishBackupTask();
247 }
248
249 protected function addDatabaseTasks()
250 {
251 if (!$this->jobDataDto->getIsExportingDatabase()) {
252 return;
253 }
254
255 $this->tasks[] = DatabaseBackupTask::class;
256 $this->tasks[] = IncludeDatabaseTask::class;
257 }
258
259 protected function addCompressionTask()
260 {
261
262 }
263
264
265
266
267 protected function addStoragesTasks()
268 {
269
270 }
271
272
273
274
275 protected function addBackupOtherWpRootFilesTasks()
276 {
277 if ($this->jobDataDto->getIsExportingOtherWpRootFiles()) {
278 $this->tasks[] = BackupOtherWpRootFilesTask::class;
279 }
280 }
281
282
283
284
285 protected function addFinalizeTask()
286 {
287 $this->tasks[] = FinalizeBackupTask::class;
288 }
289
290 protected function addValidationTasks()
291 {
292 $this->tasks[] = ValidateBackupTask::class;
293 $this->tasks[] = CleanupValidationFilesTask::class;
294 }
295
296
297
298
299 protected function addFinishBackupTask()
300 {
301 $this->tasks[] = FinishBackupTask::class;
302 }
303
304
305
306
307 protected function addSchedulerTask()
308 {
309 $this->tasks[] = ScheduleBackupTask::class;
310 }
311
312
313
314
315 protected function setRequirementTask()
316 {
317 $this->tasks[] = BackupRequirementsCheckTask::class;
318 }
319
320
321
322
323 protected function setScannerTask()
324 {
325 $this->tasks[] = FilesystemScannerTask::class;
326 }
327 }
328