aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_versions/lib/Versions
diff options
context:
space:
mode:
authorLouis Chemineau <louis@chmn.me>2022-11-29 16:26:54 +0100
committerLouis (Rebase PR Action) <artonge@users.noreply.github.com>2023-01-26 10:12:23 +0000
commit6a2f8bc5997a4b40baf8b967d6d8ccdf29735d3b (patch)
tree116fa4a442c97ac44839e14460b797d50f77e4f2 /apps/files_versions/lib/Versions
parent629de6c8c97f9a455944046737421b927b1e2d9b (diff)
downloadnextcloud-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')
-rw-r--r--apps/files_versions/lib/Versions/IDeletableVersionBackend.php36
-rw-r--r--apps/files_versions/lib/Versions/LegacyVersionsBackend.php9
-rw-r--r--apps/files_versions/lib/Versions/VersionManager.php9
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);
+ }
+ }
}