<?php
use \WP_CLI\Utils;
/**
* Class EIG_WP_CLI_Command
*
* Extend this class for all WP-CLI Commands to inherit updates to the \WP_CLI_Command class and helper utilities.
*/
abstract class EIG_WP_CLI_Command extends \WP_CLI_Command {
/**
* Helper to format data into tables.
*
* By default, the method creates simple $key => $value tables.
* Set $type to 'adv' and the table inherits keys from $data. DATA MUST BE UNIFORM & MATCH FIRST ROW.
*
* 1. Provide $data as an array or object
* 2. Provide $keys as two strings -- by default 'DETAIL' and 'VALUE' are used.
* 3. Prints ASCII Table
*
* @param array $data
* @param array $keys
* @param string $type
*/
protected function table( $data, $keys = array( 'DETAIL', 'VALUE' ), $type = 'simple' ) {
if ( empty( $data ) ) {
return;
}
if ( 'adv' === $type ) {
$items = $data;
$keys = array_keys( array_shift( $data ) );
} else {
$items = array();
foreach ( $data as $detail => $value ) {
$items[] = array(
$keys[0] => $detail,
$keys[1] => $value,
);
}
}
Utils\format_items( 'table', $items, $keys );
}
/**
* Creates Heading with Blue background and Grey text.
*
* @param string $message
* @param string $emoji
*/
protected function bold_heading( $message, $emoji = '' ) {
$this->colorize_log( $message, '4', 'W', $emoji );
}
/**
* Formatted Success message.
*
* @param string $message
*/
protected function success( $message, $silent = false ) {
$pre_ = $silent ? '' : 'Success: ';
$this->colorize_log( $pre_ . $message, '2', 'k', '✅' );
}
/**
* Formatted Info message.
*
* @param string $message
*/
protected function info( $message ) {
$this->colorize_log( $message, '4', 'W', 'ℹ️' );
}
/**
* Formatted Warning message.
*
* @param string $message
*/
protected function warning( $message ) {
$this->colorize_log( $message, '3', 'k', '⚠️' );
}
/**
* Formatted Error message. Halts by default.
*
* @param string $message
* @param bool $silent
* @param bool $halt
* @param int $code
*
* @throws \WP_CLI\ExitException
*/
protected function error( $message, $silent = false, $halt = true, $code = 400 ) {
$pre_ = $silent ? '' : 'Error: ';
$this->colorize_log( $pre_ . $message, '1', 'W', '🛑️' );
if ( $halt ) {
WP_CLI::halt( $code );
}
}
/**
* Formatting helper for colorized messages.
*
* @param string $message
* @param string $background
* @param string $text_color
* @param string $emoji_prefix
*/
protected function colorize_log( $message = '', $background = '', $text_color = '%_', $emoji_prefix = '' ) {
if ( ! empty( $background ) ) {
$background = '%' . $background;
}
if ( ! empty( $text_color ) && false === strpos( $text_color, '%' ) ) {
$text_color = '%' . $text_color;
}
if ( ! empty( $emoji_prefix ) ) {
$message = $emoji_prefix . ' ' . $message;
}
\WP_CLI::log( \WP_CLI::colorize( $background . $text_color . $message . '%n' ) );
}
/**
* Empty linebreak
*/
protected function new_line() {
\WP_CLI::log( __return_empty_string() );
}
/**
* Helper function for returning clean JSON response.
*
* @param array|string $data - Provide well-formed array or existing JSON string.
*/
protected function log_to_json( $data ) {
if ( is_array( $data ) ) {
\WP_CLI::log( json_encode( $data ) );
} elseif ( is_array( json_decode( $data, true ) ) ) {
\WP_CLI::log( $data );
} else {
$this->error( 'Provided $data wasn\'t valid array or JSON string.' );
}
}
/**
* Formatted Confirm Dialog. A 'n' response breaks the thread.
*
* @param string $question
* @param string $type
*
* @throws \WP_CLI\ExitException
*/
protected function confirm( $question, $type = 'normal' ) {
switch ( $type ) {
case 'omg':
\WP_CLI::confirm( $this->warning( '☢ 🙊 🙈 🙊 ☢️ ' . $question ) );
break;
case 'red':
\WP_CLI::confirm( $this->error( $question, true ) );
break;
case 'yellow':
\WP_CLI::confirm( $this->warning( $question ) );
break;
case 'green':
\WP_CLI::confirm( $this->success( $question ) );
break;
case 'underline':
\WP_CLI::confirm( $this->colorize_log( $question, '', 'U' ) );
break;
case 'normal':
default:
\WP_CLI::confirm( $question );
break;
}
}
}