public static function resolve($url) { // Reset IP address and adapter delete_option(AI1WM_URL_IP); delete_option(AI1WM_URL_ADAPTER); // Set secret $secret_key = get_option(AI1WM_SECRET_KEY); // Set host $host = parse_url($url, PHP_URL_HOST); // Set server IP address if (!empty($_SERVER['SERVER_ADDR'])) { $server = $_SERVER['SERVER_ADDR']; } else { if (!empty($_SERVER['LOCAL_ADDR'])) { $server = $_SERVER['LOCAL_ADDR']; } else { $server = '127.0.0.1'; } } // Set local IP address $local = gethostbyname($host); // HTTP resolve foreach (array('stream', 'curl') as $adapter) { foreach (array($server, $local, $host) as $ip) { // Add IPv6 support if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { $ip = "[{$ip}]"; } // HTTP request Ai1wm_Http::request($url, $ip, $adapter, array('secret_key' => $secret_key, 'url_ip' => $ip, 'url_adapter' => $adapter)); // HTTP response for ($i = 0; $i < 5; $i++, sleep(1)) { // Flush WP cache ai1wm_cache_flush(); // Is valid adapter? if (get_option(AI1WM_URL_IP) && get_option(AI1WM_URL_ADAPTER)) { return; } } } } // No connection throw new Ai1wm_Http_Exception(__('There was a problem while reaching your server.<br />' . 'Contact <a href="mailto:support@servmask.com">support@servmask.com</a> for assistance.', AI1WM_PLUGIN_NAME)); }
public static function resolve($url) { // Reset IP address and transport layer delete_option(AI1WM_URL_IP); delete_option(AI1WM_URL_TRANSPORT); // Set secret $secret_key = get_option(AI1WM_SECRET_KEY); // Set scheme $scheme = parse_url($url, PHP_URL_SCHEME); // Set host name $host = parse_url($url, PHP_URL_HOST); // Set server IP address if (!empty($_SERVER['SERVER_ADDR'])) { $ip = $_SERVER['SERVER_ADDR']; } else { if (!empty($_SERVER['LOCAL_ADDR'])) { $ip = $_SERVER['LOCAL_ADDR']; } else { $ip = '127.0.0.1'; } } // Set domain IP address $domain = gethostbyname($host); // HTTP resolve foreach (array('ai1wm', 'curl') as $transport) { foreach (array($ip, $domain, $host) as $ip) { // Set transport Ai1wm_Http::$transports = array($transport); // HTTP request Ai1wm_Http::request($url, $ip, array('secret_key' => $secret_key, 'url_ip' => $ip, 'url_transport' => $transport)); // HTTP response for ($i = 0; $i < 5; $i++, sleep(1)) { // Flush WP cache ai1wm_cache_flush(); // Is valid transport layer? if (get_option(AI1WM_URL_IP) && get_option(AI1WM_URL_TRANSPORT)) { return; } } } } // No connection throw new Ai1wm_Http_Exception(__('There was a problem while reaching your server.<br />' . 'Contact <a href="mailto:support@servmask.com">support@servmask.com</a> for assistance.', AI1WM_PLUGIN_NAME)); }
public static function execute($params) { global $wp_version; // Set progress Ai1wm_Status::info(__('Adding configuration to archive...', AI1WM_PLUGIN_NAME)); // Flush WP cache ai1wm_cache_flush(); // Get options $options = wp_load_alloptions(); // Set config $config = new Ai1wm_Config(); // Set Site URL if (isset($options['siteurl'])) { $config->SiteURL = untrailingslashit($options['siteurl']); } else { $config->SiteURL = site_url(); } // Set Home URL if (isset($options['home'])) { $config->HomeURL = untrailingslashit($options['home']); } else { $config->HomeURL = home_url(); } // Set Plugin Version $config->Plugin = (object) array('Version' => AI1WM_VERSION); // Set WordPress Version and Content $config->WordPress = (object) array('Version' => $wp_version, 'Content' => WP_CONTENT_DIR); // Set No Replace Email if (isset($params['options']['no_email_replace'])) { $config->NoEmailReplace = true; } // Save package.json file $handle = fopen(ai1wm_package_path($params), 'w'); fwrite($handle, json_encode($config)); fclose($handle); // Add package.json file $archive = new Ai1wm_Compressor(ai1wm_archive_path($params)); $archive->add_file(ai1wm_package_path($params), AI1WM_PACKAGE_NAME); $archive->close(); // Set progress Ai1wm_Status::info(__('Done adding configuration to archive.', AI1WM_PLUGIN_NAME)); return $params; }
public static function resolve($url, $params = array(), Ai1wm_Http_Abstract $client = null) { // Reset IP address and adapter delete_option(AI1WM_URL_IP); delete_option(AI1WM_URL_ADAPTER); // Set secret $secret_key = get_option(AI1WM_SECRET_KEY); // Set host $host = parse_url($url, PHP_URL_HOST); // Get port $port = parse_url($url, PHP_URL_PORT); // Set server IP address if (!empty($_SERVER['SERVER_ADDR'])) { $server = $_SERVER['SERVER_ADDR']; } else { if (!empty($_SERVER['LOCAL_ADDR'])) { $server = $_SERVER['LOCAL_ADDR']; } else { $server = '127.0.0.1'; } } // Set local IP address $local = gethostbyname($host); // HTTP resolve foreach (array('stream', 'curl') as $adapter) { foreach (array($server, $local, $host) as $ip) { // Add IPv6 support if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { $ip = "[{$ip}]"; } // Set HTTP params $params = array_merge($params, array('secret_key' => $secret_key, 'url_ip' => $ip, 'url_adapter' => $adapter)); // Set HTTP client if (is_null($client)) { $client = Ai1wm_Http_Factory::create($adapter); } // Set HTTP host if (empty($port)) { $client->set_header('Host', $host); } else { $client->set_header('Host', "{$host}:{$port}"); } // Set HTTP authorization if (($user = get_option(AI1WM_AUTH_USER)) && ($password = get_option(AI1WM_AUTH_PASSWORD))) { if ($hash = base64_encode("{$user}:{$password}")) { $client->set_header('Authorization', "Basic {$hash}"); } } $blocking = true; // Run blocking HTTP request $client->get(add_query_arg(ai1wm_urlencode($params), str_replace("//{$host}", "//{$ip}", $url)), $blocking); // Flush WP cache ai1wm_cache_flush(); // Is valid adapter? if (get_option(AI1WM_URL_IP) && get_option(AI1WM_URL_ADAPTER)) { return; } // Reset HTTP client $client = null; } } // No connection throw new Ai1wm_Http_Exception(__('There was a problem while reaching your server.<br />' . 'Contact <a href="mailto:support@servmask.com">support@servmask.com</a> for assistance.', AI1WM_PLUGIN_NAME)); }
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; }