public function copyDirectory( $source, $destination, $recursive = TRUE )
    {
        $result = FALSE;

        if ( !file_exists( $destination ) )
        {
            $this->createDirectory( $destination );
        }

        try
        {
            foreach ( scandir( $source ) as $file )
            {
                if ( '.' === $file || '..' === $file )
                {
                    continue;
                }

                if ( is_dir( $source . DS . $file ) )
                {
                    $this->createDirectory( $destination . DS . $file );

                    if ( $recursive )
                    {
                        $this->copyDirectory( $source . DS . $file, $destination . DS . $file );
                    }
                }
                elseif ( is_file( $source . DS . $file ) )
                {
                    $this->copyFile( $source . DS . $file, $destination . DS . $file );
                }
            }

            $result = TRUE;
        }
        catch ( Exception $e )
        {
            $result = $e;
        }

        return $result;
    }