$from_dir['path'], 'to_dir_path' => $to_dir, 'exclude_dirs' => $from_dir['exclude'], ); $dirs = apply_filters('mucd_copy_dirs', $dirs, $from_site_id, $to_site_id); foreach ($dirs as $dir) { if (isset($dir['to_dir_path']) && ! self::init_dir($dir['to_dir_path'])) { self::mkdir_error($dir['to_dir_path']); } MUCD_Duplicate::write_log('Copy files from ' . $dir['from_dir_path'] . ' to ' . $dir['to_dir_path']); self::recurse_copy($dir['from_dir_path'], $dir['to_dir_path'], $dir['exclude_dirs']); } return true; } /** * Copy files from one directory to another * * @since 0.2.0 * @param string $src source directory path * @param string $dst destination directory path * @param array $exclude_dirs directories to ignore */ public static function recurse_copy($src, $dst, $exclude_dirs = array()) { $src = rtrim($src, '/'); $dst = rtrim($dst, '/'); $dir = opendir($src); @mkdir($dst); while (false !== ($file = readdir($dir)) ) { if (($file != '.') && ($file != '..')) { if ( is_dir($src . '/' . $file) ) { if ( ! in_array($file, $exclude_dirs)) { self::recurse_copy($src . '/' . $file, $dst . '/' . $file); } } else { copy($src . '/' . $file, $dst . '/' . $file); } } } closedir($dir); } /** * Set a directory writable, creates it if not exists, or return false * * @since 0.2.0 * @param string $path the path * @return boolean True on success, False on failure */ public static function init_dir($path) { $e = error_reporting(0); if ( ! file_exists($path)) { return @mkdir($path, 0777); } elseif (is_dir($path)) { if ( ! is_writable($path)) { return chmod($path, 0777); } return true; } error_reporting($e); return false; } /** * Removes a directory and all its content * * @since 0.2.0 * @param string $dir the path */ public static function rrmdir($dir) { if (is_dir($dir)) { $objects = scandir($dir); foreach ($objects as $object) { if ($object != '.' && $object != '..') { if (filetype($dir . '/' . $object) == 'dir') { self::rrmdir($dir . '/' . $object); } else { unlink($dir . '/' . $object); } } } reset($objects); rmdir($dir); } } /** * Stop process on Creating dir Error, print and log error, removes the new blog * * @since 0.2.0 * @param string $dir_path the path */ public static function mkdir_error($dir_path) { $error_1 = 'ERROR DURING FILE COPY : CANNOT CREATE ' . $dir_path; MUCD_Duplicate::write_log($error_1); $error_2 = sprintf(MUCD_NETWORK_PAGE_DUPLICATE_COPY_FILE_ERROR, MUCD_Functions::get_primary_upload_dir()); MUCD_Duplicate::write_log($error_2); MUCD_Duplicate::write_log('Duplication interrupted on FILE COPY ERROR'); echo '
Duplication failed :

' . $error_1 . '

' . $error_2 . '

'; if ( $log_url = MUCD_Duplicate::log_url() ) { echo '' . MUCD_NETWORK_PAGE_DUPLICATE_VIEW_LOG . ''; } MUCD_Functions::remove_blog(self::$to_site_id); wp_die(); } } }