diff options
Diffstat (limited to 'wp-content/plugins/akismet/class.akismet-cli.php')
-rw-r--r-- | wp-content/plugins/akismet/class.akismet-cli.php | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/wp-content/plugins/akismet/class.akismet-cli.php b/wp-content/plugins/akismet/class.akismet-cli.php new file mode 100644 index 0000000..f0ea217 --- /dev/null +++ b/wp-content/plugins/akismet/class.akismet-cli.php @@ -0,0 +1,186 @@ +<?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; + } + + $request_args = array( + 'blog' => get_option( 'home' ), + 'key' => $api_key, + 'from' => $interval, + ); + + $request_args = apply_filters( 'akismet_request_args', $request_args, 'get-stats' ); + + $response = Akismet::http_post( Akismet::build_query( $request_args ), '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 ) ) ); + } + } +}
\ No newline at end of file |