public static function _copy($source, $destination, $args, $depth = 0) { if ($depth > $args['max_depth']) { return true; } if (is_file($source)) { if (is_dir($destination) || preg_match('|/$|', $destination)) { $destination = preg_replace('|/+$|', '', $destination); $destination = "{$destination}/" . basename($source); } if (false === ITFileUtility::mkdir(dirname($destination), $args['folder_mode'])) { return false; } if (false === @copy($source, $destination)) { return false; } @chmod($destination, $args['file_mode']); return true; } else { if (is_dir($source) || preg_match('|/\\*$|', $source)) { if (preg_match('|/\\*$|', $source)) { $source = preg_replace('|/\\*$|', '', $source); } else { if (preg_match('|/$|', $destination)) { $destination = $destination . basename($source); } } $destination = preg_replace('|/$|', '', $destination); $files = array_diff(array_merge(glob($source . '/.*'), glob($source . '/*')), array($source . '/.', $source . '/..')); if (false === ITFileUtility::mkdir($destination, $args['folder_mode'])) { return false; } $result = true; foreach ((array) $files as $file) { if (false === ITFileUtility::_copy($file, "{$destination}/", $args, $depth + 1)) { $result = false; } } return $result; } } return false; }
function builder_create_child_theme($args = array()) { $default_args = array('child_directory' => false, 'overwrite_existing' => false, 'name' => false, 'source_directory' => get_template_directory(), 'source_type' => 'parent', 'parent_directory' => get_template_directory()); extract(ITUtility::merge_defaults($args, $default_args)); if (empty($name)) { $name = sprintf(__('%s - Custom', 'it-l10n-Builder-Paige'), $themes[basename($parent_directory)]->get('Name')); } $name = preg_replace('/^\\s+/', '', $name); $name = preg_replace('/\\s+$/', '', $name); $themes = wp_get_themes(); $names = array(); foreach ($themes as $theme) { $names[] = $theme->get('Name'); } if (in_array($name, $names)) { $count = 2; while (in_array("{$name} {$count}", $names)) { $count++; } $name = "{$name} {$count}"; } if (empty($child_directory)) { $child_directory = preg_replace('/[^a-z0-9]+/i', '-', ucfirst($name)); if (!preg_match('/^builder/i', $child_directory)) { $child_directory = "Builder-{$child_directory}"; } $child_directory = dirname($parent_directory) . "/{$child_directory}"; } if (is_dir($child_directory) && !$overwrite_existing) { $count = 2; while (is_dir("{$child_directory}-{$count}")) { $count++; } $child_directory .= "-{$count}"; } it_classes_load('it-file-utility.php'); if ('copy' == $source_type) { ITFileUtility::copy($source_directory, $child_directory, array('folder_mode' => 0775, 'file_mode' => 0664)); $stylesheet = file_get_contents("{$child_directory}/style.css"); $stylesheet = preg_replace('/(Theme Name:\\s*).*/i', "\$1{$name}", $stylesheet); file_put_contents("{$child_directory}/style.css", $stylesheet); } else { ITFileUtility::mkdir($child_directory, array('create_index' => false)); $files = array('style.css' => '', 'style-mobile.css' => '', 'style-tablet.css' => '', 'style-responsive.css' => '', 'rtl.css' => '', 'functions-child.php' => 'functions.php', 'screenshot.png' => '', 'screenshot.jpg' => '', 'screenshot.gif' => '', 'images' => '', 'lang' => '', 'plugin-features' => ''); $files = apply_filters('builder-filter-files-to-copy-to-child', $files); $stylesheet_data_headers = array('name' => 'Theme Name', 'theme_uri' => 'Theme URI', 'description' => 'Description', 'author' => 'Author', 'author_uri' => 'Author URI', 'version' => 'Version', 'license' => 'License', 'license_uri' => 'License URI', 'tags' => 'Tags', 'text_domain' => 'Text Domain', 'domain_path' => 'Domain Path', 'template' => 'Template'); $stylesheet_data = get_file_data("{$parent_directory}/style.css", $stylesheet_data_headers); $stylesheet_data['description'] = sprintf(__('This is a generated child theme for the %1$s theme. You should activate and modify this theme instead of %1$s. Doing so allows you to modify this child theme while allowing automatic upgrades for %1$s.', 'it-l10n-Builder-Paige'), $stylesheet_data['name']); $stylesheet_data['name'] = $name; $stylesheet_data['template'] = basename($parent_directory); $child_header = "/*\n"; foreach ($stylesheet_data_headers as $index => $header) { $child_header .= "{$header}: {$stylesheet_data[$index]}\n"; } $child_header .= '*/'; if (isset($files['style.css'])) { $stylesheet = file_get_contents("{$parent_directory}/style.css"); $stylesheet = preg_replace('|/\\*.*Theme Name:.*?\\*/|si', $child_header, $stylesheet); } else { $stylesheet = "{$child_header}\n\n\n@import url('../" . basename($parent_directory) . "/style.css');"; } file_put_contents("{$child_directory}/style.css", $stylesheet); foreach ($files as $source => $destination) { if ('style.css' == $source) { continue; } if (!file_exists("{$parent_directory}/{$source}")) { continue; } if (empty($destination)) { $destination = $source; } ITFileUtility::copy("{$parent_directory}/{$source}", "{$child_directory}/{$destination}", array('folder_mode' => 0775, 'file_mode' => 0664)); } } add_option('builder_manually_switched_theme', true); switch_theme(basename($child_directory)); }
function add_directory($dir, $dest = '') { if (empty($this->_path)) { return false; } if (is_file($dir)) { return $this->add_file($dir, $dest); } if (!is_dir($dir)) { return false; } it_classes_load('it-file-utility.php'); $dest = $this->_normalize_dest($dir, $dest); if (!is_dir($dest) && false === ITFileUtility::mkdir(dirname($dest))) { return false; } $files = array_merge(glob("{$dir}/*"), glob("{$dir}/.*")); foreach ((array) $files as $file) { if (in_array(basename($file), array('.', '..'))) { continue; } if (is_dir($file)) { $this->add_directory($file, "{$dest}/"); } else { if (is_file($file)) { $this->add_file($file, "{$dest}/"); } } } return true; }