Command::diff_items( $args, $assoc_args )
Compare items between environments.
Contents
Description Description
[
[–fields=
Source Source
File: libraries/lifterlms-cli/src/Commands/Restful/Command.php
public function diff_items( $args, $assoc_args ) {
list( $alias ) = $args;
if ( ! array_key_exists( $alias, \WP_CLI::get_runner()->aliases ) ) {
\WP_CLI::error( "Alias '{$alias}' not found." );
}
$resource = isset( $args[1] ) ? $args[1] : null;
$fields = \WP_CLI\Utils\get_flag_value( $assoc_args, 'fields', null );
list( $from_status, $from_body, $from_headers ) = $this->do_request( 'GET', $this->get_base_route(), array() );
$php_bin = \WP_CLI::get_php_binary();
$script_path = $GLOBALS['argv'][0];
$other_args = implode( ' ', array_map( 'escapeshellarg', array( $alias, 'rest', $this->name, 'list' ) ) );
$other_assoc_args = \WP_CLI\Utils\assoc_args_to_str( array( 'format' => 'envelope' ) );
$full_command = "{$php_bin} {$script_path} {$other_args} {$other_assoc_args}";
$process = \WP_CLI\Process::create(
$full_command,
null,
array(
'HOME' => getenv( 'HOME' ),
'WP_CLI_PACKAGES_DIR' => getenv( 'WP_CLI_PACKAGES_DIR' ),
'WP_CLI_CONFIG_PATH' => getenv( 'WP_CLI_CONFIG_PATH' ),
)
);
$result = $process->run();
$response = json_decode( $result->stdout, true );
$to_headers = $response['headers'];
$to_body = $response['body'];
$to_api_url = $response['api_url'];
if ( ! is_null( $resource ) ) {
$field = is_numeric( $resource ) ? 'id' : 'slug';
$callback = function( $value ) use ( $field, $resource ) {
if ( isset( $value[ $field ] ) && $resource == $value[ $field ] ) {
return true;
}
return false;
};
foreach ( array( 'to_body', 'from_body' ) as $response_type ) {
$$response_type = array_filter( $$response_type, $callback );
}
}
$display_items = array();
do {
$from_item = $to_item = array();
if ( ! empty( $from_body ) ) {
$from_item = array_shift( $from_body );
if ( ! empty( $to_body ) && ! empty( $from_item['slug'] ) ) {
foreach ( $to_body as $i => $item ) {
if ( ! empty( $item['slug'] ) && $item['slug'] === $from_item['slug'] ) {
$to_item = $item;
unset( $to_body[ $i ] );
break;
}
}
}
} elseif ( ! empty( $to_body ) ) {
$to_item = array_shift( $to_body );
}
if ( ! empty( $to_item ) ) {
foreach ( array( 'to_item', 'from_item' ) as $item ) {
if ( isset( $$item['_links'] ) ) {
unset( $$item['_links'] );
}
}
$display_items[] = array(
'from' => self::limit_item_to_fields( $from_item, $fields ),
'to' => self::limit_item_to_fields( $to_item, $fields ),
);
}
} while ( count( $from_body ) || count( $to_body ) );
\WP_CLI::line( \cli\Colors::colorize( "%R(-) {$this->api_url} %G(+) {$to_api_url}%n" ) );
foreach ( $display_items as $display_item ) {
$this->show_difference(
$this->name,
array(
'from' => $display_item['from'],
'to' => $display_item['to'],
)
);
}
}
Expand full source code Collapse full source code View on GitHub