PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backups, Restore, Migration & Clone / 4.7.0
WP STAGING – WordPress Backups, Restore, Migration & Clone v4.7.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 / Backup / Job / Jobs / JobBackup.php
wp-staging / Backup / Job / Jobs Last commit date
JobBackup.php 7 months ago JobRestore.php 10 months ago
JobBackup.php
216 lines
1 <?php
2
3 /**
4 * Orchestrates the complete backup creation workflow for WordPress sites
5 *
6 * Manages the multi-stage backup process including database export, file scanning,
7 * archiving, validation, and cleanup across multiple HTTP requests.
8 */
9
10 namespace WPStaging\Backup\Job\Jobs;
11
12 use WPStaging\Backup\Dto\Job\JobBackupDataDto;
13 use WPStaging\Backup\Task\Tasks\JobBackup\BackupMuPluginsTask;
14 use WPStaging\Backup\Task\Tasks\JobBackup\BackupOtherFilesTask;
15 use WPStaging\Backup\Task\Tasks\JobBackup\BackupPluginsTask;
16 use WPStaging\Backup\Task\Tasks\JobBackup\BackupRequirementsCheckTask;
17 use WPStaging\Backup\Task\Tasks\JobBackup\CleanupValidationFilesTask;
18 use WPStaging\Backup\Task\Tasks\JobBackup\BackupThemesTask;
19 use WPStaging\Backup\Task\Tasks\JobBackup\BackupUploadsTask;
20 use WPStaging\Backup\Task\Tasks\JobBackup\DatabaseBackupTask;
21 use WPStaging\Backup\Task\Tasks\JobBackup\FilesystemScannerTask;
22 use WPStaging\Backup\Task\Tasks\JobBackup\FinalizeBackupTask;
23 use WPStaging\Backup\Task\Tasks\JobBackup\FinishBackupTask;
24 use WPStaging\Backup\Task\Tasks\JobBackup\IncludeDatabaseTask;
25 use WPStaging\Backup\Task\Tasks\JobBackup\RecalibrateFilesCountTask;
26 use WPStaging\Backup\Task\Tasks\JobBackup\ScheduleBackupTask;
27 use WPStaging\Backup\Task\Tasks\JobBackup\SignBackupTask;
28 use WPStaging\Backup\Task\Tasks\JobBackup\ValidateBackupTask;
29 use WPStaging\Framework\Job\AbstractJob;
30
31 class JobBackup extends AbstractJob
32 {
33 /** @var JobBackupDataDto $jobDataDto */
34 protected $jobDataDto;
35
36 /** @var array The array of tasks to execute for this job. Populated at init(). */
37 protected $tasks = [];
38
39 public static function getJobName()
40 {
41 return 'backup_job';
42 }
43
44 protected function getJobTasks()
45 {
46 return $this->tasks;
47 }
48
49 protected function execute()
50 {
51 //$this->startBenchmark();
52
53 try {
54 $response = $this->getResponse($this->currentTask->execute());
55 } catch (\Exception $e) {
56 $title = $this->currentTask->getTaskTitle();
57 if (empty($title)) {
58 $title = 'Backup job';
59 }
60
61 $this->currentTask->getLogger()->critical($title . ' failed! Error: ' . $e->getMessage());
62 $response = $this->getResponse($this->currentTask->generateResponse(false));
63 }
64
65 //$this->finishBenchmark(get_class($this->currentTask));
66
67 return $response;
68 }
69
70 /**
71 * @return void
72 */
73 protected function init()
74 {
75 $this->setRequirementTask();
76
77 if ($this->jobDataDto->getRepeatBackupOnSchedule() && !$this->jobDataDto->getIsCreateScheduleBackupNow()) {
78 $this->addSchedulerTask();
79 $this->addFinishBackupTask();
80 return;
81 }
82
83 if ($this->jobDataDto->getIsCreateBackupInBackground()) {
84 if ($this->jobDataDto->getRepeatBackupOnSchedule()) {
85 $this->addSchedulerTask();
86 }
87
88 $this->addFinishBackupTask();
89 return;
90 }
91
92 $this->setScannerTask();
93 if ($this->jobDataDto->getIsExportingOtherWpContentFiles()) {
94 $this->tasks[] = BackupOtherFilesTask::class;
95 }
96
97 if ($this->jobDataDto->getIsExportingPlugins()) {
98 $this->tasks[] = BackupPluginsTask::class;
99 }
100
101 if ($this->jobDataDto->getIsExportingMuPlugins()) {
102 $this->tasks[] = BackupMuPluginsTask::class;
103 }
104
105 if ($this->jobDataDto->getIsExportingThemes()) {
106 $this->tasks[] = BackupThemesTask::class;
107 }
108
109 if ($this->jobDataDto->getIsExportingUploads()) {
110 $this->tasks[] = BackupUploadsTask::class;
111 }
112
113 $this->addBackupOtherWpRootFilesTasks();
114
115 $this->addDatabaseTasks();
116
117 $this->addFinalizeTask();
118 if ($this->jobDataDto->getRepeatBackupOnSchedule()) {
119 $this->addSchedulerTask();
120 }
121
122 if (!$this->jobDataDto->getIsMultipartBackup()) {
123 $this->tasks[] = RecalibrateFilesCountTask::class;
124 }
125
126 /**
127 * Validation is a must to ensure the backup is valid.
128 * But it cannot be done during backup listing otherwise it will consume a lot of memory and may result in timeout.
129 * So validation should be done before signing of backup. So we can stop the process and keep backup invalid state in case if validation fails.
130 */
131 $this->addValidationTasks();
132
133 $this->tasks[] = SignBackupTask::class;
134
135 $this->addStoragesTasks();
136 $this->addFinishBackupTask();
137 }
138
139 protected function addDatabaseTasks()
140 {
141 if (!$this->jobDataDto->getIsExportingDatabase()) {
142 return;
143 }
144
145 $this->tasks[] = DatabaseBackupTask::class;
146 $this->tasks[] = IncludeDatabaseTask::class;
147 }
148
149 protected function addCompressionTask()
150 {
151 // Used in PRO version
152 }
153
154 /**
155 * @return void
156 */
157 protected function addStoragesTasks()
158 {
159 // Used in PRO version
160 }
161
162 /**
163 * @return void
164 */
165 protected function addBackupOtherWpRootFilesTasks()
166 {
167 // Used in PRO version
168 }
169
170 /**
171 * @return void
172 */
173 protected function addFinalizeTask()
174 {
175 $this->tasks[] = FinalizeBackupTask::class;
176 }
177
178 protected function addValidationTasks()
179 {
180 $this->tasks[] = ValidateBackupTask::class;
181 $this->tasks[] = CleanupValidationFilesTask::class;
182 }
183
184 /**
185 * @return void
186 */
187 protected function addFinishBackupTask()
188 {
189 $this->tasks[] = FinishBackupTask::class;
190 }
191
192 /**
193 * @return void
194 */
195 protected function addSchedulerTask()
196 {
197 $this->tasks[] = ScheduleBackupTask::class;
198 }
199
200 /**
201 * @return void
202 */
203 protected function setRequirementTask()
204 {
205 $this->tasks[] = BackupRequirementsCheckTask::class;
206 }
207
208 /**
209 * @return void
210 */
211 protected function setScannerTask()
212 {
213 $this->tasks[] = FilesystemScannerTask::class;
214 }
215 }
216