File: /storage/v4513/ivenusin/public_html/wp-content/plugins/amp/src/Support/SupportCliCommand.php
<?php
/**
* CLI command for support request.
*
* @package AmpProject\AmpWP
*/
namespace AmpProject\AmpWP\Support;
use AmpProject\AmpWP\Infrastructure\CliCommand;
use AmpProject\AmpWP\Infrastructure\Injector;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_CLI;
use function WP_CLI\Utils\get_flag_value;
/**
* Service class for support.
*
* @internal
* @since 2.2
*/
class SupportCliCommand implements Service, CliCommand {
/**
* Injector.
*
* @var Injector
*/
private $injector;
/**
* Class constructor.
*
* @param Injector $injector Injector.
*/
public function __construct( Injector $injector ) {
$this->injector = $injector;
}
/**
* Get the name under which to register the CLI command.
*
* @return string The name under which to register the CLI command.
*/
public static function get_command_name() {
return 'amp support';
}
/**
* Sends support data to endpoint.
*
* ## OPTIONS
*
* [--is-synthetic]
* : Whether or not it is synthetic data.
* ---
* default: false
* options:
* - true
* - false
*
* [--print]
* : To print support data.
* ---
* default: json-pretty
* options:
* - json
* - json-pretty
*
* [--endpoint=<string>]
* : Support endpoint. Where support data will send.
*
* [--urls=<urls>]
* : List of URL for which support data need to send. Use comma separator for multiple URLs.
*
* [--post_ids=<post_ids>]
* : List of Post for which support data need to send. Use comma separator for multiple post ids.
*
* [--term_ids=<term_ids>]
* : List of term for which support data need to send. Use comma separator for multiple term ids.
*
* ## EXAMPLES
*
* wp amp support send-diagnostic
*
* @subcommand send-diagnostic
*
* @codeCoverageIgnore
*
* @param array $args Positional args.
* @param array $assoc_args Associative args.
*/
public function send_diagnostic( /** @noinspection PhpUnusedParameterInspection */ $args, $assoc_args ) {
$is_print = filter_var( get_flag_value( $assoc_args, 'print', false ), FILTER_SANITIZE_STRING );
$is_synthetic = filter_var( get_flag_value( $assoc_args, 'is-synthetic', false ), FILTER_SANITIZE_STRING );
$endpoint = filter_var( get_flag_value( $assoc_args, 'endpoint', '' ), FILTER_SANITIZE_STRING );
$endpoint = untrailingslashit( $endpoint );
$urls = filter_var( get_flag_value( $assoc_args, 'urls', false ), FILTER_SANITIZE_STRING );
$post_ids = filter_var( get_flag_value( $assoc_args, 'post_ids', false ), FILTER_SANITIZE_STRING );
$term_ids = filter_var( get_flag_value( $assoc_args, 'term_ids', false ), FILTER_SANITIZE_STRING );
$args = [
'urls' => ( ! empty( $urls ) ) ? explode( ',', $urls ) : [],
'post_ids' => ( ! empty( $post_ids ) ) ? explode( ',', $post_ids ) : [],
'term_ids' => ( ! empty( $term_ids ) ) ? explode( ',', $term_ids ) : [],
'endpoint' => $endpoint,
'is_synthetic' => $is_synthetic,
];
$support_data = $this->injector->make( SupportData::class, [ 'args' => $args ] );
$data = $support_data->get_data();
if ( $is_print ) {
// Print the data.
$print = strtolower( trim( $is_print ) );
if ( 'json' === $print ) {
echo wp_json_encode( $data ) . PHP_EOL;
} else {
echo wp_json_encode( $data, JSON_PRETTY_PRINT ) . PHP_EOL;
}
} else {
$response = $support_data->send_data();
if ( is_wp_error( $response ) ) {
$error_message = $response->get_error_message();
WP_CLI::warning( "Something went wrong: $error_message" );
} elseif ( empty( $response['status'] ) || 'ok' !== $response['status'] ) {
WP_CLI::warning( 'Failed to send diagnostic data.' );
} elseif ( isset( $response['data']['uuid'] ) ) {
WP_CLI::success( 'UUID : ' . $response['data']['uuid'] );
}
}
/*
* Summary of data.
*/
$url_error_relationship = [];
foreach ( $data['urls'] as $url ) {
foreach ( $url['errors'] as $error ) {
foreach ( $error['sources'] as $source ) {
$url_error_relationship[] = $url['url'] . '-' . $error['error_slug'] . '-' . $source;
}
}
}
$plugin_count = count( $data['plugins'] );
if ( $is_synthetic ) {
$plugin_count_text = ( $plugin_count - 3 ) . " - Excluding common plugins of synthetic sites. ( $plugin_count - 3 )";
} else {
$plugin_count_text = $plugin_count;
}
$summary = [
'Site URL' => SupportData::get_home_url(),
'Plugin count' => $plugin_count_text,
'Themes' => count( $data['themes'] ),
'Errors' => count( array_values( $data['errors'] ) ),
'Error Sources' => count( array_values( $data['error_sources'] ) ),
'Validated URL' => count( array_values( $data['urls'] ) ),
'URL Error Relationship' => count( array_values( $url_error_relationship ) ),
];
if ( $is_synthetic ) {
$summary['Synthetic Data'] = 'Yes';
}
WP_CLI::log( sprintf( PHP_EOL . "%'=100s", '' ) );
WP_CLI::log( 'Summary of AMP data' );
WP_CLI::log( sprintf( "%'=100s", '' ) );
foreach ( $summary as $key => $value ) {
WP_CLI::log( sprintf( '%-25s : %s', $key, $value ) );
}
WP_CLI::log( sprintf( "%'=100s" . PHP_EOL, '' ) );
}
}