File ManagerCurrent Directory: wp-content/plugins/wp-migrate-db/class/Common/CliLinux appserver-0d5e4f1e-php-cc8da225320a42ba9b7d66cba40b1f03 6.6.123+ #1 SMP PREEMPT_DYNAMIC Wed Mar 11 09:04:28 UTC 2026 x86_64Edit File: Cli.php <?php namespace DeliciousBrains\WPMDB\Common\Cli; use DeliciousBrains\WPMDB\Common\Error\ErrorLog; use DeliciousBrains\WPMDB\Common\FormData\FormData; use DeliciousBrains\WPMDB\Common\Http\Helper; use DeliciousBrains\WPMDB\Common\Migration\FinalizeMigration; use DeliciousBrains\WPMDB\Common\Migration\InitiateMigration; use DeliciousBrains\WPMDB\Common\Migration\MigrationManager; use DeliciousBrains\WPMDB\Common\MigrationState\MigrationStateManager; use DeliciousBrains\WPMDB\Common\Profile\ProfileImporter; use DeliciousBrains\WPMDB\Common\Properties\DynamicProperties; use DeliciousBrains\WPMDB\Common\Sql\Table; use DeliciousBrains\WPMDB\Common\Util\Util; use DeliciousBrains\WPMDB\Container; use DeliciousBrains\WPMDB\Common\MigrationPersistence\Persistence; use function WP_CLI\Utils\make_progress_bar; class Cli { /** * Migration profile. * * @var array */ protected $profile; /** * Data to post during migration. * * @var array */ protected $post_data = array(); /** * Migration Data * * @var array */ protected $migration; /** * @var FormData */ protected $form_data; /** * @var Util */ protected $util; /** * @var CliManager */ protected $cli_manager; /** * @var Table */ protected $table; /** * @var ErrorLog */ protected $error_log; /** * @var InitiateMigration */ protected $initiate_migration; /** * @var FinalizeMigration */ protected $finalize_migration; /** * @var Helper */ protected $http_helper; /** * @var MigrationManager */ protected $migration_manager; /** * @var MigrationStateManager */ protected $migration_state_manager; /** * @var ProfileImporter */ protected $profile_importer; /** * @var DynamicProperties */ private $dynamic_properties; private $wpmdb_cli; function __construct( FormData $form_data, Util $util, CliManager $cli_manager, Table $table, ErrorLog $error_log, InitiateMigration $initiate_migration, FinalizeMigration $finalize_migration, Helper $http_helper, MigrationManager $migration_manager, MigrationStateManager $migration_state_manager ) { $this->form_data = $form_data; $this->util = $util; $this->cli_manager = $cli_manager; $this->table = $table; $this->error_log = $error_log; $this->initiate_migration = $initiate_migration; $this->finalize_migration = $finalize_migration; $this->http_helper = $http_helper; $this->migration_manager = $migration_manager; $this->migration_state_manager = $migration_state_manager; $this->dynamic_properties = DynamicProperties::getInstance(); $this->profile_importer = new ProfileImporter($this->util, $this->table); } public function register() { add_filter('wpmdb_cli_finalize_migration_response', array($this, 'finalize_ajax'), 10, 2); add_filter('wpmdb_cli_tables_to_migrate', array($this, 'filter_non_database_migration_tables'), 99, 2); } /** * Checks profile data before CLI migration. * * @param int|array $profile Profile key or array. * * @return mixed|WP_Error */ public function pre_cli_migration_check($profile) { $profile = apply_filters('wpmdb_cli_profile_before_migration', $profile); if (is_wp_error($profile)) { return $profile; } if (is_array($profile)) { Persistence::cleanupStateOptions(); $profile = $this->form_data->parse_and_save_migration_form_data(json_encode($profile)); } $this->profile = $profile; if (!isset($this->profile['current_migration']['stages'])) { $this->profile['current_migration']['stages'] = array('tables'); } $this->profile['current_migration']['migration_id'] = Util::uuidv4(); return true; } /** * Performs CLI migration given a profile data. * * @param int|array $profile Profile key or array. * @param array $assoc_args * * @return bool|WP_Error Returns true if succeed or WP_Error if failed. */ public function cli_migration($profile, $assoc_args = array()) { $pre_check = $this->pre_cli_migration_check($profile); if (is_wp_error($pre_check)) { return $pre_check; } // At this point, $profile has been checked a retrieved into $this->profile, so should not be used in this function any further. if (empty($this->profile)) { return $this->cli_error(__('Profile not found or unable to be generated from params.', 'wp-migrate-db-cli')); } unset($profile); $this->util->set_time_limit(); $this->cli_manager->set_cli_migration(); if ('savefile' === $this->profile['action']) { $this->post_data['intent'] = 'savefile'; if (!empty($this->profile['export_dest'])) { $this->post_data['export_dest'] = $this->profile['export_dest']; } else { $this->post_data['export_dest'] = 'ORIGIN'; } } if ('find_replace' === $this->profile['action']) { $this->post_data['intent'] = 'find_replace'; } if ('import' === $this->profile['action']) { $this->post_data['intent'] = 'import'; if (!isset($this->profile['import_file'])) { if (isset($assoc_args['import-file'])) { $this->profile['import_file'] = $assoc_args['import-file']; } else { return $this->cli_error(__('Missing path to import file. Use --import-file=/path/to/import.sql.gz', 'wp-migrate-db')); } } } if ( isset($this->profile['current_migration'], $this->profile['current_migration']['intent']) && 'backup_local' === $this->profile['current_migration']['intent'] ) { $this->post_data['intent'] = 'savefile'; } // Ensure local site_details available. $this->post_data['site_details']['local'] = $this->util->site_details(); $this->profile = apply_filters('wpmdb_cli_filter_before_cli_initiate_migration', $this->profile, $this->post_data); if (is_wp_error($this->profile)) { \WP_CLI::error($this->profile->get_error_message()); } // Check for tables specified in migration profile that do not exist in the source database if (!empty($this->profile['select_tables']) && 'import' !== $this->profile['action']) { $source_tables = apply_filters('wpmdb_cli_filter_source_tables', $this->table->get_tables(), $this->profile); if (!empty($source_tables)) { // Return error if selected tables do not exist in source database $nonexistent_tables = array(); foreach ($this->profile['select_tables'] as $table) { if (!in_array($table, $source_tables)) { $nonexistent_tables[] = $table; } } if (!empty($nonexistent_tables)) { $local_or_remote = ('pull' === $this->profile['action']) ? 'remote' : 'local'; return $this->cli_error(sprintf(__('The following table(s) do not exist in the %1$s database: %2$s', 'wp-migrate-db-cli'), $local_or_remote, implode(', ', $nonexistent_tables))); } } } if (!empty($this->dynamic_properties->post_data)) { $this->post_data = $this->dynamic_properties->post_data; } if (is_wp_error($this->profile)) { return $this->profile; } $this->profile = apply_filters('wpmdb_cli_filter_before_migration', $this->profile, $this->post_data); do_action('wpmdb_cli_before_migration', $this->post_data, $this->profile); $this->migration = $this->cli_initiate_migration(); if (is_wp_error($this->migration)) { return $this->migration; } if ('import' === $this->profile['action']) { if ($this->profile['create_backup']) { $tables_to_process = $this->migrate_tables(); } else { $tables_to_process = $this->get_tables_to_migrate(); } } else { $tables_to_process = $this->migrate_tables(); } if (is_wp_error($tables_to_process)) { return $tables_to_process; } $this->post_data['tables'] = implode(',', $tables_to_process); do_action('wpmdb_cli_during_cli_migration', $this->post_data, $this->profile); $finalize = $this->finalize_migration(); if (is_wp_error($finalize) || in_array($this->profile['action'], ['savefile', 'backup_local'])) { return $finalize; } return true; } /** * Verify CLI response from endpoint. * * @param string $response Response from endpoint. * @param string $function_name Name of called function. * * @return WP_Error|string */ function verify_cli_response($response, $function_name) { if (is_wp_error($response)) { return $response; } $response = trim($response); if (false === $response) { return $this->cli_error($this->error_log->getError()); } if (false === Util::is_json($response)) { return $this->cli_error(sprintf(__('We were expecting a JSON response, instead we received: %2$s (function name: %1$s)', 'wp-migrate-db-cli'), $function_name, $response)); } $response = json_decode($response, true); if (isset($response['wpmdb_error'])) { return $this->cli_error($response['body']); } // Display warnings and non fatal error messages as CLI warnings without aborting. if (isset($response['wpmdb_warning']) || isset($response['wpmdb_non_fatal_error'])) { $body = (isset($response['cli_body'])) ? $response['cli_body'] : $response['body']; $messages = maybe_unserialize($body); foreach ((array) $messages as $message) { if ($message) { \WP_CLI::warning(self::cleanup_message($message)); } } } return $response; } /** * Return instance of WP_Error. * * @param string $message Error message. * * @return \WP_Error. */ function cli_error($message) { return new \WP_Error('wpmdb_cli_error', self::cleanup_message($message)); } /** * Cleanup message, replacing <br> with \n and removing HTML. * * @param string $message Error message. * * @return string $message. */ static function cleanup_message($message) { $message = html_entity_decode($message, ENT_QUOTES); $message = preg_replace('#<br\s*/?>#', "\n", $message); $message = trim(strip_tags($message)); return $message; } /** * Initiates migration and verifies result * * @return array|WP_Error */ function cli_initiate_migration() { do_action('wpmdb_cli_before_initiate_migration', $this->profile); \WP_CLI::log(__('Initiating migration...', 'wp-migrate-db-cli')); $migration_args = $this->post_data; $migration_args['form_data'] = json_encode($this->profile); $migration_args['stage'] = 'migrate'; $migration_args['site_details']['local'] = $this->util->site_details(); if ('find_replace' === $this->profile['action']) { $migration_args['stage'] = 'find_replace'; } $this->post_data = apply_filters('wpmdb_cli_initiate_migration_args', $migration_args, $this->profile); $this->post_data['site_details'] = json_encode($this->post_data['site_details']); $response = $this->initiate_migration($this->post_data); $initiate_migration_response = $this->verify_cli_response($response, 'initiate_migration()'); if (!is_wp_error($initiate_migration_response)) { $initiate_migration_response = apply_filters('wpmdb_cli_initiate_migration_response', $initiate_migration_response); } return $initiate_migration_response; } /** * Determine which tables to migrate * * @return array|WP_Error */ function get_tables_to_migrate() { $tables_to_migrate = $this->table->get_tables('prefix'); // @TODO Hack to get profile and post_data info available in other areas of the codebase... $this->dynamic_properties->profile = $this->profile; $this->dynamic_properties->post_data = $this->post_data; return apply_filters('wpmdb_cli_tables_to_migrate', $tables_to_migrate, $this->profile, $this->migration); } /** * Returns a WP-CLI progress bar instance * * @param array $tables * @param int $stage * * @return cli\progress\Bar|WP_CLI\NoOp */ function get_progress_bar($tables, $stage) { if($this->is_non_database_migration($this->profile)) { return null; } $progress_label = __('Exporting tables', 'wp-migrate-db-cli'); if ('find_replace' === $this->profile['action']) { $progress_label = __('Running find & replace', 'wp-migrate-db-cli'); if (1 === $stage) { $progress_label = __('Performing backup', 'wp-migrate-db-cli'); } } $progress_label = apply_filters('wpmdb_cli_progress_label', $progress_label, $stage, $tables); $progress_label = str_pad($progress_label, 20, ' '); $count = $this->get_total_rows_from_table_list($tables, $stage); return \WP_CLI\Utils\make_progress_bar($progress_label, $count); } /** * Returns total rows from list of tables * * @param array $tables * @param int $stage * * @return Int */ function get_total_rows_from_table_list($tables, $stage) { static $cached_results = array(); if (isset($cached_results[$stage])) { return $cached_results[$stage]; } $table_rows = $this->get_row_counts_from_table_list($tables, $stage); $cached_results[$stage] = array_sum(array_intersect_key($table_rows, array_flip($tables))); return $cached_results[$stage]; } /** * Returns row counts from list of tables * * @param array $tables * @param int $stage * * @return mixed */ function get_row_counts_from_table_list($tables, $stage) { static $cached_results = array(); if (isset($cached_results[$stage])) { return $cached_results[$stage]; } $local_table_rows = $this->table->get_table_row_count(); $cached_results[$stage] = apply_filters('wpmdb_cli_get_row_counts_from_table_list', $local_table_rows, $stage); return $cached_results[$stage]; } /** * @return array|mixed|string|void|WP_Error */ function migrate_tables() { if($this->is_non_database_migration($this->profile)) { return []; } $tables_to_migrate = $this->get_tables_to_migrate(); $this->dynamic_properties->post_data = $this->post_data; $tables = $tables_to_migrate; $stage_iterator = 2; $filtered_vars = apply_filters('wpmdb_cli_filter_before_migrate_tables', array( 'tables' => $tables, 'stage_iterator' => $stage_iterator, )); if (!is_array($filtered_vars)) { return $filtered_vars; } else { extract($filtered_vars, EXTR_OVERWRITE); } if (empty($tables) && !$this->is_non_database_migration($this->profile)) { return $this->cli_error(__('No tables selected for migration.', 'wp-migrate-db')); } $table_rows = $this->get_row_counts_from_table_list($tables, $stage_iterator); do_action('wpmdb_cli_before_migrate_tables', $this->profile, $this->migration); $notify = $this->get_progress_bar($tables, $stage_iterator); $args = $this->post_data; do { $migration_progress = 0; foreach ($tables as $key => $table) { $current_row = -1; $primary_keys = ''; $table_progress = 0; $table_progress_last = 0; $args['table'] = $table; $args['last_table'] = ($key == count($tables) - 1) ? '1' : '0'; do { // reset the current chunk $this->table->empty_current_chunk(); $args['current_row'] = $current_row; $args['primary_keys'] = $primary_keys; $args = apply_filters('wpmdb_cli_migrate_table_args', $args, $this->profile, $this->migration); $response = $this->migrate_table($args); $migrate_table_response = $this->verify_cli_response($response, 'migrate_table()'); if (is_wp_error($migrate_table_response)) { return $migrate_table_response; } $migrate_table_response = apply_filters('wpmdb_cli_migrate_table_response', $migrate_table_response, $_POST, $this->profile, $this->migration); $current_row = $migrate_table_response['current_row']; $primary_keys = $migrate_table_response['primary_keys']; $last_migration_progress = $migration_progress; if (-1 == $current_row) { $migration_progress -= $table_progress; $migration_progress += $table_rows[$table]; } else { if (0 === $table_progress_last) { $table_progress_last = $current_row; $table_progress = $table_progress_last; $migration_progress += $table_progress_last; } else { $iteration_progress = $current_row - $table_progress_last; $table_progress_last = $current_row; $table_progress += $iteration_progress; $migration_progress += $iteration_progress; } } $increment = $migration_progress - $last_migration_progress; if (null !== $notify) { $notify->tick($increment); } } while (-1 != $current_row); } if (null !== $notify) { $notify->finish(); } ++$stage_iterator; $args['stage'] = 'migrate'; if ('find_replace' === $args['intent']) { $args['stage'] = 'find_replace'; } if ('import' === $args['intent']) { break; } $tables = $tables_to_migrate; $table_rows = $this->get_row_counts_from_table_list($tables, $stage_iterator); if ($stage_iterator < 3) { $notify = $this->get_progress_bar($tables, $stage_iterator); } } while ($stage_iterator < 3); $this->post_data = $args; return $tables; } /** * Finalize migration * * @return bool|WP_Error */ function finalize_migration() { do_action('wpmdb_cli_before_finalize_migration', $this->profile, $this->migration); if (!$this->is_non_database_migration($this->profile)) { \WP_CLI::log(__('Cleaning up...', 'wp-migrate-db-cli')); } $finalize = apply_filters('wpmdb_cli_finalize_migration', true, $this->profile, $this->migration); if (is_wp_error($finalize)) { return $finalize; } $this->post_data = apply_filters('wpmdb_cli_finalize_migration_args', $this->post_data, $this->profile, $this->migration); $this->dynamic_properties->post_data = $this->post_data; if ('savefile' === $this->post_data['intent']) { return $this->finalize_export(); } $response = apply_filters('wpmdb_cli_finalize_migration_response', null, $this->post_data); $response = $this->verify_cli_response($response, 'finalize_migration()'); if (is_wp_error($response)) { return $response; } do_action('wpmdb_cli_after_finalize_migration', $this->profile, $this->migration); return true; } /** * Stub for ajax_initiate_migration() * * @param array|bool $args * * @return string */ function initiate_migration($args = false) { $_POST = $args; $response = $this->initiate_migration->ajax_initiate_migration(); return $response; } /** * stub for ajax_migrate_table() * * @param array|bool $args * * @return string */ function migrate_table($args = false) { $_POST = $args; $response = $this->migration_manager->ajax_migrate_table(); return $response; } /** * Stub for ajax_finalize_migration() * hooks on: wpmdb_cli_finalize_migration_response * * @param string $response * * @return string */ function finalize_ajax($response, $post_data) { if (is_wp_error($response)) { return $response; } // don't send redundant POST variables $args = $this->http_helper->filter_post_elements($post_data, array('action', 'migration_state_id', 'prefix', 'tables', 'profileID', 'profileType')); $_POST = $args; $response = $this->finalize_migration->ajax_finalize_migration(); return $this->verify_cli_response($response, 'finalize_ajax()'); } /** * Finalize Export by moving file to specified destination * * @return string|error */ function finalize_export() { $state_data = $this->migration_state_manager->set_post_data(); $temp_file = $state_data['dump_path']; if (!isset($state_data['export_dest']) || 'ORIGIN' === $state_data['export_dest']) { $response = $temp_file; } else { $dest_file = $state_data['export_dest']; if (file_exists($temp_file) && rename($temp_file, $dest_file)) { $response = $dest_file; } else { $response = $this->cli_error(__('Unable to move exported file.', 'wp-migrate-db')); } } return $response; } /** * Returns array of CLI options that are unknown to plugin and addons. * * @param array $assoc_args * * @return array */ public function get_unknown_args($assoc_args = array()) { $unknown_args = array(); if (empty($assoc_args)) { return $unknown_args; } $known_args = array( 'action', 'export_dest', 'find', 'replace', 'regex-find', 'regex-replace', 'case-sensitive-find', 'case-sensitive-replace', 'exclude-spam', 'gzip-file', 'exclude-post-revisions', 'skip-replace-guids', 'include-transients', 'exclude-database' ); $known_args = apply_filters('wpmdb_cli_filter_get_extra_args', $known_args); return array_diff(array_keys($assoc_args), $known_args); } /** * Get profile data from CLI args. * * @param array $args * @param array $assoc_args * * @return array|WP_Error */ public function get_profile_data_from_args($args, $assoc_args) { $name = null; $export_dest = null; $create_backup = '0'; $cli_profile = true; //load correct cli class if (function_exists('wp_migrate_db_pro_cli_addon') && function_exists('wp_migrate_db_pro')) { $this->wpmdb_cli = wp_migrate_db_pro_cli_addon(); } elseif (function_exists('wpmdb_pro_cli')) { $this->wpmdb_cli = wpmdb_pro_cli(); } else { $this->wpmdb_cli = wpmdb_cli(); } $unknown_args = $this->get_unknown_args($assoc_args); if (!empty($unknown_args)) { $message = __('Parameter errors: ', 'wp-migrate-db-cli'); foreach ($unknown_args as $unknown_arg) { $message .= "\n " . sprintf(__('unknown %s parameter', 'wp-migrate-db-cli'), '--' . $unknown_arg); } return $this->wpmdb_cli->cli_error($message); } foreach ($assoc_args as $key => $value) { if (empty($value)) { \WP_CLI::warning(__('--' . $key . ' parameter needs a value.', 'wp-migrate-db-cli')); } } if (empty($assoc_args['action'])) { return $this->wpmdb_cli->cli_error(__('Missing action parameter', 'wp-migrate-db-cli')); } if ('savefile' === $assoc_args['action'] && !empty($assoc_args['export_dest'])) { $export_dest = $assoc_args['export_dest']; } $action = $assoc_args['action']; // --find=<old> and --replace=<new> and --regex-find=<regex> and --regex-replace=<string> $replace_old = array(); $replace_new = array(); $regex = array(); $case_sensitive = array(); if(!empty($assoc_args['regex-find'])) { $regex_search = $assoc_args['regex-find']; if(!Util::is_regex_pattern_valid($regex_search)){ return $this->wpmdb_cli->cli_error(__('Please make sure Regular Expression find & replace pattern is valid', 'wp-migrate-db-cli')); } if (('find_replace' === $assoc_args['action']) && empty($assoc_args['regex-replace'])) { return $this->wpmdb_cli->cli_error(__('Missing Regex find and replace values.', 'wp-migrate-db-cli')); } $replace_old[] = $regex_search; $regex[count($replace_old)] = true; } if (!empty($assoc_args['regex-replace'])) { $regex_replace = $assoc_args['regex-replace']; if (('find_replace' === $assoc_args['action']) && empty($assoc_args['regex-find'])) { return $this->wpmdb_cli->cli_error(__('Missing Regex find and replace values.', 'wp-migrate-db-cli')); } $replace_new[] = $regex_replace; } if (!empty($assoc_args['case-sensitive-find'])) { $case_sensitive_search = $this->extract_argument('case-sensitive-find', $assoc_args); if (('find_replace' === $assoc_args['action']) && empty($assoc_args['case-sensitive-replace'])) { return $this->wpmdb_cli->cli_error(__('Missing case sensitive find and replace values.', 'wp-migrate-db-cli')); } $replace_old_count = count($replace_old); $i = $replace_old_count === 0 ? 1 : $replace_old_count+1; $replace_old = array_merge($replace_old, $case_sensitive_search); foreach ($case_sensitive_search as $value) { $case_sensitive[$i] = true; $i++; } } if (!empty($assoc_args['case-sensitive-replace'])) { $case_sensitive_replace = $this->extract_argument('case-sensitive-replace', $assoc_args); if (('find_replace' === $assoc_args['action']) && empty($assoc_args['case-sensitive-find'])) { return $this->wpmdb_cli->cli_error(__('Missing case sensitive find and replace values.', 'wp-migrate-db-cli')); } $replace_new = array_merge($replace_new, $case_sensitive_replace); } if (!empty($assoc_args['find'])) { $replace_old = array_merge($replace_old, str_getcsv($assoc_args['find'])); } else if (('find_replace' === $assoc_args['action']) && empty($regex_replace) && empty($regex_search) && empty($case_sensitive_search) && empty($case_sensitive_replace)) { if (empty($assoc_args['replace'])) { return $this->wpmdb_cli->cli_error(__('Missing find and replace values.', 'wp-migrate-db-cli')); } return $this->wpmdb_cli->cli_error(__('Find value is required.', 'wp-migrate-db-cli')); } if (!empty($assoc_args['replace'])) { $replace_new = array_merge($replace_new, str_getcsv($assoc_args['replace'])); } else { if ('find_replace' === $assoc_args['action'] && empty($regex_replace) && empty($regex_search) && empty($case_sensitive_search) && empty($case_sensitive_replace)) { return $this->wpmdb_cli->cli_error(__('Replace value is required.', 'wp-migrate-db-cli')); } } if (count($replace_old) !== count($replace_new)) { return $this->wpmdb_cli->cli_error(sprintf(__('%1$s and %2$s must contain the same number of values', 'wp-migrate-db-cli'), '--find', '--replace')); } // --exclude-spam $exclude_spam = (int)isset($assoc_args['exclude-spam']); // --gzip-file $gzip_file = (int)isset($assoc_args['gzip-file']); $select_post_types = $this->table->get_post_types(); $exclude_post_types = '0'; // --exclude-post-revisions if (!empty($assoc_args['exclude-post-revisions'])) { $select_post_types = ['revision']; // This gets flipped around in ProfileImporter::profileFormat(). $exclude_post_types = '1'; } // --skip-replace-guids $replace_guids = 1; if (isset($assoc_args['skip-replace-guids'])) { $replace_guids = 0; } $select_tables = array(); $table_migrate_option = 'migrate_only_with_prefix'; // --include-transients. $exclude_transients = intval(!isset($assoc_args['include-transients'])); //cleanup filename for exports if (!empty($export_dest)) { if ($gzip_file) { if ('gz' !== pathinfo($export_dest, PATHINFO_EXTENSION)) { if ('sql' === pathinfo($export_dest, PATHINFO_EXTENSION)) { $export_dest .= '.gz'; } else { $export_dest .= '.sql.gz'; } } } elseif ('sql' !== pathinfo($export_dest, PATHINFO_EXTENSION)) { $export_dest = preg_replace('/(\.sql)?(\.gz)?$/i', '', $export_dest) . '.sql'; } // ensure export destination is writable if (!@touch($export_dest)) { return $this->wpmdb_cli->cli_error(sprintf(__('Cannot write to file "%1$s". Please ensure that the specified directory exists and is writable.', 'wp-migrate-db-cli'), $export_dest)); } } $databaseEnabled = true; if ( ! empty($assoc_args['exclude-database'])) { $databaseEnabled = false; } $profile = compact( 'action', 'replace_old', 'table_migrate_option', 'replace_new', 'select_tables', 'exclude_post_types', 'select_post_types', 'replace_guids', 'exclude_spam', 'gzip_file', 'exclude_transients', 'export_dest', 'create_backup', 'name', 'cli_profile', 'regex', 'case_sensitive', 'databaseEnabled' ); $home = preg_replace('/^https?:/', '', home_url()); $path = esc_html(addslashes(Util::get_absolute_root_file_path())); $old_profile = apply_filters('wpmdb_cli_filter_get_profile_data_from_args', $profile, $args, $assoc_args); if (is_wp_error($old_profile)) { return $old_profile; } $new_profile = $this->profile_importer->profileFormat($old_profile, $home, $path); return array_merge($old_profile, $new_profile); } private function extract_argument($argument, $assoc_args) { if(!empty($assoc_args[$argument])) { return str_getcsv($assoc_args[$argument]); } return null; } /** * Checks if a database migration is turned off for the current migration profile. * * @param array $profile * * @return bool */ public function is_non_database_migration($profile) { return $profile['current_migration']['databaseEnabled'] === false && in_array($profile['action'], ['push', 'pull']); } /** * If the current migration is a non database migration, it filters the provided tables and returns an empty array. * hooks on: wpmdb_cli_tables_to_migrate. * * @param string[] $tables * @param array $profile * * @return array */ public function filter_non_database_migration_tables($tables, $profile) { if ($this->is_non_database_migration($profile)) { return []; } return $tables; } } Upload File Directory Listing NameTypeSizeActions.. (Parent Directory)DirCli.phpFile28.88 KB Rename | Delete | EditCliManager.phpFile408.00 B Rename | Delete | EditCommand.phpFile6.26 KB Rename | Delete | Edit