pathManager = $pathManager; $this->diffManager = $diffManager; } private function validSnapshotId(string $snapshotId) { return (preg_match("/^[a-zA-Z0-9-_]+$/", $snapshotId) == 1); } function snapshotExists(string $snapshotId): bool { if($this->validSnapshotId($snapshotId)) { $path = $this->pathManager->getSnapshotPath($snapshotId); return (file_exists($path) && is_dir($path)); } else { return false; } } function get(string $snapshotId) { if(self::snapshotExists($snapshotId)) { return new Snapshot($snapshotId); } else { return false; } } function getAll() { $iterator = new \FilesystemIterator($this->pathManager->getFilesystemSnapshotPath()); foreach ($iterator as $fileinfo) { if(!$fileinfo->isDir()) continue; yield new Snapshot($fileinfo->getFilename()); } } function getDiff(int $groupfolderId, string $snapshotId) { $groupfolderPath = $this->pathManager->getGroupFolderDirectory($groupfolderId); $snapshotPath = $this->pathManager->getGroupFolderSnapshotDirectory($groupfolderId, $snapshotId); return $this->diffManager->diffDirectories($snapshotPath, $groupfolderPath); } }