202 lines
5.5 KiB
PHP
202 lines
5.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Migrate your DB using WP Migrate DB.
|
|
*/
|
|
class WPMDB_Command extends WP_CLI_Command {
|
|
|
|
/**
|
|
* Export local DB to file.
|
|
*
|
|
* ## OPTIONS
|
|
*
|
|
* <output-file>
|
|
* : A file path to export to. Filename will be modified to end in .sql or
|
|
* .sql.gz if necessary.
|
|
*
|
|
* [--find=<strings>]
|
|
* : A comma separated list of strings to find when performing a string find
|
|
* and replace across the database.
|
|
*
|
|
* Table names should be quoted as needed, i.e. when using a comma in the
|
|
* find/replace string.
|
|
*
|
|
* The --replace=<strings> argument should be used in conjunction to specify
|
|
* the replace values for the strings found using this argument. The number
|
|
* of strings specified in this argument should match the number passed into
|
|
* --replace=<strings> argument.
|
|
*
|
|
* [--replace=<strings>]
|
|
* : A comma separated list of replace value strings to implement when
|
|
* performing a string find & replace across the database.
|
|
*
|
|
* Should be used in conjunction with the --find=<strings> argument, see it's
|
|
* documentation for further explanation of the find & replace functionality.
|
|
*
|
|
* [--exclude-post-revisions]
|
|
* : Exclude post revisions from export.
|
|
*
|
|
* [--skip-replace-guids]
|
|
* : Do not perform a find & replace on the guid column in the wp_posts table.
|
|
*
|
|
* [--exclude-spam]
|
|
* : Exclude spam comments.
|
|
*
|
|
* [--gzip-file]
|
|
* : GZip compress export file.
|
|
*
|
|
* [--include-transients]
|
|
* : Include transients (temporary cached data).
|
|
*
|
|
* ## EXAMPLES
|
|
*
|
|
* wp migratedb export ./migratedb.sql \
|
|
* --find=http://dev.bradt.ca,/Users/bradt/home/bradt.ca
|
|
* --replace=http://bradt.ca,/home/bradt.ca
|
|
*
|
|
* @param array $args
|
|
* @param array $assoc_args
|
|
*/
|
|
public function export( $args, $assoc_args ) {
|
|
|
|
$assoc_args['action'] = 'savefile';
|
|
$assoc_args['export_dest'] = trim( $args[0] );
|
|
|
|
if ( empty( $assoc_args['export_dest'] ) ) {
|
|
WP_CLI::error( WPMDB_CLI::cleanup_message( __( 'You must provide a destination filename.', 'wp-migrate-db-cli' ) ) );
|
|
}
|
|
|
|
$profile = $this->_get_profile_data_from_args( $args, $assoc_args );
|
|
|
|
if ( is_wp_error( $profile ) ) {
|
|
WP_CLI::error( $profile );
|
|
}
|
|
|
|
$this->_perform_cli_migration( $profile );
|
|
}
|
|
|
|
/**
|
|
* Run a find/replace on the database.
|
|
*
|
|
* ## OPTIONS
|
|
*
|
|
* [--find=<strings>]
|
|
* : A comma separated list of strings to find when performing a string find
|
|
* and replace across the database.
|
|
*
|
|
* Table names should be quoted as needed, i.e. when using a comma in the
|
|
* find/replace string.
|
|
*
|
|
* The --replace=<strings> argument should be used in conjunction to specify
|
|
* the replace values for the strings found using this argument. The number
|
|
* of strings specified in this argument should match the number passed into
|
|
* --replace=<strings> argument.
|
|
*
|
|
* [--replace=<strings>]
|
|
* : A comma separated list of replace value strings to implement when
|
|
* performing a string find & replace across the database.
|
|
*
|
|
* Should be used in conjunction with the --find=<strings> argument, see it's
|
|
* documentation for further explanation of the find & replace functionality.
|
|
*
|
|
* [--exclude-post-revisions]
|
|
* : Exclude post revisions from the find & replace.
|
|
*
|
|
* [--skip-replace-guids]
|
|
* : Do not perform a find & replace on the guid column in the wp_posts table.
|
|
*
|
|
* [--exclude-spam]
|
|
* : Exclude spam comments.
|
|
*
|
|
* [--include-transients]
|
|
* : Include transients (temporary cached data).
|
|
*
|
|
* ## EXAMPLES
|
|
*
|
|
* wp migratedb find-replace
|
|
* --find=http://dev.bradt.ca,/Users/bradt/home/bradt.ca
|
|
* --replace=http://bradt.ca,/home/bradt.ca
|
|
*
|
|
* @param array $args
|
|
* @param array $assoc_args
|
|
*
|
|
* @subcommand find-replace
|
|
*/
|
|
public function find_replace( $args, $assoc_args ) {
|
|
|
|
$assoc_args['action'] = 'find_replace';
|
|
|
|
$profile = $this->_get_profile_data_from_args( $args, $assoc_args );
|
|
|
|
if ( is_wp_error( $profile ) ) {
|
|
WP_CLI::error( $profile );
|
|
}
|
|
|
|
$this->_perform_cli_migration( $profile );
|
|
}
|
|
|
|
/**
|
|
* Get profile data from CLI args.
|
|
*
|
|
* @param array $args
|
|
* @param array $assoc_args
|
|
*
|
|
* @return array|WP_Error
|
|
*/
|
|
protected function _get_profile_data_from_args( $args, $assoc_args ) {
|
|
// Load the correct CLI class
|
|
if ( function_exists( 'wpmdb_pro_cli' ) ) {
|
|
if ( function_exists( 'wp_migrate_db_pro_cli_addon' ) ) {
|
|
$wpmdb_cli = wp_migrate_db_pro_cli_addon();
|
|
} else {
|
|
$wpmdb_cli = wpmdb_pro_cli();
|
|
}
|
|
} else {
|
|
$wpmdb_cli = wpmdb_cli();
|
|
}
|
|
|
|
return $wpmdb_cli->get_profile_data_from_args( $args, $assoc_args );
|
|
}
|
|
|
|
/**
|
|
* Perform CLI migration.
|
|
*
|
|
* @param mixed $profile Profile key or array
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _perform_cli_migration( $profile ) {
|
|
$wpmdb_cli = null;
|
|
|
|
//load correct cli class
|
|
if ( function_exists( 'wpmdb_pro_cli' ) ) {
|
|
$wpmdb_cli = wpmdb_pro_cli();
|
|
} else {
|
|
$wpmdb_cli = wpmdb_cli();
|
|
}
|
|
|
|
if ( empty( $wpmdb_cli ) ) {
|
|
WP_CLI::error( __( 'WP Migrate DB CLI class not available.', 'wp-migrate-db-cli' ) );
|
|
|
|
return;
|
|
}
|
|
|
|
$result = $wpmdb_cli->cli_migration( $profile );
|
|
|
|
if ( ! is_wp_error( $result ) ) {
|
|
$success_msg = sprintf( __( 'Export saved to: %s', 'wp-migrate-db-cli' ), $result );
|
|
|
|
if ( 'find_replace' === $profile['action'] ) {
|
|
$success_msg = __( 'Find & Replace complete', 'wp-migrate-db-cli' );
|
|
}
|
|
|
|
WP_CLI::success( $success_msg );
|
|
} elseif ( is_wp_error( $result ) ) {
|
|
WP_CLI::error( WPMDB_CLI::cleanup_message( $result->get_error_message() ) );
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
WP_CLI::add_command( 'migratedb', 'WPMDB_Command' );
|