config = $config; $this->groupfolderFolderManager = $manager; $this->rootFolder = $rootFolder; } public function getFilesystemSnapshotPath() { return self::FILESYSTEM_SNAPSHOT_PATH; } // Nextcloud general public function getDataDirectory() { return $this->config->getSystemValue("datadirectory"); } private function getRootFolderStorageId(): ?int { return $this->rootFolder->getMountPoint()->getNumericStorageId(); } // Snapshots public function getSnapshotPath(string $snapshotId) { return realpath(self::FILESYSTEM_SNAPSHOT_PATH . DIRECTORY_SEPARATOR . $snapshotId . DIRECTORY_SEPARATOR); } public function convertToSnapshotPath(string $filesystemPath, string $snapshotId) { $filesystemPath = realpath($filesystemPath); if(!str_starts_with($filesystemPath, self::FILESYSTEM_ROOT_PATH)) { return false; } return str_replace(self::FILESYSTEM_ROOT_PATH, $this->getSnapshotPath($snapshotId) . DIRECTORY_SEPARATOR, $filesystemPath); } // Groupfolders private function checkIfGroupfolderExists(int $groupfolderId): bool { $storageId = $this->getRootFolderStorageId(); if ($storageId === null) { return "storage Id null"; } $folder = $this->groupfolderFolderManager->getFolder($groupfolderId, $storageId); if ($folder === false) { return "Folder does not exist"; } return true; } public function getGroupFolderDirectory(int $groupfolderId) { $folderExistsCheck = $this->checkIfGroupfolderExists($groupfolderId); if(!$folderExistsCheck) { return $folderExistsCheck; } return realpath($this->getDataDirectory() . DIRECTORY_SEPARATOR . "__groupfolders" . DIRECTORY_SEPARATOR . $groupfolderId . DIRECTORY_SEPARATOR); } public function getGroupFolderSnapshotDirectory(int $groupfolderId, string $snapshotId) { return $this->convertToSnapshotPath($this->getGroupFolderDirectory($groupfolderId), $snapshotId); } }