X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/a66f9e26487c560245ef9cd17d7e87c0cbb650af..refs/tags/wordpress-2.8.3:/wp-content/plugins/akismet/akismet.php diff --git a/wp-content/plugins/akismet/akismet.php b/wp-content/plugins/akismet/akismet.php index 3a434767..92bbae2d 100644 --- a/wp-content/plugins/akismet/akismet.php +++ b/wp-content/plugins/akismet/akismet.php @@ -2,14 +2,19 @@ /* Plugin Name: Akismet Plugin URI: http://akismet.com/ -Description: Akismet checks your comments against the Akismet web service to see if they look like spam or not. You need a WordPress.com API key to use it. You can review the spam it catches under "Comments." To show off your Akismet stats just put <?php akismet_counter(); ?> in your template. See also: WP Stats plugin. -Version: 2.1.3 +Description: Akismet checks your comments against the Akismet web service to see if they look like spam or not. You need a WordPress.com API key to use it. You can review the spam it catches under "Comments." To show off your Akismet stats just put <?php akismet_counter(); ?> in your template. See also: WP Stats plugin. +Version: 2.2.6 Author: Matt Mullenweg -Author URI: http://photomatt.net/ +Author URI: http://ma.tt/ */ +define('AKISMET_VERSION', '2.2.6'); + // If you hardcode a WP.com API key here, all key config screens will be hidden -$wpcom_api_key = ''; +if ( defined('WPCOM_API_KEY') ) + $wpcom_api_key = constant('WPCOM_API_KEY'); +else + $wpcom_api_key = ''; function akismet_init() { global $wpcom_api_key, $akismet_api_host, $akismet_api_port; @@ -21,9 +26,20 @@ function akismet_init() { $akismet_api_port = 80; add_action('admin_menu', 'akismet_config_page'); + add_action('admin_menu', 'akismet_stats_page'); + akismet_admin_warnings(); } add_action('init', 'akismet_init'); +function akismet_admin_init() { + if ( function_exists( 'get_plugin_page_hook' ) ) + $hook = get_plugin_page_hook( 'akismet-stats-display', 'index.php' ); + else + $hook = 'dashboard_page_akismet-stats-display'; + add_action('admin_head-'.$hook, 'akismet_stats_script'); +} +add_action('admin_init', 'akismet_admin_init'); + if ( !function_exists('wp_nonce_field') ) { function akismet_nonce_field($action = -1) { return; } $akismet_nonce = -1; @@ -32,10 +48,14 @@ if ( !function_exists('wp_nonce_field') ) { $akismet_nonce = 'akismet-update-key'; } +if ( !function_exists('number_format_i18n') ) { + function number_format_i18n( $number, $decimals = null ) { return number_format( $number, $decimals ); } +} + function akismet_config_page() { if ( function_exists('add_submenu_page') ) add_submenu_page('plugins.php', __('Akismet Configuration'), __('Akismet Configuration'), 'manage_options', 'akismet-key-config', 'akismet_conf'); - + } function akismet_conf() { @@ -69,6 +89,8 @@ function akismet_conf() { update_option( 'akismet_discard_month', 'true' ); else update_option( 'akismet_discard_month', 'false' ); + } elseif ( isset($_POST['check']) ) { + akismet_get_server_connectivity(0); } if ( $key_status != 'valid' ) { @@ -104,7 +126,7 @@ function akismet_conf() { 'key_valid' => array('color' => '2d2', 'text' => __('This key is valid.')), 'key_failed' => array('color' => 'aa0', 'text' => __('The key below was previously validated but a connection to akismet.com can not be established at this time. Please check your server configuration.'))); ?> - +

@@ -128,46 +150,246 @@ function akismet_conf() {

+ +
+ +

+ 0 ) { + // some connections work, some fail + if ( $fail_count > 0 && $fail_count < count($servers) ) { ?> +

+

this information about Akismet and firewalls.'), 'http://blog.akismet.com/akismet-hosting-faq/'); ?>

+ 0 ) { ?> +

+

Akismet cannot work correctly until this is fixed. Please contact your web host or firewall administrator and give them this information about Akismet and firewalls.'), 'http://blog.akismet.com/akismet-hosting-faq/'); ?>

+ +

+

+ +

+

fsockopen function. Akismet cannot work correctly until this is fixed. Please contact your web host or firewall administrator and give them this information about Akismet\'s system requirements.'), 'http://blog.akismet.com/akismet-hosting-faq/'); ?>

+ +

+

Akismet cannot work correctly until this is fixed. Please contact your web host or firewall administrator and give them this information about Akismet and firewalls.'), 'http://blog.akismet.com/akismet-hosting-faq/'); ?>

+ + + + + $status ) { + $color = ( $status ? '#2d2' : '#d22'); + ?> + + + + + + +
+

+

+
+
+ +
+ +
+

".__('Akismet is almost ready.')." ".sprintf(__('You must enter your WordPress.com API key for it to work.'), "plugins.php?page=akismet-key-config")."

- "; +// Check connectivity between the WordPress blog and Akismet's servers. +// Returns an associative array of server IP addresses, where the key is the IP address, and value is true (available) or false (unable to connect). +function akismet_check_server_connectivity() { + global $akismet_api_host, $akismet_api_port, $wpcom_api_key; + + $test_host = 'rest.akismet.com'; + + // Some web hosts may disable one or both functions + if ( !is_callable('fsockopen') || !is_callable('gethostbynamel') ) + return array(); + + $ips = gethostbynamel($test_host); + if ( !$ips || !is_array($ips) || !count($ips) ) + return array(); + + $servers = array(); + foreach ( $ips as $ip ) { + $response = akismet_verify_key( akismet_get_key(), $ip ); + // even if the key is invalid, at least we know we have connectivity + if ( $response == 'valid' || $response == 'invalid' ) + $servers[$ip] = true; + else + $servers[$ip] = false; } - add_action('admin_notices', 'akismet_warning'); - return; + + return $servers; +} + +// Check the server connectivity and store the results in an option. +// Cached results will be used if not older than the specified timeout in seconds; use $cache_timeout = 0 to force an update. +// Returns the same associative array as akismet_check_server_connectivity() +function akismet_get_server_connectivity( $cache_timeout = 86400 ) { + $servers = get_option('akismet_available_servers'); + if ( (time() - get_option('akismet_connectivity_time') < $cache_timeout) && $servers !== false ) + return $servers; + + // There's a race condition here but the effect is harmless. + $servers = akismet_check_server_connectivity(); + update_option('akismet_available_servers', $servers); + update_option('akismet_connectivity_time', time()); + return $servers; +} + +// Returns true if server connectivity was OK at the last check, false if there was a problem that needs to be fixed. +function akismet_server_connectivity_ok() { + $servers = akismet_get_server_connectivity(); + return !( empty($servers) || !count($servers) || count( array_filter($servers) ) < count($servers) ); +} + +function akismet_admin_warnings() { + global $wpcom_api_key; + if ( !get_option('wordpress_api_key') && !$wpcom_api_key && !isset($_POST['submit']) ) { + function akismet_warning() { + echo " +

".__('Akismet is almost ready.')." ".sprintf(__('You must enter your WordPress.com API key for it to work.'), "plugins.php?page=akismet-key-config")."

+ "; + } + add_action('admin_notices', 'akismet_warning'); + return; + } elseif ( get_option('akismet_connectivity_time') && empty($_POST) && is_admin() && !akismet_server_connectivity_ok() ) { + function akismet_warning() { + echo " +

".__('Akismet has detected a problem.')." ".sprintf(__('A server or network problem is preventing Akismet from working correctly. Click here for more information about how to fix the problem.'), "plugins.php?page=akismet-key-config")."

+ "; + } + add_action('admin_notices', 'akismet_warning'); + return; + } +} + +function akismet_get_host($host) { + // if all servers are accessible, just return the host name. + // if not, return an IP that was known to be accessible at the last check. + if ( akismet_server_connectivity_ok() ) { + return $host; + } else { + $ips = akismet_get_server_connectivity(); + // a firewall may be blocking access to some Akismet IPs + if ( count($ips) > 0 && count(array_filter($ips)) < count($ips) ) { + // use DNS to get current IPs, but exclude any known to be unreachable + $dns = (array)gethostbynamel( rtrim($host, '.') . '.' ); + $dns = array_filter($dns); + foreach ( $dns as $ip ) { + if ( array_key_exists( $ip, $ips ) && empty( $ips[$ip] ) ) + unset($dns[$ip]); + } + // return a random IP from those available + if ( count($dns) ) + return $dns[ array_rand($dns) ]; + + } + } + // if all else fails try the host name + return $host; } // Returns array with headers in $response[0] and body in $response[1] -function akismet_http_post($request, $host, $path, $port = 80) { +function akismet_http_post($request, $host, $path, $port = 80, $ip=null) { global $wp_version; + + $akismet_version = constant('AKISMET_VERSION'); $http_request = "POST $path HTTP/1.0\r\n"; $http_request .= "Host: $host\r\n"; $http_request .= "Content-Type: application/x-www-form-urlencoded; charset=" . get_option('blog_charset') . "\r\n"; $http_request .= "Content-Length: " . strlen($request) . "\r\n"; - $http_request .= "User-Agent: WordPress/$wp_version | Akismet/2.0\r\n"; + $http_request .= "User-Agent: WordPress/$wp_version | Akismet/$akismet_version\r\n"; $http_request .= "\r\n"; $http_request .= $request; + + $http_host = $host; + // use a specific IP if provided - needed by akismet_check_server_connectivity() + if ( $ip && long2ip(ip2long($ip)) ) { + $http_host = $ip; + } else { + $http_host = akismet_get_host($host); + } $response = ''; - if( false != ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { + if( false != ( $fs = @fsockopen($http_host, $port, $errno, $errstr, 10) ) ) { fwrite($fs, $http_request); while ( !feof($fs) ) @@ -185,11 +407,14 @@ function akismet_auto_check_comment( $comment ) { $comment['user_agent'] = $_SERVER['HTTP_USER_AGENT']; $comment['referrer'] = $_SERVER['HTTP_REFERER']; $comment['blog'] = get_option('home'); + $comment['blog_lang'] = get_locale(); + $comment['blog_charset'] = get_option('blog_charset'); + $comment['permalink'] = get_permalink($comment['comment_post_ID']); $ignore = array( 'HTTP_COOKIE' ); foreach ( $_SERVER as $key => $value ) - if ( !in_array( $key, $ignore ) ) + if ( !in_array( $key, $ignore ) && is_string($value) ) $comment["$key"] = $value; $query_string = ''; @@ -225,20 +450,32 @@ function akismet_delete_old() { } function akismet_submit_nonspam_comment ( $comment_id ) { - global $wpdb, $akismet_api_host, $akismet_api_port; - + global $wpdb, $akismet_api_host, $akismet_api_port, $current_user, $current_site; + $comment_id = (int) $comment_id; + $comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_id'"); if ( !$comment ) // it was deleted return; $comment->blog = get_option('home'); + $comment->blog_lang = get_locale(); + $comment->blog_charset = get_option('blog_charset'); + $comment->permalink = get_permalink($comment->comment_post_ID); + if ( is_object($current_user) ) { + $comment->reporter = $current_user->user_login; + } + if ( is_object($current_site) ) { + $comment->site_domain = $current_site->domain; + } $query_string = ''; foreach ( $comment as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; + $response = akismet_http_post($query_string, $akismet_api_host, "/1.1/submit-ham", $akismet_api_port); } function akismet_submit_spam_comment ( $comment_id ) { - global $wpdb, $akismet_api_host, $akismet_api_port; + global $wpdb, $akismet_api_host, $akismet_api_port, $current_user, $current_site; + $comment_id = (int) $comment_id; $comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_id'"); if ( !$comment ) // it was deleted @@ -246,6 +483,15 @@ function akismet_submit_spam_comment ( $comment_id ) { if ( 'spam' != $comment->comment_approved ) return; $comment->blog = get_option('home'); + $comment->blog_lang = get_locale(); + $comment->blog_charset = get_option('blog_charset'); + $comment->permalink = get_permalink($comment->comment_post_ID); + if ( is_object($current_user) ) { + $comment->reporter = $current_user->user_login; + } + if ( is_object($current_site) ) { + $comment->site_domain = $current_site->domain; + } $query_string = ''; foreach ( $comment as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; @@ -257,18 +503,79 @@ add_action('wp_set_comment_status', 'akismet_submit_spam_comment'); add_action('edit_comment', 'akismet_submit_spam_comment'); add_action('preprocess_comment', 'akismet_auto_check_comment', 1); -function akismet_spam_count() { - global $wpdb, $comments; - $count = wp_cache_get( 'akismet_spam_count', 'widget' ); - if ( false === $count ) { - $count = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam'"); - wp_cache_set( 'akismet_spam_count', $count, 'widget', 3600 ); +function akismet_spamtoham( $comment ) { akismet_submit_nonspam_comment( $comment->comment_ID ); } +add_filter( 'comment_spam_to_approved', 'akismet_spamtoham' ); + +// Total spam in queue +// get_option( 'akismet_spam_count' ) is the total caught ever +function akismet_spam_count( $type = false ) { + global $wpdb; + + if ( !$type ) { // total + $count = wp_cache_get( 'akismet_spam_count', 'widget' ); + if ( false === $count ) { + if ( function_exists('wp_count_comments') ) { + $count = wp_count_comments(); + $count = $count->spam; + } else { + $count = (int) $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam'"); + } + wp_cache_set( 'akismet_spam_count', $count, 'widget', 3600 ); + } + return $count; + } elseif ( 'comments' == $type || 'comment' == $type ) { // comments + $type = ''; + } else { // pingback, trackback, ... + $type = $wpdb->escape( $type ); } - return $count; + + return (int) $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam' AND comment_type='$type'"); +} + +function akismet_spam_comments( $type = false, $page = 1, $per_page = 50 ) { + global $wpdb; + + $page = (int) $page; + if ( $page < 2 ) + $page = 1; + + $per_page = (int) $per_page; + if ( $per_page < 1 ) + $per_page = 50; + + $start = ( $page - 1 ) * $per_page; + $end = $start + $per_page; + + if ( $type ) { + if ( 'comments' == $type || 'comment' == $type ) + $type = ''; + else + $type = $wpdb->escape( $type ); + return $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' AND comment_type='$type' ORDER BY comment_date DESC LIMIT $start, $end"); + } + + // All + return $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_date DESC LIMIT $start, $end"); +} + +// Totals for each comment type +// returns array( type => count, ... ) +function akismet_spam_totals() { + global $wpdb; + $totals = $wpdb->get_results( "SELECT comment_type, COUNT(*) AS cc FROM $wpdb->comments WHERE comment_approved = 'spam' GROUP BY comment_type" ); + $return = array(); + foreach ( $totals as $total ) + $return[$total->comment_type ? $total->comment_type : 'comment'] = $total->cc; + return $return; } function akismet_manage_page() { - global $wpdb, $submenu; + global $wpdb, $submenu, $wp_db_version; + + // WP 2.7 has its own spam management page + if ( 8645 <= $wp_db_version ) + return; + $count = sprintf(__('Akismet Spam (%s)'), akismet_spam_count()); if ( isset( $submenu['edit-comments.php'] ) ) add_submenu_page('edit-comments.php', __('Akismet Spam'), $count, 'moderate_comments', 'akismet-admin', 'akismet_caught' ); @@ -278,12 +585,13 @@ function akismet_manage_page() { function akismet_caught() { global $wpdb, $comment, $akismet_caught, $akismet_nonce; + akismet_recheck_queue(); if (isset($_POST['submit']) && 'recover' == $_POST['action'] && ! empty($_POST['not_spam'])) { check_admin_referer( $akismet_nonce ); if ( function_exists('current_user_can') && !current_user_can('moderate_comments') ) die(__('You do not have sufficient permission to moderate comments.')); - + $i = 0; foreach ($_POST['not_spam'] as $comment): $comment = (int) $comment; @@ -303,7 +611,7 @@ function akismet_caught() { if ( function_exists('current_user_can') && !current_user_can('moderate_comments') ) die(__('You do not have sufficient permission to moderate comments.')); - $delete_time = addslashes( $_POST['display_time'] ); + $delete_time = $wpdb->escape( $_POST['display_time'] ); $nuked = $wpdb->query( "DELETE FROM $wpdb->comments WHERE comment_approved = 'spam' AND '$delete_time' > comment_date_gmt" ); wp_cache_delete( 'akismet_spam_count', 'widget' ); $to = add_query_arg( 'deleted', 'all', $_SERVER['HTTP_REFERER'] ); @@ -370,14 +678,13 @@ else $count = get_option( 'akismet_spam_count' ); if ( $count ) { ?> -

%1$s spam for you since you first installed it.'), number_format($count) ); ?>

+

%1$s spam for you since you first installed it.'), number_format_i18n($count) ); ?>

get_var( "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = 'spam'" ); +$spam_count = akismet_spam_count(); - -if ( 0 == $gotspam ) { +if ( 0 == $spam_count ) { echo '

'.__('You have no spam currently in the queue. Must be your lucky day. :)').'

'; echo ''; } else { @@ -387,7 +694,7 @@ if ( 0 == $gotspam ) {
-    +   
@@ -418,34 +725,30 @@ if ( isset( $_POST['s'] ) ) { if ( $page < 2 ) $page = 1; - $start = ( $page - 1 ) * 50; - $end = $start + 50; + $current_type = false; + if ( isset( $_GET['ctype'] ) ) + $current_type = preg_replace( '|[^a-z]|', '', $_GET['ctype'] ); - $where = ''; - if ( isset( $_GET['ctype'] ) ) { - $type = preg_replace( '|[^a-z]|', '', $_GET['ctype'] ); - if ( 'comments' == $type ) - $type = ''; - $where = " AND comment_type = '$type' "; - } - - $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' $where ORDER BY comment_date DESC LIMIT $start, $end"); - $total = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = 'spam' $where" ); - - $totals = $wpdb->get_results( "SELECT comment_type, COUNT(*) AS cc FROM $wpdb->comments WHERE comment_approved = 'spam' GROUP BY comment_type" ); + $comments = akismet_spam_comments( $current_type, $page ); + $total = akismet_spam_count( $current_type ); + $totals = akismet_spam_totals(); ?>
" id="akismetsearch"> -

+

50 ) { @@ -501,7 +804,7 @@ foreach($comments as $comment) { $post_title = $post->post_title; if ($i % 2) $class = 'class="alternate"'; else $class = ''; - echo "\n\t
  • "; + echo "\n\t
  • "; ?>

    comment_author_email) { ?>| comment_author_url && 'http://' != $comment->comment_author_url) { ?> | |

    @@ -510,7 +813,7 @@ foreach($comments as $comment) {

    — [ + — [ comment_post_ID); $post_title = wp_specialchars( $post->post_title, 'double' ); @@ -554,7 +857,7 @@ if ( ( $page ) * 50 < $total || -1 == $total ) { echo "

    $r

    "; } ?> -

    +

    @@ -580,9 +883,11 @@ echo "

    $r

    "; add_action('admin_menu', 'akismet_manage_page'); +// WP < 2.5 function akismet_stats() { - $count = get_option('akismet_spam_count'); - if ( !$count ) + if ( !function_exists('did_action') || did_action( 'rightnow_end' ) ) // We already displayed this info in the "Right Now" section + return; + if ( !$count = get_option('akismet_spam_count') ) return; $path = plugin_basename(__FILE__); echo '

    '.__('Spam').'

    '; @@ -591,12 +896,50 @@ function akismet_stats() { $link = 'edit-comments.php'; else $link = 'edit.php'; - echo '

    '.sprintf(__('Akismet has protected your site from %3$s spam comments.'), 'http://akismet.com/', clean_url("$link?page=akismet-admin"), number_format($count) ).'

    '; + echo '

    '.sprintf(__('Akismet has protected your site from %3$s spam comments.'), 'http://akismet.com/', clean_url("$link?page=akismet-admin"), number_format_i18n($count) ).'

    '; } add_action('activity_box_end', 'akismet_stats'); +// WP 2.5+ +function akismet_rightnow() { + global $submenu, $wp_db_version; + + if ( 8645 < $wp_db_version ) // 2.7 + $link = 'edit-comments.php?comment_status=spam'; + elseif ( isset( $submenu['edit-comments.php'] ) ) + $link = 'edit-comments.php?page=akismet-admin'; + else + $link = 'edit.php?page=akismet-admin'; + + if ( $count = get_option('akismet_spam_count') ) { + $intro = sprintf( __ngettext( + 'Akismet has protected your site from %2$s spam comment already,', + 'Akismet has protected your site from %2$s spam comments already,', + $count + ), 'http://akismet.com/', number_format_i18n( $count ) ); + } else { + $intro = sprintf( __('Akismet blocks spam from getting to your blog,'), 'http://akismet.com/' ); + } + + if ( $queue_count = akismet_spam_count() ) { + $queue_text = sprintf( __ngettext( + 'and there\'s %1$s comment in your spam queue right now.', + 'and there are %1$s comments in your spam queue right now.', + $queue_count + ), number_format_i18n( $queue_count ), clean_url($link) ); + } else { + $queue_text = sprintf( __( "but there's nothing in your spam queue at the moment." ), clean_url($link) ); + } + + $text = sprintf( _c( '%1$s %2$s|akismet_rightnow' ), $intro, $queue_text ); + echo "

    $text

    \n"; +} + +add_action('rightnow_end', 'akismet_rightnow'); + +// For WP <= 2.3.x if ( 'moderation.php' == $pagenow ) { function akismet_recheck_button( $page ) { global $submenu; @@ -613,24 +956,39 @@ if ( 'moderation.php' == $pagenow ) { ob_start( 'akismet_recheck_button' ); } +// For WP >= 2.5 +function akismet_check_for_spam_button($comment_status) { + if ( 'approved' == $comment_status ) + return; + if ( function_exists('plugins_url') ) + $link = 'admin.php?action=akismet_recheck_queue'; + else + $link = 'edit-comments.php?page=akismet-admin&recheckqueue=true&noheader=true'; + echo "
    " . __('Check for Spam') . ""; +} +add_action('manage_comments_nav', 'akismet_check_for_spam_button'); + function akismet_recheck_queue() { global $wpdb, $akismet_api_host, $akismet_api_port; - if ( !isset( $_GET['recheckqueue'] ) ) + if ( ! ( isset( $_GET['recheckqueue'] ) || ( isset( $_REQUEST['action'] ) && 'akismet_recheck_queue' == $_REQUEST['action'] ) ) ) return; $moderation = $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE comment_approved = '0'", ARRAY_A ); - foreach ( $moderation as $c ) { + foreach ( (array) $moderation as $c ) { $c['user_ip'] = $c['comment_author_IP']; $c['user_agent'] = $c['comment_agent']; $c['referrer'] = ''; $c['blog'] = get_option('home'); - $id = $c['comment_ID']; - + $c['blog_lang'] = get_locale(); + $c['blog_charset'] = get_option('blog_charset'); + $c['permalink'] = get_permalink($c['comment_post_ID']); + $id = (int) $c['comment_ID']; + $query_string = ''; foreach ( $c as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; - + $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port); if ( 'true' == $response[1] ) { $wpdb->query( "UPDATE $wpdb->comments SET comment_approved = 'spam' WHERE comment_ID = $id" ); @@ -640,6 +998,8 @@ function akismet_recheck_queue() { exit; } +add_action('admin_action_akismet_recheck_queue', 'akismet_recheck_queue'); + function akismet_check_db_comment( $id ) { global $wpdb, $akismet_api_host, $akismet_api_port; @@ -652,12 +1012,15 @@ function akismet_check_db_comment( $id ) { $c['user_agent'] = $c['comment_agent']; $c['referrer'] = ''; $c['blog'] = get_option('home'); + $c['blog_lang'] = get_locale(); + $c['blog_charset'] = get_option('blog_charset'); + $c['permalink'] = get_permalink($c['comment_post_ID']); $id = $c['comment_ID']; - + $query_string = ''; foreach ( $c as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; - + $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port); return $response[1]; } @@ -672,8 +1035,7 @@ function widget_akismet_register() { function widget_akismet($args) { extract($args); $options = get_option('widget_akismet'); - $count = number_format(get_option('akismet_spam_count')); - $text = __('%d spam comments have been blocked by Akismet.'); + $count = number_format_i18n(get_option('akismet_spam_count')); ?> @@ -681,7 +1043,7 @@ function widget_akismet_register() {