/** * Copy a folder. * * @param string $src The path to the source folder. * @param string $dest The path to the destination folder. * @param boolean $force Force copy. * * @return boolean True on success. * * @since 2.0 * @throws FilesystemException */ public static function copy($src, $dest, $force = false) { @set_time_limit(ini_get('max_execution_time')); // Eliminate trailing directory separators, if any $src = rtrim($src, '/\\'); $dest = rtrim($dest, '/\\'); if (!is_dir($src)) { throw new FilesystemException('Source folder not found', -1); } if (is_dir($dest) && !$force) { throw new FilesystemException('Destination folder exists', -1); } // Make sure the destination exists if (!static::create($dest)) { throw new FilesystemException('Cannot create destination folder', -1); } $sources = static::items($src, true, static::PATH_RELATIVE); // Walk through the directory copying files and recursing into folders. foreach ($sources as $file) { $srcFile = $src . '/' . $file; $destFile = $dest . '/' . $file; if (is_dir($srcFile)) { static::create($destFile); } elseif (is_file($srcFile)) { File::copy($srcFile, $destFile); } } return true; }
/** * copy * * @param string $src * @param string $dest * @param bool $force * * @return bool */ public static function copy($src, $dest, $force = false) { if (is_dir($src)) { Folder::copy($src, $dest, $force); } elseif (is_file($src)) { File::copy($src, $dest, $force); } return true; }
function recursiveCopy($filename, $initialfolder, $targetfolder) { $badfiles = ['vendor', 'node_modules', '.DS_Store', 'sftp-config.json', '.git', '.gitignore', 'build.sh']; foreach (Folder::items($initialfolder . '/' . $filename, false, Folder::PATH_BASENAME) as $item) { if (!in_array($item, $badfiles)) { if (is_dir($initialfolder . '/' . $filename . '/' . $item)) { recursiveCopy($item, $initialfolder . '/' . $filename, $targetfolder . '/' . $filename); } else { File::copy($initialfolder . '/' . $filename . '/' . $item, $targetfolder . '/' . $filename . '/' . $item); } } } }
/** * onBeforeRenderFiles * * @param Event $event * * @return void */ public function onBeforeRenderFiles(Event $event) { $this->data = array(); $files = new \DirectoryIterator(__DIR__ . '/../../resources'); $resources = new PriorityQueue(); $menus = new PriorityQueue(); /** @var \SplFileInfo $file */ foreach ($files as $file) { if ($file->isDir()) { continue; } $data = new Registry(); $data->loadFile($file->getPathname(), 'yaml'); $resName = $file->getBasename('.yml'); list($priority, $resName) = explode('-', $resName, 2); $data['alias'] = $resName; $resources->insert($data->toArray(), PHP_INT_MAX - $priority); $menus->insert(array('title' => $data['title'], 'alias' => $resName), PHP_INT_MAX - $priority); } // Store in cache $this->data['menus'] = $menus->toArray(); foreach ($resources as $data) { $this->data['resources'][$data['alias']] = $data; } // Auto create pages $categoryFolder = new \SplFileInfo(__DIR__ . '/../../entries/type'); if (is_dir($categoryFolder->getPathname())) { Folder::delete($categoryFolder->getPathname()); } Folder::create($categoryFolder->getPathname()); foreach ($this->data['resources'] as $catName => &$category) { File::copy(__DIR__ . '/../../layouts/tmpl/category.twig', __DIR__ . '/../../entries/type/' . $catName . '.twig'); // Auto create items page $itemFolder = new \SplFileInfo(__DIR__ . '/../../entries/type/' . $catName); if (is_dir($itemFolder->getPathname())) { Folder::delete($itemFolder->getPathname()); } Folder::create($itemFolder->getPathname()); foreach ($category['data'] as $itemAlias => &$item) { File::copy(__DIR__ . '/../../layouts/tmpl/item.twig', __DIR__ . '/../../entries/type/' . $catName . '/' . $itemAlias . '.twig'); $item['alias'] = $itemAlias; } } }
/** * Method to test copy(). * * @return void * * @covers Windwalker\Filesystem\File::copy */ public function testCopy() { File::copy(static::$dest . '/folder1/level2/file3', static::$dest . '/folder2/level2/file4'); $this->assertFileExists(static::$dest . '/folder2/level2/file4'); // Copy force File::copy(static::$dest . '/folder1/level2/file3', static::$dest . '/folder2/level2/file4', true); $this->assertFileExists(static::$dest . '/folder2/level2/file4'); }
/** * copy * * @param string $src * @param string $dest * * @return void */ protected function copyFile($src, $dest) { $this->out('<info>Create</info>: ' . $dest); if (is_file($dest)) { File::delete($dest); } File::copy($src, $dest); }