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 / BackupDeleter.php
wp-staging / Backup Last commit date
Ajax 1 day ago BackgroundProcessing 1 year ago Dto 2 weeks ago Entity 2 weeks ago Exceptions 1 year ago FileHeader 1 month ago Interfaces 7 months ago Job 2 months ago Request 1 year ago Service 1 day ago Storage 1 month ago Task 1 day ago Traits 10 months ago Utils 3 months ago AfterRestore.php 5 months ago BackupDeleter.php 2 months ago BackupDownload.php 8 months ago BackupFileIndex.php 1 year ago BackupGlitchReason.php 1 year ago BackupHeader.php 1 month ago BackupRepairer.php 7 months ago BackupRetentionHandler.php 1 month ago BackupScheduler.php 2 weeks ago BackupServiceProvider.php 2 months ago BackupValidator.php 7 months ago FileHeader.php 2 weeks ago FileHeaderAttribute.php 2 years ago WithBackupIdentifier.php 1 year ago
BackupDeleter.php
165 lines
1 <?php
2
3 namespace WPStaging\Backup;
4
5 use SplFileInfo;
6 use WPStaging\Backup\Entity\BackupMetadata;
7 use WPStaging\Backup\Service\BackupsFinder;
8
9 class BackupDeleter
10 {
11 /** @var BackupsFinder */
12 protected $backupsFinder;
13
14 /** @var BackupMetadata */
15 protected $backupMetadata;
16
17 /** @var array */
18 protected $errors = [];
19
20 /** @var bool */
21 protected $deletingAutomatedDatabaseOnlyBackup = false;
22
23 public function __construct(BackupsFinder $backupsFinder, BackupMetadata $backupMetadata)
24 {
25 $this->backupsFinder = $backupsFinder;
26 $this->backupMetadata = $backupMetadata;
27 }
28
29 /** @return array */
30 public function getErrors()
31 {
32 return $this->errors;
33 }
34
35 public function clearErrors()
36 {
37 $this->errors = [];
38 $this->deletingAutomatedDatabaseOnlyBackup = false;
39 }
40
41 /**
42 * Used by unit test tests/wpunit/Backup/BackupSchedulerTest.php
43 * @return void
44 */
45 public function deleteAllBackups()
46 {
47 $this->clearErrors();
48
49 foreach ($this->backupsFinder->findBackups() as $backup) {
50 $this->deleteBackup($backup);
51 }
52 }
53
54 public function deleteAllAutomatedDbOnlyBackups()
55 {
56 $this->clearErrors();
57 $this->deletingAutomatedDatabaseOnlyBackup = true;
58
59 foreach ($this->backupsFinder->findBackups() as $backup) {
60 $metadata = $this->backupMetadata->hydrateByFilePath($backup->getRealPath());
61 if (
62 $metadata->getIsAutomatedBackup() &&
63 $metadata->getIsExportingDatabase() &&
64 !$metadata->getIsExportingMuPlugins() &&
65 !$metadata->getIsExportingPlugins() &&
66 !$metadata->getIsExportingThemes() &&
67 !$metadata->getIsExportingUploads() &&
68 !$metadata->getIsExportingOtherWpContentFiles() &&
69 !$metadata->getIsExportingOtherWpRootFiles()
70 ) {
71 $this->deleteBackup($backup, $metadata);
72 }
73 }
74 }
75
76 /**
77 * Delete all automated uploads-only backups
78 * @return void
79 */
80 public function deleteAllAutomatedUploadsOnlyBackups()
81 {
82 $this->clearErrors();
83
84 foreach ($this->backupsFinder->findBackups() as $backup) {
85 $metadata = $this->backupMetadata->hydrateByFilePath($backup->getRealPath());
86 if (
87 $metadata->getIsAutomatedBackup() &&
88 $metadata->getIsExportingUploads() &&
89 !$metadata->getIsExportingDatabase() &&
90 !$metadata->getIsExportingMuPlugins() &&
91 !$metadata->getIsExportingPlugins() &&
92 !$metadata->getIsExportingThemes() &&
93 !$metadata->getIsExportingOtherWpContentFiles() &&
94 !$metadata->getIsExportingOtherWpRootFiles()
95 ) {
96 $this->deleteBackup($backup, $metadata);
97 }
98 }
99 }
100
101 /**
102 * Delete all automated push backups (database + uploads only)
103 * @return void
104 */
105 public function deleteAllAutomatedPushBackups()
106 {
107 $this->clearErrors();
108
109 foreach ($this->backupsFinder->findBackups() as $backup) {
110 $metadata = $this->backupMetadata->hydrateByFilePath($backup->getRealPath());
111 if (
112 $metadata->getIsAutomatedBackup() &&
113 $metadata->getIsExportingDatabase() &&
114 $metadata->getIsExportingUploads() &&
115 !$metadata->getIsExportingMuPlugins() &&
116 !$metadata->getIsExportingPlugins() &&
117 !$metadata->getIsExportingThemes() &&
118 !$metadata->getIsExportingOtherWpContentFiles() &&
119 !$metadata->getIsExportingOtherWpRootFiles()
120 ) {
121 $this->deleteBackup($backup, $metadata);
122 }
123 }
124 }
125
126 /**
127 * @param SplFileInfo $backup
128 * @param BackupMetadata $metadata
129 */
130 public function deleteBackup($backup, $metadata = null)
131 {
132 $additionalLog = '';
133 if ($this->deletingAutomatedDatabaseOnlyBackup) {
134 $additionalLog = 'database-only automated';
135 }
136
137 if ($metadata === null) {
138 $metadata = $this->backupMetadata->hydrateByFilePath($backup->getRealPath());
139 }
140
141 if (!$metadata->getIsMultipartBackup()) {
142 $deleted = unlink($backup->getRealPath());
143 if (!$deleted) {
144 $this->errors[] = sprintf(__('Unable to delete %s backup: %s', 'wp-staging'), $additionalLog, $backup->getFilename());
145 }
146
147 return;
148 }
149
150 $backupDirectory = $this->backupsFinder->getBackupsDirectory();
151 foreach ($metadata->getMultipartMetadata()->getBackupParts() as $part) {
152 $partPath = $backupDirectory . $part;
153 if (!file_exists($partPath)) {
154 continue;
155 }
156
157 $partName = str_replace(dirname($partPath), '', $partPath);
158 $deleted = unlink($partPath);
159 if (!$deleted) {
160 $this->errors[] = sprintf(__('Unable to delete %s split backup part: %s', 'wp-staging'), $additionalLog, $partName);
161 }
162 }
163 }
164 }
165