2 ) { $product_slug = $product_url_parts[ count( $product_url_parts ) - 2 ]; } return array( 'product_slug' => $product_slug, 'product_name' => htmlspecialchars_decode( $item['product_name'] ), 'auto_renew' => $item['autorenew'] ? 'On' : 'Off', 'expires_on' => gmdate( 'Y-m-d', $item['expires'] ), 'expired' => $item['expired'] ? 'Yes' : 'No', 'sites_max' => $item['sites_max'], 'sites_active' => $item['sites_active'], 'maxed' => $item['maxed'] ? 'Yes' : 'No', ); }, $data ); $formatter->display_items( $data ); } /** * ## OPTIONS * * [--yes] * : Do not prompt for confirmation. * * ## EXAMPLES * * # Disconnect from site. * $ wp wc com disconnect * * # Disconnect without prompt for confirmation. * $ wp wc com disconnect --yes * * @param array $args Positional arguments to include when calling the command. * @param array $assoc_args Associative arguments to include when calling the command. * @return void * @throws \WP_CLI\ExitException If WP_CLI::$capture_exit is true. */ public static function disconnect( array $args, array $assoc_args ) { if ( ! WC_Helper::is_site_connected() ) { WP_CLI::error( __( 'Your store is not connected to Woo.com. Run `wp wc com connect` command.', 'woocommerce' ) ); } WP_CLI::confirm( __( 'Are you sure you want to disconnect your store from Woo.com?', 'woocommerce' ), $assoc_args ); WC_Helper::disconnect(); WP_CLI::success( __( 'You have successfully disconnected your store from Woo.com', 'woocommerce' ) ); } /** * Connects to Woo.com with application-password. * * [--password] * : If set, password won't be prompt. * * [--force] * : If set, site will be disconnected and a new connection will be forced. * * ## EXAMPLES * * # Connect to WCCOM using password. * $ wp wc com connect * * # force connecting to WCCOM even if site is already connected. * $ wp wc com connect --force * * # Pass password to comman. * $ wp wc com connect --password=PASSWORD * * @param array $args Positional arguments to include when calling the command. * @param array $assoc_args Associative arguments to include when calling the command. * * @return void * @throws \WP_CLI\ExitException If WP_CLI::$capture_exit is true. */ public static function connect( array $args, array $assoc_args ) { $password = \WP_CLI\Utils\get_flag_value( $assoc_args, 'password' ); $force = \WP_CLI\Utils\get_flag_value( $assoc_args, 'force', false ); if ( WC_Helper::is_site_connected() ) { if ( $force ) { WC_Helper::disconnect(); } else { WP_CLI::error( __( 'Your store is already connected.', 'woocommerce' ) ); return; } } if ( empty( $password ) ) { // translators: %s is the URL for the application-password section in Woo.com. WP_CLI::log( sprintf( __( 'If you don\'t have an application password (not your account password), generate a password from %s', 'woocommerce' ), esc_url( self::APPLICATION_PASSWORD_SECTION_URL ) ) ); $password = self::ask( __( 'Connection password:', 'woocommerce' ) ); } $password = sanitize_text_field( $password ); if ( empty( $password ) ) { // translators: %s is the URL for the application-password section in Woo.com. WP_CLI::error( sprintf( __( 'Invalid password. Generate a new one from %s.', 'woocommerce' ), esc_url( self::APPLICATION_PASSWORD_SECTION_URL ) ) ); } $auth = WC_Helper::connect_with_password( $password ); if ( is_wp_error( $auth ) ) { WP_CLI::error( $auth->get_error_message() ); } if ( WC_Helper::is_site_connected() ) { WP_CLI::success( __( 'Store connected successfully.', 'woocommerce' ) ); } } /** * We are asking a question and returning an answer as a string. * * @param string $question The question being prompt. * * @return string */ protected static function ask( $question ) { // phpcs:disable WordPress.WP.AlternativeFunctions.file_system_read_fwrite // Adding space to question and showing it. fwrite( STDOUT, $question . ' ' ); return trim( fgets( STDIN ) ); // phpcs:enable } }