WordPress 4.6.1
[autoinstalls/wordpress.git] / wp-content / plugins / akismet / class.akismet-cli.php
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 }