. */ if ( class_exists( 'WP_CLI_Command' ) ) { class Ai1wm_WP_CLI_Command extends WP_CLI_Command { /** * Creates a new backup. * * ## OPTIONS * * [--list] * Get a list of backup files * * Example: * $ wp ai1wm backup --list * +------------------------------------------------+--------------+-----------+ * | Backup name | Date created | Size | * +------------------------------------------------+--------------+-----------+ * | migration-wp-20170908-152313-435.wpress | 4 days ago | 536.77 MB | * | migration-wp-20170908-152103-603.wpress | 4 days ago | 536.77 MB | * | migration-wp-20170908-152036-162.wpress | 4 days ago | 536.77 MB | * | migration-wp-20170908-151428-266.wpress | 4 days ago | 536.77 MB | * +------------------------------------------------+--------------+-----------+ * * [--exclude-spam-comments] * Do not export spam comments * * [--exclude-revisions] * Do not export post revisions * * [--exclude-media] * Do not export media library (files) * * [--exclude-themes] * Do not export themes (files) * * [--exclude-inactive-themes] * Do not export inactive themes (files) * * [--exclude-muplugins] * Do not export must-use plugins (files) * * [--exclude-plugins] * Do not export plugins (files) * * [--exclude-inactive-plugins] * Do not export inactive plugins (files) * * [--exclude-cache] * Do not export cache (files) * * [--exclude-database] * Do not export database (sql) * * [--exclude-email-replace] * Do not replace email domain (sql) * * [--replace "find" "replace"] * Find and replace text in the database * * Example: * $ wp ai1wm backup --replace "wp" "WordPress" * Backup in progress... * Backup complete. * Backup location: /repos/migration/wp/wp-content/ai1wm-backups/migration-wp-20170913-095743-931.wpress * * @subcommand backup */ public function backup( array $args, array $assoc_args ) { if ( is_multisite() ) { WP_CLI::error( __( 'WPI CLI is not supported in Multisite mode. Please use web interface to create a backup.', AI1WM_PLUGIN_NAME ) ); } $params = array(); if ( isset( $assoc_args['list'] ) ) { $backups = new cli\Table; $backups->setHeaders( array( 'name' => __( 'Backup name', AI1WM_PLUGIN_NAME ), 'date' => __( 'Date created', AI1WM_PLUGIN_NAME ), 'size' => __( 'Size', AI1WM_PLUGIN_NAME ), ) ); $model = new Ai1wm_Backups; foreach ( $model->get_files() as $backup ) { $backups->addRow( array( 'name' => $backup['filename'], 'date' => human_time_diff( $backup['mtime'] ) . __( ' ago', AI1WM_PLUGIN_NAME ), 'size' => size_format( $backup['size'], 2 ), ) ); } $backups->display(); exit; } if ( isset( $assoc_args['exclude-spam-comments'] ) ) { $params['options']['no_spam_comments'] = true; } if ( isset( $assoc_args['exclude-revisions'] ) ) { $params['options']['no_revisions'] = true; } if ( isset( $assoc_args['exclude-media'] ) ) { $params['options']['no_media'] = true; } if ( isset( $assoc_args['exclude-themes'] ) ) { $params['options']['no_themes'] = true; } if ( isset( $assoc_args['exclude-inactive-themes'] ) ) { $params['options']['no_inactive_themes'] = true; } if ( isset( $assoc_args['exclude-muplugins'] ) ) { $params['options']['no_muplugins'] = true; } if ( isset( $assoc_args['exclude-plugins'] ) ) { $params['options']['no_plugins'] = true; } if ( isset( $assoc_args['exclude-inactive-plugins'] ) ) { $params['options']['no_inactive_plugins'] = true; } if ( isset( $assoc_args['exclude-cache'] ) ) { $params['options']['no_cache'] = true; } if ( isset( $assoc_args['exclude-database'] ) ) { $params['options']['no_database'] = true; } if ( isset( $assoc_args['exclude-email-replace'] ) ) { $params['options']['no_email_replace'] = true; } if ( isset( $assoc_args['replace'] ) ) { for ( $i = 0; $i < count( $args ); $i++ ) { if ( isset( $args[ $i ] ) && isset( $args[ $i + 1 ] ) ) { $params['options']['replace']['old_value'][] = $args[ $i ]; $params['options']['replace']['new_value'][] = $args[ $i + 1 ]; } } } WP_CLI::log( 'Backup in progress...' ); try { // Remove filters remove_filter( 'ai1wm_export', 'Ai1wm_Export_Resolve::execute', 5 ); remove_filter( 'ai1wm_export', 'Ai1wm_Export_Clean::execute', 300 ); // Run filters $params = apply_filters( 'ai1wm_export', $params ); } catch ( Exception $e ) { WP_CLI::error( $e->getMessage() ); } // Clean storage folder Ai1wm_Directory::delete( ai1wm_storage_path( $params ) ); WP_CLI::log( __( 'Backup complete.', AI1WM_PLUGIN_NAME ) ); WP_CLI::log( sprintf( __( 'Backup location: %s', AI1WM_PLUGIN_NAME ), ai1wm_backup_path( $params ) ) ); } /** * Restores a backup. * * Example: * $ wp ai1wm restore migration-wp-20170913-095743-931.wpress * Restore in progress... * Restore complete. * * @subcommand restore */ public function restore( array $args, array $assoc_args ) { if ( is_multisite() ) { WP_CLI::error( __( 'WPI CLI is not supported in Multisite mode. Please use web interface to restore a backup.', AI1WM_PLUGIN_NAME ) ); } $params = array(); if ( isset( $args[0] ) && is_file( ai1wm_backup_path( array( 'archive' => $args[0] ) ) ) ) { $params = array( 'storage' => ai1wm_storage_folder(), 'archive' => $args[0], 'ai1wm_manual_restore' => true, ); } else { WP_CLI::error_multi_line( array( __( 'A valid backup name must be provided in order to proceed with the restore process.', AI1WM_PLUGIN_NAME ), __( 'Example: wp ai1wm restore migration-wp-20170913-095743-931.wpress', AI1WM_PLUGIN_NAME ), )); exit; } WP_CLI::log( 'Restore in progress...' ); try { // Remove filters remove_filter( 'ai1wm_import', 'Ai1wm_Import_Upload::execute', 5 ); remove_filter( 'ai1wm_import', 'Ai1wm_Import_Resolve::execute', 10 ); remove_filter( 'ai1wm_import', 'Ai1wm_Import_Confirm::execute', 100 ); remove_filter( 'ai1wm_import', 'Ai1wm_Import_Clean::execute', 400 ); // Run filters $params = apply_filters( 'ai1wm_import', $params ); } catch ( Exception $e ) { WP_CLI::error( $e->getMessage() ); } // Clean storage folder Ai1wm_Directory::delete( ai1wm_storage_path( $params ) ); WP_CLI::log( 'Restore complete.' ); } } } if ( class_exists( 'WP_CLI' ) ) { WP_CLI::add_command( 'ai1wm', 'Ai1wm_WP_CLI_Command', array( 'short_desc' => 'All-in-One WP Migration Command' ) ); }