diff --git a/lib/file-control.php b/lib/file-control.php index 86ef062..7e03819 100644 --- a/lib/file-control.php +++ b/lib/file-control.php @@ -54,13 +54,30 @@ if ($_GET['action']=="newFolder") { // If we're due to paste a new file... if ($_GET['action']=="paste") { - $location = $docRoot.strClean(str_replace("|","/",$_GET['location'])); - if (!$demoMode && is_writable($location)) { - copy($file, $location."/".basename($file)); + $source = $file; + $dest = $docRoot.strClean(str_replace("|","/",$_GET['location']))."/".basename($source); + if (!$demoMode && is_writable(dirname($dest))) { + if (is_dir($source)) { + if (!is_dir($dest)) { + mkdir($dest, 0705); + } + foreach ($iterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), + RecursiveIteratorIterator::SELF_FIRST) as $item + ) { + if ($item->isDir()) { + mkdir($dest.DIRECTORY_SEPARATOR.$iterator->getSubPathName(), 0705); + } else { + copy($item, $dest.DIRECTORY_SEPARATOR.$iterator->getSubPathName()); + } + } + } else { + copy($source, $dest); + } // Reload file manager - echo ''; + echo ''; } else { - echo ""; + echo ""; } echo ''; }