dataDir = $dataDir; $this->filesystem = new Filesystem(); } /** * @CloudRequired */ public function setDataDirectory(string $directory) { $this->dataDir = $directory; } public function getDataDirectory(string $subDirectory = null): string { $directory = $this->dataDir . '/'; if (!empty($subDirectory)) { $directory .= rtrim(ltrim($subDirectory, '/'), '/') . '/'; } $this->makeDir($directory); if (!is_dir($directory)) { throw new \Exception(sprintf('Directory "%s" does not exist', $directory)); } if (!is_writable($directory)) { throw new \Exception(sprintf('Directory "%s" is not writable', $directory)); } return $directory; } public function makeDir(string $directory) { $this->filesystem->mkdir($directory); } public function saveFile(string $filename, $data) { $this->filesystem->dumpFile($filename, $data); } public function removeFile(string $filename) { $this->filesystem->remove($filename); } public static function convertToAsciiFilename(string $filename): string { $filename = new UnicodeString($filename); $filename = (string) $filename->collapseWhitespace()->trim()->replace(PHP_EOL, '')->replace(' ', '_'); $dangerousCharacters = ['"', "'", '&', '/', '\\', '?', '#', '%']; $filename = str_replace($dangerousCharacters, ' ', $filename); $filename = new UnicodeString($filename); $filename = (string) $filename->collapseWhitespace()->replace(' ', '_')->ascii()->trim(); $filename = preg_replace('/[^a-zA-Z0-9\x7f-\xff\-]++/', ' ', $filename); $filename = str_replace(' ', '_', trim($filename)); return $filename; } }