Bolt\Controller\Async\FilesystemManager::duplicateFile PHP Method

duplicateFile() public method

Duplicate a file on the server.
public duplicateFile ( Request $request ) : Symfony\Component\HttpFoundation\JsonResponse
$request Symfony\Component\HttpFoundation\Request
return Symfony\Component\HttpFoundation\JsonResponse
    public function duplicateFile(Request $request)
    {
        $namespace = $request->request->get('namespace');
        $filename = $request->request->get('filename');
        $filesystem = $this->filesystem()->getFilesystem($namespace);
        // If the filename doesn't have an extension $extensionPos will be equal to its length, so that $fileBase will
        // contain the entire filename. This also accounts for dotfiles.
        $extensionPos = strrpos($filename, '.') ?: strlen($filename);
        $fileBase = substr($filename, 0, $extensionPos) . '_copy';
        $fileExtension = substr($filename, $extensionPos);
        $n = 0;
        // Increase $n until filename_copy$n.ext doesn't exist
        do {
            $n++;
            $destination = $fileBase . $n . $fileExtension;
        } while ($filesystem->has($destination));
        try {
            $filesystem->copy($filename, $destination);
            return $this->json($destination, Response::HTTP_OK);
        } catch (IOException $e) {
            $msg = Trans::__('Unable to duplicate file: %FILE%', ['%FILE%' => $filename]);
            $this->logException($msg, $e);
            return $this->json($msg, Response::HTTP_INTERNAL_SERVER_ERROR);
        }
    }