diff options
author | Louis Chemineau <louis@chmn.me> | 2022-11-29 16:26:54 +0100 |
---|---|---|
committer | Louis (Rebase PR Action) <artonge@users.noreply.github.com> | 2023-01-26 10:12:23 +0000 |
commit | 6a2f8bc5997a4b40baf8b967d6d8ccdf29735d3b (patch) | |
tree | 116fa4a442c97ac44839e14460b797d50f77e4f2 /apps/files_versions/lib/Versions | |
parent | 629de6c8c97f9a455944046737421b927b1e2d9b (diff) | |
download | nextcloud-server-6a2f8bc5997a4b40baf8b967d6d8ccdf29735d3b.tar.gz nextcloud-server-6a2f8bc5997a4b40baf8b967d6d8ccdf29735d3b.zip |
Allow to delete a version through DAV
Signed-off-by: Louis Chemineau <louis@chmn.me>
Diffstat (limited to 'apps/files_versions/lib/Versions')
3 files changed, 53 insertions, 1 deletions
diff --git a/apps/files_versions/lib/Versions/IDeletableVersionBackend.php b/apps/files_versions/lib/Versions/IDeletableVersionBackend.php new file mode 100644 index 00000000000..abb43d09d90 --- /dev/null +++ b/apps/files_versions/lib/Versions/IDeletableVersionBackend.php @@ -0,0 +1,36 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2022 Louis Chmn <louis@chmn.me> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +namespace OCA\Files_Versions\Versions; + +/** + * @since 26.0.0 + */ +interface IDeletableVersionBackend { + /** + * Delete a version. + * + * @since 26.0.0 + */ + public function deleteVersion(IVersion $version): void; +} diff --git a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php index 90c7cb930d5..d5ca4d2a11c 100644 --- a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php +++ b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php @@ -187,4 +187,13 @@ class LegacyVersionsBackend implements IVersionBackend, INameableVersionBackend, $versionEntity->setLabel($label ?? ''); $this->versionsMapper->update($versionEntity); } + + public function deleteVersion(IVersion $version): void { + Storage::deleteRevision($version->getVersionPath(), $version->getRevisionId()); + $versionEntity = $this->versionsMapper->findVersionForFileId( + $version->getSourceFile()->getId(), + $version->getTimestamp(), + ); + $this->versionsMapper->delete($versionEntity); + } } diff --git a/apps/files_versions/lib/Versions/VersionManager.php b/apps/files_versions/lib/Versions/VersionManager.php index 4787de7fdac..bfae0937df8 100644 --- a/apps/files_versions/lib/Versions/VersionManager.php +++ b/apps/files_versions/lib/Versions/VersionManager.php @@ -30,7 +30,7 @@ use OCP\Files\FileInfo; use OCP\Files\Storage\IStorage; use OCP\IUser; -class VersionManager implements IVersionManager, INameableVersionBackend { +class VersionManager implements IVersionManager, INameableVersionBackend, IDeletableVersionBackend { /** @var (IVersionBackend[])[] */ private $backends = []; @@ -117,4 +117,11 @@ class VersionManager implements IVersionManager, INameableVersionBackend { $backend->setVersionLabel($version, $label); } } + + public function deleteVersion(IVersion $version): void { + $backend = $this->getBackendForStorage($version->getSourceFile()->getStorage()); + if ($backend instanceof IDeletableVersionBackend) { + $backend->deleteVersion($version); + } + } } |