PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 4.9.2
WP STAGING – WordPress Backup, Restore, Migration & Clone v4.9.2
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 / Dto / Traits / RemoteUploadTrait.php
wp-staging / Backup / Dto / Traits Last commit date
IsExcludingTrait.php 2 years ago IsExportingTrait.php 2 years ago RemoteUploadTrait.php 1 month ago WithPluginsThemesMuPluginsTrait.php 3 years ago
RemoteUploadTrait.php
304 lines
1 <?php
2
3 namespace WPStaging\Backup\Dto\Traits;
4
5 use WPStaging\Backup\Storage\Providers;
6 use WPStaging\Core\WPStaging;
7 use WPStaging\Framework\Facades\Hooks;
8 use WPStaging\Framework\Job\Dto\JobDataDto;
9
10 /**
11 * Used for Remote Upload
12 */
13 trait RemoteUploadTrait
14 {
15 /** @var bool */
16 private $isAutomatedBackup = false;
17
18 /** @var float The size of all backup multipart files or single full backup file */
19 private $totalBackupSize = 0;
20
21 /** @var array */
22 private $filesToUpload = [];
23
24 /** @var array */
25 private $uploadedFiles = [];
26
27 /** @var array Selected storages for backup. */
28 private $storages;
29
30 /**
31 * @var array The meta data used by Remote Storages to help uploading.
32 * Stores ResumeURI for Google Drive
33 * Stores UploadId and UploadedParts Meta for Amazon S3
34 */
35 private $remoteStorageMeta;
36
37 /**
38 * True for stand alone upload job action.
39 * Always false when creating backups no matter if the backup is uploaded after that or not.
40 * @var bool
41 */
42 private $isOnlyUpload = false;
43
44 /** @var bool */
45 private $isMultipartBackup = false;
46
47 /** @var int */
48 private $maxMultipartBackupSize = 2147483647; // 2GB - 1 Byte
49
50 /** @var bool True if this backup should be repeated on a schedule, false if it should run only once. */
51 private $repeatBackupOnSchedule;
52
53 /**
54 * @return bool
55 */
56 public function getIsAutomatedBackup(): bool
57 {
58 return $this->isAutomatedBackup;
59 }
60
61 /**
62 * Hydrated dynamically.
63 *
64 * @param bool $isAutomatedBackup
65 * @return void
66 */
67 public function setIsAutomatedBackup(bool $isAutomatedBackup)
68 {
69 $this->isAutomatedBackup = $isAutomatedBackup;
70 }
71
72 /**
73 * @return float
74 */
75 public function getTotalBackupSize(): float
76 {
77 return $this->totalBackupSize;
78 }
79
80 /**
81 * @param float $totalBackupSize
82 * @return void
83 */
84 public function setTotalBackupSize(float $totalBackupSize)
85 {
86 $this->totalBackupSize = $totalBackupSize;
87 }
88
89 /**
90 * @return array
91 */
92 public function getFilesToUpload(): array
93 {
94 return $this->filesToUpload;
95 }
96
97 /**
98 * @param array $filesToUpload
99 * @return void
100 */
101 public function setFilesToUpload(array $filesToUpload = [])
102 {
103 $this->filesToUpload = $filesToUpload;
104 }
105
106 /**
107 * @return array
108 */
109 public function getUploadedFiles(): array
110 {
111 return $this->uploadedFiles;
112 }
113
114 /**
115 * @param array $uploadedFiles
116 * @return void
117 */
118 public function setUploadedFiles(array $uploadedFiles = [])
119 {
120 $this->uploadedFiles = $uploadedFiles;
121 }
122
123 /**
124 * @param string $uploadedFile
125 * @param float $fileSize
126 * @param string $fileHash
127 * @return void
128 */
129 public function setUploadedFile(string $uploadedFile, float $fileSize, string $fileHash = '')
130 {
131 $this->uploadedFiles[$uploadedFile] = [
132 'size' => $fileSize,
133 'hash' => $fileHash,
134 ];
135 }
136
137 /**
138 * @return bool
139 */
140 public function getIsOnlyUpload(): bool
141 {
142 return $this->isOnlyUpload;
143 }
144
145 /**
146 * @param bool isOnlyUpload
147 * @return void
148 */
149 public function setIsOnlyUpload(bool $isOnlyUpload)
150 {
151 $this->isOnlyUpload = $isOnlyUpload;
152 }
153
154 /**
155 * @return array
156 */
157 public function getStorages(): array
158 {
159 return $this->storages;
160 }
161
162 /**
163 * @param array|string $storages
164 */
165 public function setStorages($storages = [])
166 {
167 if (!is_array($storages) && !empty($storages)) {
168 $storages = json_decode($storages, true);
169 }
170
171 $this->storages = $storages;
172 }
173
174 /**
175 * @return array
176 */
177 public function getRemoteStorageMeta()
178 {
179 return $this->remoteStorageMeta;
180 }
181
182 /**
183 * @param array $remoteStorageMeta
184 * @return void
185 */
186 public function setRemoteStorageMeta($remoteStorageMeta = [])
187 {
188 $this->remoteStorageMeta = $remoteStorageMeta;
189 }
190
191 /** @return bool */
192 public function isLocalBackup(): bool
193 {
194 return in_array('localStorage', $this->getStorages());
195 }
196
197 /** @return bool */
198 public function isUploadToGoogleDrive(): bool
199 {
200 return in_array(Providers::IDENTIFIER_GOOGLE_DRIVE, $this->getStorages()) || in_array('googleDrive', $this->getStorages());
201 }
202
203 /** @return bool */
204 public function isUploadToAmazonS3(): bool
205 {
206 return in_array(Providers::IDENTIFIER_AMAZON_S3, $this->getStorages()) || in_array('amazonS3', $this->getStorages());
207 }
208
209 /** @return bool */
210 public function isUploadToSftp(): bool
211 {
212 return in_array(Providers::IDENTIFIER_SFTP, $this->getStorages());
213 }
214
215 /** @return bool */
216 public function isUploadToWasabi(): bool
217 {
218 return in_array(Providers::IDENTIFIER_WASABI_S3, $this->getStorages());
219 }
220
221 /** @return bool */
222 public function isUploadToDigitalOceanSpaces(): bool
223 {
224 return in_array(Providers::IDENTIFIER_DIGITALOCEAN_SPACES, $this->getStorages());
225 }
226
227 /** @return bool */
228 public function isUploadToGenericS3(): bool
229 {
230 return in_array(Providers::IDENTIFIER_GENERIC_S3, $this->getStorages());
231 }
232
233 /** @return bool */
234 public function isUploadToDropbox(): bool
235 {
236 return in_array(Providers::IDENTIFIER_DROPBOX, $this->getStorages());
237 }
238
239 /** @return bool */
240 public function isUploadToOneDrive(): bool
241 {
242 return in_array(Providers::IDENTIFIER_ONE_DRIVE, $this->getStorages());
243 }
244
245 /** @return bool */
246 public function isUploadToPCloud(): bool
247 {
248 return in_array(Providers::IDENTIFIER_PCLOUD, $this->getStorages());
249 }
250
251 /**
252 * @param bool $isMultipartBackup
253 */
254 public function setIsMultipartBackup($isMultipartBackup)
255 {
256 $this->isMultipartBackup = $isMultipartBackup;
257 }
258
259 /**
260 * @return bool
261 */
262 public function getIsMultipartBackup(): bool
263 {
264 // Do not remove this check, otherwise the backup process will fail with an error if multipart backup is enabled in the free version.
265 if (!WPStaging::isPro()) {
266 return false;
267 }
268
269 return Hooks::applyFilters(JobDataDto::FILTER_IS_MULTIPART_BACKUP, $this->isMultipartBackup);
270 }
271
272 /**
273 * @return int
274 */
275 public function getMaxMultipartBackupSize()
276 {
277 return Hooks::applyFilters(JobDataDto::FILTER_MAX_MULTIPART_BACKUP_SIZE, $this->maxMultipartBackupSize);
278 }
279
280 /**
281 * @param int $maxMultipartBackupSize
282 */
283 public function setMaxMultipartBackupSize($maxMultipartBackupSize)
284 {
285 $this->maxMultipartBackupSize = $maxMultipartBackupSize;
286 }
287
288 /**
289 * @return bool
290 */
291 public function getRepeatBackupOnSchedule()
292 {
293 return $this->repeatBackupOnSchedule;
294 }
295
296 /**
297 * @param bool $repeatBackupOnSchedule
298 */
299 public function setRepeatBackupOnSchedule($repeatBackupOnSchedule)
300 {
301 $this->repeatBackupOnSchedule = $repeatBackupOnSchedule;
302 }
303 }
304