web/wp-content/plugins/akismet/akismet.php
author ymh <ymh.work@gmail.com>
Mon, 22 Mar 2010 16:36:28 +0100
changeset 5 ac511f1ccc8e
parent 1 0d28b7c10758
permissions -rw-r--r--
add hgignore
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
0d28b7c10758 First commit
ymh
parents:
diff changeset
     1
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
     2
/*
0d28b7c10758 First commit
ymh
parents:
diff changeset
     3
Plugin Name: Akismet
0d28b7c10758 First commit
ymh
parents:
diff changeset
     4
Plugin URI: http://akismet.com/
0d28b7c10758 First commit
ymh
parents:
diff changeset
     5
Description: Akismet checks your comments against the Akismet web service to see if they look like spam or not. You need a <a href="http://akismet.com/get/">WordPress.com API key</a> to use it. You can review the spam it catches under "Comments." To show off your Akismet stats just put <code>&lt;?php akismet_counter(); ?&gt;</code> in your template. See also: <a href="http://wordpress.org/extend/plugins/stats/">WP Stats plugin</a>.
0d28b7c10758 First commit
ymh
parents:
diff changeset
     6
Version: 2.2.7
0d28b7c10758 First commit
ymh
parents:
diff changeset
     7
Author: Matt Mullenweg
0d28b7c10758 First commit
ymh
parents:
diff changeset
     8
Author URI: http://ma.tt/
0d28b7c10758 First commit
ymh
parents:
diff changeset
     9
*/
0d28b7c10758 First commit
ymh
parents:
diff changeset
    10
0d28b7c10758 First commit
ymh
parents:
diff changeset
    11
define('AKISMET_VERSION', '2.2.7');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    12
0d28b7c10758 First commit
ymh
parents:
diff changeset
    13
// If you hardcode a WP.com API key here, all key config screens will be hidden
0d28b7c10758 First commit
ymh
parents:
diff changeset
    14
if ( defined('WPCOM_API_KEY') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    15
	$wpcom_api_key = constant('WPCOM_API_KEY');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    16
else
0d28b7c10758 First commit
ymh
parents:
diff changeset
    17
	$wpcom_api_key = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    18
0d28b7c10758 First commit
ymh
parents:
diff changeset
    19
function akismet_init() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    20
	global $wpcom_api_key, $akismet_api_host, $akismet_api_port;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    21
0d28b7c10758 First commit
ymh
parents:
diff changeset
    22
	if ( $wpcom_api_key )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    23
		$akismet_api_host = $wpcom_api_key . '.rest.akismet.com';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    24
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
    25
		$akismet_api_host = get_option('wordpress_api_key') . '.rest.akismet.com';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    26
0d28b7c10758 First commit
ymh
parents:
diff changeset
    27
	$akismet_api_port = 80;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    28
	add_action('admin_menu', 'akismet_config_page');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    29
	add_action('admin_menu', 'akismet_stats_page');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    30
	akismet_admin_warnings();
0d28b7c10758 First commit
ymh
parents:
diff changeset
    31
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    32
add_action('init', 'akismet_init');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    33
0d28b7c10758 First commit
ymh
parents:
diff changeset
    34
function akismet_admin_init() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    35
	if ( function_exists( 'get_plugin_page_hook' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    36
		$hook = get_plugin_page_hook( 'akismet-stats-display', 'index.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    37
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
    38
		$hook = 'dashboard_page_akismet-stats-display';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    39
	add_action('admin_head-'.$hook, 'akismet_stats_script');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    40
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    41
add_action('admin_init', 'akismet_admin_init');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    42
0d28b7c10758 First commit
ymh
parents:
diff changeset
    43
if ( !function_exists('wp_nonce_field') ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    44
	function akismet_nonce_field($action = -1) { return; }
0d28b7c10758 First commit
ymh
parents:
diff changeset
    45
	$akismet_nonce = -1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    46
} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    47
	function akismet_nonce_field($action = -1) { return wp_nonce_field($action); }
0d28b7c10758 First commit
ymh
parents:
diff changeset
    48
	$akismet_nonce = 'akismet-update-key';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    49
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    50
0d28b7c10758 First commit
ymh
parents:
diff changeset
    51
if ( !function_exists('number_format_i18n') ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    52
	function number_format_i18n( $number, $decimals = null ) { return number_format( $number, $decimals ); }
0d28b7c10758 First commit
ymh
parents:
diff changeset
    53
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    54
0d28b7c10758 First commit
ymh
parents:
diff changeset
    55
function akismet_config_page() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    56
	if ( function_exists('add_submenu_page') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    57
		add_submenu_page('plugins.php', __('Akismet Configuration'), __('Akismet Configuration'), 'manage_options', 'akismet-key-config', 'akismet_conf');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    58
0d28b7c10758 First commit
ymh
parents:
diff changeset
    59
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    60
0d28b7c10758 First commit
ymh
parents:
diff changeset
    61
function akismet_conf() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    62
	global $akismet_nonce, $wpcom_api_key;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    63
0d28b7c10758 First commit
ymh
parents:
diff changeset
    64
	if ( isset($_POST['submit']) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    65
		if ( function_exists('current_user_can') && !current_user_can('manage_options') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    66
			die(__('Cheatin&#8217; uh?'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
    67
0d28b7c10758 First commit
ymh
parents:
diff changeset
    68
		check_admin_referer( $akismet_nonce );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    69
		$key = preg_replace( '/[^a-h0-9]/i', '', $_POST['key'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    70
0d28b7c10758 First commit
ymh
parents:
diff changeset
    71
		if ( empty($key) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    72
			$key_status = 'empty';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    73
			$ms[] = 'new_key_empty';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    74
			delete_option('wordpress_api_key');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    75
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    76
			$key_status = akismet_verify_key( $key );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    77
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    78
0d28b7c10758 First commit
ymh
parents:
diff changeset
    79
		if ( $key_status == 'valid' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    80
			update_option('wordpress_api_key', $key);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    81
			$ms[] = 'new_key_valid';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    82
		} else if ( $key_status == 'invalid' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    83
			$ms[] = 'new_key_invalid';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    84
		} else if ( $key_status == 'failed' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    85
			$ms[] = 'new_key_failed';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    86
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    87
0d28b7c10758 First commit
ymh
parents:
diff changeset
    88
		if ( isset( $_POST['akismet_discard_month'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    89
			update_option( 'akismet_discard_month', 'true' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    90
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
    91
			update_option( 'akismet_discard_month', 'false' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    92
	} elseif ( isset($_POST['check']) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    93
		akismet_get_server_connectivity(0);
0d28b7c10758 First commit
ymh
parents:
diff changeset
    94
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    95
0d28b7c10758 First commit
ymh
parents:
diff changeset
    96
	if ( $key_status != 'valid' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    97
		$key = get_option('wordpress_api_key');
0d28b7c10758 First commit
ymh
parents:
diff changeset
    98
		if ( empty( $key ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    99
			if ( $key_status != 'failed' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   100
				if ( akismet_verify_key( '1234567890ab' ) == 'failed' )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   101
					$ms[] = 'no_connection';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   102
				else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   103
					$ms[] = 'key_empty';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   104
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   105
			$key_status = 'empty';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   106
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   107
			$key_status = akismet_verify_key( $key );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   108
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   109
		if ( $key_status == 'valid' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   110
			$ms[] = 'key_valid';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   111
		} else if ( $key_status == 'invalid' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   112
			delete_option('wordpress_api_key');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   113
			$ms[] = 'key_empty';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   114
		} else if ( !empty($key) && $key_status == 'failed' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   115
			$ms[] = 'key_failed';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   116
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   117
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   118
0d28b7c10758 First commit
ymh
parents:
diff changeset
   119
	$messages = array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
   120
		'new_key_empty' => array('color' => 'aa0', 'text' => __('Your key has been cleared.')),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   121
		'new_key_valid' => array('color' => '2d2', 'text' => __('Your key has been verified. Happy blogging!')),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   122
		'new_key_invalid' => array('color' => 'd22', 'text' => __('The key you entered is invalid. Please double-check it.')),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   123
		'new_key_failed' => array('color' => 'd22', 'text' => __('The key you entered could not be verified because a connection to akismet.com could not be established. Please check your server configuration.')),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   124
		'no_connection' => array('color' => 'd22', 'text' => __('There was a problem connecting to the Akismet server. Please check your server configuration.')),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   125
		'key_empty' => array('color' => 'aa0', 'text' => sprintf(__('Please enter an API key. (<a href="%s" style="color:#fff">Get your key.</a>)'), 'http://akismet.com/get/')),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   126
		'key_valid' => array('color' => '2d2', 'text' => __('This key is valid.')),
0d28b7c10758 First commit
ymh
parents:
diff changeset
   127
		'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.')));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   128
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   129
<?php if ( !empty($_POST['submit'] ) ) : ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   130
<div id="message" class="updated fade"><p><strong><?php _e('Options saved.') ?></strong></p></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   131
<?php endif; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   132
<div class="wrap">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   133
<h2><?php _e('Akismet Configuration'); ?></h2>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   134
<div class="narrow">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   135
<form action="" method="post" id="akismet-conf" style="margin: auto; width: 400px; ">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   136
<?php if ( !$wpcom_api_key ) { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   137
	<p><?php printf(__('For many people, <a href="%1$s">Akismet</a> will greatly reduce or even completely eliminate the comment and trackback spam you get on your site. If one does happen to get through, simply mark it as "spam" on the moderation screen and Akismet will learn from the mistakes. If you don\'t have a WordPress.com account yet, you can get one at <a href="%2$s">Akismet.com</a>.'), 'http://akismet.com/', 'http://akismet.com/get/'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   138
0d28b7c10758 First commit
ymh
parents:
diff changeset
   139
<?php akismet_nonce_field($akismet_nonce) ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   140
<h3><label for="key"><?php _e('WordPress.com API Key'); ?></label></h3>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   141
<?php foreach ( $ms as $m ) : ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   142
	<p style="padding: .5em; background-color: #<?php echo $messages[$m]['color']; ?>; color: #fff; font-weight: bold;"><?php echo $messages[$m]['text']; ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   143
<?php endforeach; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   144
<p><input id="key" name="key" type="text" size="15" maxlength="12" value="<?php echo get_option('wordpress_api_key'); ?>" style="font-family: 'Courier New', Courier, mono; font-size: 1.5em;" /> (<?php _e('<a href="http://faq.wordpress.com/2005/10/19/api-key/">What is this?</a>'); ?>)</p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   145
<?php if ( $invalid_key ) { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   146
<h3><?php _e('Why might my key be invalid?'); ?></h3>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   147
<p><?php _e('This can mean one of two things, either you copied the key wrong or that the plugin is unable to reach the Akismet servers, which is most often caused by an issue with your web host around firewalls or similar.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   148
<?php } ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   149
<?php } ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   150
<p><label><input name="akismet_discard_month" id="akismet_discard_month" value="true" type="checkbox" <?php if ( get_option('akismet_discard_month') == 'true' ) echo ' checked="checked" '; ?> /> <?php _e('Automatically discard spam comments on posts older than a month.'); ?></label></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   151
	<p class="submit"><input type="submit" name="submit" value="<?php _e('Update options &raquo;'); ?>" /></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   152
</form>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   153
0d28b7c10758 First commit
ymh
parents:
diff changeset
   154
<form action="" method="post" id="akismet-connectivity" style="margin: auto; width: 400px; ">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   155
0d28b7c10758 First commit
ymh
parents:
diff changeset
   156
<h3><?php _e('Server Connectivity'); ?></h3>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   157
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   158
	$servers = akismet_get_server_connectivity();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   159
	$fail_count = count($servers) - count( array_filter($servers) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   160
	if ( is_array($servers) && count($servers) > 0 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   161
		// some connections work, some fail
0d28b7c10758 First commit
ymh
parents:
diff changeset
   162
		if ( $fail_count > 0 && $fail_count < count($servers) ) { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   163
			<p style="padding: .5em; background-color: #aa0; color: #fff; font-weight:bold;"><?php _e('Unable to reach some Akismet servers.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   164
			<p><?php echo sprintf( __('A network problem or firewall is blocking some connections from your web server to Akismet.com.  Akismet is working but this may cause problems during times of network congestion.  Please contact your web host or firewall administrator and give them <a href="%s" target="_blank">this information about Akismet and firewalls</a>.'), 'http://blog.akismet.com/akismet-hosting-faq/'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   165
		<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   166
		// all connections fail
0d28b7c10758 First commit
ymh
parents:
diff changeset
   167
		} elseif ( $fail_count > 0 ) { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   168
			<p style="padding: .5em; background-color: #d22; color: #fff; font-weight:bold;"><?php _e('Unable to reach any Akismet servers.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   169
			<p><?php echo sprintf( __('A network problem or firewall is blocking all connections from your web server to Akismet.com.  <strong>Akismet cannot work correctly until this is fixed.</strong>  Please contact your web host or firewall administrator and give them <a href="%s" target="_blank">this information about Akismet and firewalls</a>.'), 'http://blog.akismet.com/akismet-hosting-faq/'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   170
		<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   171
		// all connections work
0d28b7c10758 First commit
ymh
parents:
diff changeset
   172
		} else { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   173
			<p style="padding: .5em; background-color: #2d2; color: #fff; font-weight:bold;"><?php  _e('All Akismet servers are available.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   174
			<p><?php _e('Akismet is working correctly.  All servers are accessible.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   175
		<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   176
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   177
	} elseif ( !is_callable('fsockopen') ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   178
		?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   179
			<p style="padding: .5em; background-color: #d22; color: #fff; font-weight:bold;"><?php _e('Network functions are disabled.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   180
			<p><?php echo sprintf( __('Your web host or server administrator has disabled PHP\'s <code>fsockopen</code> function.  <strong>Akismet cannot work correctly until this is fixed.</strong>  Please contact your web host or firewall administrator and give them <a href="%s" target="_blank">this information about Akismet\'s system requirements</a>.'), 'http://blog.akismet.com/akismet-hosting-faq/'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   181
		<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   182
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   183
		?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   184
			<p style="padding: .5em; background-color: #d22; color: #fff; font-weight:bold;"><?php _e('Unable to find Akismet servers.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   185
			<p><?php echo sprintf( __('A DNS problem or firewall is preventing all access from your web server to Akismet.com.  <strong>Akismet cannot work correctly until this is fixed.</strong>  Please contact your web host or firewall administrator and give them <a href="%s" target="_blank">this information about Akismet and firewalls</a>.'), 'http://blog.akismet.com/akismet-hosting-faq/'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   186
		<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   187
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   188
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   189
	if ( !empty($servers) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   190
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   191
<table style="width: 100%;">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   192
<thead><th><?php _e('Akismet server'); ?></th><th><?php _e('Network Status'); ?></th></thead>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   193
<tbody>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   194
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   195
		asort($servers);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   196
		foreach ( $servers as $ip => $status ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   197
			$color = ( $status ? '#2d2' : '#d22');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   198
	?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   199
		<tr>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   200
		<td><?php echo htmlspecialchars($ip); ?></td>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   201
		<td style="padding: 0 .5em; font-weight:bold; color: #fff; background-color: <?php echo $color; ?>"><?php echo ($status ? __('No problems') : __('Obstructed') ); ?></td>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   202
		
0d28b7c10758 First commit
ymh
parents:
diff changeset
   203
	<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   204
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   205
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   206
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   207
</tbody>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   208
</table>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   209
	<p><?php if ( get_option('akismet_connectivity_time') ) echo sprintf( __('Last checked %s ago.'), human_time_diff( get_option('akismet_connectivity_time') ) ); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   210
	<p class="submit"><input type="submit" name="check" value="<?php _e('Check network status &raquo;'); ?>" /></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   211
</form>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   212
0d28b7c10758 First commit
ymh
parents:
diff changeset
   213
</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   214
</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   215
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   216
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   217
0d28b7c10758 First commit
ymh
parents:
diff changeset
   218
function akismet_stats_page() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   219
	if ( function_exists('add_submenu_page') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   220
		add_submenu_page('index.php', __('Akismet Stats'), __('Akismet Stats'), 'manage_options', 'akismet-stats-display', 'akismet_stats_display');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   221
0d28b7c10758 First commit
ymh
parents:
diff changeset
   222
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   223
0d28b7c10758 First commit
ymh
parents:
diff changeset
   224
function akismet_stats_script() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   225
	?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   226
<script type="text/javascript">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   227
function resizeIframe() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   228
    var height = document.documentElement.clientHeight;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   229
    height -= document.getElementById('akismet-stats-frame').offsetTop;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   230
    height += 100; // magic padding
0d28b7c10758 First commit
ymh
parents:
diff changeset
   231
    
0d28b7c10758 First commit
ymh
parents:
diff changeset
   232
    document.getElementById('akismet-stats-frame').style.height = height +"px";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   233
    
0d28b7c10758 First commit
ymh
parents:
diff changeset
   234
};
0d28b7c10758 First commit
ymh
parents:
diff changeset
   235
function resizeIframeInit() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   236
	document.getElementById('akismet-stats-frame').onload = resizeIframe;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   237
	window.onresize = resizeIframe;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   238
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   239
addLoadEvent(resizeIframeInit);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   240
</script><?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   241
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   242
0d28b7c10758 First commit
ymh
parents:
diff changeset
   243
0d28b7c10758 First commit
ymh
parents:
diff changeset
   244
function akismet_stats_display() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   245
	global $akismet_api_host, $akismet_api_port, $wpcom_api_key;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   246
	$blog = urlencode( get_option('home') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   247
	$url = "http://".akismet_get_key().".web.akismet.com/1.0/user-stats.php?blog={$blog}";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   248
	?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   249
	<div class="wrap">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   250
	<iframe src="<?php echo $url; ?>" width="100%" height="100%" frameborder="0" id="akismet-stats-frame"></iframe>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   251
	</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   252
	<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   253
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   254
0d28b7c10758 First commit
ymh
parents:
diff changeset
   255
function akismet_get_key() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   256
	global $wpcom_api_key;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   257
	if ( !empty($wpcom_api_key) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   258
		return $wpcom_api_key;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   259
	return get_option('wordpress_api_key');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   260
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   261
0d28b7c10758 First commit
ymh
parents:
diff changeset
   262
function akismet_verify_key( $key, $ip = null ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   263
	global $akismet_api_host, $akismet_api_port, $wpcom_api_key;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   264
	$blog = urlencode( get_option('home') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   265
	if ( $wpcom_api_key )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   266
		$key = $wpcom_api_key;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   267
	$response = akismet_http_post("key=$key&blog=$blog", 'rest.akismet.com', '/1.1/verify-key', $akismet_api_port, $ip);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   268
	if ( !is_array($response) || !isset($response[1]) || $response[1] != 'valid' && $response[1] != 'invalid' )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   269
		return 'failed';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   270
	return $response[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   271
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   272
0d28b7c10758 First commit
ymh
parents:
diff changeset
   273
// Check connectivity between the WordPress blog and Akismet's servers.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   274
// 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).
0d28b7c10758 First commit
ymh
parents:
diff changeset
   275
function akismet_check_server_connectivity() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   276
	global $akismet_api_host, $akismet_api_port, $wpcom_api_key;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   277
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   278
	$test_host = 'rest.akismet.com';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   279
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   280
	// Some web hosts may disable one or both functions
0d28b7c10758 First commit
ymh
parents:
diff changeset
   281
	if ( !is_callable('fsockopen') || !is_callable('gethostbynamel') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   282
		return array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   283
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   284
	$ips = gethostbynamel($test_host);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   285
	if ( !$ips || !is_array($ips) || !count($ips) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   286
		return array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   287
		
0d28b7c10758 First commit
ymh
parents:
diff changeset
   288
	$servers = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   289
	foreach ( $ips as $ip ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   290
		$response = akismet_verify_key( akismet_get_key(), $ip );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   291
		// even if the key is invalid, at least we know we have connectivity
0d28b7c10758 First commit
ymh
parents:
diff changeset
   292
		if ( $response == 'valid' || $response == 'invalid' )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   293
			$servers[$ip] = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   294
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   295
			$servers[$ip] = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   296
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   297
0d28b7c10758 First commit
ymh
parents:
diff changeset
   298
	return $servers;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   299
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   300
0d28b7c10758 First commit
ymh
parents:
diff changeset
   301
// Check the server connectivity and store the results in an option.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   302
// Cached results will be used if not older than the specified timeout in seconds; use $cache_timeout = 0 to force an update.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   303
// Returns the same associative array as akismet_check_server_connectivity()
0d28b7c10758 First commit
ymh
parents:
diff changeset
   304
function akismet_get_server_connectivity( $cache_timeout = 86400 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   305
	$servers = get_option('akismet_available_servers');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   306
	if ( (time() - get_option('akismet_connectivity_time') < $cache_timeout) && $servers !== false )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   307
		return $servers;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   308
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   309
	// There's a race condition here but the effect is harmless.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   310
	$servers = akismet_check_server_connectivity();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   311
	update_option('akismet_available_servers', $servers);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   312
	update_option('akismet_connectivity_time', time());
0d28b7c10758 First commit
ymh
parents:
diff changeset
   313
	return $servers;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   314
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   315
0d28b7c10758 First commit
ymh
parents:
diff changeset
   316
// Returns true if server connectivity was OK at the last check, false if there was a problem that needs to be fixed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   317
function akismet_server_connectivity_ok() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   318
	// skip the check on WPMU because the status page is hidden
0d28b7c10758 First commit
ymh
parents:
diff changeset
   319
	global $wpcom_api_key;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   320
	if ( $wpcom_api_key )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   321
		return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   322
	$servers = akismet_get_server_connectivity();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   323
	return !( empty($servers) || !count($servers) || count( array_filter($servers) ) < count($servers) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   324
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   325
0d28b7c10758 First commit
ymh
parents:
diff changeset
   326
function akismet_admin_warnings() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   327
	global $wpcom_api_key;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   328
	if ( !get_option('wordpress_api_key') && !$wpcom_api_key && !isset($_POST['submit']) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   329
		function akismet_warning() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   330
			echo "
0d28b7c10758 First commit
ymh
parents:
diff changeset
   331
			<div id='akismet-warning' class='updated fade'><p><strong>".__('Akismet is almost ready.')."</strong> ".sprintf(__('You must <a href="%1$s">enter your WordPress.com API key</a> for it to work.'), "plugins.php?page=akismet-key-config")."</p></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   332
			";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   333
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   334
		add_action('admin_notices', 'akismet_warning');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   335
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   336
	} elseif ( get_option('akismet_connectivity_time') && empty($_POST) && is_admin() && !akismet_server_connectivity_ok() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   337
		function akismet_warning() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   338
			echo "
0d28b7c10758 First commit
ymh
parents:
diff changeset
   339
			<div id='akismet-warning' class='updated fade'><p><strong>".__('Akismet has detected a problem.')."</strong> ".sprintf(__('A server or network problem is preventing Akismet from working correctly.  <a href="%1$s">Click here for more information</a> about how to fix the problem.'), "plugins.php?page=akismet-key-config")."</p></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   340
			";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   341
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   342
		add_action('admin_notices', 'akismet_warning');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   343
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   344
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   345
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   346
0d28b7c10758 First commit
ymh
parents:
diff changeset
   347
function akismet_get_host($host) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   348
	// if all servers are accessible, just return the host name.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   349
	// if not, return an IP that was known to be accessible at the last check.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   350
	if ( akismet_server_connectivity_ok() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   351
		return $host;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   352
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   353
		$ips = akismet_get_server_connectivity();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   354
		// a firewall may be blocking access to some Akismet IPs
0d28b7c10758 First commit
ymh
parents:
diff changeset
   355
		if ( count($ips) > 0 && count(array_filter($ips)) < count($ips) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   356
			// use DNS to get current IPs, but exclude any known to be unreachable
0d28b7c10758 First commit
ymh
parents:
diff changeset
   357
			$dns = (array)gethostbynamel( rtrim($host, '.') . '.' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   358
			$dns = array_filter($dns);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   359
			foreach ( $dns as $ip ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   360
				if ( array_key_exists( $ip, $ips ) && empty( $ips[$ip] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   361
					unset($dns[$ip]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   362
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   363
			// return a random IP from those available
0d28b7c10758 First commit
ymh
parents:
diff changeset
   364
			if ( count($dns) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   365
				return $dns[ array_rand($dns) ];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   366
			
0d28b7c10758 First commit
ymh
parents:
diff changeset
   367
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   368
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   369
	// if all else fails try the host name
0d28b7c10758 First commit
ymh
parents:
diff changeset
   370
	return $host;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   371
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   372
0d28b7c10758 First commit
ymh
parents:
diff changeset
   373
// Returns array with headers in $response[0] and body in $response[1]
0d28b7c10758 First commit
ymh
parents:
diff changeset
   374
function akismet_http_post($request, $host, $path, $port = 80, $ip=null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   375
	global $wp_version;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   376
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   377
	$akismet_version = constant('AKISMET_VERSION');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   378
0d28b7c10758 First commit
ymh
parents:
diff changeset
   379
	$http_request  = "POST $path HTTP/1.0\r\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   380
	$http_request .= "Host: $host\r\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   381
	$http_request .= "Content-Type: application/x-www-form-urlencoded; charset=" . get_option('blog_charset') . "\r\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   382
	$http_request .= "Content-Length: " . strlen($request) . "\r\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   383
	$http_request .= "User-Agent: WordPress/$wp_version | Akismet/$akismet_version\r\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   384
	$http_request .= "\r\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   385
	$http_request .= $request;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   386
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   387
	$http_host = $host;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   388
	// use a specific IP if provided - needed by akismet_check_server_connectivity()
0d28b7c10758 First commit
ymh
parents:
diff changeset
   389
	if ( $ip && long2ip(ip2long($ip)) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   390
		$http_host = $ip;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   391
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   392
		$http_host = akismet_get_host($host);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   393
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   394
0d28b7c10758 First commit
ymh
parents:
diff changeset
   395
	$response = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   396
	if( false != ( $fs = @fsockopen($http_host, $port, $errno, $errstr, 10) ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   397
		fwrite($fs, $http_request);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   398
0d28b7c10758 First commit
ymh
parents:
diff changeset
   399
		while ( !feof($fs) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   400
			$response .= fgets($fs, 1160); // One TCP-IP packet
0d28b7c10758 First commit
ymh
parents:
diff changeset
   401
		fclose($fs);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   402
		$response = explode("\r\n\r\n", $response, 2);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   403
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   404
	return $response;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   405
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   406
0d28b7c10758 First commit
ymh
parents:
diff changeset
   407
// filter handler used to return a spam result to pre_comment_approved
0d28b7c10758 First commit
ymh
parents:
diff changeset
   408
function akismet_result_spam( $approved ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   409
	// bump the counter here instead of when the filter is added to reduce the possibility of overcounting
0d28b7c10758 First commit
ymh
parents:
diff changeset
   410
	if ( $incr = apply_filters('akismet_spam_count_incr', 1) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   411
		update_option( 'akismet_spam_count', get_option('akismet_spam_count') + $incr );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   412
	return 'spam';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   413
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   414
0d28b7c10758 First commit
ymh
parents:
diff changeset
   415
function akismet_auto_check_comment( $comment ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   416
	global $akismet_api_host, $akismet_api_port;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   417
0d28b7c10758 First commit
ymh
parents:
diff changeset
   418
	$comment['user_ip']    = preg_replace( '/[^0-9., ]/', '', $_SERVER['REMOTE_ADDR'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   419
	$comment['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   420
	$comment['referrer']   = $_SERVER['HTTP_REFERER'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   421
	$comment['blog']       = get_option('home');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   422
	$comment['blog_lang']  = get_locale();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   423
	$comment['blog_charset'] = get_option('blog_charset');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   424
	$comment['permalink']  = get_permalink($comment['comment_post_ID']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   425
0d28b7c10758 First commit
ymh
parents:
diff changeset
   426
	$ignore = array( 'HTTP_COOKIE' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   427
0d28b7c10758 First commit
ymh
parents:
diff changeset
   428
	foreach ( $_SERVER as $key => $value )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   429
		if ( !in_array( $key, $ignore ) && is_string($value) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   430
			$comment["$key"] = $value;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   431
0d28b7c10758 First commit
ymh
parents:
diff changeset
   432
	$query_string = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   433
	foreach ( $comment as $key => $data )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   434
		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   435
0d28b7c10758 First commit
ymh
parents:
diff changeset
   436
	$response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   437
	if ( 'true' == $response[1] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   438
		// akismet_spam_count will be incremented later by akismet_result_spam()
0d28b7c10758 First commit
ymh
parents:
diff changeset
   439
		add_filter('pre_comment_approved', 'akismet_result_spam');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   440
0d28b7c10758 First commit
ymh
parents:
diff changeset
   441
		do_action( 'akismet_spam_caught' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   442
0d28b7c10758 First commit
ymh
parents:
diff changeset
   443
		$post = get_post( $comment['comment_post_ID'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   444
		$last_updated = strtotime( $post->post_modified_gmt );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   445
		$diff = time() - $last_updated;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   446
		$diff = $diff / 86400;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   447
		
0d28b7c10758 First commit
ymh
parents:
diff changeset
   448
		if ( $post->post_type == 'post' && $diff > 30 && get_option( 'akismet_discard_month' ) == 'true' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   449
			// akismet_result_spam() won't be called so bump the counter here
0d28b7c10758 First commit
ymh
parents:
diff changeset
   450
			if ( $incr = apply_filters('akismet_spam_count_incr', 1) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   451
				update_option( 'akismet_spam_count', get_option('akismet_spam_count') + $incr );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   452
			die;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   453
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   454
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   455
	akismet_delete_old();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   456
	return $comment;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   457
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   458
0d28b7c10758 First commit
ymh
parents:
diff changeset
   459
function akismet_delete_old() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   460
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   461
	$now_gmt = current_time('mysql', 1);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   462
	$wpdb->query("DELETE FROM $wpdb->comments WHERE DATE_SUB('$now_gmt', INTERVAL 15 DAY) > comment_date_gmt AND comment_approved = 'spam'");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   463
	$n = mt_rand(1, 5000);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   464
	if ( $n == 11 ) // lucky number
0d28b7c10758 First commit
ymh
parents:
diff changeset
   465
		$wpdb->query("OPTIMIZE TABLE $wpdb->comments");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   466
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   467
0d28b7c10758 First commit
ymh
parents:
diff changeset
   468
function akismet_submit_nonspam_comment ( $comment_id ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   469
	global $wpdb, $akismet_api_host, $akismet_api_port, $current_user, $current_site;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   470
	$comment_id = (int) $comment_id;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   471
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   472
	$comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_id'");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   473
	if ( !$comment ) // it was deleted
0d28b7c10758 First commit
ymh
parents:
diff changeset
   474
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   475
	$comment->blog = get_option('home');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   476
	$comment->blog_lang = get_locale();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   477
	$comment->blog_charset = get_option('blog_charset');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   478
	$comment->permalink = get_permalink($comment->comment_post_ID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   479
	if ( is_object($current_user) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   480
	    $comment->reporter = $current_user->user_login;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   481
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   482
	if ( is_object($current_site) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   483
		$comment->site_domain = $current_site->domain;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   484
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   485
	$query_string = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   486
	foreach ( $comment as $key => $data )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   487
		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   488
0d28b7c10758 First commit
ymh
parents:
diff changeset
   489
	$response = akismet_http_post($query_string, $akismet_api_host, "/1.1/submit-ham", $akismet_api_port);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   490
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   491
0d28b7c10758 First commit
ymh
parents:
diff changeset
   492
function akismet_submit_spam_comment ( $comment_id ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   493
	global $wpdb, $akismet_api_host, $akismet_api_port, $current_user, $current_site;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   494
	$comment_id = (int) $comment_id;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   495
0d28b7c10758 First commit
ymh
parents:
diff changeset
   496
	$comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_id'");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   497
	if ( !$comment ) // it was deleted
0d28b7c10758 First commit
ymh
parents:
diff changeset
   498
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   499
	if ( 'spam' != $comment->comment_approved )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   500
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   501
	$comment->blog = get_option('home');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   502
	$comment->blog_lang = get_locale();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   503
	$comment->blog_charset = get_option('blog_charset');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   504
	$comment->permalink = get_permalink($comment->comment_post_ID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   505
	if ( is_object($current_user) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   506
	    $comment->reporter = $current_user->user_login;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   507
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   508
	if ( is_object($current_site) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   509
		$comment->site_domain = $current_site->domain;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   510
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   511
	$query_string = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   512
	foreach ( $comment as $key => $data )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   513
		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   514
0d28b7c10758 First commit
ymh
parents:
diff changeset
   515
	$response = akismet_http_post($query_string, $akismet_api_host, "/1.1/submit-spam", $akismet_api_port);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   516
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   517
0d28b7c10758 First commit
ymh
parents:
diff changeset
   518
add_action('wp_set_comment_status', 'akismet_submit_spam_comment');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   519
add_action('edit_comment', 'akismet_submit_spam_comment');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   520
add_action('preprocess_comment', 'akismet_auto_check_comment', 1);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   521
0d28b7c10758 First commit
ymh
parents:
diff changeset
   522
function akismet_spamtoham( $comment ) { akismet_submit_nonspam_comment( $comment->comment_ID ); }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   523
add_filter( 'comment_spam_to_approved', 'akismet_spamtoham' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   524
0d28b7c10758 First commit
ymh
parents:
diff changeset
   525
// Total spam in queue
0d28b7c10758 First commit
ymh
parents:
diff changeset
   526
// get_option( 'akismet_spam_count' ) is the total caught ever
0d28b7c10758 First commit
ymh
parents:
diff changeset
   527
function akismet_spam_count( $type = false ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   528
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   529
0d28b7c10758 First commit
ymh
parents:
diff changeset
   530
	if ( !$type ) { // total
0d28b7c10758 First commit
ymh
parents:
diff changeset
   531
		$count = wp_cache_get( 'akismet_spam_count', 'widget' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   532
		if ( false === $count ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   533
			if ( function_exists('wp_count_comments') ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   534
				$count = wp_count_comments();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   535
				$count = $count->spam;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   536
			} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   537
				$count = (int) $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam'");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   538
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   539
			wp_cache_set( 'akismet_spam_count', $count, 'widget', 3600 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   540
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   541
		return $count;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   542
	} elseif ( 'comments' == $type || 'comment' == $type ) { // comments
0d28b7c10758 First commit
ymh
parents:
diff changeset
   543
		$type = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   544
	} else { // pingback, trackback, ...
0d28b7c10758 First commit
ymh
parents:
diff changeset
   545
		$type  = $wpdb->escape( $type );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   546
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   547
0d28b7c10758 First commit
ymh
parents:
diff changeset
   548
	return (int) $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam' AND comment_type='$type'");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   549
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   550
0d28b7c10758 First commit
ymh
parents:
diff changeset
   551
function akismet_spam_comments( $type = false, $page = 1, $per_page = 50 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   552
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   553
0d28b7c10758 First commit
ymh
parents:
diff changeset
   554
	$page = (int) $page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   555
	if ( $page < 2 )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   556
		$page = 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   557
0d28b7c10758 First commit
ymh
parents:
diff changeset
   558
	$per_page = (int) $per_page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   559
	if ( $per_page < 1 )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   560
		$per_page = 50;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   561
0d28b7c10758 First commit
ymh
parents:
diff changeset
   562
	$start = ( $page - 1 ) * $per_page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   563
	$end = $start + $per_page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   564
0d28b7c10758 First commit
ymh
parents:
diff changeset
   565
	if ( $type ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   566
		if ( 'comments' == $type || 'comment' == $type )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   567
			$type = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   568
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   569
			$type = $wpdb->escape( $type );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   570
		return $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' AND comment_type='$type' ORDER BY comment_date DESC LIMIT $start, $end");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   571
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   572
0d28b7c10758 First commit
ymh
parents:
diff changeset
   573
	// All
0d28b7c10758 First commit
ymh
parents:
diff changeset
   574
	return $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_date DESC LIMIT $start, $end");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   575
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   576
0d28b7c10758 First commit
ymh
parents:
diff changeset
   577
// Totals for each comment type
0d28b7c10758 First commit
ymh
parents:
diff changeset
   578
// returns array( type => count, ... )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   579
function akismet_spam_totals() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   580
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   581
	$totals = $wpdb->get_results( "SELECT comment_type, COUNT(*) AS cc FROM $wpdb->comments WHERE comment_approved = 'spam' GROUP BY comment_type" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   582
	$return = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   583
	foreach ( $totals as $total )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   584
		$return[$total->comment_type ? $total->comment_type : 'comment'] = $total->cc;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   585
	return $return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   586
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   587
0d28b7c10758 First commit
ymh
parents:
diff changeset
   588
function akismet_manage_page() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   589
	global $wpdb, $submenu, $wp_db_version;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   590
0d28b7c10758 First commit
ymh
parents:
diff changeset
   591
	// WP 2.7 has its own spam management page
0d28b7c10758 First commit
ymh
parents:
diff changeset
   592
	if ( 8645 <= $wp_db_version )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   593
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   594
0d28b7c10758 First commit
ymh
parents:
diff changeset
   595
	$count = sprintf(__('Akismet Spam (%s)'), akismet_spam_count());
0d28b7c10758 First commit
ymh
parents:
diff changeset
   596
	if ( isset( $submenu['edit-comments.php'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   597
		add_submenu_page('edit-comments.php', __('Akismet Spam'), $count, 'moderate_comments', 'akismet-admin', 'akismet_caught' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   598
	elseif ( function_exists('add_management_page') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   599
		add_management_page(__('Akismet Spam'), $count, 'moderate_comments', 'akismet-admin', 'akismet_caught');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   600
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   601
0d28b7c10758 First commit
ymh
parents:
diff changeset
   602
function akismet_caught() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   603
	global $wpdb, $comment, $akismet_caught, $akismet_nonce;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   604
0d28b7c10758 First commit
ymh
parents:
diff changeset
   605
	akismet_recheck_queue();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   606
	if (isset($_POST['submit']) && 'recover' == $_POST['action'] && ! empty($_POST['not_spam'])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   607
		check_admin_referer( $akismet_nonce );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   608
		if ( function_exists('current_user_can') && !current_user_can('moderate_comments') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   609
			die(__('You do not have sufficient permission to moderate comments.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   610
0d28b7c10758 First commit
ymh
parents:
diff changeset
   611
		$i = 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   612
		foreach ($_POST['not_spam'] as $comment):
0d28b7c10758 First commit
ymh
parents:
diff changeset
   613
			$comment = (int) $comment;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   614
			if ( function_exists('wp_set_comment_status') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   615
				wp_set_comment_status($comment, 'approve');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   616
			else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   617
				$wpdb->query("UPDATE $wpdb->comments SET comment_approved = '1' WHERE comment_ID = '$comment'");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   618
			akismet_submit_nonspam_comment($comment);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   619
			++$i;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   620
		endforeach;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   621
		$to = add_query_arg( 'recovered', $i, $_SERVER['HTTP_REFERER'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   622
		wp_redirect( $to );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   623
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   624
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   625
	if ('delete' == $_POST['action']) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   626
		check_admin_referer( $akismet_nonce );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   627
		if ( function_exists('current_user_can') && !current_user_can('moderate_comments') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   628
			die(__('You do not have sufficient permission to moderate comments.'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   629
0d28b7c10758 First commit
ymh
parents:
diff changeset
   630
		$delete_time = $wpdb->escape( $_POST['display_time'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   631
		$nuked = $wpdb->query( "DELETE FROM $wpdb->comments WHERE comment_approved = 'spam' AND '$delete_time' > comment_date_gmt" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   632
		wp_cache_delete( 'akismet_spam_count', 'widget' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   633
		$to = add_query_arg( 'deleted', 'all', $_SERVER['HTTP_REFERER'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   634
		wp_redirect( $to );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   635
		exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   636
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   637
0d28b7c10758 First commit
ymh
parents:
diff changeset
   638
if ( isset( $_GET['recovered'] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   639
	$i = (int) $_GET['recovered'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   640
	echo '<div class="updated"><p>' . sprintf(__('%1$s comments recovered.'), $i) . "</p></div>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   641
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   642
0d28b7c10758 First commit
ymh
parents:
diff changeset
   643
if (isset( $_GET['deleted'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   644
	echo '<div class="updated"><p>' . __('All spam deleted.') . '</p></div>';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   645
0d28b7c10758 First commit
ymh
parents:
diff changeset
   646
if ( isset( $GLOBALS['submenu']['edit-comments.php'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   647
	$link = 'edit-comments.php';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   648
else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   649
	$link = 'edit.php';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   650
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   651
<style type="text/css">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   652
.akismet-tabs {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   653
	list-style: none;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   654
	margin: 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   655
	padding: 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   656
	clear: both;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   657
	border-bottom: 1px solid #ccc;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   658
	height: 31px;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   659
	margin-bottom: 20px;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   660
	background: #ddd;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   661
	border-top: 1px solid #bdbdbd;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   662
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   663
.akismet-tabs li {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   664
	float: left;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   665
	margin: 5px 0 0 20px;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   666
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   667
.akismet-tabs a {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   668
	display: block;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   669
	padding: 4px .5em 3px;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   670
	border-bottom: none;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   671
	color: #036;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   672
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   673
.akismet-tabs .active a {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   674
	background: #fff;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   675
	border: 1px solid #ccc;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   676
	border-bottom: none;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   677
	color: #000;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   678
	font-weight: bold;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   679
	padding-bottom: 4px;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   680
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   681
#akismetsearch {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   682
	float: right;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   683
	margin-top: -.5em;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   684
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   685
0d28b7c10758 First commit
ymh
parents:
diff changeset
   686
#akismetsearch p {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   687
	margin: 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   688
	padding: 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   689
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   690
</style>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   691
<div class="wrap">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   692
<h2><?php _e('Caught Spam') ?></h2>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   693
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   694
$count = get_option( 'akismet_spam_count' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   695
if ( $count ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   696
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   697
<p><?php printf(__('Akismet has caught <strong>%1$s spam</strong> for you since you first installed it.'), number_format_i18n($count) ); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   698
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   699
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   700
0d28b7c10758 First commit
ymh
parents:
diff changeset
   701
$spam_count = akismet_spam_count();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   702
0d28b7c10758 First commit
ymh
parents:
diff changeset
   703
if ( 0 == $spam_count ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   704
	echo '<p>'.__('You have no spam currently in the queue. Must be your lucky day. :)').'</p>';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   705
	echo '</div>';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   706
} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   707
	echo '<p>'.__('You can delete all of the spam from your database with a single click. This operation cannot be undone, so you may wish to check to ensure that no legitimate comments got through first. Spam is automatically deleted after 15 days, so don&#8217;t sweat it.').'</p>';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   708
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   709
<?php if ( !isset( $_POST['s'] ) ) { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   710
<form method="post" action="<?php echo attribute_escape( add_query_arg( 'noheader', 'true' ) ); ?>">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   711
<?php akismet_nonce_field($akismet_nonce) ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   712
<input type="hidden" name="action" value="delete" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   713
<?php printf(__('There are currently %1$s comments identified as spam.'), $spam_count); ?>&nbsp; &nbsp; <input type="submit" class="button delete" name="Submit" value="<?php _e('Delete all'); ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   714
<input type="hidden" name="display_time" value="<?php echo current_time('mysql', 1); ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   715
</form>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   716
<?php } ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   717
</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   718
<div class="wrap">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   719
<?php if ( isset( $_POST['s'] ) ) { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   720
<h2><?php _e('Search'); ?></h2>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   721
<?php } else { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   722
<?php echo '<p>'.__('These are the latest comments identified as spam by Akismet. If you see any mistakes, simply mark the comment as "not spam" and Akismet will learn from the submission. If you wish to recover a comment from spam, simply select the comment, and click Not Spam. After 15 days we clean out the junk for you.').'</p>'; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   723
<?php } ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   724
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   725
if ( isset( $_POST['s'] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   726
	$s = $wpdb->escape($_POST['s']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   727
	$comments = $wpdb->get_results("SELECT * FROM $wpdb->comments  WHERE
0d28b7c10758 First commit
ymh
parents:
diff changeset
   728
		(comment_author LIKE '%$s%' OR
0d28b7c10758 First commit
ymh
parents:
diff changeset
   729
		comment_author_email LIKE '%$s%' OR
0d28b7c10758 First commit
ymh
parents:
diff changeset
   730
		comment_author_url LIKE ('%$s%') OR
0d28b7c10758 First commit
ymh
parents:
diff changeset
   731
		comment_author_IP LIKE ('%$s%') OR
0d28b7c10758 First commit
ymh
parents:
diff changeset
   732
		comment_content LIKE ('%$s%') ) AND
0d28b7c10758 First commit
ymh
parents:
diff changeset
   733
		comment_approved = 'spam'
0d28b7c10758 First commit
ymh
parents:
diff changeset
   734
		ORDER BY comment_date DESC");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   735
} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   736
	if ( isset( $_GET['apage'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   737
		$page = (int) $_GET['apage'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   738
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   739
		$page = 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   740
0d28b7c10758 First commit
ymh
parents:
diff changeset
   741
	if ( $page < 2 )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   742
		$page = 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   743
0d28b7c10758 First commit
ymh
parents:
diff changeset
   744
	$current_type = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   745
	if ( isset( $_GET['ctype'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   746
		$current_type = preg_replace( '|[^a-z]|', '', $_GET['ctype'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   747
0d28b7c10758 First commit
ymh
parents:
diff changeset
   748
	$comments = akismet_spam_comments( $current_type, $page );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   749
	$total = akismet_spam_count( $current_type );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   750
	$totals = akismet_spam_totals();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   751
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   752
<ul class="akismet-tabs">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   753
<li <?php if ( !isset( $_GET['ctype'] ) ) echo ' class="active"'; ?>><a href="edit-comments.php?page=akismet-admin"><?php _e('All'); ?></a></li>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   754
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   755
foreach ( $totals as $type => $type_count ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   756
	if ( 'comment' == $type ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   757
		$type = 'comments';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   758
		$show = __('Comments');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   759
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   760
		$show = ucwords( $type );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   761
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   762
	$type_count = number_format_i18n( $type_count );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   763
	$extra = $current_type === $type ? ' class="active"' : '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   764
	echo "<li $extra><a href='edit-comments.php?page=akismet-admin&amp;ctype=$type'>$show ($type_count)</a></li>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   765
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   766
do_action( 'akismet_tabs' ); // so plugins can add more tabs easily
0d28b7c10758 First commit
ymh
parents:
diff changeset
   767
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   768
</ul>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   769
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   770
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   771
0d28b7c10758 First commit
ymh
parents:
diff changeset
   772
if ($comments) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   773
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   774
<form method="post" action="<?php echo attribute_escape("$link?page=akismet-admin"); ?>" id="akismetsearch">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   775
<p>  <input type="text" name="s" value="<?php if (isset($_POST['s'])) echo attribute_escape($_POST['s']); ?>" size="17" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   776
  <input type="submit" class="button" name="submit" value="<?php echo attribute_escape(__('Search Spam &raquo;')) ?>"  />  </p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   777
</form>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   778
<?php if ( $total > 50 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   779
$total_pages = ceil( $total / 50 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   780
$r = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   781
if ( 1 < $page ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   782
	$args['apage'] = ( 1 == $page - 1 ) ? '' : $page - 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   783
	$r .=  '<a class="prev" href="' . clean_url(add_query_arg( $args )) . '">'. __('&laquo; Previous Page') .'</a>' . "\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   784
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   785
if ( ( $total_pages = ceil( $total / 50 ) ) > 1 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   786
	for ( $page_num = 1; $page_num <= $total_pages; $page_num++ ) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   787
		if ( $page == $page_num ) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   788
			$r .=  "<strong>$page_num</strong>\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   789
		else :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   790
			$p = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   791
			if ( $page_num < 3 || ( $page_num >= $page - 3 && $page_num <= $page + 3 ) || $page_num > $total_pages - 3 ) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   792
				$args['apage'] = ( 1 == $page_num ) ? '' : $page_num;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   793
				$r .= '<a class="page-numbers" href="' . clean_url(add_query_arg($args)) . '">' . ( $page_num ) . "</a>\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   794
				$in = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   795
			elseif ( $in == true ) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   796
				$r .= "...\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   797
				$in = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   798
			endif;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   799
		endif;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   800
	endfor;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   801
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   802
if ( ( $page ) * 50 < $total || -1 == $total ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   803
	$args['apage'] = $page + 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   804
	$r .=  '<a class="next" href="' . clean_url(add_query_arg($args)) . '">'. __('Next Page &raquo;') .'</a>' . "\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   805
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   806
echo "<p>$r</p>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   807
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   808
0d28b7c10758 First commit
ymh
parents:
diff changeset
   809
<?php } ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   810
<form style="clear: both;" method="post" action="<?php echo attribute_escape( add_query_arg( 'noheader', 'true' ) ); ?>">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   811
<?php akismet_nonce_field($akismet_nonce) ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   812
<input type="hidden" name="action" value="recover" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   813
<ul id="spam-list" class="commentlist" style="list-style: none; margin: 0; padding: 0;">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   814
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   815
$i = 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   816
foreach($comments as $comment) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   817
	$i++;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   818
	$comment_date = mysql2date(get_option("date_format") . " @ " . get_option("time_format"), $comment->comment_date);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   819
	$post = get_post($comment->comment_post_ID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   820
	$post_title = $post->post_title;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   821
	if ($i % 2) $class = 'class="alternate"';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   822
	else $class = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   823
	echo "\n\t<li id='comment-$comment->comment_ID' $class>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   824
	?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   825
0d28b7c10758 First commit
ymh
parents:
diff changeset
   826
<p><strong><?php comment_author() ?></strong> <?php if ($comment->comment_author_email) { ?>| <?php comment_author_email_link() ?> <?php } if ($comment->comment_author_url && 'http://' != $comment->comment_author_url) { ?> | <?php comment_author_url_link() ?> <?php } ?>| <?php _e('IP:') ?> <a href="http://ws.arin.net/cgi-bin/whois.pl?queryinput=<?php comment_author_IP() ?>"><?php comment_author_IP() ?></a></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   827
0d28b7c10758 First commit
ymh
parents:
diff changeset
   828
<?php comment_text() ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   829
0d28b7c10758 First commit
ymh
parents:
diff changeset
   830
<p><label for="spam-<?php echo $comment->comment_ID; ?>">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   831
<input type="checkbox" id="spam-<?php echo $comment->comment_ID; ?>" name="not_spam[]" value="<?php echo $comment->comment_ID; ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   832
<?php _e('Not Spam') ?></label> &#8212; <?php comment_date('M j, g:i A');  ?> &#8212; [
0d28b7c10758 First commit
ymh
parents:
diff changeset
   833
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   834
$post = get_post($comment->comment_post_ID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   835
$post_title = wp_specialchars( $post->post_title, 'double' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   836
$post_title = ('' == $post_title) ? "# $comment->comment_post_ID" : $post_title;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   837
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   838
 <a href="<?php echo get_permalink($comment->comment_post_ID); ?>" title="<?php echo $post_title; ?>"><?php _e('View Post') ?></a> ] </p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   839
0d28b7c10758 First commit
ymh
parents:
diff changeset
   840
0d28b7c10758 First commit
ymh
parents:
diff changeset
   841
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   842
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   843
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   844
</ul>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   845
<?php if ( $total > 50 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   846
$total_pages = ceil( $total / 50 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   847
$r = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   848
if ( 1 < $page ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   849
	$args['apage'] = ( 1 == $page - 1 ) ? '' : $page - 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   850
	$r .=  '<a class="prev" href="' . clean_url(add_query_arg( $args )) . '">'. __('&laquo; Previous Page') .'</a>' . "\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   851
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   852
if ( ( $total_pages = ceil( $total / 50 ) ) > 1 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   853
	for ( $page_num = 1; $page_num <= $total_pages; $page_num++ ) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   854
		if ( $page == $page_num ) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   855
			$r .=  "<strong>$page_num</strong>\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   856
		else :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   857
			$p = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   858
			if ( $page_num < 3 || ( $page_num >= $page - 3 && $page_num <= $page + 3 ) || $page_num > $total_pages - 3 ) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   859
				$args['apage'] = ( 1 == $page_num ) ? '' : $page_num;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   860
				$r .= '<a class="page-numbers" href="' . clean_url(add_query_arg($args)) . '">' . ( $page_num ) . "</a>\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   861
				$in = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   862
			elseif ( $in == true ) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   863
				$r .= "...\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   864
				$in = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   865
			endif;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   866
		endif;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   867
	endfor;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   868
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   869
if ( ( $page ) * 50 < $total || -1 == $total ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   870
	$args['apage'] = $page + 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   871
	$r .=  '<a class="next" href="' . clean_url(add_query_arg($args)) . '">'. __('Next Page &raquo;') .'</a>' . "\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   872
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   873
echo "<p>$r</p>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   874
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   875
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   876
<p class="submit">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   877
<input type="submit" name="submit" value="<?php echo attribute_escape(__('De-spam marked comments &raquo;')); ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   878
</p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   879
<p><?php _e('Comments you de-spam will be submitted to Akismet as mistakes so it can learn and get better.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   880
</form>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   881
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   882
} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   883
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   884
<p><?php _e('No results found.'); ?></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   885
<?php } ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   886
0d28b7c10758 First commit
ymh
parents:
diff changeset
   887
<?php if ( !isset( $_POST['s'] ) ) { ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   888
<form method="post" action="<?php echo attribute_escape( add_query_arg( 'noheader', 'true' ) ); ?>">
0d28b7c10758 First commit
ymh
parents:
diff changeset
   889
<?php akismet_nonce_field($akismet_nonce) ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   890
<p><input type="hidden" name="action" value="delete" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   891
<?php printf(__('There are currently %1$s comments identified as spam.'), $spam_count); ?>&nbsp; &nbsp; <input type="submit" name="Submit" class="button" value="<?php echo attribute_escape(__('Delete all')); ?>" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
   892
<input type="hidden" name="display_time" value="<?php echo current_time('mysql', 1); ?>" /></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   893
</form>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   894
<?php } ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   895
</div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
   896
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
   897
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   898
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   899
0d28b7c10758 First commit
ymh
parents:
diff changeset
   900
add_action('admin_menu', 'akismet_manage_page');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   901
0d28b7c10758 First commit
ymh
parents:
diff changeset
   902
// WP < 2.5
0d28b7c10758 First commit
ymh
parents:
diff changeset
   903
function akismet_stats() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   904
	if ( !function_exists('did_action') || did_action( 'rightnow_end' ) ) // We already displayed this info in the "Right Now" section
0d28b7c10758 First commit
ymh
parents:
diff changeset
   905
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   906
	if ( !$count = get_option('akismet_spam_count') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   907
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   908
	$path = plugin_basename(__FILE__);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   909
	echo '<h3>'.__('Spam').'</h3>';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   910
	global $submenu;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   911
	if ( isset( $submenu['edit-comments.php'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   912
		$link = 'edit-comments.php';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   913
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   914
		$link = 'edit.php';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   915
	echo '<p>'.sprintf(__('<a href="%1$s">Akismet</a> has protected your site from <a href="%2$s">%3$s spam comments</a>.'), 'http://akismet.com/', clean_url("$link?page=akismet-admin"), number_format_i18n($count) ).'</p>';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   916
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   917
0d28b7c10758 First commit
ymh
parents:
diff changeset
   918
add_action('activity_box_end', 'akismet_stats');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   919
0d28b7c10758 First commit
ymh
parents:
diff changeset
   920
// WP 2.5+
0d28b7c10758 First commit
ymh
parents:
diff changeset
   921
function akismet_rightnow() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   922
	global $submenu, $wp_db_version;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   923
0d28b7c10758 First commit
ymh
parents:
diff changeset
   924
	if ( 8645 < $wp_db_version  ) // 2.7
0d28b7c10758 First commit
ymh
parents:
diff changeset
   925
		$link = 'edit-comments.php?comment_status=spam';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   926
	elseif ( isset( $submenu['edit-comments.php'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   927
		$link = 'edit-comments.php?page=akismet-admin';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   928
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   929
		$link = 'edit.php?page=akismet-admin';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   930
0d28b7c10758 First commit
ymh
parents:
diff changeset
   931
	if ( $count = get_option('akismet_spam_count') ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   932
		$intro = sprintf( __ngettext(
0d28b7c10758 First commit
ymh
parents:
diff changeset
   933
			'<a href="%1$s">Akismet</a> has protected your site from %2$s spam comment already,',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   934
			'<a href="%1$s">Akismet</a> has protected your site from %2$s spam comments already,',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   935
			$count
0d28b7c10758 First commit
ymh
parents:
diff changeset
   936
		), 'http://akismet.com/', number_format_i18n( $count ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   937
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   938
		$intro = sprintf( __('<a href="%1$s">Akismet</a> blocks spam from getting to your blog,'), 'http://akismet.com/' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   939
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   940
0d28b7c10758 First commit
ymh
parents:
diff changeset
   941
	if ( $queue_count = akismet_spam_count() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   942
		$queue_text = sprintf( __ngettext(
0d28b7c10758 First commit
ymh
parents:
diff changeset
   943
			'and there\'s <a href="%2$s">%1$s comment</a> in your spam queue right now.',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   944
			'and there are <a href="%2$s">%1$s comments</a> in your spam queue right now.',
0d28b7c10758 First commit
ymh
parents:
diff changeset
   945
			$queue_count
0d28b7c10758 First commit
ymh
parents:
diff changeset
   946
		), number_format_i18n( $queue_count ), clean_url($link) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   947
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   948
		$queue_text = sprintf( __( "but there's nothing in your <a href='%1\$s'>spam queue</a> at the moment." ), clean_url($link) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   949
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   950
0d28b7c10758 First commit
ymh
parents:
diff changeset
   951
	$text = sprintf( _c( '%1$s %2$s|akismet_rightnow' ), $intro, $queue_text );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   952
0d28b7c10758 First commit
ymh
parents:
diff changeset
   953
	echo "<p class='akismet-right-now'>$text</p>\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   954
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   955
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   956
add_action('rightnow_end', 'akismet_rightnow');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   957
0d28b7c10758 First commit
ymh
parents:
diff changeset
   958
// For WP <= 2.3.x
0d28b7c10758 First commit
ymh
parents:
diff changeset
   959
if ( 'moderation.php' == $pagenow ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   960
	function akismet_recheck_button( $page ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   961
		global $submenu;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   962
		if ( isset( $submenu['edit-comments.php'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   963
			$link = 'edit-comments.php';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   964
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   965
			$link = 'edit.php';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   966
		$button = "<a href='$link?page=akismet-admin&amp;recheckqueue=true&amp;noheader=true' style='display: block; width: 100px; position: absolute; right: 7%; padding: 5px; font-size: 14px; text-decoration: underline; background: #fff; border: 1px solid #ccc;'>" . __('Recheck Queue for Spam') . "</a>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   967
		$page = str_replace( '<div class="wrap">', '<div class="wrap">' . $button, $page );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   968
		return $page;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   969
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   970
0d28b7c10758 First commit
ymh
parents:
diff changeset
   971
	if ( $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '0'" ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   972
		ob_start( 'akismet_recheck_button' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   973
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   974
0d28b7c10758 First commit
ymh
parents:
diff changeset
   975
// For WP >= 2.5
0d28b7c10758 First commit
ymh
parents:
diff changeset
   976
function akismet_check_for_spam_button($comment_status) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   977
	if ( 'approved' == $comment_status )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   978
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   979
	if ( function_exists('plugins_url') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   980
		$link = 'admin.php?action=akismet_recheck_queue';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   981
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
   982
		$link = 'edit-comments.php?page=akismet-admin&amp;recheckqueue=true&amp;noheader=true';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   983
	echo "</div><div class='alignleft'><a class='button-secondary checkforspam' href='$link'>" . __('Check for Spam') . "</a>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   984
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   985
add_action('manage_comments_nav', 'akismet_check_for_spam_button');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   986
0d28b7c10758 First commit
ymh
parents:
diff changeset
   987
function akismet_recheck_queue() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   988
	global $wpdb, $akismet_api_host, $akismet_api_port;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   989
0d28b7c10758 First commit
ymh
parents:
diff changeset
   990
	if ( ! ( isset( $_GET['recheckqueue'] ) || ( isset( $_REQUEST['action'] ) && 'akismet_recheck_queue' == $_REQUEST['action'] ) ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   991
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   992
0d28b7c10758 First commit
ymh
parents:
diff changeset
   993
	$moderation = $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE comment_approved = '0'", ARRAY_A );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   994
	foreach ( (array) $moderation as $c ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   995
		$c['user_ip']    = $c['comment_author_IP'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   996
		$c['user_agent'] = $c['comment_agent'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   997
		$c['referrer']   = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   998
		$c['blog']       = get_option('home');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   999
		$c['blog_lang']  = get_locale();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1000
		$c['blog_charset'] = get_option('blog_charset');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1001
		$c['permalink']  = get_permalink($c['comment_post_ID']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1002
		$id = (int) $c['comment_ID'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1003
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1004
		$query_string = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1005
		foreach ( $c as $key => $data )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1006
		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1007
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1008
		$response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1009
		if ( 'true' == $response[1] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1010
			$wpdb->query( "UPDATE $wpdb->comments SET comment_approved = 'spam' WHERE comment_ID = $id" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1011
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1012
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1013
	wp_redirect( $_SERVER['HTTP_REFERER'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1014
	exit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1015
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1016
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1017
add_action('admin_action_akismet_recheck_queue', 'akismet_recheck_queue');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1018
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1019
function akismet_check_db_comment( $id ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1020
	global $wpdb, $akismet_api_host, $akismet_api_port;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1021
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1022
	$id = (int) $id;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1023
	$c = $wpdb->get_row( "SELECT * FROM $wpdb->comments WHERE comment_ID = '$id'", ARRAY_A );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1024
	if ( !$c )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1025
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1026
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1027
	$c['user_ip']    = $c['comment_author_IP'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1028
	$c['user_agent'] = $c['comment_agent'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1029
	$c['referrer']   = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1030
	$c['blog']       = get_option('home');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1031
	$c['blog_lang']  = get_locale();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1032
	$c['blog_charset'] = get_option('blog_charset');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1033
	$c['permalink']  = get_permalink($c['comment_post_ID']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1034
	$id = $c['comment_ID'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1035
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1036
	$query_string = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1037
	foreach ( $c as $key => $data )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1038
	$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1039
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1040
	$response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1041
	return $response[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1042
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1043
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1044
// This option causes tons of FPs, was removed in 2.1
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1045
function akismet_kill_proxy_check( $option ) { return 0; }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1046
add_filter('option_open_proxy_check', 'akismet_kill_proxy_check');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1047
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1048
// Widget stuff
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1049
function widget_akismet_register() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1050
	if ( function_exists('register_sidebar_widget') ) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1051
	function widget_akismet($args) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1052
		extract($args);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1053
		$options = get_option('widget_akismet');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1054
		$count = number_format_i18n(get_option('akismet_spam_count'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1055
		?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1056
			<?php echo $before_widget; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1057
				<?php echo $before_title . $options['title'] . $after_title; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1058
				<div id="akismetwrap"><div id="akismetstats"><a id="aka" href="http://akismet.com" title=""><?php printf( __( '%1$s %2$sspam comments%3$s %4$sblocked by%5$s<br />%6$sAkismet%7$s' ), '<div id="akismet1"><span id="akismetcount">' . $count . '</span>', '<span id="akismetsc">', '</span></div>', '<div id="akismet2"><span id="akismetbb">', '</span>', '<span id="akismeta">', '</span></div>' ); ?></a></div></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1059
			<?php echo $after_widget; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1060
	<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1061
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1062
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1063
	function widget_akismet_style() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1064
		?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1065
<style type="text/css">
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1066
#aka,#aka:link,#aka:hover,#aka:visited,#aka:active{color:#fff;text-decoration:none}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1067
#aka:hover{border:none;text-decoration:none}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1068
#aka:hover #akismet1{display:none}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1069
#aka:hover #akismet2,#akismet1{display:block}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1070
#akismet2{display:none;padding-top:2px}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1071
#akismeta{font-size:16px;font-weight:bold;line-height:18px;text-decoration:none}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1072
#akismetcount{display:block;font:15px Verdana,Arial,Sans-Serif;font-weight:bold;text-decoration:none}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1073
#akismetwrap #akismetstats{background:url(<?php echo get_option('siteurl'); ?>/wp-content/plugins/akismet/akismet.gif) no-repeat top left;border:none;color:#fff;font:11px 'Trebuchet MS','Myriad Pro',sans-serif;height:40px;line-height:100%;overflow:hidden;padding:8px 0 0;text-align:center;width:120px}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1074
</style>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1075
		<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1076
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1077
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1078
	function widget_akismet_control() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1079
		$options = $newoptions = get_option('widget_akismet');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1080
		if ( $_POST["akismet-submit"] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1081
			$newoptions['title'] = strip_tags(stripslashes($_POST["akismet-title"]));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1082
			if ( empty($newoptions['title']) ) $newoptions['title'] = 'Spam Blocked';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1083
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1084
		if ( $options != $newoptions ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1085
			$options = $newoptions;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1086
			update_option('widget_akismet', $options);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1087
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1088
		$title = htmlspecialchars($options['title'], ENT_QUOTES);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1089
	?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1090
				<p><label for="akismet-title"><?php _e('Title:'); ?> <input style="width: 250px;" id="akismet-title" name="akismet-title" type="text" value="<?php echo $title; ?>" /></label></p>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1091
				<input type="hidden" id="akismet-submit" name="akismet-submit" value="1" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1092
	<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1093
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1094
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1095
	register_sidebar_widget('Akismet', 'widget_akismet', null, 'akismet');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1096
	register_widget_control('Akismet', 'widget_akismet_control', null, 75, 'akismet');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1097
	if ( is_active_widget('widget_akismet') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1098
		add_action('wp_head', 'widget_akismet_style');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1099
	endif;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1100
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1101
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1102
add_action('init', 'widget_akismet_register');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1103
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1104
// Counter for non-widget users
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1105
function akismet_counter() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1106
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1107
<style type="text/css">
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1108
#akismetwrap #aka,#aka:link,#aka:hover,#aka:visited,#aka:active{color:#fff;text-decoration:none}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1109
#aka:hover{border:none;text-decoration:none}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1110
#aka:hover #akismet1{display:none}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1111
#aka:hover #akismet2,#akismet1{display:block}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1112
#akismet2{display:none;padding-top:2px}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1113
#akismeta{font-size:16px;font-weight:bold;line-height:18px;text-decoration:none}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1114
#akismetcount{display:block;font:15px Verdana,Arial,Sans-Serif;font-weight:bold;text-decoration:none}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1115
#akismetwrap #akismetstats{background:url(<?php echo get_option('siteurl'); ?>/wp-content/plugins/akismet/akismet.gif) no-repeat top left;border:none;color:#fff;font:11px 'Trebuchet MS','Myriad Pro',sans-serif;height:40px;line-height:100%;overflow:hidden;padding:8px 0 0;text-align:center;width:120px}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1116
</style>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1117
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1118
$count = number_format_i18n(get_option('akismet_spam_count'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1119
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1120
<div id="akismetwrap"><div id="akismetstats"><a id="aka" href="http://akismet.com" title=""><div id="akismet1"><span id="akismetcount"><?php echo $count; ?></span> <span id="akismetsc"><?php _e('spam comments') ?></span></div> <div id="akismet2"><span id="akismetbb"><?php _e('blocked by') ?></span><br /><span id="akismeta">Akismet</span></div></a></div></div>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1121
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1122
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1123
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1124
?>