/** * Get WordPress table prefix by blog ID * * @param integer $blog_id Blog ID * @return string */ function ai1wm_table_prefix($blog_id = null) { global $wpdb; // Set base table prefix if (ai1wm_main_site($blog_id)) { return $wpdb->base_prefix; } return $wpdb->base_prefix . $blog_id . '_'; }
public static function execute($params) { global $wpdb; // Skip database import if (!is_file(ai1wm_database_path($params))) { return $params; } // Read blogs.json file $handle = fopen(ai1wm_blogs_path($params), 'r'); if ($handle === false) { throw new Ai1wm_Import_Exception('Unable to read blogs.json file'); } // Parse blogs.json file $blogs = fread($handle, filesize(ai1wm_blogs_path($params))); $blogs = json_decode($blogs); // Close handle fclose($handle); // Read package.json file $handle = fopen(ai1wm_package_path($params), 'r'); if ($handle === false) { throw new Ai1wm_Import_Exception('Unable to read package.json file'); } // Parse package.json file $config = fread($handle, filesize(ai1wm_package_path($params))); $config = json_decode($config); // Close handle fclose($handle); // Set progress Ai1wm_Status::info(__('Restoring database...', AI1WM_PLUGIN_NAME)); $old_values = array(); $new_values = array(); // Get Blog URLs foreach ($blogs as $blog) { // Get blogs dir Upload Path if (!in_array(sprintf("'%s'", trim(ai1wm_blogsdir_path($blog->Old->Id), '/')), $old_values)) { $old_values[] = sprintf("'%s'", trim(ai1wm_blogsdir_path($blog->Old->Id), '/')); $new_values[] = sprintf("'%s'", get_option('upload_path')); } // Get sites Upload Path if (!in_array(sprintf("'%s'", trim(ai1wm_uploads_path($blog->Old->Id), '/')), $old_values)) { $old_values[] = sprintf("'%s'", trim(ai1wm_uploads_path($blog->Old->Id), '/')); $new_values[] = sprintf("'%s'", get_option('upload_path')); } // Handle old and new sites dir style if (defined('UPLOADBLOGSDIR')) { // Get Upload Path if (!in_array(ai1wm_blogsdir_path($blog->Old->Id), $old_values)) { $old_values[] = ai1wm_blogsdir_path($blog->Old->Id); $new_values[] = ai1wm_blogsdir_path($blog->New->Id); } // Get escaped Upload Path if (!in_array(addslashes(addcslashes(ai1wm_blogsdir_path($blog->Old->Id), '\\/')), $old_values)) { $old_values[] = addslashes(addcslashes(ai1wm_blogsdir_path($blog->Old->Id), '\\/')); $new_values[] = addslashes(addcslashes(ai1wm_blogsdir_path($blog->New->Id), '\\/')); } // Get Upload Path if (!in_array(ai1wm_uploads_path($blog->Old->Id), $old_values)) { $old_values[] = ai1wm_uploads_path($blog->Old->Id); $new_values[] = ai1wm_blogsdir_path($blog->New->Id); } // Get escaped Upload Path if (!in_array(addslashes(addcslashes(ai1wm_uploads_path($blog->Old->Id), '\\/')), $old_values)) { $old_values[] = addslashes(addcslashes(ai1wm_uploads_path($blog->Old->Id), '\\/')); $new_values[] = addslashes(addcslashes(ai1wm_blogsdir_path($blog->New->Id), '\\/')); } } else { // Get Upload Path if (!in_array(ai1wm_blogsdir_path($blog->Old->Id), $old_values)) { $old_values[] = ai1wm_blogsdir_path($blog->Old->Id); $new_values[] = ai1wm_uploads_path($blog->New->Id); } // Get escaped Upload Path if (!in_array(addslashes(addcslashes(ai1wm_blogsdir_path($blog->Old->Id), '\\/')), $old_values)) { $old_values[] = addslashes(addcslashes(ai1wm_blogsdir_path($blog->Old->Id), '\\/')); $new_values[] = addslashes(addcslashes(ai1wm_uploads_path($blog->New->Id), '\\/')); } // Get Upload Path if (!in_array(ai1wm_uploads_path($blog->Old->Id), $old_values)) { $old_values[] = ai1wm_uploads_path($blog->Old->Id); $new_values[] = ai1wm_uploads_path($blog->New->Id); } // Get escaped Upload Path if (!in_array(addslashes(addcslashes(ai1wm_uploads_path($blog->Old->Id), '\\/')), $old_values)) { $old_values[] = addslashes(addcslashes(ai1wm_uploads_path($blog->Old->Id), '\\/')); $new_values[] = addslashes(addcslashes(ai1wm_uploads_path($blog->New->Id), '\\/')); } } // Get Site URL if (isset($blog->Old->SiteURL) && $blog->Old->SiteURL !== $blog->New->SiteURL) { // Get domain $old_domain = parse_url($blog->Old->SiteURL, PHP_URL_HOST); $new_domain = parse_url($blog->New->SiteURL, PHP_URL_HOST); // Get scheme $new_scheme = parse_url($blog->New->SiteURL, PHP_URL_SCHEME); // Replace Site URL scheme foreach (array('http', 'https') as $old_scheme) { // Add plain Site URL if (!in_array(set_url_scheme($blog->Old->SiteURL, $old_scheme), $old_values)) { $old_values[] = set_url_scheme($blog->Old->SiteURL, $old_scheme); $new_values[] = set_url_scheme($blog->New->SiteURL, $new_scheme); } // Add encoded Site URL if (!in_array(urlencode(set_url_scheme($blog->Old->SiteURL, $old_scheme)), $old_values)) { $old_values[] = urlencode(set_url_scheme($blog->Old->SiteURL, $old_scheme)); $new_values[] = urlencode(set_url_scheme($blog->New->SiteURL, $new_scheme)); } // Add escaped Site URL if (!in_array(addslashes(addcslashes(set_url_scheme($blog->Old->SiteURL, $old_scheme), '/')), $old_values)) { $old_values[] = addslashes(addcslashes(set_url_scheme($blog->Old->SiteURL, $old_scheme), '/')); $new_values[] = addslashes(addcslashes(set_url_scheme($blog->New->SiteURL, $new_scheme), '/')); } } // Add email if (!isset($config->NoEmailReplace)) { if (!in_array(sprintf("@%s", $old_domain), $old_values)) { $old_values[] = sprintf("@%s", $old_domain); $new_values[] = sprintf("@%s", $new_domain); } } } // Get Home URL if (isset($blog->Old->HomeURL) && $blog->Old->HomeURL !== $blog->New->HomeURL) { // Get domain $old_domain = parse_url($blog->Old->HomeURL, PHP_URL_HOST); $new_domain = parse_url($blog->New->HomeURL, PHP_URL_HOST); // Get scheme $new_scheme = parse_url($blog->New->HomeURL, PHP_URL_SCHEME); // Replace Home URL scheme foreach (array('http', 'https') as $old_scheme) { // Add plain Home URL if (!in_array(set_url_scheme($blog->Old->HomeURL, $old_scheme), $old_values)) { $old_values[] = set_url_scheme($blog->Old->HomeURL, $old_scheme); $new_values[] = set_url_scheme($blog->New->HomeURL, $new_scheme); } // Add encoded Home URL if (!in_array(urlencode(set_url_scheme($blog->Old->HomeURL, $old_scheme)), $old_values)) { $old_values[] = urlencode(set_url_scheme($blog->Old->HomeURL, $old_scheme)); $new_values[] = urlencode(set_url_scheme($blog->New->HomeURL, $new_scheme)); } // Add escaped Home URL if (!in_array(addslashes(addcslashes(set_url_scheme($blog->Old->HomeURL, $old_scheme), '/')), $old_values)) { $old_values[] = addslashes(addcslashes(set_url_scheme($blog->Old->HomeURL, $old_scheme), '/')); $new_values[] = addslashes(addcslashes(set_url_scheme($blog->New->HomeURL, $new_scheme), '/')); } } // Add email if (!isset($config->NoEmailReplace)) { if (!in_array(sprintf("@%s", $old_domain), $old_values)) { $old_values[] = sprintf("@%s", $old_domain); $new_values[] = sprintf("@%s", $new_domain); } } } } // Get Site URL if (isset($config->SiteURL) && $config->SiteURL !== site_url()) { // Get www URL if (stripos($config->SiteURL, '//www.') !== false) { $www = str_ireplace('//www.', '//', $config->SiteURL); } else { $www = str_ireplace('//', '//www.', $config->SiteURL); } // Replace Site URL foreach (array($config->SiteURL, $www) as $url) { // Get domain $old_domain = parse_url($url, PHP_URL_HOST); $new_domain = parse_url(site_url(), PHP_URL_HOST); // Get path $old_path = parse_url($url, PHP_URL_PATH); $new_path = parse_url(site_url(), PHP_URL_PATH); // Get scheme $new_scheme = parse_url(site_url(), PHP_URL_SCHEME); // Add domain and path if (!in_array(sprintf("%s','%s", $old_domain, trailingslashit($old_path)), $old_values)) { $old_values[] = sprintf("%s','%s", $old_domain, trailingslashit($old_path)); $new_values[] = sprintf("%s','%s", $new_domain, trailingslashit($new_path)); } // Replace Site URL scheme foreach (array('http', 'https') as $old_scheme) { // Add plain Site URL if (!in_array(set_url_scheme($url, $old_scheme), $old_values)) { $old_values[] = set_url_scheme($url, $old_scheme); $new_values[] = set_url_scheme(site_url(), $new_scheme); } // Add encoded Site URL if (!in_array(urlencode(set_url_scheme($url, $old_scheme)), $old_values)) { $old_values[] = urlencode(set_url_scheme($url, $old_scheme)); $new_values[] = urlencode(set_url_scheme(site_url(), $new_scheme)); } // Add escaped Site URL if (!in_array(addslashes(addcslashes(set_url_scheme($url, $old_scheme), '/')), $old_values)) { $old_values[] = addslashes(addcslashes(set_url_scheme($url, $old_scheme), '/')); $new_values[] = addslashes(addcslashes(set_url_scheme(site_url(), $new_scheme), '/')); } } // Add email if (!isset($config->NoEmailReplace)) { if (!in_array(sprintf("@%s", $old_domain), $old_values)) { $old_values[] = sprintf("@%s", $old_domain); $new_values[] = sprintf("@%s", $new_domain); } } } } // Get Home URL if (isset($config->HomeURL) && $config->HomeURL !== home_url()) { // Get www URL if (stripos($config->HomeURL, '//www.') !== false) { $www = str_ireplace('//www.', '//', $config->HomeURL); } else { $www = str_ireplace('//', '//www.', $config->HomeURL); } // Replace Home URL foreach (array($config->HomeURL, $www) as $url) { // Get domain $old_domain = parse_url($url, PHP_URL_HOST); $new_domain = parse_url(home_url(), PHP_URL_HOST); // Get path $old_path = parse_url($url, PHP_URL_PATH); $new_path = parse_url(home_url(), PHP_URL_PATH); // Get scheme $new_scheme = parse_url(home_url(), PHP_URL_SCHEME); // Add domain and path if (!in_array(sprintf("%s','%s", $old_domain, trailingslashit($old_path)), $old_values)) { $old_values[] = sprintf("%s','%s", $old_domain, trailingslashit($old_path)); $new_values[] = sprintf("%s','%s", $new_domain, trailingslashit($new_path)); } // Replace Home URL scheme foreach (array('http', 'https') as $old_scheme) { // Add plain Home URL if (!in_array(set_url_scheme($url, $old_scheme), $old_values)) { $old_values[] = set_url_scheme($url, $old_scheme); $new_values[] = set_url_scheme(home_url(), $new_scheme); } // Add encoded Home URL if (!in_array(urlencode(set_url_scheme($url, $old_scheme)), $old_values)) { $old_values[] = urlencode(set_url_scheme($url, $old_scheme)); $new_values[] = urlencode(set_url_scheme(home_url(), $new_scheme)); } // Add escaped Home URL if (!in_array(addslashes(addcslashes(set_url_scheme($url, $old_scheme), '/')), $old_values)) { $old_values[] = addslashes(addcslashes(set_url_scheme($url, $old_scheme), '/')); $new_values[] = addslashes(addcslashes(set_url_scheme(home_url(), $new_scheme), '/')); } } // Add email if (!isset($config->NoEmailReplace)) { if (!in_array(sprintf("@%s", $old_domain), $old_values)) { $old_values[] = sprintf("@%s", $old_domain); $new_values[] = sprintf("@%s", $new_domain); } } } } // Get WordPress Content if (isset($config->WordPress->Content) && $config->WordPress->Content !== WP_CONTENT_DIR) { // Add plain WordPress Content if (!in_array($config->WordPress->Content, $old_values)) { $old_values[] = $config->WordPress->Content; $new_values[] = WP_CONTENT_DIR; } // Add encoded WordPress Content if (!in_array(urlencode($config->WordPress->Content), $old_values)) { $old_values[] = urlencode($config->WordPress->Content); $new_values[] = urlencode(WP_CONTENT_DIR); } // Add escaped WordPress Content if (!in_array(addslashes(addcslashes($config->WordPress->Content, '\\/')), $old_values)) { $old_values[] = addslashes(addcslashes($config->WordPress->Content, '\\/')); $new_values[] = addslashes(addcslashes(WP_CONTENT_DIR, '\\/')); } } // Get URL IP $url_ip = get_option(AI1WM_URL_IP); // Get URL adapter $url_adapter = get_option(AI1WM_URL_ADAPTER); // Get secret key $secret_key = get_option(AI1WM_SECRET_KEY); // Get HTTP user $auth_user = get_option(AI1WM_AUTH_USER); // Get HTTP password $auth_password = get_option(AI1WM_AUTH_PASSWORD); // Get active ServMask plugins $active_servmask_plugins = ai1wm_active_servmask_plugins(); $old_prefixes = array(); $new_prefixes = array(); // Set main table prefixes $old_prefixes[] = ai1wm_servmask_prefix('mainsite'); $new_prefixes[] = ai1wm_table_prefix(); // Set site table prefixes foreach ($blogs as $blog) { if (ai1wm_main_site($blog->Old->Id) === false) { $old_prefixes[] = ai1wm_servmask_prefix($blog->Old->Id); $new_prefixes[] = ai1wm_table_prefix($blog->New->Id); } } // Set base table prefixes foreach ($blogs as $blog) { if (ai1wm_main_site($blog->Old->Id) === true) { $old_prefixes[] = ai1wm_servmask_prefix('basesite'); $new_prefixes[] = ai1wm_table_prefix($blog->New->Id); } } // Set site table prefixes foreach ($blogs as $blog) { if (ai1wm_main_site($blog->Old->Id) === true) { $old_prefixes[] = ai1wm_servmask_prefix($blog->Old->Id); $new_prefixes[] = ai1wm_table_prefix($blog->New->Id); } } // Set table prefixes $old_prefixes[] = ai1wm_servmask_prefix(); $new_prefixes[] = ai1wm_table_prefix(); // Get database client if (empty($wpdb->use_mysqli)) { $client = new Ai1wm_Database_Mysql($wpdb); } else { $client = new Ai1wm_Database_Mysqli($wpdb); } // Set database options $client->set_old_table_prefixes($old_prefixes)->set_new_table_prefixes($new_prefixes)->set_old_replace_values($old_values)->set_new_replace_values($new_values); // Flush database if ($version = $config->Plugin->Version) { if ($version !== 'develop' && version_compare($version, '4.10', '<')) { $client->set_include_table_prefixes(array(ai1wm_table_prefix())); $client->flush(); } } // Import database $client->import(ai1wm_database_path($params)); // Flush WP cache ai1wm_cache_flush(); // Activate plugins activate_plugins($active_servmask_plugins, null, is_multisite()); // Set the new URL IP update_option(AI1WM_URL_IP, $url_ip); // Set the new URL adapter update_option(AI1WM_URL_ADAPTER, $url_adapter); // Set the new secret key value update_option(AI1WM_SECRET_KEY, $secret_key); // Set the new HTTP user update_option(AI1WM_AUTH_USER, $auth_user); // Set the new HTTP password update_option(AI1WM_AUTH_PASSWORD, $auth_password); return $params; }
public static function execute($params) { // Read blogs.json file $handle = fopen(ai1wm_blogs_path($params), 'r'); if ($handle === false) { throw new Ai1wm_Import_Exception('Unable to read blogs.json file'); } // Parse blogs.json file $blogs = fread($handle, filesize(ai1wm_blogs_path($params))); $blogs = json_decode($blogs); // Close handle fclose($handle); // Set content offset if (isset($params['content_offset'])) { $content_offset = (int) $params['content_offset']; } else { $content_offset = 0; } // Set archive offset if (isset($params['archive_offset'])) { $archive_offset = (int) $params['archive_offset']; } else { $archive_offset = 0; } // Get total files if (isset($params['total_files'])) { $total_files = (int) $params['total_files']; } else { $total_files = 1; } // Get total size if (isset($params['total_size'])) { $total_size = (int) $params['total_size']; } else { $total_size = 1; } // Get processed files if (isset($params['processed'])) { $processed = (int) $params['processed']; } else { $processed = 0; } // What percent of files have we processed? $progress = (int) ($processed / $total_size * 100); // Set progress if (empty($content_offset)) { Ai1wm_Status::info(sprintf(__('Restoring %d files...<br />%d%% complete', AI1WM_PLUGIN_NAME), $total_files, $progress)); } // Start time $start = microtime(true); // Flag to hold if all files have been processed $completed = true; // Open the archive file for reading $archive = new Ai1wm_Extractor(ai1wm_archive_path($params)); // Set the file pointer to the one that we have saved $archive->set_file_pointer(null, $archive_offset); $old_paths = array(); $new_paths = array(); // Set extract paths foreach ($blogs as $blog) { if (ai1wm_main_site($blog->Old->Id) === false) { if (defined('UPLOADBLOGSDIR')) { // Old sites dir style $old_paths[] = ai1wm_files_path($blog->Old->Id); $new_paths[] = ai1wm_files_path($blogs->New->Id); // New sites dir style $old_paths[] = ai1wm_sites_path($blog->Old->Id); $new_paths[] = ai1wm_files_path($blog->New->Id); } else { // Old sites dir style $old_paths[] = ai1wm_files_path($blog->Old->Id); $new_paths[] = ai1wm_sites_path($blog->New->Id); // New sites dir style $old_paths[] = ai1wm_sites_path($blog->Old->Id); $new_paths[] = ai1wm_sites_path($blog->New->Id); } } } // Set base site extract paths (should be added at the end of arrays) foreach ($blogs as $blog) { if (ai1wm_main_site($blog->Old->Id) === true) { $old_paths[] = ai1wm_sites_path($blog->Old->Id); $new_paths[] = ai1wm_sites_path($blog->New->Id); } } while ($archive->has_not_reached_eof()) { try { // Exclude WordPress files $exclude_files = array_keys(_get_dropins()); // Exclude plugin files $exclude_files = array_merge($exclude_files, array(AI1WM_PACKAGE_NAME, AI1WM_MULTISITE_NAME, AI1WM_DATABASE_NAME, AI1WM_MUPLUGINS_NAME)); // Extract a file from archive to WP_CONTENT_DIR if ($current_offset = $archive->extract_one_file_to(WP_CONTENT_DIR, $exclude_files, $old_paths, $new_paths, $content_offset, 10)) { // What percent of files have we processed? if ($processed += $current_offset - $content_offset) { $progress = (int) ($processed / $total_size * 100); } // Set progress Ai1wm_Status::info(sprintf(__('Restoring %d files...<br />%d%% complete', AI1WM_PLUGIN_NAME), $total_files, $progress)); // Set content offset $params['content_offset'] = $current_offset; // Set archive offset $params['archive_offset'] = $archive_offset; // Set processed files $params['processed'] = $processed; // Set completed flag $params['completed'] = false; // Close the archive file $archive->close(); return $params; } // Increment processed files if (empty($content_offset)) { $processed += $archive->get_current_filesize(); } // Set content offset $content_offset = 0; // Set archive offset $archive_offset = $archive->get_file_pointer(); } catch (Exception $e) { // Skip bad file permissions } // More than 10 seconds have passed, break and do another request if (microtime(true) - $start > 10) { $completed = false; break; } } // Set content offset $params['content_offset'] = $content_offset; // Set archive offset $params['archive_offset'] = $archive_offset; // Set processed files $params['processed'] = $processed; // Set completed flag $params['completed'] = $completed; // Close the archive file $archive->close(); return $params; }