Commit f7e6b957 authored by Taylor Otwell's avatar Taylor Otwell

added function to recursively copy a directory.

parent c314c0ab
<?php namespace Laravel\CLI\Tasks\Bundle; <?php namespace Laravel\CLI\Tasks\Bundle;
use Laravel\File;
use Laravel\Bundle; use Laravel\Bundle;
use FilesystemIterator; use FilesystemIterator;
...@@ -28,41 +29,7 @@ class Publisher { ...@@ -28,41 +29,7 @@ class Publisher {
*/ */
protected function move($bundle, $source, $destination) protected function move($bundle, $source, $destination)
{ {
if ( ! is_dir($source)) return; File::copy_dir($source, $destination);
// First we need to create the destination directory if it doesn't
// already exists. This directory hosts all of the assets we copy
// from the installed bundle's source directory.
if ( ! is_dir($destination))
{
mkdir($destination);
}
$items = new FilesystemIterator($source, FilesystemIterator::SKIP_DOTS);
foreach ($items as $item)
{
// If the file system item is a directory, we will recurse the
// function, passing in the item directory. To get the proper
// destination path, we'll replace the root bundle asset
// directory with the root public asset directory.
if ($item->isDir())
{
$path = $item->getRealPath();
$recurse = str_replace($this->from($bundle), $this->to($bundle), $path);
$this->move($bundle, $path, $recurse);
}
// If the file system item is an actual file, we can copy the
// file from the bundle asset directory to the public asset
// directory. The "copy" method will overwrite any existing
// files with the same name.
else
{
copy($item->getRealPath(), $destination.DS.$item->getBasename());
}
}
} }
/** /**
......
<?php namespace Laravel; use Closure; <?php namespace Laravel; use Closure, FilesystemIterator;
class File { class File {
...@@ -170,4 +170,51 @@ class File { ...@@ -170,4 +170,51 @@ class File {
return false; return false;
} }
/**
* Recursively copy directory contents to another directory.
*
* @param string $source
* @param string $destination
* @return void
*/
public static function copy_dir($source, $destination)
{
if ( ! is_dir($source)) return;
// First we need to create the destination directory if it doesn't
// already exists. This directory hosts all of the assets we copy
// from the installed bundle's source directory.
if ( ! is_dir($destination))
{
mkdir($destination);
}
$items = new FilesystemIterator($source, FilesystemIterator::SKIP_DOTS);
foreach ($items as $item)
{
$location = $destination.DS.$item->getBasename();
// If the file system item is a directory, we will recurse the
// function, passing in the item directory. To get the proper
// destination path, we'll add the basename of the source to
// to the destination directory.
if ($item->isDir())
{
$path = $item->getRealPath();
static::copy_dir($path, $location);
}
// If the file system item is an actual file, we can copy the
// file from the bundle asset directory to the public asset
// directory. The "copy" method will overwrite any existing
// files with the same name.
else
{
copy($item->getRealPath(), $location);
}
}
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment