/** * Copy files from one site to another * @since 0.2.0 * @param int $from_site_id duplicated site id * @param int $to_site_id new site id */ public static function copy_files($from_site_id, $to_site_id) { // Switch to Source site and get uploads info switch_to_blog($from_site_id); $wp_upload_info = wp_upload_dir(); $from_dir['path'] = str_replace(' ', "\\ ", trailingslashit($wp_upload_info['basedir'])); $from_site_id == MUCD_PRIMARY_SITE_ID ? $from_dir['exclude'] = MUCD_Option::get_primary_dir_exclude() : ($from_dir['exclude'] = array()); // Switch to Destination site and get uploads info switch_to_blog($to_site_id); $wp_upload_info = wp_upload_dir(); $to_dir = str_replace(' ', "\\ ", trailingslashit($wp_upload_info['basedir'])); restore_current_blog(); $dirs = array(); $dirs[] = array('from_dir_path' => $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']) && !MUCD_Files::init_dir($dir['to_dir_path'])) { MUCD_Files::mkdir_error($dir['to_dir_path']); } MUCD_Duplicate::write_log('Copy files from ' . $dir['from_dir_path'] . ' to ' . $dir['to_dir_path']); MUCD_Files::recurse_copy($dir['from_dir_path'], $dir['to_dir_path'], $dir['exclude_dirs']); } return true; }
/** * Save duplication options on network settings page * @since 0.2.0 */ public static function save_admin_network_option_page() { if (!empty($_POST) && isset($_POST[MUCD_SLUG_ACTION_SETTINGS])) { if (check_admin_referer('siteoptions')) { if (isset($_POST['duplicables'])) { if ($_POST['duplicables'] == 'all') { update_site_option('mucd_duplicables', 'all'); } else { update_site_option('mucd_duplicables', 'selected'); if (isset($_POST['duplicables-list'])) { MUCD_Option::set_duplicable_option($_POST['duplicables-list']); } else { MUCD_Option::set_duplicable_option(array()); } } } if (isset($_POST['mucd_copy_files']) && $_POST['mucd_copy_files'] == 'yes') { update_site_option('mucd_copy_files', 'yes'); } else { update_site_option('mucd_copy_files', 'no'); } if (isset($_POST['mucd_keep_users']) && $_POST['mucd_keep_users'] == 'yes') { update_site_option('mucd_keep_users', 'yes'); } else { update_site_option('mucd_keep_users', 'no'); } if (isset($_POST['mucd_log']) && $_POST['mucd_log'] == 'yes') { update_site_option('mucd_log', 'yes'); if (isset($_POST['mucd_log_dir'])) { update_site_option('mucd_log_dir', $_POST['mucd_log_dir']); } } else { update_site_option('mucd_log', 'no'); } } } }
/** * Updated tables from a site to another * @since 0.2.0 * @param int $from_site_id duplicated site id * @param int $to_site_id new site id */ public static function db_update_data($from_site_id, $to_site_id) { global $wpdb; $to_blog_prefix = $wpdb->get_blog_prefix($to_site_id); // Looking for uploads dirs switch_to_blog($from_site_id); $dir = wp_upload_dir(); $from_upload_url = str_replace(network_site_url(), get_bloginfo('url') . '/', $dir['baseurl']); $from_blog_url = get_blog_option($from_site_id, 'siteurl'); switch_to_blog($to_site_id); $dir = wp_upload_dir(); $to_upload_url = str_replace(network_site_url(), get_bloginfo('url') . '/', $dir['baseurl']); $to_blog_url = get_blog_option($to_site_id, 'siteurl'); restore_current_blog(); $tables = array(); // Bugfix : escape '_' , '%' and '/' character for mysql 'like' queries $to_blog_prefix_like = $wpdb->esc_like($to_blog_prefix); $results = MUCD_Data::do_sql_query('SHOW TABLES LIKE \'' . $to_blog_prefix_like . '%\'', 'col', FALSE); foreach ($results as $k => $v) { $tables[str_replace($to_blog_prefix, '', $v)] = array(); } foreach ($tables as $table => $col) { $results = MUCD_Data::do_sql_query('SHOW COLUMNS FROM `' . $to_blog_prefix . $table . '`', 'col', FALSE); $columns = array(); foreach ($results as $k => $v) { $columns[] = $v; } $tables[$table] = $columns; } $default_tables = MUCD_Option::get_fields_to_update(); foreach ($default_tables as $table => $field) { $tables[$table] = $field; } $from_site_prefix = $wpdb->get_blog_prefix($from_site_id); $to_site_prefix = $wpdb->get_blog_prefix($to_site_id); $string_to_replace = array($from_upload_url => $to_upload_url, $from_blog_url => $to_blog_url, $from_site_prefix => $to_site_prefix); $string_to_replace = apply_filters('mucd_string_to_replace', $string_to_replace, $from_site_id, $to_site_id); foreach ($tables as $table => $field) { foreach ($string_to_replace as $from_string => $to_string) { MUCD_Data::update($to_blog_prefix . $table, $field, $from_string, $to_string); } } }
/** * What to do on plugin uninstallation */ public static function uninstall() { MUCD_Option::delete_options(); }
echo MUCD_NETWORK_PAGE_DUPLICATE_LOG; ?> </th> <td> <label><input <?php checked(get_site_option('mucd_log', 'no'), 'yes'); ?> id="log-box" name="site[log]" type="checkbox" value="yes" /><?php echo MUCD_NETWORK_PAGE_DUPLICATE_LOG_TEXT_1; ?> </label> <br /><br /><label><?php echo MUCD_NETWORK_PAGE_DUPLICATE_LOG_TEXT_2; ?> : <input id="log-path" name="site[log-path]" type="text" class="large-text" value="<?php echo MUCD_Option::get_option_log_directory(); ?> "/></label> </td> </tr> </table> <p class="submit"> <input class='button button-primary' type='submit' value='<?php echo MUCD_NETWORK_PAGE_DUPLICATE_BUTTON_COPY; ?> ' /> </p> </form> </div>
/** * Get filtered tables to duplicate when duplicated site is primary site * @since 0.2.0 * @return array of string (filtered) */ public static function get_primary_tables_to_copy() { return apply_filters('mucd_default_primary_tables_to_copy', MUCD_Option::get_default_primary_tables_to_copy()); }