aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_versions/lib/Versions/VersionManager.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_versions/lib/Versions/VersionManager.php')
-rw-r--r--apps/files_versions/lib/Versions/VersionManager.php40
1 files changed, 28 insertions, 12 deletions
diff --git a/apps/files_versions/lib/Versions/VersionManager.php b/apps/files_versions/lib/Versions/VersionManager.php
index 757b6002710..99fa9f62bc8 100644
--- a/apps/files_versions/lib/Versions/VersionManager.php
+++ b/apps/files_versions/lib/Versions/VersionManager.php
@@ -27,15 +27,18 @@ use OCP\Files\Storage\IStorage;
use OCP\IUser;
class VersionManager implements IVersionManager {
- /** @var IVersionBackend[] */
+ /** @var (IVersionBackend[])[] */
private $backends = [];
public function registerBackend(string $storageType, IVersionBackend $backend) {
- $this->backends[$storageType] = $backend;
+ if (!isset($this->backends[$storageType])) {
+ $this->backends[$storageType] = [];
+ }
+ $this->backends[$storageType][] = $backend;
}
/**
- * @return IVersionBackend[]
+ * @return (IVersionBackend[])[]
*/
private function getBackends(): array {
return $this->backends;
@@ -49,20 +52,29 @@ class VersionManager implements IVersionManager {
public function getBackendForStorage(IStorage $storage): IVersionBackend {
$fullType = get_class($storage);
$backends = $this->getBackends();
- $foundType = array_reduce(array_keys($backends), function ($type, $registeredType) use ($storage) {
+
+ $foundType = '';
+ $foundBackend = null;
+
+ foreach ($backends as $type => $backendsForType) {
if (
- $storage->instanceOfStorage($registeredType) &&
- ($type === '' || is_subclass_of($registeredType, $type))
+ $storage->instanceOfStorage($type) &&
+ ($foundType === '' || is_subclass_of($type, $foundType))
) {
- return $registeredType;
- } else {
- return $type;
+ foreach ($backendsForType as $backend) {
+ /** @var IVersionBackend $backend */
+ if ($backend->useBackendForStorage($storage)) {
+ $foundBackend = $backend;
+ $foundType = $type;
+ }
+ }
}
- }, '');
- if ($foundType === '') {
+ }
+
+ if ($foundType === '' || $foundBackend === null) {
throw new BackendNotFoundException("Version backend for $fullType not found");
} else {
- return $backends[$foundType];
+ return $foundBackend;
}
}
@@ -90,4 +102,8 @@ class VersionManager implements IVersionManager {
$backend = $this->getBackendForStorage($sourceFile->getStorage());
return $backend->getVersionFile($user, $sourceFile, $revision);
}
+
+ public function useBackendForStorage(IStorage $storage): bool {
+ return false;
+ }
}