/** * Create empty archive and add package config * * @return void */ public function start() { // Set default progress Ai1wm_Status::set( array( 'total' => 0, 'processed' => 0, 'type' => 'info', 'message' => __( 'Creating an empty archive...', AI1WM_PLUGIN_NAME ) ) ); // Get package file $service = new Ai1wm_Service_Package( $this->args ); $service->export(); // Get archive file $archive = new Ai1wm_Compressor( $this->storage()->archive() ); // Add package file $archive->add_file( $this->storage()->package(), AI1WM_PACKAGE_NAME ); $archive->close(); // Set progress Ai1wm_Status::set( array( 'message' => __( 'Done creating an empty archive.', AI1WM_PLUGIN_NAME ) ) ); // Redirect $this->route_to( 'enumerate' ); }
/** * Import database * * @return string */ public function import() { global $wpdb; // Backup database $this->export(); // Flush database $this->connection->flush(); // Get configuration $service = new Ai1wm_Service_Package($this->options); $config = $service->import(); $old_values = array(); $new_values = array(); // Get Site URL if (isset($config['SiteURL']) && $config['SiteURL'] != site_url()) { $old_values[] = $config['SiteURL']; $new_values[] = site_url(); } // Get Home URL if (isset($config['HomeURL']) && $config['HomeURL'] != home_url()) { $old_values[] = $config['HomeURL']; $new_values[] = home_url(); // Get Domain $old_domain = parse_url($config['HomeURL']); $new_domain = parse_url(home_url()); // Replace Domain $old_values[] = sprintf('%s://%s', $old_domain['scheme'], $old_domain['host']); $new_values[] = sprintf('%s://%s', $new_domain['scheme'], $new_domain['host']); } $database_file = StorageArea::getInstance()->makeFile(AI1WM_DATABASE_NAME); // Import database $this->connection->setOldTablePrefix(AI1WM_TABLE_PREFIX)->setNewTablePrefix($wpdb->prefix)->setOldReplaceValues($old_values)->setNewReplaceValues($new_values)->import($database_file->getName()); return $database_file->getName(); }
/** * Export site * * @return StorageFile */ public function export() { $storage = StorageArea::getInstance(); // Enable maintenance mode Ai1wm_Maintenance::enable(); // Create export file $export_file = $storage->makeFile(); // Make archive file try { $zip = ZipFactory::makeZipArchiver($export_file->getName(), !class_exists('ZipArchive'), true); } catch (Exception $e) { $zip = ZipFactory::makeZipArchiver($export_file->getName(), true, true); } // Package if ($this->should_export_package()) { $service = new Ai1wm_Service_Package($this->options); $zip->addFromString(AI1WM_PACKAGE_NAME, $service->export()); } // Database if ($this->should_export_database()) { $service = new Ai1wm_Service_Database($this->options); // Add database to archive $zip->addFile($service->export(), AI1WM_DATABASE_NAME); } // Media if ($this->should_export_media()) { $service = new Ai1wm_Service_Media($this->options); // Add media to archive $zip->addDir($service->export(), AI1WM_MEDIA_NAME); // Sites (Network mode) $service = new Ai1wm_Service_Sites($this->options); if ($sites = $service->export()) { // Add sites to archive $zip->addDir($sites, AI1WM_SITES_NAME); } } // Themes if ($this->should_export_themes()) { $service = new Ai1wm_Service_Themes($this->options); // Add themes to archive $zip->addDir($service->export(), AI1WM_THEMES_NAME); } // Plugins if ($this->should_export_plugins()) { $service = new Ai1wm_Service_Plugins($this->options); // Add plugins to archive if ($plugins = $service->get_installed_plugins()) { $zip->addDir($service->export(), AI1WM_PLUGINS_NAME, $plugins); } } // Disable maintenance mode Ai1wm_Maintenance::disable(); return $export_file; }
/** * Unpack archive * * @return void */ public function start() { // Set default progress Ai1wm_Status::set( array( 'total' => 0, 'processed' => 0, 'type' => 'info', 'message' => __( 'Unpacking archive...', AI1WM_PLUGIN_NAME ), ) ); // Open the archive file for reading $archive = new Ai1wm_Extractor( $this->storage()->archive() ); // Unpack package.json and database.sql files $archive->extract_by_files_array( $this->storage()->path(), array( AI1WM_PACKAGE_NAME, AI1WM_DATABASE_NAME, ) ); // Close the archive file $archive->close(); // Validate the archive file if ( $this->validate() ) { // Parse the package file $service = new Ai1wm_Service_Package( $this->args ); if ( $service->import() ) { $this->route_to( 'confirm' ); } else { throw new Ai1wm_Import_Exception( __( 'Invalid package.json file.', AI1WM_PLUGIN_NAME ) ); } } else { throw new Ai1wm_Import_Exception( __( 'Invalid archive file. It should contain <strong>package.json</strong> file.', AI1WM_PLUGIN_NAME ) ); } }
/** * Should import package? * * @return boolean */ public function should_import_package() { global $wp_version; // Has package.json file? if (!is_file(StorageArea::getInstance()->getRootPath() . AI1WM_PACKAGE_NAME)) { return false; } // Force import if (isset($this->options['import']['force'])) { return true; } // Get configuration $service = new Ai1wm_Service_Package($this->options); $config = $service->import(); // Verify WordPress version if (version_compare($config['WordPress']['Version'], $wp_version, '<=')) { return true; } else { throw new Ai1wm_Import_Exception(sprintf(_('You are trying to import data from WordPress v%1$s into WordPress v%2$s, while the process might work,' . 'we do not recommend this. You should update your WordPress to version %1$s or above and then import the file.' . 'If you still want to proceed, after making a backup, using the plugin,' . '<button type="button" class="ai1wm-button-green-small" id="ai1wm-force-import" data-name="%3$s">CLICK HERE TO CONTINUE</button>'), $config['WordPress']['Version'], $wp_version, $this->options['import']['file'])); } }
/** * Import database * * @return string */ public function import() { global $wpdb; // Get configuration $service = new Ai1wm_Service_Package( $this->args ); $config = $service->import(); $old_values = array(); $new_values = array(); // Get Site URL if ( isset( $config['SiteURL'] ) && ( $config['SiteURL'] !== site_url() ) ) { $old_values[] = $config['SiteURL']; $new_values[] = site_url(); // Get Domain $old_domain = parse_url( $config['SiteURL'] ); $new_domain = parse_url( site_url() ); // Replace Domain $old_values[] = sprintf( '%s://%s', $old_domain['scheme'], $old_domain['host'] ); $new_values[] = sprintf( '%s://%s', $new_domain['scheme'], $new_domain['host'] ); // Replace Host if ( stripos( site_url(), $old_domain['host'] ) === false && stripos( home_url(), $old_domain['host'] ) === false ) { $old_values[] = $old_domain['host']; $new_values[] = $new_domain['host']; } // Replace Path $old_values[] = isset( $old_domain['path'] ) && ( $old_domain['path'] !== '/' ) ? trailingslashit( $old_domain['path'] ) : null; $new_values[] = isset( $new_domain['path'] ) ? trailingslashit( $new_domain['path'] ) : '/'; } // Get Home URL if ( isset( $config['HomeURL'] ) && ( $config['HomeURL'] !== home_url() ) ) { $old_values[] = $config['HomeURL']; $new_values[] = home_url(); } // Get WordPress Content if ( isset( $config['WordPress']['Content'] ) && ( $config['WordPress']['Content'] !== WP_CONTENT_DIR ) ) { $old_values[] = $config['WordPress']['Content']; $new_values[] = WP_CONTENT_DIR; } // Get user details if ( isset( $config['Import']['User']['Id'] ) && ( $id = $config['Import']['User']['Id'] ) ) { $meta = get_userdata( $id ); $user = array( 'user_login' => $meta->user_login, 'user_pass' => $meta->user_pass, 'user_nicename' => $meta->user_nicename, 'user_url' => $meta->user_url, 'user_email' => $meta->user_email, 'display_name' => $meta->display_name, 'nickname' => $meta->nickname, 'first_name' => $meta->first_name, 'last_name' => $meta->last_name, 'description' => $meta->description, 'rich_editing' => $meta->rich_editing, 'user_registered' => $meta->user_registered, 'jabber' => $meta->jabber, 'aim' => $meta->aim, 'yim' => $meta->yim, 'show_admin_bar_front' => $meta->show_admin_bar_front, ); } else { $user = array(); } // Get HTTP user $auth_user = get_site_option( AI1WM_AUTH_USER, false, false ); // Get HTTP password $auth_password = get_site_option( AI1WM_AUTH_PASSWORD, false, false ); // Get secret key $secret_key = get_site_option( AI1WM_SECRET_KEY, false, false ); // Flush database $this->connection->flush(); // Import database $this->connection->setOldTablePrefix( AI1WM_TABLE_PREFIX ) ->setNewTablePrefix( $wpdb->prefix ) ->setOldReplaceValues( $old_values ) ->setNewReplaceValues( $new_values ) ->import( $this->storage()->database() ); // Clear WP options cache wp_cache_flush(); // Set new user identity if ( isset( $config['Export']['User']['Id'] ) && ( $id = $config['Export']['User']['Id'] ) ) { // Update user login and password if ( isset( $user['user_login'] ) && isset( $user['user_pass'] ) ) { $wpdb->update( $wpdb->users, array( 'user_login' => $user['user_login'], 'user_pass' => $user['user_pass'] ), array( 'ID' => $id ), array( '%s', '%s' ), array( '%d' ) ); // Unset user login unset( $user['user_login'] ); // Unset user password unset( $user['user_pass'] ); } // Update user details $result = wp_update_user( array( 'ID' => $id ) + $user ); // Log the error if ( is_wp_error( $result ) ) { Ai1wm_Log::error( 'Exception while importing user identity: ' . $result->get_error_message() ); } } // Set the new HTTP user update_site_option( AI1WM_AUTH_USER, $auth_user ); // Set the new HTTP password update_site_option( AI1WM_AUTH_PASSWORD, $auth_password ); // Set the new secret key value update_site_option( AI1WM_SECRET_KEY, $secret_key ); }
/** * Import database * * @return void */ public function import() { global $wpdb; // Get configuration $service = new Ai1wm_Service_Package($this->args); $config = $service->import(); $old_values = array(); $new_values = array(); // Get Site URL if (isset($config['SiteURL']) && $config['SiteURL'] !== site_url()) { $old_values[] = $config['SiteURL']; $new_values[] = site_url(); } // Get Home URL if (isset($config['HomeURL']) && $config['HomeURL'] !== home_url()) { $old_values[] = $config['HomeURL']; $new_values[] = home_url(); } // Get WordPress Content if (isset($config['WordPress']['Content']) && $config['WordPress']['Content'] !== WP_CONTENT_DIR) { $old_values[] = $config['WordPress']['Content']; $new_values[] = WP_CONTENT_DIR; } // Get user details if (isset($config['Import']['User']['Id']) && ($id = $config['Import']['User']['Id'])) { $meta = get_userdata($id); $user = array('user_login' => $meta->user_login, 'user_pass' => $meta->user_pass, 'user_nicename' => $meta->user_nicename, 'user_url' => $meta->user_url, 'user_email' => $meta->user_email, 'display_name' => $meta->display_name, 'nickname' => $meta->nickname, 'first_name' => $meta->first_name, 'last_name' => $meta->last_name, 'description' => $meta->description, 'rich_editing' => $meta->rich_editing, 'user_registered' => $meta->user_registered, 'jabber' => $meta->jabber, 'aim' => $meta->aim, 'yim' => $meta->yim, 'show_admin_bar_front' => $meta->show_admin_bar_front); } else { $user = array(); } // Get HTTP user $auth_user = get_site_option(AI1WM_AUTH_USER, false, false); // Get HTTP password $auth_password = get_site_option(AI1WM_AUTH_PASSWORD, false, false); // Get secret key $secret_key = get_site_option(AI1WM_SECRET_KEY, false, false); // Flush database $this->connection->flush(); // Import database $this->connection->setOldTablePrefix(AI1WM_TABLE_PREFIX)->setNewTablePrefix($wpdb->prefix)->setOldReplaceValues($old_values)->setNewReplaceValues($new_values)->import($this->storage()->database()); // Clear WP options cache wp_cache_flush(); // WP Migration if (is_plugin_active(AI1WM_PLUGIN_BASENAME)) { activate_plugin(AI1WM_PLUGIN_BASENAME); } // Dropbox Extension if (is_plugin_active(AI1WMDE_PLUGIN_BASENAME)) { activate_plugin(AI1WMDE_PLUGIN_BASENAME); } // Google Drive Extension if (is_plugin_active(AI1WMGE_PLUGIN_BASENAME)) { activate_plugin(AI1WMGE_PLUGIN_BASENAME); } // Amazon S3 Extension if (is_plugin_active(AI1WMSE_PLUGIN_BASENAME)) { activate_plugin(AI1WMSE_PLUGIN_BASENAME); } // Multisite Extension if (is_plugin_active(AI1WMME_PLUGIN_BASENAME)) { activate_plugin(AI1WMME_PLUGIN_BASENAME); } // Unlimited Extension if (is_plugin_active(AI1WMUE_PLUGIN_BASENAME)) { activate_plugin(AI1WMUE_PLUGIN_BASENAME); } // FTP Extension if (is_plugin_active(AI1WMFE_PLUGIN_BASENAME)) { activate_plugin(AI1WMFE_PLUGIN_BASENAME); } // Set new user identity if (isset($config['Export']['User']['Id']) && ($id = $config['Export']['User']['Id'])) { // Update user login and password if (isset($user['user_login']) && isset($user['user_pass'])) { $wpdb->update($wpdb->users, array('user_login' => $user['user_login'], 'user_pass' => $user['user_pass']), array('ID' => $id), array('%s', '%s'), array('%d')); // Unset user login unset($user['user_login']); // Unset user password unset($user['user_pass']); } // Update user details $result = wp_update_user(array('ID' => $id) + $user); // Log the error if (is_wp_error($result)) { Ai1wm_Log::error('Exception while importing user identity: ' . $result->get_error_message()); } } // Set the new HTTP user update_site_option(AI1WM_AUTH_USER, $auth_user); // Set the new HTTP password update_site_option(AI1WM_AUTH_PASSWORD, $auth_password); // Set the new secret key value update_site_option(AI1WM_SECRET_KEY, $secret_key); }
/** * Import database * * @return void */ public function import() { global $wpdb; // Get configuration $service = new Ai1wm_Service_Package($this->args); $config = $service->import(); $old_values = array(); $new_values = array(); // Get Site URL if (isset($config['SiteURL']) && $config['SiteURL'] !== site_url()) { // Get domain $old_domain = parse_url($config['SiteURL'], PHP_URL_HOST); $new_domain = parse_url(site_url(), PHP_URL_HOST); // Add plain Site URL $old_values[] = set_url_scheme($config['SiteURL'], 'http'); $new_values[] = set_url_scheme(site_url()); // Add plain Site URL SSL $old_values[] = set_url_scheme($config['SiteURL'], 'https'); $new_values[] = set_url_scheme(site_url()); // Add encoded Site URL $old_values[] = urlencode(set_url_scheme($config['SiteURL'], 'http')); $new_values[] = urlencode(set_url_scheme(site_url())); // Add encoded Site URL SSL $old_values[] = urlencode(set_url_scheme($config['SiteURL'], 'https')); $new_values[] = urlencode(set_url_scheme(site_url())); // Add escaped Site URL $old_values[] = addslashes(addcslashes(set_url_scheme($config['SiteURL'], 'http'), '/')); $new_values[] = addslashes(addcslashes(set_url_scheme(site_url()), '/')); // Add escaped Site URL SSL $old_values[] = addslashes(addcslashes(set_url_scheme($config['SiteURL'], 'https'), '/')); $new_values[] = addslashes(addcslashes(set_url_scheme(site_url()), '/')); // Add email $old_values[] = sprintf("@%s", $old_domain); $new_values[] = sprintf("@%s", $new_domain); } // Get Home URL if (isset($config['HomeURL']) && $config['HomeURL'] !== home_url()) { // Add plain Home URL $old_values[] = set_url_scheme($config['HomeURL'], 'http'); $new_values[] = set_url_scheme(home_url()); // Add plain Home URL SSL $old_values[] = set_url_scheme($config['HomeURL'], 'https'); $new_values[] = set_url_scheme(home_url()); // Add encoded Home URL $old_values[] = urlencode(set_url_scheme($config['HomeURL'], 'http')); $new_values[] = urlencode(set_url_scheme(home_url())); // Add encoded Home URL SSL $old_values[] = urlencode(set_url_scheme($config['HomeURL'], 'https')); $new_values[] = urlencode(set_url_scheme(home_url())); // Add escaped Home URL $old_values[] = addslashes(addcslashes(set_url_scheme($config['HomeURL'], 'http'), '/')); $new_values[] = addslashes(addcslashes(set_url_scheme(home_url()), '/')); // Add escaped Home URL SSL $old_values[] = addslashes(addcslashes(set_url_scheme($config['HomeURL'], 'https'), '/')); $new_values[] = addslashes(addcslashes(set_url_scheme(home_url()), '/')); } // Get WordPress Content if (isset($config['WordPress']['Content']) && $config['WordPress']['Content'] !== WP_CONTENT_DIR) { // Add plain WordPress Content $old_values[] = $config['WordPress']['Content']; $new_values[] = WP_CONTENT_DIR; // Get escaped WordPress Content $old_values[] = addslashes(addcslashes($config['WordPress']['Content'], '\\/')); $new_values[] = addslashes(addcslashes(WP_CONTENT_DIR, '\\/')); } // Get user details if (isset($config['Import']['User']['Id']) && ($id = $config['Import']['User']['Id'])) { $meta = get_userdata($id); $user = array('user_login' => $meta->user_login, 'user_pass' => $meta->user_pass, 'user_nicename' => $meta->user_nicename, 'user_url' => $meta->user_url, 'user_email' => $meta->user_email, 'display_name' => $meta->display_name, 'nickname' => $meta->nickname, 'first_name' => $meta->first_name, 'last_name' => $meta->last_name, 'description' => $meta->description, 'rich_editing' => $meta->rich_editing, 'user_registered' => $meta->user_registered, 'jabber' => $meta->jabber, 'aim' => $meta->aim, 'yim' => $meta->yim, 'show_admin_bar_front' => $meta->show_admin_bar_front); } else { $user = array(); } // Get URL IP $url_ip = get_site_option(AI1WM_URL_IP, false, false); // Get URL transport $url_transport = get_site_option(AI1WM_URL_TRANSPORT, false, false); // Get secret key $secret_key = get_site_option(AI1WM_SECRET_KEY, false, false); // Get HTTP user $auth_user = get_site_option(AI1WM_AUTH_USER, false, false); // Get HTTP password $auth_password = get_site_option(AI1WM_AUTH_PASSWORD, false, false); // Get active plugins $active_plugins = get_site_option(AI1WM_ACTIVE_PLUGINS, array(), false); // Get database client $client = MysqlDumpFactory::makeMysqlDump(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); // Set database options $client->setOldTablePrefixes(array(AI1WM_TABLE_PREFIX))->setNewTablePrefixes(array($wpdb->prefix))->setOldReplaceValues($old_values)->setNewReplaceValues($new_values); // Flush database if ($version = $config['Plugin']['Version']) { if ($version !== 'develop' && version_compare($version, '4.9', '<')) { $client->setIncludeTablePrefixes(array($wpdb->prefix)); $client->flush(); } } // Import database $client->import($this->storage()->database()); // Clear WP options cache wp_cache_flush(); // Activate plugins foreach ($active_plugins as $plugin) { if (in_array($plugin, ai1wm_active_plugins())) { activate_plugin($plugin); } } // Set new user identity if (isset($config['Export']['User']['Id']) && ($id = $config['Export']['User']['Id'])) { // Update user login and password if (isset($user['user_login']) && isset($user['user_pass'])) { $wpdb->update($wpdb->users, array('user_login' => $user['user_login'], 'user_pass' => $user['user_pass']), array('ID' => $id), array('%s', '%s'), array('%d')); // Unset user login unset($user['user_login']); // Unset user password unset($user['user_pass']); } // Update user details $result = wp_update_user(array('ID' => $id) + $user); // Log the error if (is_wp_error($result)) { Ai1wm_Log::error('Exception while importing user identity: ' . $result->get_error_message()); } } // Set the new URL IP update_site_option(AI1WM_URL_IP, $url_ip); // Set the new URL transport update_site_option(AI1WM_URL_TRANSPORT, $url_transport); // Set the new secret key value update_site_option(AI1WM_SECRET_KEY, $secret_key); // Set the new HTTP user update_site_option(AI1WM_AUTH_USER, $auth_user); // Set the new HTTP password update_site_option(AI1WM_AUTH_PASSWORD, $auth_password); }