Akismet Anti-Spam - Version 4.1.7

Version Description

Release Date - 22 October 2020

  • Show the "Set up your Akismet account" banner on the comments admin screen, where it's relevant to mention if Akismet hasn't been configured.
  • Don't use wp_blacklist_check when the new wp_check_comment_disallowed_list function is available.
Download this release

Release Info

Developer cfinke
Plugin Icon 128x128 Akismet Anti-Spam
Version 4.1.7
Comparing to
See all releases

Code changes from version 4.1.6 to 4.1.7

Files changed (6) hide show
  1. akismet.php +2 -2
  2. changelog.txt +47 -0
  3. class.akismet-admin.php +8 -2
  4. class.akismet.php +44 -35
  5. readme.txt +11 -52
  6. views/stats.php +1 -1
akismet.php CHANGED
@@ -6,7 +6,7 @@
6
  Plugin Name: Akismet Anti-Spam
7
  Plugin URI: https://akismet.com/
8
  Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from spam</strong>. It keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.
9
- Version: 4.1.6
10
  Author: Automattic
11
  Author URI: https://automattic.com/wordpress-plugins/
12
  License: GPLv2 or later
@@ -37,7 +37,7 @@ if ( !function_exists( 'add_action' ) ) {
37
  exit;
38
  }
39
 
40
- define( 'AKISMET_VERSION', '4.1.6' );
41
  define( 'AKISMET__MINIMUM_WP_VERSION', '4.0' );
42
  define( 'AKISMET__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
43
  define( 'AKISMET_DELETE_LIMIT', 100000 );
6
  Plugin Name: Akismet Anti-Spam
7
  Plugin URI: https://akismet.com/
8
  Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from spam</strong>. It keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.
9
+ Version: 4.1.7
10
  Author: Automattic
11
  Author URI: https://automattic.com/wordpress-plugins/
12
  License: GPLv2 or later
37
  exit;
38
  }
39
 
40
+ define( 'AKISMET_VERSION', '4.1.7' );
41
  define( 'AKISMET__MINIMUM_WP_VERSION', '4.0' );
42
  define( 'AKISMET__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
43
  define( 'AKISMET_DELETE_LIMIT', 100000 );
changelog.txt CHANGED
@@ -5,6 +5,53 @@
5
  This file contains older changelog entries, so we can keep the size of the standard WordPress readme.txt file reasonable.
6
  For the latest changes, please see the "Changelog" section of the [readme.txt file](https://plugins.svn.wordpress.org/akismet/trunk/readme.txt).
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  = 4.0.8 =
9
  *Release Date - 19 June 2018*
10
 
5
  This file contains older changelog entries, so we can keep the size of the standard WordPress readme.txt file reasonable.
6
  For the latest changes, please see the "Changelog" section of the [readme.txt file](https://plugins.svn.wordpress.org/akismet/trunk/readme.txt).
7
 
8
+ = 4.1.5 =
9
+ *Release Date - 29 April 2020*
10
+
11
+ * Based on user feedback, we have dropped the in-admin notice explaining the availability of the "privacy notice" option in the AKismet settings screen. The option itself is available, but after displaying the notice for the last 2 years, it is now considered a known fact.
12
+ * Updated the "Requires at least" to WP 4.6, based on recommendations from https://wp-info.org/tools/checkplugini18n.php?slug=akismet
13
+ * Moved older changelog entries to a separate file to keep the size of this readme reasonable, also based on recommendations from https://wp-info.org/tools/checkplugini18n.php?slug=akismet
14
+
15
+ = 4.1.4 =
16
+ *Release Date - 17 March 2020*
17
+
18
+ * Only redirect to the Akismet setup screen upon plugin activation if the plugin was activated manually from within the plugin-related screens, to help users with non-standard install workflows, like WP-CLI.
19
+ * Update the layout of the initial setup screen to be more readable on small screens.
20
+ * If no API key has been entered, don't run code that expects an API key.
21
+ * Improve the readability of the comment history entries.
22
+ * Don't modify the comment form HTML if no API key has been set.
23
+
24
+ = 4.1.3 =
25
+ *Release Date - 31 October 2019*
26
+
27
+ * Prevented an attacker from being able to cause a user to unknowingly recheck their Pending comments for spam.
28
+ * Improved compatibility with Jetpack 7.7+.
29
+ * Updated the plugin activation page to use consistent language and markup.
30
+ * Redirecting users to the Akismet connnection/settings screen upon plugin activation, in an effort to make it easier for people to get setup.
31
+
32
+ = 4.1.2 =
33
+ *Release Date - 14 May 2019*
34
+
35
+ * Fixed a conflict between the Akismet setup banner and other plugin notices.
36
+ * Reduced the number of API requests made by the plugin when attempting to verify the API key.
37
+ * Include additional data in the pingback pre-check API request to help make the stats more accurate.
38
+ * Fixed a bug that was enabling the "Check for Spam" button when no comments were eligible to be checked.
39
+ * Improved Akismet's AMP compatibility.
40
+
41
+ = 4.1.1 =
42
+ *Release Date - 31 January 2019*
43
+
44
+ * Fixed the "Setup Akismet" notice so it resizes responsively.
45
+ * Only highlight the "Save Changes" button in the Akismet config when changes have been made.
46
+ * The count of comments in your spam queue shown on the dashboard show now always be up-to-date.
47
+
48
+ = 4.1 =
49
+ *Release Date - 12 November 2018*
50
+
51
+ * Added a WP-CLI method for retrieving stats.
52
+ * Hooked into the new "Personal Data Eraser" functionality from WordPress 4.9.6.
53
+ * Added functionality to clear outdated alerts from Akismet.com.
54
+
55
  = 4.0.8 =
56
  *Release Date - 19 June 2018*
57
 
class.akismet-admin.php CHANGED
@@ -612,7 +612,12 @@ class Akismet_Admin {
612
  $message = esc_html( __( 'Akismet cleared this comment.', 'akismet' ) );
613
  break;
614
  case 'wp-blacklisted':
615
- $message = sprintf( esc_html( __( 'Comment was caught by %s.', 'akismet' ) ), '<code>wp_blacklist_check</code>' );
 
 
 
 
 
616
  break;
617
  case 'report-spam':
618
  if ( isset( $row['user'] ) ) {
@@ -1055,7 +1060,8 @@ class Akismet_Admin {
1055
  if ( get_option( 'akismet_alert_code' ) > 0 )
1056
  self::display_alert();
1057
  }
1058
- elseif ( $hook_suffix == 'plugins.php' && !Akismet::get_api_key() ) {
 
1059
  self::display_api_key_warning();
1060
  }
1061
  elseif ( $hook_suffix == 'edit-comments.php' && wp_next_scheduled( 'akismet_schedule_cron_recheck' ) ) {
612
  $message = esc_html( __( 'Akismet cleared this comment.', 'akismet' ) );
613
  break;
614
  case 'wp-blacklisted':
615
+ case 'wp-disallowed':
616
+ $message = sprintf(
617
+ /* translators: The placeholder is a WordPress PHP function name. */
618
+ esc_html( __( 'Comment was caught by %s.', 'akismet' ) ),
619
+ function_exists( 'wp_check_comment_disallowed_list' ) ? '<code>wp_check_comment_disallowed_list</code>' : '<code>wp_blacklist_check</code>'
620
+ );
621
  break;
622
  case 'report-spam':
623
  if ( isset( $row['user'] ) ) {
1060
  if ( get_option( 'akismet_alert_code' ) > 0 )
1061
  self::display_alert();
1062
  }
1063
+ elseif ( ( 'plugins.php' === $hook_suffix || 'edit-comments.php' === $hook_suffix ) && ! Akismet::get_api_key() ) {
1064
+ // Show the "Set Up Akismet" banner on the comments and plugin pages if no API key has been set.
1065
  self::display_api_key_warning();
1066
  }
1067
  elseif ( $hook_suffix == 'edit-comments.php' && wp_next_scheduled( 'akismet_schedule_cron_recheck' ) ) {
class.akismet.php CHANGED
@@ -301,48 +301,56 @@ class Akismet {
301
  // as was checked by auto_check_comment
302
  if ( is_object( $comment ) && !empty( self::$last_comment ) && is_array( self::$last_comment ) ) {
303
  if ( self::matches_last_comment( $comment ) ) {
304
-
305
- load_plugin_textdomain( 'akismet' );
306
-
307
- // normal result: true or false
308
- if ( self::$last_comment['akismet_result'] == 'true' ) {
309
- update_comment_meta( $comment->comment_ID, 'akismet_result', 'true' );
310
- self::update_comment_history( $comment->comment_ID, '', 'check-spam' );
311
- if ( $comment->comment_approved != 'spam' )
312
- self::update_comment_history(
313
- $comment->comment_ID,
314
- '',
315
- 'status-changed-'.$comment->comment_approved
316
- );
317
- }
318
- elseif ( self::$last_comment['akismet_result'] == 'false' ) {
319
- update_comment_meta( $comment->comment_ID, 'akismet_result', 'false' );
320
- self::update_comment_history( $comment->comment_ID, '', 'check-ham' );
321
- // Status could be spam or trash, depending on the WP version and whether this change applies:
322
- // https://core.trac.wordpress.org/changeset/34726
323
- if ( $comment->comment_approved == 'spam' || $comment->comment_approved == 'trash' ) {
324
- if ( wp_blacklist_check($comment->comment_author, $comment->comment_author_email, $comment->comment_author_url, $comment->comment_content, $comment->comment_author_IP, $comment->comment_agent) )
325
- self::update_comment_history( $comment->comment_ID, '', 'wp-blacklisted' );
326
- else
327
- self::update_comment_history( $comment->comment_ID, '', 'status-changed-'.$comment->comment_approved );
328
- }
329
- } // abnormal result: error
330
- else {
331
- update_comment_meta( $comment->comment_ID, 'akismet_error', time() );
332
  self::update_comment_history(
333
  $comment->comment_ID,
334
  '',
335
- 'check-error',
336
- array( 'response' => substr( self::$last_comment['akismet_result'], 0, 50 ) )
337
  );
338
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
339
 
340
- // record the complete original data as submitted for checking
341
- if ( isset( self::$last_comment['comment_as_submitted'] ) )
342
- update_comment_meta( $comment->comment_ID, 'akismet_as_submitted', self::$last_comment['comment_as_submitted'] );
 
343
 
344
- if ( isset( self::$last_comment['akismet_pro_tip'] ) )
345
- update_comment_meta( $comment->comment_ID, 'akismet_pro_tip', self::$last_comment['akismet_pro_tip'] );
 
346
  }
347
  }
348
  }
@@ -486,6 +494,7 @@ class Akismet {
486
  $history[] = array( 'time' => 445856404, 'event' => 'recheck-ham' );
487
  $history[] = array( 'time' => 445856405, 'event' => 'check-ham' );
488
  $history[] = array( 'time' => 445856406, 'event' => 'wp-blacklisted' );
 
489
  $history[] = array( 'time' => 445856407, 'event' => 'report-spam' );
490
  $history[] = array( 'time' => 445856408, 'event' => 'report-spam', 'user' => 'sam' );
491
  $history[] = array( 'message' => 'sam reported this comment as spam (hardcoded message).', 'time' => 445856400, 'event' => 'report-spam', 'user' => 'sam' );
301
  // as was checked by auto_check_comment
302
  if ( is_object( $comment ) && !empty( self::$last_comment ) && is_array( self::$last_comment ) ) {
303
  if ( self::matches_last_comment( $comment ) ) {
304
+ load_plugin_textdomain( 'akismet' );
305
+
306
+ // normal result: true or false
307
+ if ( self::$last_comment['akismet_result'] == 'true' ) {
308
+ update_comment_meta( $comment->comment_ID, 'akismet_result', 'true' );
309
+ self::update_comment_history( $comment->comment_ID, '', 'check-spam' );
310
+ if ( $comment->comment_approved != 'spam' ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
311
  self::update_comment_history(
312
  $comment->comment_ID,
313
  '',
314
+ 'status-changed-' . $comment->comment_approved
 
315
  );
316
  }
317
+ } elseif ( self::$last_comment['akismet_result'] == 'false' ) {
318
+ update_comment_meta( $comment->comment_ID, 'akismet_result', 'false' );
319
+ self::update_comment_history( $comment->comment_ID, '', 'check-ham' );
320
+ // Status could be spam or trash, depending on the WP version and whether this change applies:
321
+ // https://core.trac.wordpress.org/changeset/34726
322
+ if ( $comment->comment_approved == 'spam' || $comment->comment_approved == 'trash' ) {
323
+ if ( function_exists( 'wp_check_comment_disallowed_list' ) ) {
324
+ if ( wp_check_comment_disallowed_list( $comment->comment_author, $comment->comment_author_email, $comment->comment_author_url, $comment->comment_content, $comment->comment_author_IP, $comment->comment_agent ) ) {
325
+ self::update_comment_history( $comment->comment_ID, '', 'wp-disallowed' );
326
+ } else {
327
+ self::update_comment_history( $comment->comment_ID, '', 'status-changed-' . $comment->comment_approved );
328
+ }
329
+ } else if ( function_exists( 'wp_blacklist_check' ) && wp_blacklist_check( $comment->comment_author, $comment->comment_author_email, $comment->comment_author_url, $comment->comment_content, $comment->comment_author_IP, $comment->comment_agent ) ) {
330
+ self::update_comment_history( $comment->comment_ID, '', 'wp-blacklisted' );
331
+ } else {
332
+ self::update_comment_history( $comment->comment_ID, '', 'status-changed-' . $comment->comment_approved );
333
+ }
334
+ }
335
+ } else {
336
+ // abnormal result: error
337
+ update_comment_meta( $comment->comment_ID, 'akismet_error', time() );
338
+ self::update_comment_history(
339
+ $comment->comment_ID,
340
+ '',
341
+ 'check-error',
342
+ array( 'response' => substr( self::$last_comment['akismet_result'], 0, 50 ) )
343
+ );
344
+ }
345
 
346
+ // record the complete original data as submitted for checking
347
+ if ( isset( self::$last_comment['comment_as_submitted'] ) ) {
348
+ update_comment_meta( $comment->comment_ID, 'akismet_as_submitted', self::$last_comment['comment_as_submitted'] );
349
+ }
350
 
351
+ if ( isset( self::$last_comment['akismet_pro_tip'] ) ) {
352
+ update_comment_meta( $comment->comment_ID, 'akismet_pro_tip', self::$last_comment['akismet_pro_tip'] );
353
+ }
354
  }
355
  }
356
  }
494
  $history[] = array( 'time' => 445856404, 'event' => 'recheck-ham' );
495
  $history[] = array( 'time' => 445856405, 'event' => 'check-ham' );
496
  $history[] = array( 'time' => 445856406, 'event' => 'wp-blacklisted' );
497
+ $history[] = array( 'time' => 445856406, 'event' => 'wp-disallowed' );
498
  $history[] = array( 'time' => 445856407, 'event' => 'report-spam' );
499
  $history[] = array( 'time' => 445856408, 'event' => 'report-spam', 'user' => 'sam' );
500
  $history[] = array( 'message' => 'sam reported this comment as spam (hardcoded message).', 'time' => 445856400, 'event' => 'report-spam', 'user' => 'sam' );
readme.txt CHANGED
@@ -1,12 +1,12 @@
1
- === Akismet Anti-Spam ===
2
  Contributors: matt, ryan, andy, mdawaffe, tellyworth, josephscott, lessbloat, eoigal, cfinke, automattic, jgs, procifer, stephdau
3
- Tags: akismet, comments, spam, antispam, anti-spam, anti spam, comment moderation, comment spam, contact form spam, spam comments
4
  Requires at least: 4.6
5
- Tested up to: 5.4
6
- Stable tag: 4.1.6
7
  License: GPLv2 or later
8
 
9
- Akismet checks your comments and contact form submissions against our global database of spam to protect you and your site from malicious content.
10
 
11
  == Description ==
12
 
@@ -30,57 +30,16 @@ Upload the Akismet plugin to your blog, activate it, and then enter your Akismet
30
 
31
  == Changelog ==
32
 
 
 
 
 
 
 
33
  = 4.1.6 =
34
  *Release Date - 4 June 2020*
35
 
36
  * Disable "Check for Spam" button until the page is loaded to avoid errors with clicking through to queue recheck endpoint directly.
37
  * Add filter "akismet_enable_mshots" to allow disabling screenshot popups on the edit comments admin page.
38
 
39
- = 4.1.5 =
40
- *Release Date - 29 April 2020*
41
-
42
- * Based on user feedback, we have dropped the in-admin notice explaining the availability of the "privacy notice" option in the AKismet settings screen. The option itself is available, but after displaying the notice for the last 2 years, it is now considered a known fact.
43
- * Updated the "Requires at least" to WP 4.6, based on recommendations from https://wp-info.org/tools/checkplugini18n.php?slug=akismet
44
- * Moved older changelog entries to a separate file to keep the size of this readme reasonable, also based on recommendations from https://wp-info.org/tools/checkplugini18n.php?slug=akismet
45
-
46
- = 4.1.4 =
47
- *Release Date - 17 March 2020*
48
-
49
- * Only redirect to the Akismet setup screen upon plugin activation if the plugin was activated manually from within the plugin-related screens, to help users with non-standard install workflows, like WP-CLI.
50
- * Update the layout of the initial setup screen to be more readable on small screens.
51
- * If no API key has been entered, don't run code that expects an API key.
52
- * Improve the readability of the comment history entries.
53
- * Don't modify the comment form HTML if no API key has been set.
54
-
55
- = 4.1.3 =
56
- *Release Date - 31 October 2019*
57
-
58
- * Prevented an attacker from being able to cause a user to unknowingly recheck their Pending comments for spam.
59
- * Improved compatibility with Jetpack 7.7+.
60
- * Updated the plugin activation page to use consistent language and markup.
61
- * Redirecting users to the Akismet connnection/settings screen upon plugin activation, in an effort to make it easier for people to get setup.
62
-
63
- = 4.1.2 =
64
- *Release Date - 14 May 2019*
65
-
66
- * Fixed a conflict between the Akismet setup banner and other plugin notices.
67
- * Reduced the number of API requests made by the plugin when attempting to verify the API key.
68
- * Include additional data in the pingback pre-check API request to help make the stats more accurate.
69
- * Fixed a bug that was enabling the "Check for Spam" button when no comments were eligible to be checked.
70
- * Improved Akismet's AMP compatibility.
71
-
72
- = 4.1.1 =
73
- *Release Date - 31 January 2019*
74
-
75
- * Fixed the "Setup Akismet" notice so it resizes responsively.
76
- * Only highlight the "Save Changes" button in the Akismet config when changes have been made.
77
- * The count of comments in your spam queue shown on the dashboard show now always be up-to-date.
78
-
79
- = 4.1 =
80
- *Release Date - 12 November 2018*
81
-
82
- * Added a WP-CLI method for retrieving stats.
83
- * Hooked into the new "Personal Data Eraser" functionality from WordPress 4.9.6.
84
- * Added functionality to clear outdated alerts from Akismet.com.
85
-
86
  For older changelog entries, please see the [additional changelog.txt file](https://plugins.svn.wordpress.org/akismet/trunk/changelog.txt) delivered with the plugin.
1
+ === Akismet Spam Protection ===
2
  Contributors: matt, ryan, andy, mdawaffe, tellyworth, josephscott, lessbloat, eoigal, cfinke, automattic, jgs, procifer, stephdau
3
+ Tags: comments, spam, antispam, anti-spam, contact form, anti spam, comment moderation, comment spam, contact form spam, spam comments
4
  Requires at least: 4.6
5
+ Tested up to: 5.6
6
+ Stable tag: 4.1.7
7
  License: GPLv2 or later
8
 
9
+ The best anti-spam protection to block spam comments and spam in a contact form. The most trusted antispam solution for WordPress and WooCommerce.
10
 
11
  == Description ==
12
 
30
 
31
  == Changelog ==
32
 
33
+ = 4.1.7 =
34
+ *Release Date - 22 October 2020*
35
+
36
+ * Show the "Set up your Akismet account" banner on the comments admin screen, where it's relevant to mention if Akismet hasn't been configured.
37
+ * Don't use wp_blacklist_check when the new wp_check_comment_disallowed_list function is available.
38
+
39
  = 4.1.6 =
40
  *Release Date - 4 June 2020*
41
 
42
  * Disable "Check for Spam" button until the page is loaded to avoid errors with clicking through to queue recheck endpoint directly.
43
  * Add filter "akismet_enable_mshots" to allow disabling screenshot popups on the edit comments admin page.
44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  For older changelog entries, please see the [additional changelog.txt file](https://plugins.svn.wordpress.org/akismet/trunk/changelog.txt) delivered with the plugin.
views/stats.php CHANGED
@@ -1,7 +1,7 @@
1
  <div id="akismet-plugin-container">
2
  <div class="akismet-masthead">
3
  <div class="akismet-masthead__inside-container">
4
- <a href="<?php echo esc_url( Akismet_Admin::get_page_url() );?>" class="akismet-right"><?php esc_html_e( 'Akismet Settings' , 'akismet' ); ?></a>
5
  <div class="akismet-masthead__logo-container">
6
  <img class="akismet-masthead__logo" src="<?php echo esc_url( plugins_url( '../_inc/img/logo-full-2x.png', __FILE__ ) ); ?>" alt="Akismet" />
7
  </div>
1
  <div id="akismet-plugin-container">
2
  <div class="akismet-masthead">
3
  <div class="akismet-masthead__inside-container">
4
+ <a href="<?php echo esc_url( Akismet_Admin::get_page_url() ); ?>" class="akismet-right"><?php esc_html_e( 'Anti-Spam Settings', 'akismet' ); ?></a>
5
  <div class="akismet-masthead__logo-container">
6
  <img class="akismet-masthead__logo" src="<?php echo esc_url( plugins_url( '../_inc/img/logo-full-2x.png', __FILE__ ) ); ?>" alt="Akismet" />
7
  </div>