diff --git a/wp-content/plugins/akismet/_inc/akismet.css b/wp-content/plugins/akismet/_inc/akismet.css index 85f3c5ec73f34bb53d51ec58a8c7e4a102066436..bf40fb14aba4f9780f7670999d3c83ea0a6604a6 100644 --- a/wp-content/plugins/akismet/_inc/akismet.css +++ b/wp-content/plugins/akismet/_inc/akismet.css @@ -417,6 +417,10 @@ table.comments td.comment p a:after { padding: 1.5rem; } +.akismet-lower .notice { + margin-bottom: 2rem; +} + .akismet-card { margin-top: 1rem; margin-bottom: 0; @@ -583,4 +587,4 @@ table.comments td.comment p a:after { .akismet-section-header__actions { line-height: 1.75rem; -} \ No newline at end of file +} diff --git a/wp-content/plugins/akismet/_inc/akismet.js b/wp-content/plugins/akismet/_inc/akismet.js index cac4d57fdac63e6294530636ff4dc27ddc3c6825..b5df186f632189f94f43a67cd61fa56506517b4f 100644 --- a/wp-content/plugins/akismet/_inc/akismet.js +++ b/wp-content/plugins/akismet/_inc/akismet.js @@ -273,4 +273,13 @@ jQuery( function ( $ ) { var img = new Image(); img.src = akismet_mshot_url( linkUrl ); } -}); \ No newline at end of file + + /** + * Sets the comment form privacy notice display to hide when one clicks Core's dismiss button on the related admin notice. + */ + $( '#akismet-privacy-notice-admin-notice' ).on( 'click', '.notice-dismiss', function(){ + $.ajax({ + url: './options-general.php?page=akismet-key-config&akismet_comment_form_privacy_notice=hide', + }); + }); +}); diff --git a/wp-content/plugins/akismet/akismet.php b/wp-content/plugins/akismet/akismet.php index a8ea4a15db7475c39c5b2973291ad83425619d63..d4f21350b3719890e97fcb8ad2a2d06706a30ca1 100644 --- a/wp-content/plugins/akismet/akismet.php +++ b/wp-content/plugins/akismet/akismet.php @@ -6,7 +6,7 @@ Plugin Name: Akismet Anti-Spam Plugin URI: https://akismet.com/ 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. -Version: 4.0.3 +Version: 4.0.8 Author: Automattic Author URI: https://automattic.com/wordpress-plugins/ License: GPLv2 or later @@ -37,7 +37,7 @@ if ( !function_exists( 'add_action' ) ) { exit; } -define( 'AKISMET_VERSION', '4.0.3' ); +define( 'AKISMET_VERSION', '4.0.8' ); define( 'AKISMET__MINIMUM_WP_VERSION', '4.0' ); define( 'AKISMET__PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); define( 'AKISMET_DELETE_LIMIT', 100000 ); diff --git a/wp-content/plugins/akismet/class.akismet-admin.php b/wp-content/plugins/akismet/class.akismet-admin.php index 42e884f9864c2aa6dc8e69b6effd7052166d1f0a..1e80617355054cee1563882016c474223afe4ff0 100644 --- a/wp-content/plugins/akismet/class.akismet-admin.php +++ b/wp-content/plugins/akismet/class.akismet-admin.php @@ -32,6 +32,10 @@ class Akismet_Admin { if ( isset( $_POST['action'] ) && $_POST['action'] == 'enter-key' ) { self::enter_api_key(); } + + if ( ! empty( $_GET['akismet_comment_form_privacy_notice'] ) && empty( $_GET['settings-updated']) ) { + self::set_form_privacy_notice_option( $_GET['akismet_comment_form_privacy_notice'] ); + } } public static function init_hooks() { @@ -65,11 +69,23 @@ class Akismet_Admin { add_filter( 'wxr_export_skip_commentmeta', array( 'Akismet_Admin', 'exclude_commentmeta_from_export' ), 10, 3 ); add_filter( 'all_plugins', array( 'Akismet_Admin', 'modify_plugin_description' ) ); + + if ( class_exists( 'Jetpack' ) ) { + add_filter( 'akismet_comment_form_privacy_notice_url_display', array( 'Akismet_Admin', 'jetpack_comment_form_privacy_notice_url' ) ); + add_filter( 'akismet_comment_form_privacy_notice_url_hide', array( 'Akismet_Admin', 'jetpack_comment_form_privacy_notice_url' ) ); + } } public static function admin_init() { load_plugin_textdomain( 'akismet' ); add_meta_box( 'akismet-status', __('Comment History', 'akismet'), array( 'Akismet_Admin', 'comment_status_meta_box' ), 'comment', 'normal' ); + + if ( function_exists( 'wp_add_privacy_policy_content' ) ) { + wp_add_privacy_policy_content( + __( 'Akismet', 'akismet' ), + __( 'We collect information about visitors who comment on Sites that use our Akismet anti-spam service. The information we collect depends on how the User sets up Akismet for the Site, but typically includes the commenter\'s IP address, user agent, referrer, and Site URL (along with other information directly provided by the commenter such as their name, username, email address, and the comment itself).', 'akismet' ) + ); + } } public static function admin_menu() { @@ -260,7 +276,13 @@ class Akismet_Admin { foreach( array( 'akismet_strictness', 'akismet_show_user_comments_approved' ) as $option ) { update_option( $option, isset( $_POST[$option] ) && (int) $_POST[$option] == 1 ? '1' : '0' ); } - + + if ( ! empty( $_POST['akismet_comment_form_privacy_notice'] ) ) { + self::set_form_privacy_notice_option( $_POST['akismet_comment_form_privacy_notice'] ); + } else { + self::set_form_privacy_notice_option( 'hide' ); + } + if ( Akismet::predefined_api_key() ) { return false; //shouldn't have option to save key if already defined } @@ -825,6 +847,14 @@ class Akismet_Admin { ) ); } + public static function display_privacy_notice_control_warning() { + if ( !current_user_can( 'manage_options' ) ) + return; + Akismet::view( 'notice', array( + 'type' => 'privacy', + ) ); + } + public static function display_spam_check_warning() { Akismet::fix_scheduled_recheck(); @@ -958,6 +988,10 @@ class Akismet_Admin { $notices[] = array( 'type' => $akismet_user->status ); } + if ( false === get_option( 'akismet_comment_form_privacy_notice' ) ) { + $notices[] = array( 'type' => 'privacy' ); + } + /* // To see all variants when testing. $notices[] = array( 'type' => 'active-notice', 'time_saved' => 'Cleaning up spam takes time. Akismet has saved you 1 minute!' ); @@ -1024,6 +1058,14 @@ class Akismet_Admin { echo '<div class="notice notice-success"><p>' . esc_html( $message ) . '</p></div>'; } + + $akismet_comment_form_privacy_notice_option = get_option( 'akismet_comment_form_privacy_notice' ); + if ( ! in_array( $akismet_comment_form_privacy_notice_option, array( 'hide', 'display' ) ) ) { + $api_key = Akismet::get_api_key(); + if ( ! empty( $api_key ) ) { + self::display_privacy_notice_control_warning(); + } + } } public static function display_status() { @@ -1128,4 +1170,14 @@ class Akismet_Admin { return $all_plugins; } + + private static function set_form_privacy_notice_option( $state ) { + if ( in_array( $state, array( 'display', 'hide' ) ) ) { + update_option( 'akismet_comment_form_privacy_notice', $state ); + } + } + + public static function jetpack_comment_form_privacy_notice_url( $url ) { + return str_replace( 'options-general.php', 'admin.php', $url ); + } } diff --git a/wp-content/plugins/akismet/class.akismet.php b/wp-content/plugins/akismet/class.akismet.php index 0ed53fcea06415897d9776420e51e30e766f33b3..3a1307f42f158ea8a33a72e4d1a1580ed33a8f50 100644 --- a/wp-content/plugins/akismet/class.akismet.php +++ b/wp-content/plugins/akismet/class.akismet.php @@ -51,6 +51,9 @@ class Akismet { // Jetpack compatibility add_filter( 'jetpack_options_whitelist', array( 'Akismet', 'add_to_jetpack_options_whitelist' ) ); add_action( 'update_option_wordpress_api_key', array( 'Akismet', 'updated_option' ), 10, 2 ); + add_action( 'add_option_wordpress_api_key', array( 'Akismet', 'added_option' ), 10, 2 ); + + add_action( 'comment_form_after', array( 'Akismet', 'display_comment_form_privacy_notice' ) ); } public static function get_api_key() { @@ -110,6 +113,18 @@ class Akismet { } } + /** + * Treat the creation of an API key the same as updating the API key to a new value. + * + * @param mixed $option_name Will always be "wordpress_api_key", until something else hooks in here. + * @param mixed $value The option value. + */ + public static function added_option( $option_name, $value ) { + if ( 'wordpress_api_key' === $option_name ) { + return self::updated_option( '', $value ); + } + } + public static function rest_auto_check_comment( $commentdata ) { self::$is_rest_api_call = true; @@ -1187,7 +1202,7 @@ class Akismet { <!doctype html> <html> <head> -<meta charset="<?php bloginfo( 'charset' ); ?>"> +<meta charset="<?php bloginfo( 'charset' ); ?>" /> <style> * { text-align: center; @@ -1200,6 +1215,7 @@ p { font-size: 18px; } </style> +</head> <body> <p><?php echo esc_html( $message ); ?></p> </body> @@ -1388,4 +1404,21 @@ p { return apply_filters( 'akismet_predefined_api_key', false ); } + + /** + * Controls the display of a privacy related notice underneath the comment form using the `akismet_comment_form_privacy_notice` option and filter respectively. + * Default is top not display the notice, leaving the choice to site admins, or integrators. + */ + public static function display_comment_form_privacy_notice() { + if ( 'display' !== apply_filters( 'akismet_comment_form_privacy_notice', get_option( 'akismet_comment_form_privacy_notice', 'hide' ) ) ) { + return; + } + echo apply_filters( + 'akismet_comment_form_privacy_notice_markup', + '<p class="akismet_comment_form_privacy_notice">' . sprintf( + __( 'This site uses Akismet to reduce spam. <a href="%s" target="_blank" rel="nofollow noopener">Learn how your comment data is processed</a>.', 'akismet' ), + 'https://akismet.com/privacy/' + ) . '</p>' + ); + } } diff --git a/wp-content/plugins/akismet/readme.txt b/wp-content/plugins/akismet/readme.txt index c892430dfb48ff8b19f3c6fe92480bbd361542a8..4853f6fa0dbcacea13883e7a06be238c1ef117d7 100644 --- a/wp-content/plugins/akismet/readme.txt +++ b/wp-content/plugins/akismet/readme.txt @@ -2,8 +2,8 @@ Contributors: matt, ryan, andy, mdawaffe, tellyworth, josephscott, lessbloat, eoigal, cfinke, automattic, jgs, procifer, stephdau Tags: akismet, comments, spam, antispam, anti-spam, anti spam, comment moderation, comment spam, contact form spam, spam comments Requires at least: 4.0 -Tested up to: 4.9.1 -Stable tag: 4.0.3 +Tested up to: 4.9.6 +Stable tag: 4.0.8 License: GPLv2 or later Akismet checks your comments and contact form submissions against our global database of spam to protect you and your site from malicious content. @@ -30,6 +30,38 @@ Upload the Akismet plugin to your blog, Activate it, then enter your [Akismet.co == Changelog == += 4.0.8 = +*Release Date - 19 June 2018* + +* Improved the grammar and consistency of the in-admin privacy related notes (notice and config). +* Revised in-admin explanation of the comment form privacy notice to make its usage clearer. +* Added `rel="nofollow noopener"` to the comment form privacy notice to improve SEO and security. + += 4.0.7 = +*Release Date - 28 May 2018* + +* Based on user feedback, the link on "Learn how your comment data is processed." in the optional privacy notice now has a `target` of `_blank` and opens in a new tab/window. +* Updated the in-admin privacy notice to use the term "comment" instead of "contact" in "Akismet can display a notice to your users under your comment forms." +* Only show in-admin privacy notice if Akismet has an API Key configured + += 4.0.6 = +*Release Date - 26 May 2018* + +* Moved away from using `empty( get_option() )` to instantiating a variable to be compatible with older versions of PHP (5.3, 5.4, etc). + += 4.0.5 = +*Release Date - 26 May 2018* + +* Corrected version number after tagging. Sorry... + += 4.0.4 = +*Release Date - 26 May 2018* + +* Added a hook to provide Akismet-specific privacy information for a site's privacy policy. +* Added tools to control the display of a privacy related notice under comment forms. +* Fixed HTML in activation failure message to close META and HEAD tag properly. +* Fixed a bug that would sometimes prevent Akismet from being correctly auto-configured. + = 4.0.3 = *Release Date - 19 February 2018* diff --git a/wp-content/plugins/akismet/views/config.php b/wp-content/plugins/akismet/views/config.php index 59dd18c594e93fd46cc24758b592f159b28f6a6b..cc6fdd2046648b0cf8743828265c89e86d6f287c 100644 --- a/wp-content/plugins/akismet/views/config.php +++ b/wp-content/plugins/akismet/views/config.php @@ -151,6 +151,17 @@ ?> </td> </tr> + <tr> + <th class="comment-form-privacy-notice" align="left" scope="row"><?php esc_html_e('Privacy', 'akismet'); ?></th> + <td></td> + <td align="left"> + <fieldset><legend class="screen-reader-text"><span><?php esc_html_e('Akismet privacy notice', 'akismet'); ?></span></legend> + <p><label for="akismet_comment_form_privacy_notice_display"><input type="radio" name="akismet_comment_form_privacy_notice" id="akismet_comment_form_privacy_notice_display" value="display" <?php checked('display', get_option('akismet_comment_form_privacy_notice')); ?> /> <?php esc_html_e('Display a privacy notice under your comment forms.', 'akismet'); ?></label></p> + <p><label for="akismet_comment_form_privacy_notice_hide"><input type="radio" name="akismet_comment_form_privacy_notice" id="akismet_comment_form_privacy_notice_hide" value="hide" <?php echo in_array( get_option('akismet_comment_form_privacy_notice'), array('display', 'hide') ) ? checked('hide', get_option('akismet_comment_form_privacy_notice'), false) : 'checked="checked"'; ?> /> <?php esc_html_e('Do not display privacy notice.', 'akismet'); ?></label></p> + </fieldset> + <span class="akismet-note"><?php esc_html_e( 'To help your site with transparency under privacy laws like the GDPR, Akismet can display a notice to your users under your comment forms. This feature is disabled by default, however, you can turn it on above.', 'akismet' );?></span> + </td> + </tr> </tbody> </table> <div class="akismet-card-actions"> @@ -228,4 +239,4 @@ <?php } ?> <?php endif;?> </div> -</div> \ No newline at end of file +</div> diff --git a/wp-content/plugins/akismet/views/notice.php b/wp-content/plugins/akismet/views/notice.php index 4f65b8402befd43a7b124ccd2c9cd3ec60f49e6c..62476bd2854b3b2ed1b4b6100b4fcb25b008f95d 100644 --- a/wp-content/plugins/akismet/views/notice.php +++ b/wp-content/plugins/akismet/views/notice.php @@ -15,7 +15,7 @@ <?php elseif ( $type == 'spam-check' ) :?> <div class="notice notice-warning"> <p><strong><?php esc_html_e( 'Akismet has detected a problem.', 'akismet' );?></strong></p> - <p><?php printf( __( 'Some comments have not yet been checked for spam by Akismet. They have been temporarily held for moderation and will automatically be rechecked later.', 'akismet' ) ); ?></p> + <p><?php esc_html_e( 'Some comments have not yet been checked for spam by Akismet. They have been temporarily held for moderation and will automatically be rechecked later.', 'akismet' ); ?></p> <?php if ( $link_text ) { ?> <p><?php echo $link_text; ?></p> <?php } ?> @@ -132,4 +132,10 @@ </p> <?php endif; ?> </div> -<?php endif;?> \ No newline at end of file +<?php elseif ( $type == 'privacy' ) :?> +<div class="notice notice-warning is-dismissible" id="akismet-privacy-notice-admin-notice"> + <p><strong><?php esc_html_e( 'Akismet & Privacy.', 'akismet' );?></strong></p> + <p><?php esc_html_e( 'To help your site with transparency under privacy laws like the GDPR, Akismet can display a notice to your users under your comment forms. This feature is disabled by default, however, you can turn it on below.', 'akismet' ); ?></p> + <p><?php printf( __(' Please <a href="%s">enable</a> or <a href="%s">disable</a> this feature. <a href="%s" id="akismet-privacy-notice-control-notice-info-link" target="_blank">More information</a>.', 'akismet' ), admin_url( apply_filters( 'akismet_comment_form_privacy_notice_url_display', 'options-general.php?page=akismet-key-config&akismet_comment_form_privacy_notice=display' ) ), admin_url( apply_filters( 'akismet_comment_form_privacy_notice_url_hide', 'options-general.php?page=akismet-key-config&akismet_comment_form_privacy_notice=hide' ) ), 'https://akismet.com/privacy/' ); ?></p> +</div> +<?php endif;?>