Seditio Source
Root |
./othercms/wordpress-6.0/wp-content/plugins/akismet/class.akismet-cli.php
<?php

WP_CLI
::add_command( 'akismet', 'Akismet_CLI' );

/**
 * Filter spam comments.
 */
class Akismet_CLI extends WP_CLI_Command {
   
/**
     * Checks one or more comments against the Akismet API.
     *
     * ## OPTIONS
     * <comment_id>...
     * : The ID(s) of the comment(s) to check.
     *
     * [--noaction]
     * : Don't change the status of the comment. Just report what Akismet thinks it is.
     *
     * ## EXAMPLES
     *
     *     wp akismet check 12345
     *
     * @alias comment-check
     */
   
public function check( $args, $assoc_args ) {
        foreach (
$args as $comment_id ) {
            if ( isset(
$assoc_args['noaction'] ) ) {
               
// Check the comment, but don't reclassify it.
               
$api_response = Akismet::check_db_comment( $comment_id, 'wp-cli' );
            }
            else {
               
$api_response = Akismet::recheck_comment( $comment_id, 'wp-cli' );
            }
           
            if (
'true' === $api_response ) {
               
WP_CLI::line( sprintf( __( "Comment #%d is spam.", 'akismet' ), $comment_id ) );
            }
            else if (
'false' === $api_response ) {
               
WP_CLI::line( sprintf( __( "Comment #%d is not spam.", 'akismet' ), $comment_id ) );
            }
            else {
                if (
false === $api_response ) {
                   
WP_CLI::error( __( "Failed to connect to Akismet.", 'akismet' ) );
                }
                else if (
is_wp_error( $api_response ) ) {
                   
WP_CLI::warning( sprintf( __( "Comment #%d could not be checked.", 'akismet' ), $comment_id ) );
                }
            }
        }
    }
   
   
/**
     * Recheck all comments in the Pending queue.
     *
     * ## EXAMPLES
     *
     *     wp akismet recheck_queue
     *
     * @alias recheck-queue
     */
   
public function recheck_queue() {
       
$batch_size = 100;
       
$start = 0;
       
       
$total_counts = array();
       
        do {
           
$result_counts = Akismet_Admin::recheck_queue_portion( $start, $batch_size );
           
            if (
$result_counts['processed'] > 0 ) {
                foreach (
$result_counts as $key => $count ) {
                    if ( ! isset(
$total_counts[ $key ] ) ) {
                       
$total_counts[ $key ] = $count;
                    }
                    else {
                       
$total_counts[ $key ] += $count;
                    }
                }
               
$start += $batch_size;
               
$start -= $result_counts['spam']; // These comments will have been removed from the queue.
           
}
        } while (
$result_counts['processed'] > 0 );
       
       
WP_CLI::line( sprintf( _n( "Processed %d comment.", "Processed %d comments.", $total_counts['processed'], 'akismet' ), number_format( $total_counts['processed'] ) ) );
       
WP_CLI::line( sprintf( _n( "%d comment moved to Spam.", "%d comments moved to Spam.", $total_counts['spam'], 'akismet' ), number_format( $total_counts['spam'] ) ) );
       
        if (
$total_counts['error'] ) {
           
WP_CLI::line( sprintf( _n( "%d comment could not be checked.", "%d comments could not be checked.", $total_counts['error'], 'akismet' ), number_format( $total_counts['error'] ) ) );
        }
    }
   
   
/**
     * Fetches stats from the Akismet API.
     *
     * ## OPTIONS
     *
     * [<interval>]
     * : The time period for which to retrieve stats.
     * ---
     * default: all
     * options:
     *  - days
     *  - months
     *  - all
     * ---
     *
     * [--format=<format>]
     * : Allows overriding the output of the command when listing connections.
     * ---
     * default: table
     * options:
     *  - table
     *  - json
     *  - csv
     *  - yaml
     *  - count
     * ---
     *
     * [--summary]
     * : When set, will display a summary of the stats.
     *
     * ## EXAMPLES
     *
     * wp akismet stats
     * wp akismet stats all
     * wp akismet stats days
     * wp akismet stats months
     * wp akismet stats all --summary
     */
   
public function stats( $args, $assoc_args ) {
       
$api_key = Akismet::get_api_key();
 
        if ( empty(
$api_key ) ) {
           
WP_CLI::error( __( 'API key must be set to fetch stats.', 'akismet' ) );
        }
 
        switch (
$args[0] ) {
            case
'days':
               
$interval = '60-days';
                break;
            case
'months':
               
$interval = '6-months';
                break;
            default:
               
$interval = 'all';
                break;
        }
 
       
$response = Akismet::http_post(
           
Akismet::build_query( array(
               
'blog' => get_option( 'home' ),
               
'key'  => $api_key,
               
'from' => $interval,
            ) ),
           
'get-stats'
       
);
 
        if ( empty(
$response[1] ) ) {
           
WP_CLI::error( __( 'Currently unable to fetch stats. Please try again.', 'akismet' ) );
        }
 
       
$response_body = json_decode( $response[1], true );
       
        if (
is_null( $response_body ) ) {
           
WP_CLI::error( __( 'Stats response could not be decoded.', 'akismet' ) );
        }
 
        if ( isset(
$assoc_args['summary'] ) ) {
           
$keys = array(
               
'spam',
               
'ham',
               
'missed_spam',
               
'false_positives',
               
'accuracy',
               
'time_saved',
            );
 
           
WP_CLI\Utils\format_items( $assoc_args['format'], array( $response_body ), $keys );
        }
        else {
           
$stats = $response_body['breakdown'];
           
WP_CLI\Utils\format_items( $assoc_args['format'], $stats, array_keys( end( $stats ) ) );
        }
    }
}