Automattic\WooCommerce\Internal\CLI\Migrator\Core

ProductsController::handle_existing_sessionprivateWC 1.0

Handle existing session with user prompt for resume decision.

Method of the class: ProductsController{}

No Hooks.

Returns

ImportSession|null. Session to use or null on error.

Usage

// private - for code of main (parent) class only
$result = $this->handle_existing_session( $session, $parsed_args ): ?ImportSession;
$session(ImportSession) (required)
The existing session.
$parsed_args(array) (required)
Parsed command arguments.

ProductsController::handle_existing_session() code WC 10.8.1

private function handle_existing_session( ImportSession $session, array $parsed_args ): ?ImportSession {
	// Display session information.
	$metadata = $session->get_metadata();

	$total_imported    = $session->count_all_imported_entities();
	$total_entities    = $session->count_all_total_entities();
	$started_timestamp = $session->get_started_at();
	$started_at        = is_numeric( $started_timestamp ) ?
		get_date_from_gmt( gmdate( 'Y-m-d H:i:s', (int) $started_timestamp ) ) :
		$started_timestamp;

	WP_CLI::line( '' );
	WP_CLI::line( WP_CLI::colorize( '%YExisting Migration Session Found:%n' ) );
	WP_CLI::line( sprintf( '  Session ID: %d', $session->get_id() ) );
	WP_CLI::line( sprintf( '  Platform: %s', $metadata['data_source'] ) );
	WP_CLI::line( sprintf( '  Started: %s', $started_at ) );
	WP_CLI::line( sprintf( '  Progress: %d / %d products imported', $total_imported, $total_entities ) );

	if ( ( $parsed_args['verbose'] ?? false ) && $session->get_reentrancy_cursor() ) {
		WP_CLI::line( sprintf( '  Last Cursor: %s', substr( $session->get_reentrancy_cursor(), 0, 50 ) . '...' ) );
	}

	$original_args = $session->get_original_arguments();
	if ( $original_args ) {
		WP_CLI::line( '' );
		WP_CLI::line( WP_CLI::colorize( '%YOriginal Command Arguments:%n' ) );
		$this->display_saved_arguments( $original_args );
	}

	WP_CLI::line( '' );

	$should_resume = $parsed_args['resume'] ?? false;

	if ( ! $should_resume ) {
		WP_CLI::out( 'Do you want to resume this migration session? [y/n] ' );
		$answer = $this->get_user_input();
		if ( 'y' === $answer ) {
			$should_resume = true;
		} else {
			$should_resume = false;
		}
	}

	if ( $should_resume ) {
		WP_CLI::success( sprintf( 'Resuming migration session %d', $session->get_id() ) );

		$original_args = $session->get_original_arguments();
		if ( $original_args ) {
			$this->restore_original_arguments( $original_args );
			WP_CLI::line( 'Original command arguments have been restored.' );
		}

		return $session;
	} else {
		$session->archive();
		WP_CLI::line( 'Previous session archived. Starting a new import session.' );

		$new_session = $this->create_new_session( $parsed_args );

		if ( $new_session ) {
			WP_CLI::success( sprintf( 'Starting fresh migration from the beginning (Session %d)', $new_session->get_id() ) );
		}

		return $new_session;
	}
}