/**
	 * 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);
 }
예제 #8
0
 /**
  * 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);
 }