diff options
Diffstat (limited to 'apps/files_versions/lib/Versions/VersionManager.php')
-rw-r--r-- | apps/files_versions/lib/Versions/VersionManager.php | 40 |
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; + } } |