public static function execute( $params ) {
		global $wp_version;

		// Set progress
		Ai1wm_Status::info( __( 'Adding configuration to archive...', AI1WM_PLUGIN_NAME ) );

		// Initialize empty WP cache
		wp_cache_init();

		// 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 );

		// 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 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 = array();
     // 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'] = array('Version' => AI1WM_VERSION);
     // Set WordPress Version and Content
     $config['WordPress'] = 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 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 ) {

		// Set progress
		Ai1wm_Status::info( __( 'Unpacking archive...', AI1WM_PLUGIN_NAME ) );

		// Open the archive file for reading
		$archive = new Ai1wm_Extractor( ai1wm_archive_path( $params ) );

		// Validate the archive file consistency
		if ( ! $archive->is_valid() ) {
			throw new Ai1wm_Import_Exception(
				__(
					'The archive file is corrupted. Follow this article to resolve the problem: ' .
					'<a href="https://help.servmask.com/knowledgebase/corrupted-archive/" target="_blank">https://help.servmask.com/knowledgebase/corrupted-archive/</a>',
					AI1WM_PLUGIN_NAME
				)
			);
		}

		// Obtain the name of the archive
		$name = ai1wm_archive_name( $params );

		// Obtain the size of the archive
		$size = ai1wm_archive_bytes( $params );

		// Check file size of the archive
		if ( false === $size ) {
			throw new Ai1wm_Not_Accesible_Exception(
				sprintf( __( 'Unable to get the file size of <strong>%s</strong>', AI1WM_PLUGIN_NAME ), $name )
			);
		}

		$allowed_size = apply_filters( 'ai1wm_max_file_size', AI1WM_MAX_FILE_SIZE );

		// Let's check the size of the file to make sure it is less than the maximum allowed
		if ( ( $allowed_size > 0 ) && ( $size > $allowed_size ) ) {
			throw new Ai1wm_Import_Exception(
				sprintf(
					__(
						'The file that you are trying to import is over the maximum upload file size limit of <strong>%s</strong>.<br />' .
						'You can remove this restriction by purchasing our ' .
						'<a href="https://servmask.com/products/unlimited-extension" target="_blank">Unlimited Extension</a>.',
						AI1WM_PLUGIN_NAME
					),
					size_format( $allowed_size )
				)
			);
		}

		// Unpack package.json, multisite.json and database.sql files
		$archive->extract_by_files_array(
			ai1wm_storage_path( $params ),
			array(
				AI1WM_PACKAGE_NAME,
				AI1WM_MULTISITE_NAME,
				AI1WM_DATABASE_NAME,
			)
		);

		// Close the archive file
		$archive->close();

		// Check package.json file
		if ( false === is_file( ai1wm_package_path( $params ) ) ) {
			throw new Ai1wm_Import_Exception(
				__( 'Invalid archive file. It should contain <strong>package.json</strong> file.', AI1WM_PLUGIN_NAME )
			);
		}

		return $params;
	}