wp/wp-content/plugins/akismet/class.akismet-cli.php
changeset 7 cf61fcea0001
child 9 177826044cd9
equal deleted inserted replaced
6:490d5cc509ed 7:cf61fcea0001
       
     1 <?php
       
     2 
       
     3 WP_CLI::add_command( 'akismet', 'Akismet_CLI' );
       
     4 
       
     5 /**
       
     6  * Filter spam comments.
       
     7  */
       
     8 class Akismet_CLI extends WP_CLI_Command {
       
     9 	/**
       
    10 	 * Checks one or more comments against the Akismet API.
       
    11 	 *
       
    12 	 * ## OPTIONS
       
    13 	 * <comment_id>...
       
    14 	 * : The ID(s) of the comment(s) to check.
       
    15 	 *
       
    16 	 * [--noaction]
       
    17 	 * : Don't change the status of the comment. Just report what Akismet thinks it is.
       
    18 	 *
       
    19 	 * ## EXAMPLES
       
    20 	 *
       
    21 	 *     wp akismet check 12345
       
    22 	 *
       
    23 	 * @alias comment-check
       
    24 	 */
       
    25 	public function check( $args, $assoc_args ) {
       
    26 		foreach ( $args as $comment_id ) {
       
    27 			if ( isset( $assoc_args['noaction'] ) ) {
       
    28 				// Check the comment, but don't reclassify it.
       
    29 				$api_response = Akismet::check_db_comment( $comment_id, 'wp-cli' );
       
    30 			}
       
    31 			else {
       
    32 				$api_response = Akismet::recheck_comment( $comment_id, 'wp-cli' );
       
    33 			}
       
    34 			
       
    35 			if ( 'true' === $api_response ) {
       
    36 				WP_CLI::line( sprintf( __( "Comment #%d is spam.", 'akismet' ), $comment_id ) );
       
    37 			}
       
    38 			else if ( 'false' === $api_response ) {
       
    39 				WP_CLI::line( sprintf( __( "Comment #%d is not spam.", 'akismet' ), $comment_id ) );
       
    40 			}
       
    41 			else {
       
    42 				if ( false === $api_response ) {
       
    43 					WP_CLI::error( __( "Failed to connect to Akismet.", 'akismet' ) );
       
    44 				}
       
    45 				else if ( is_wp_error( $api_response ) ) {
       
    46 					WP_CLI::warning( sprintf( __( "Comment #%d could not be checked.", 'akismet' ), $comment_id ) );
       
    47 				}
       
    48 			}
       
    49 		}
       
    50 	}
       
    51 	
       
    52 	/**
       
    53 	 * Recheck all comments in the Pending queue.
       
    54 	 *
       
    55 	 * ## EXAMPLES
       
    56 	 *
       
    57 	 *     wp akismet recheck_queue
       
    58 	 *
       
    59 	 * @alias recheck-queue
       
    60 	 */
       
    61 	public function recheck_queue() {
       
    62 		$batch_size = 100;
       
    63 		$start = 0;
       
    64 		
       
    65 		$total_counts = array();
       
    66 		
       
    67 		do {
       
    68 			$result_counts = Akismet_Admin::recheck_queue_portion( $start, $batch_size );
       
    69 			
       
    70 			if ( $result_counts['processed'] > 0 ) {
       
    71 				foreach ( $result_counts as $key => $count ) {
       
    72 					if ( ! isset( $total_counts[ $key ] ) ) {
       
    73 						$total_counts[ $key ] = $count;
       
    74 					}
       
    75 					else {
       
    76 						$total_counts[ $key ] += $count;
       
    77 					}
       
    78 				}
       
    79 				$start += $batch_size;
       
    80 				$start -= $result_counts['spam']; // These comments will have been removed from the queue.
       
    81 			}
       
    82 		} while ( $result_counts['processed'] > 0 );
       
    83 		
       
    84 		WP_CLI::line( sprintf( _n( "Processed %d comment.", "Processed %d comments.", $total_counts['processed'], 'akismet' ), number_format( $total_counts['processed'] ) ) );
       
    85 		WP_CLI::line( sprintf( _n( "%d comment moved to Spam.", "%d comments moved to Spam.", $total_counts['spam'], 'akismet' ), number_format( $total_counts['spam'] ) ) );
       
    86 		
       
    87 		if ( $total_counts['error'] ) {
       
    88 			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'] ) ) );
       
    89 		}
       
    90 	}
       
    91 }