PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backups, Restore, Migration & Clone / 4.11.0
WP STAGING – WordPress Backups, Restore, Migration & Clone v4.11.0
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 / Ajax / Edit.php
wp-staging / Backup / Ajax Last commit date
Backup 1 day ago FileList 1 day ago Restore 1 day ago Backup.php 1 day ago BackupDownloader.php 1 day ago BackupSizeCalculator.php 1 day ago BackupSpeedIndex.php 1 day ago BaseFileList.php 1 day ago BaseListing.php 1 day ago Delete.php 1 day ago Edit.php 1 day ago Explore.php 1 day ago ExploreCache.php 1 day ago FileInfo.php 1 day ago FileList.php 1 day ago Listing.php 1 day ago Parts.php 1 day ago Restore.php 1 day ago ScheduleList.php 1 day ago Upload.php 1 day ago
Edit.php
174 lines
1 <?php
2
3 namespace WPStaging\Backup\Ajax;
4
5 use WPStaging\Backup\Entity\BackupMetadata;
6 use WPStaging\Backup\Service\BackupMetadataEditor;
7 use WPStaging\Backup\Service\BackupsFinder;
8 use WPStaging\Backup\Utils\BackupPathResolver;
9 use WPStaging\Framework\Component\AbstractTemplateComponent;
10 use WPStaging\Framework\Filesystem\FileObject;
11 use WPStaging\Framework\TemplateEngine\TemplateEngine;
12 use WPStaging\Framework\Utils\Sanitize;
13
14 class Edit extends AbstractTemplateComponent
15 {
16
17 private $backupMetadataEditor;
18
19
20 private $backupsFinder;
21
22
23 private $backupPathResolver;
24
25
26 private $sanitize;
27
28 public function __construct(
29 BackupsFinder $backupsFinder,
30 BackupMetadataEditor $backupMetadataEditor,
31 BackupPathResolver $backupPathResolver,
32 Sanitize $sanitize,
33 TemplateEngine $templateEngine
34 ) {
35 parent::__construct($templateEngine);
36 $this->backupsFinder = $backupsFinder;
37 $this->backupMetadataEditor = $backupMetadataEditor;
38 $this->backupPathResolver = $backupPathResolver;
39 $this->sanitize = $sanitize;
40 }
41
42 public function render()
43 {
44 if (!$this->canRenderAjax()) {
45 return;
46 }
47
48 $md5 = sanitize_text_field(isset($_POST['md5']) ? $_POST['md5'] : '');
49
50 $name = isset($_POST['name']) ? sanitize_text_field($_POST['name']) : 'Backup';
51
52 $name = substr(sanitize_text_field(html_entity_decode($name)), 0, 100);
53 $name = htmlentities($name, ENT_QUOTES);
54 $name = str_replace('\\\'', '\'', $name);
55 $name = str_replace('\\\"', '\"', $name);
56
57 $notes = isset($_POST['notes']) ? sanitize_textarea_field($_POST['notes']) : '';
58 $notes = substr($notes, 0, 1000);
59
60 if (strlen($md5) !== 32) {
61 wp_send_json([
62 'error' => true,
63 'message' => __('Invalid request.', 'wp-staging'),
64 ]);
65 }
66
67 $backups = $this->backupsFinder->findBackups();
68
69
70 if (empty($backups)) {
71 wp_send_json([
72 'error' => true,
73 'message' => __('No backups found, nothing to edit.', 'wp-staging'),
74 ]);
75 }
76
77
78 if (empty($name)) {
79 $name = __('Backup', 'wp-staging');
80 }
81
82
83 foreach ($backups as $backup) {
84 if ($md5 === md5($backup->getBasename())) {
85 try {
86 $file = new FileObject($backup->getPathname(), FileObject::MODE_APPEND_AND_READ);
87 $metaData = (new BackupMetadata())->hydrateByFile($file);
88
89 $increment = strlen($name) + strlen($notes);
90
91 if ($metaData->getIsMultipartBackup()) {
92 $this->updateBackupParts($metaData, $name, $notes, $increment, $backup->getFilename());
93 return;
94 }
95
96 $oldNote = $metaData->getNote();
97 $oldNoteLength = 2;
98 if ($oldNote !== null) {
99 $oldNoteLength = strlen($oldNote);
100 }
101
102 $backupSize = $metaData->getBackupSize();
103 $backupSize = $backupSize + $increment - strlen($metaData->getName()) - $oldNoteLength;
104
105 $metaData->setName($name);
106 $metaData->setNote($notes);
107 $metaData->setBackupSize($backupSize);
108
109 $this->backupMetadataEditor->setBackupMetadata($file, $metaData);
110 } catch (\Exception $e) {
111 wp_send_json([
112 'error' => true,
113
114 'message' => esc_html__($e->getMessage(), 'wp-staging'),
115 ]);
116 }
117 }
118 }
119
120 wp_send_json(true);
121 }
122
123
124
125
126
127
128
129
130 protected function updateBackupParts($metaData, $name, $notes, $incrementSize, $backupFilename)
131 {
132 $backupSize = 0;
133 $backupParts = [];
134 foreach ($metaData->getMultipartMetadata()->getBackupParts() as $part) {
135 $backupPart = $this->backupPathResolver->resolveBackupPartPath($part, $backupFilename);
136 if ($backupPart === '') {
137 continue;
138 }
139
140 $partFile = new FileObject($backupPart, FileObject::MODE_APPEND_AND_READ);
141 $partMetadata = (new BackupMetadata())->hydrateByFile($partFile);
142 $partSize = filesize($backupPart);
143
144 $oldNote = $partMetadata->getNote();
145 $oldNoteLength = 2;
146 if ($oldNote !== null) {
147 $oldNoteLength = strlen($oldNote);
148 }
149
150 $partSize = $partSize + $incrementSize - strlen($partMetadata->getName()) - $oldNoteLength;
151 $backupSize += $partSize;
152 $backupParts[] = [
153 'metadata' => $partMetadata,
154 'file' => $partFile,
155 'size' => $partSize,
156 ];
157 }
158
159 foreach ($backupParts as $part) {
160
161 $partMetadata = $part['metadata'];
162 $partMetadata->setName($name);
163 $partMetadata->setNote($notes);
164 $partMetadata->setBackupSize($backupSize);
165
166 $multipartMetadata = $partMetadata->getMultipartMetadata();
167 $multipartMetadata->setPartSize($part['size']);
168 $partMetadata->setMultipartMetadata($multipartMetadata);
169
170 $this->backupMetadataEditor->setBackupMetadata($part['file'], $partMetadata);
171 }
172 }
173 }
174