PageRenderTime 34ms CodeModel.GetById 13ms app.highlight 12ms RepoModel.GetById 1ms app.codeStats 1ms

/akismet/admin.php

https://github.com/ArkarNyuntWai/githubmaster
PHP | 925 lines | 772 code | 115 blank | 38 comment | 185 complexity | 31be54937eb9fde3513337105c9d595d MD5 | raw file
  1<?php
  2add_action( 'admin_menu', 'akismet_admin_menu' );
  3	
  4akismet_admin_warnings();
  5
  6function akismet_admin_init() {
  7    global $wp_version , $thisismaster , $mastertofork; 
  8    
  9    // all admin functions are disabled in old versions
 10    if ( !function_exists('is_multisite') && version_compare( $wp_version, '3.0', '<' ) ) {
 11        
 12        function akismet_version_warning() {
 13            echo '
 14            <div id="akismet-warning" class="updated fade"><p><strong>'.sprintf(__('Akismet %s requires WordPress 3.0 or higher.'), AKISMET_VERSION) .'</strong> '.sprintf(__('Please <a href="%s">upgrade WordPress</a> to a current version, or <a href="%s">downgrade to version 2.4 of the Akismet plugin</a>.'), 'http://codex.wordpress.org/Upgrading_WordPress', 'http://wordpress.org/extend/plugins/akismet/download/'). '</p></div>
 15            ';
 16        }
 17        add_action('admin_notices', 'akismet_version_warning'); 
 18        
 19        return; 
 20    }
 21
 22    if ( function_exists( 'get_plugin_page_hook' ) )
 23        $hook = get_plugin_page_hook( 'akismet-stats-display', 'index.php' );
 24    else
 25        $hook = 'dashboard_page_akismet-stats-display';
 26    add_meta_box('akismet-status', __('Comment History'), 'akismet_comment_status_meta_box', 'comment', 'normal');
 27}
 28add_action('admin_init', 'akismet_admin_init');
 29
 30add_action( 'admin_enqueue_scripts', 'akismet_load_js_and_css' );
 31function akismet_load_js_and_css() {
 32	global $hook_suffix;
 33
 34	if ( in_array( $hook_suffix, array( 
 35		'index.php', # dashboard
 36		'edit-comments.php',
 37		'comment.php',
 38		'post.php',
 39		'plugins_page_akismet-key-config', 
 40		'jetpack_page_akismet-key-config',
 41	) ) ) {
 42		wp_register_style( 'akismet.css', AKISMET_PLUGIN_URL . 'akismet.css', array(), '2.5.9' );
 43		wp_enqueue_style( 'akismet.css');
 44	
 45		wp_register_script( 'akismet.js', AKISMET_PLUGIN_URL . 'akismet.js', array('jquery'), '2.5.9' );
 46		wp_enqueue_script( 'akismet.js' );
 47		wp_localize_script( 'akismet.js', 'WPAkismet', array(
 48			'comment_author_url_nonce' => wp_create_nonce( 'comment_author_url_nonce' )
 49		) );
 50	}
 51}
 52
 53
 54function akismet_nonce_field($action = -1) { return wp_nonce_field($action); }
 55$akismet_nonce = 'akismet-update-key';
 56
 57function akismet_plugin_action_links( $links, $file ) {
 58	if ( $file == plugin_basename( dirname(__FILE__).'/akismet.php' ) ) {
 59		$links[] = '<a href="' . admin_url( 'admin.php?page=akismet-key-config' ) . '">'.__( 'Settings' ).'</a>';
 60	}
 61
 62	return $links;
 63}
 64
 65add_filter( 'plugin_action_links', 'akismet_plugin_action_links', 10, 2 );
 66
 67function akismet_conf() {
 68	global $akismet_nonce, $current_user;
 69	
 70	$new_key_link    = 'https://akismet.com/get/';
 71	$config_link     = esc_url( add_query_arg( array( 'page' => 'akismet-key-config', 'show' => 'enter-api-key' ), class_exists( 'Jetpack' ) ? admin_url( 'admin.php' ) : admin_url( 'plugins.php' ) ) );
 72	$stats_link      = esc_url( add_query_arg( array( 'page' => 'akismet-stats-display' ), class_exists( 'Jetpack' ) ? admin_url( 'admin.php' ) : admin_url( 'index.php' ) ) );
 73	$api_key         = akismet_get_key();
 74	$show_key_form   = $api_key;
 75	$key_status      = 'empty';
 76	$saved_ok        = false;
 77	$key_status_text = '';
 78	
 79	$ms = array();
 80
 81	if ( isset( $_POST['submit'] ) ) {
 82		if ( function_exists('current_user_can') && !current_user_can('manage_options') )
 83			die(__('Cheatin&#8217; uh?'));
 84			
 85		$show_key_form = true;
 86
 87		check_admin_referer( $akismet_nonce );
 88		$key      = preg_replace( '/[^a-h0-9]/i', '', $_POST['key'] );
 89		$home_url = parse_url( get_bloginfo('url') );
 90		
 91		if ( empty( $home_url['host'] ) )
 92			$ms[] = 'bad_home_url';
 93
 94		if ( empty( $key ) ) {
 95			if ( $api_key ) {
 96				delete_option('wordpress_api_key');
 97				$saved_ok = true;			
 98				$ms[] = 'new_key_empty';
 99			}
100			else
101				$ms[] = 'key_empty';
102		}  
103		else
104			$key_status = akismet_verify_key( $key );		
105		
106		if ( $key != $api_key && $key_status == 'valid' ) {
107			$ms[] = 'new_key_valid';
108			update_option('wordpress_api_key', $key);
109		}
110		elseif ( $key_status == 'invalid' )
111			$ms[] = 'new_key_invalid';
112		elseif ( $key_status == 'failed' )
113			$ms[] = 'new_key_failed';
114
115		$api_key = $key_status == 'valid' ? $key : false;
116
117		if ( isset( $_POST['akismet_discard_month'] ) )
118			update_option( 'akismet_discard_month', 'true' );
119		else
120			update_option( 'akismet_discard_month', 'false' );
121
122		if ( isset( $_POST['akismet_show_user_comments_approved'] ) )
123			update_option( 'akismet_show_user_comments_approved', 'true' );
124		else
125			update_option( 'akismet_show_user_comments_approved', 'false' );
126			
127		if ( empty( $ms ) )
128			$saved_ok = true;
129
130	} 
131	elseif ( isset( $_POST['check'] ) ) {
132		$show_key_form = true;
133		check_admin_referer( $akismet_nonce );
134		akismet_get_server_connectivity(0);
135	}
136	elseif ( isset( $_GET['show'] ) && $_GET['show'] == 'enter-api-key' ) {
137		$show_key_form = true;
138	}
139	
140	if ( $show_key_form ) {
141		//check current key status
142		//only get this if showing the key form otherwise takes longer for page to load for new user
143		//no need to get it if we already know it and its valid
144		if ( in_array( $key_status, array( 'invalid', 'failed', 'empty' ) ) ) {
145			$key = get_option('wordpress_api_key');
146			if ( empty( $key ) ) {
147				//no key saved yet - maybe connection to Akismet down?
148				if ( in_array( $key_status, array( 'invalid', 'empty' ) ) ) {
149					if ( akismet_verify_key( '1234567890ab' ) == 'failed' )
150						$ms[] = 'no_connection';
151				}
152			} 
153			else
154				$key_status = akismet_verify_key( $key );			
155		}
156		
157		if ( !isset( $_POST['submit'] ) ) {
158			if ( $key_status == 'invalid' )
159				$ms[] = 'key_invalid';
160			elseif ( !empty( $key ) && $key_status == 'failed' )
161				$ms[] = 'key_failed';
162		}
163	}	
164		
165	$key_status_strings = array( 
166	 	'empty'   => __( 'Empty' ), 
167		'valid'   => __( 'Valid' ), 
168		'invalid' => __( 'Invalid' ), 
169		'failed'  => __( 'Failed' ), 
170 	);
171
172	$messages = array(
173		'new_key_empty'   => array( 'class' => 'updated fade', 'text' => __('Your key has been cleared.' ) ),
174		'new_key_valid'   => array( 'class' => 'updated fade', 'text' => __('Your Akismet account has been successfully set up and activated. Happy blogging!' ) ),
175		'new_key_invalid' => array( 'class' => 'error',        'text' => __('The key you entered is invalid. Please double-check it.' ) ),
176		'new_key_failed'  => array( 'class' => 'error',        'text' => __('The key you entered could not be verified because a connection to akismet.com could not be established. Please check your server configuration.' ) ),
177		'no_connection'   => array( 'class' => 'error',        'text' => __('There was a problem connecting to the Akismet server. Please check your server configuration.' ) ),
178		'key_empty'       => array( 'class' => 'updated fade', 'text' => __('Please enter an API key' ) ),
179		'key_invalid'     => array( 'class' => 'error',        'text' => __('This key is invalid.' ) ),
180		'key_failed'      => array( 'class' => 'error',        '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.' ) ),
181		'bad_home_url'    => array( 'class' => 'error',        'text' => sprintf( __('Your WordPress home URL %s is invalid.  Please fix the <a href="%s">home option</a>.'), esc_html( get_bloginfo('url') ), admin_url('options.php#home') ) )
182	);
183?>
184
185
186<div class="wrap">
187	<?php if ( !$api_key ) : ?>
188	<h2 class="ak-header"><?php _e('Akismet'); ?></h2>
189	<?php else: ?>
190	<h2 class="ak-header"><?php printf( __( 'Akismet <a href="%s" class="add-new-h2">Stats</a>' ), $stats_link ); ?></h2>
191	<?php endif; ?>
192	<div class="no-key <?php echo $show_key_form ? 'hidden' : '';?>">
193		<p><?php _e('Akismet eliminates the comment and trackback spam you get on your site. To use Akismet you may need to sign up for an API key. Click the button below to get started.'); ?></p>
194		<form name="akismet_activate" action="https://akismet.com/get/" method="POST"> 
195			<input type="hidden" name="return" value="1"/> 
196			<input type="hidden" name="jetpack" value="<?php echo (string) class_exists( 'Jetpack' );?>"/>
197			<input type="hidden" name="user" value="<?php echo esc_attr( $current_user->user_login );?>"/>
198			<input type="submit" class="button button-primary" value="<?php esc_attr_e( 'Create a new Akismet Key' ); ?>"/>
199		</form>
200		<br/>
201		<a href="<?php echo $config_link;?>"><?php _e('I already have a key'); ?></a>
202	</div>
203	<div class="have-key <?php echo $show_key_form ? '' : 'hidden';?>">
204		<?php if ( !empty($_POST['submit'] ) && $saved_ok ) : ?>
205		<div id="message" class="updated fade"><p><strong><?php _e('Settings saved.') ?></strong></p></div>
206		<?php endif; ?>
207		<?php if ( isset($_GET['message']) && $_GET['message'] == 'success' ) : ?>
208		<div id="message" class="updated fade"><p><?php _e('<strong>Sign up success!</strong> Please check your email for your Akismet API Key and enter it below.') ?></p></div>
209		<?php endif; ?>
210		<?php foreach( $ms as $m ) : ?>
211		<div class="<?php echo $messages[$m]['class']; ?>"><p><strong><?php echo $messages[$m]['text']; ?></strong></p></div>
212		<?php endforeach; ?>		
213		<form action="" method="post" id="akismet-conf">
214			<table class="form-table">
215				<tbody>
216					<tr>
217						<th><label for="key"><?php _e('Akismet API Key');?></label></th>
218						<td>
219							<input id="key" name="key" type="text" size="15" maxlength="12" value="<?php echo esc_attr( get_option('wordpress_api_key') ); ?>" class="regular-text code <?php echo $key_status;?>"><div class="under-input key-status <?php echo $key_status;?>"><?php echo isset( $key_status_strings[ $key_status ] ) ? $key_status_strings[ $key_status ] : '';?></div>
220							<p class="need-key description"><?php printf( __('You must enter a valid Akismet API key here. If you need an API key, you can <a href="%s">create one here</a>'), '#' );?></p>
221						</td>
222					</tr>
223					<?php if ( $api_key ):?>
224					<tr valign="top">
225						<th scope="row"><?php _e('Settings');?></th>
226						<td>
227							<fieldset><legend class="screen-reader-text"><span><?php _e('Settings');?></span></legend>
228							<label for="akismet_discard_month" title="<?php esc_attr_e( 'Auto-detete old spam' ); ?>"><input name="akismet_discard_month" id="akismet_discard_month" value="true" type="checkbox" <?php echo get_option('akismet_discard_month') == 'true' ? 'checked="checked"':''; ?>> <span><?php _e('Auto-delete spam submitted on posts more than a month old.'); ?></span></label><br>
229							<label for="akismet_show_user_comments_approved" title="<?php esc_attr_e( 'Show approved comments' ); ?>"><input name="akismet_show_user_comments_approved" id="akismet_show_user_comments_approved" value="true" type="checkbox" <?php echo get_option('akismet_show_user_comments_approved') == 'true' ? 'checked="checked"':''; ?>> <span><?php _e('Show the number of comments you\'ve approved beside each comment author.'); ?></span></label>
230							</fieldset>
231						</td>
232					</tr>
233					<?php endif; ?>
234				</tbody>
235			</table>
236			<?php akismet_nonce_field($akismet_nonce) ?>
237			<p class="submit">
238				<input type="submit" name="submit" id="submit" class="button button-primary" value="<?php _e('Save Changes');?>">
239			</p>
240		</form>	
241		
242		<?php if ( $api_key ) : ?>
243		<h3><?php _e('Server Connectivity'); ?></h3>
244		<form action="" method="post" id="akismet-connectivity">
245			<table class="form-table">
246				<tbody>
247					<tr>
248						<th><label for="key"><?php _e('Server Status');?></label></th>
249						<td>
250						<?php if ( !function_exists('fsockopen') || !function_exists('gethostbynamel') ) : ?>
251							<p class="key-status failed"><?php _e('Network functions are disabled.'); ?></p>
252							<p class="description"><?php echo sprintf( __('Your web host or server administrator has disabled PHP\'s <code>fsockopen</code> or <code>gethostbynamel</code> functions.  <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>
253							<?php else :
254									$servers    = akismet_get_server_connectivity();
255									$fail_count = count( $servers ) - count( array_filter( $servers ) );
256									if ( is_array( $servers ) && count( $servers ) > 0 ) { 
257										if ( $fail_count > 0 && $fail_count < count( $servers ) ) { // some connections work, some fail ?>
258							<p class="key-status some"><?php _e('Unable to reach some Akismet servers.'); ?></p>
259							<p class="description"><?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>
260									<?php } elseif ( $fail_count > 0 ) { // all connections fail ?>
261							<p class="key-status failed"><?php _e('Unable to reach any Akismet servers.'); ?></p>
262							<p class="description"><?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>
263									<?php } else { // all connections work ?>
264							<p class="key-status valid"><?php  _e('All Akismet servers are available.'); ?></p>
265							<p class="description"><?php _e('Akismet is working correctly.  All servers are accessible.'); ?></p>
266									<?php }
267									} else { //can't connect to any server ?>
268							<p class="key-status failed"><?php _e('Unable to find Akismet servers.'); ?></p>
269							<p class="description"><?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>
270								<?php }
271							endif; ?>							
272						</td>
273					</tr>
274					<?php if ( !empty( $servers ) ) : ?>
275					<tr valign="top">
276						<th scope="row"><?php _e('Network Status');?></th>
277						<td>
278							<table class="network-status">
279								<thead>
280										<th><?php _e('Akismet server'); ?></th><th><?php _e('Network Status'); ?></th>
281								</thead>
282								<tbody>
283								<?php
284										asort($servers);
285										foreach ( $servers as $ip => $status ) : ?>
286										<tr>
287											<td align="center"><?php echo esc_html( $ip ); ?></td>
288											<td class="key-status <?php echo $status ? 'valid' : 'failed'; ?>"><?php echo $status ? __('Accessible') : __('Re-trying'); ?></td>
289										</tr>										
290									<?php endforeach; ?>
291								</tbody>
292							</table>
293							<br/>
294							<input type="submit" name="check" id="submit" class="button" style="margin-left: 13.3em;" value="<?php _e('Check Network Status');?>">
295						</td>
296					</tr>
297					<?php endif; ?>
298					<tr valign="top">
299						<th scope="row"><?php _e('Last Checked');?></th>
300						<td>
301							<p><strong><?php echo get_option('akismet_connectivity_time') ? sprintf( __('%s Ago'), ucwords( human_time_diff( get_option('akismet_connectivity_time') ) ) ) : __( 'Not yet' ); ?></strong></p>
302							<p class="description"><?php printf( __('You can confirm that Akismet.com is up by <a href="%s" target="_blank">clicking here</a>.'), 'http://status.automattic.com/9931/136079/Akismet-API' ); ?></p>
303						</td>
304				</tbody>
305			</table>
306			<?php akismet_nonce_field($akismet_nonce) ?>
307		</form>
308		<?php endif;?>
309	</div>
310</div>
311<?php
312}
313
314function akismet_stats_display() {
315	global $akismet_api_host, $akismet_api_port;
316	
317	$blog        = urlencode( get_bloginfo('url') );
318	$api_key     = akismet_get_key();
319	$config_link = esc_url( add_query_arg( array( 'page' => 'akismet-key-config' ), class_exists( 'Jetpack' ) ? admin_url( 'admin.php' ) : admin_url( 'plugins.php' ) ) );?>
320	
321<div class="wrap"><?php	
322	if ( !$api_key ) :?>
323	<div id="akismet-warning" class="updated fade"><p><strong><?php _e('Akismet is almost ready.');?></strong> <?php printf( __( 'You must <a href="%1$s">enter your Akismet API key</a> for it to work.' ), $config_link );?></p></div><?php
324	else :?>
325	<iframe src="<?php echo esc_url( sprintf( '%s://akismet.com/web/1.0/user-stats.php?blog=%s&api_key=%s', is_ssl()?'https':'http', $blog, $api_key ) ); ?>" width="100%" height="2500px" frameborder="0" id="akismet-stats-frame"></iframe><?php
326	endif;?>
327</div><?php
328}
329
330function akismet_stats() {
331	if ( !function_exists('did_action') || did_action( 'rightnow_end' ) ) // We already displayed this info in the "Right Now" section
332		return;
333	if ( !$count = get_option('akismet_spam_count') )
334		return;
335	$path = plugin_basename(__FILE__);
336	echo '<h3>' . _x( 'Spam', 'comments' ) . '</h3>';
337	global $submenu;
338	if ( isset( $submenu['edit-comments.php'] ) )
339		$link = 'edit-comments.php';
340	else
341		$link = 'edit.php';
342	echo '<p>'.sprintf( _n( '<a href="%1$s">Akismet</a> has protected your site from <a href="%2$s">%3$s spam comments</a>.', '<a href="%1$s">Akismet</a> has protected your site from <a href="%2$s">%3$s spam comments</a>.', $count ), 'http://akismet.com/?return=true', clean_url("$link?page=akismet-admin"), number_format_i18n($count) ).'</p>';
343}
344add_action('activity_box_end', 'akismet_stats');
345
346function akismet_admin_warnings() {
347	global $wpcom_api_key, $pagenow;
348
349	if (
350		$pagenow == 'edit-comments.php'
351		|| ( !empty( $_GET['page'] ) && $_GET['page'] == 'akismet-key-config' )
352		|| ( !empty( $_GET['page'] ) && $_GET['page'] == 'akismet-stats-display' )
353	) {
354		if ( get_option( 'akismet_alert_code' ) ) {
355			function akismet_alert() {
356				$alert = array(
357					'code' => (int) get_option( 'akismet_alert_code' ),
358					'msg' => get_option( 'akismet_alert_msg' )
359				);
360			?>
361				<div class='error'>
362					<p><strong><?php _e( 'Akismet Error Code');?>: <?php echo $alert['code']; ?></strong></p>
363					<p><?php esc_html_e( $alert['msg'] ); ?></p>
364					<p><?php //FIXME: need to revert this to using __() in next version
365						printf( translate( 'For more information:' ) . ' <a href="%s">%s</a>' , 'https://akismet.com/errors/'.$alert['code'], 'https://akismet.com/errors/'.$alert['code'] );?>
366					</p>
367				</div>
368			<?php
369			}
370
371			add_action( 'admin_notices', 'akismet_alert' );
372		}
373	}
374
375	if ( !get_option('wordpress_api_key') && !$wpcom_api_key && !isset($_POST['submit']) ) {
376		function akismet_warning() {
377			global $hook_suffix, $current_user;
378				
379			if ( $hook_suffix == 'plugins.php' ) {              
380               	echo '  
381				<div class="updated" style="padding: 0; margin: 0; border: none; background: none;">  
382					<style type="text/css">  
383.akismet_activate{min-width:825px;border:1px solid #4F800D;padding:5px;margin:15px 0;background:#83AF24;background-image:-webkit-gradient(linear,0% 0,80% 100%,from(#83AF24),to(#4F800D));background-image:-moz-linear-gradient(80% 100% 120deg,#4F800D,#83AF24);-moz-border-radius:3px;border-radius:3px;-webkit-border-radius:3px;position:relative;overflow:hidden}.akismet_activate .aa_a{position:absolute;top:-5px;right:10px;font-size:140px;color:#769F33;font-family:Georgia, "Times New Roman", Times, serif;z-index:1}.akismet_activate .aa_button{font-weight:bold;border:1px solid #029DD6;border-top:1px solid #06B9FD;font-size:15px;text-align:center;padding:9px 0 8px 0;color:#FFF;background:#029DD6;background-image:-webkit-gradient(linear,0% 0,0% 100%,from(#029DD6),to(#0079B1));background-image:-moz-linear-gradient(0% 100% 90deg,#0079B1,#029DD6);-moz-border-radius:2px;border-radius:2px;-webkit-border-radius:2px}.akismet_activate .aa_button:hover{text-decoration:none !important;border:1px solid #029DD6;border-bottom:1px solid #00A8EF;font-size:15px;text-align:center;padding:9px 0 8px 0;color:#F0F8FB;background:#0079B1;background-image:-webkit-gradient(linear,0% 0,0% 100%,from(#0079B1),to(#0092BF));background-image:-moz-linear-gradient(0% 100% 90deg,#0092BF,#0079B1);-moz-border-radius:2px;border-radius:2px;-webkit-border-radius:2px}.akismet_activate .aa_button_border{border:1px solid #006699;-moz-border-radius:2px;border-radius:2px;-webkit-border-radius:2px;background:#029DD6;background-image:-webkit-gradient(linear,0% 0,0% 100%,from(#029DD6),to(#0079B1));background-image:-moz-linear-gradient(0% 100% 90deg,#0079B1,#029DD6)}.akismet_activate .aa_button_container{cursor:pointer;display:inline-block;background:#DEF1B8;padding:5px;-moz-border-radius:2px;border-radius:2px;-webkit-border-radius:2px;width:266px}.akismet_activate .aa_description{position:absolute;top:22px;left:285px;margin-left:25px;color:#E5F2B1;font-size:15px;z-index:1000}.akismet_activate .aa_description strong{color:#FFF;font-weight:normal}
384					</style>                       
385					<form name="akismet_activate" action="'.esc_url( add_query_arg( array( 'page' => 'akismet-key-config' ), class_exists( 'Jetpack' ) ? admin_url( 'admin.php' ) : admin_url( 'plugins.php' ) ) ).'" method="POST"> 
386						<input type="hidden" name="return" value="1"/>
387						<input type="hidden" name="jetpack" value="'.(string) class_exists( 'Jetpack' ).'"/>
388						<input type="hidden" name="user" value="'.esc_attr( $current_user->user_login ).'"/>
389						<div class="akismet_activate">  
390							<div class="aa_a">A</div>     
391							<div class="aa_button_container" onclick="document.akismet_activate.submit();">  
392								<div class="aa_button_border">          
393									<div class="aa_button">'.__('Activate your Akismet account').'</div>  
394								</div>  
395							</div>  
396							<div class="aa_description">'.__('<strong>Almost done</strong> - activate your account and say goodbye to comment spam').'</div>  
397						</div>  
398					</form>  
399				</div>  
400               ';      
401   			}
402		}
403
404		add_action('admin_notices', 'akismet_warning');
405		return;
406	} elseif ( ( empty($_SERVER['SCRIPT_FILENAME']) || basename($_SERVER['SCRIPT_FILENAME']) == 'edit-comments.php' ) &&  wp_next_scheduled('akismet_schedule_cron_recheck') ) {
407		function akismet_warning() {
408			global $wpdb;
409				akismet_fix_scheduled_recheck();
410				$waiting = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->commentmeta WHERE meta_key = 'akismet_error'" );
411				$next_check = wp_next_scheduled('akismet_schedule_cron_recheck');
412				if ( $waiting > 0 && $next_check > time() )
413					echo '
414			<div id="akismet-warning" class="updated fade"><p><strong>'.__('Akismet has detected a problem.').'</strong> '.sprintf(__('Some comments have not yet been checked for spam by Akismet. They have been temporarily held for moderation. Please check your <a href="%s">Akismet configuration</a> and contact your web host if problems persist.'), 'admin.php?page=akismet-key-config').'</p></div>
415			';
416		}
417		add_action('admin_notices', 'akismet_warning');
418		return;
419	}
420}
421
422// FIXME placeholder
423
424function akismet_comment_row_action( $a, $comment ) {
425
426	// failsafe for old WP versions
427	if ( !function_exists('add_comment_meta') )
428		return $a;
429
430	$akismet_result = get_comment_meta( $comment->comment_ID, 'akismet_result', true );
431	$akismet_error  = get_comment_meta( $comment->comment_ID, 'akismet_error', true );
432	$user_result    = get_comment_meta( $comment->comment_ID, 'akismet_user_result', true);
433	$comment_status = wp_get_comment_status( $comment->comment_ID );
434	$desc = null;
435	if ( $akismet_error ) {
436		$desc = __( 'Awaiting spam check' );
437	} elseif ( !$user_result || $user_result == $akismet_result ) {
438		// Show the original Akismet result if the user hasn't overridden it, or if their decision was the same
439		if ( $akismet_result == 'true' && $comment_status != 'spam' && $comment_status != 'trash' )
440			$desc = __( 'Flagged as spam by Akismet' );
441		elseif ( $akismet_result == 'false' && $comment_status == 'spam' )
442			$desc = __( 'Cleared by Akismet' );
443	} else {
444		$who = get_comment_meta( $comment->comment_ID, 'akismet_user', true );
445		if ( $user_result == 'true' )
446			$desc = sprintf( __('Flagged as spam by %s'), $who );
447		else
448			$desc = sprintf( __('Un-spammed by %s'), $who );
449	}
450
451	// add a History item to the hover links, just after Edit
452	if ( $akismet_result ) {
453		$b = array();
454		foreach ( $a as $k => $item ) {
455			$b[ $k ] = $item;
456			if (
457				$k == 'edit'
458				|| ( $k == 'unspam' && $GLOBALS['wp_version'] >= 3.4 )
459			) {
460				$b['history'] = '<a href="comment.php?action=editcomment&amp;c='.$comment->comment_ID.'#akismet-status" title="'. esc_attr__( 'View comment history' ) . '"> '. __('History') . '</a>';
461			}
462		}
463		
464		$a = $b;
465	}
466		
467	if ( $desc )
468		echo '<span class="akismet-status" commentid="'.$comment->comment_ID.'"><a href="comment.php?action=editcomment&amp;c='.$comment->comment_ID.'#akismet-status" title="' . esc_attr__( 'View comment history' ) . '">'.esc_html( $desc ).'</a></span>';
469		
470	if ( apply_filters( 'akismet_show_user_comments_approved', get_option('akismet_show_user_comments_approved') ) == 'true' ) {
471		$comment_count = akismet_get_user_comments_approved( $comment->user_id, $comment->comment_author_email, $comment->comment_author, $comment->comment_author_url );
472		$comment_count = intval( $comment_count );
473		echo '<span class="akismet-user-comment-count" commentid="'.$comment->comment_ID.'" style="display:none;"><br><span class="akismet-user-comment-counts">'.sprintf( _n( '%s approved', '%s approved', $comment_count ), number_format_i18n( $comment_count ) ) . '</span></span>';
474	}
475	
476	return $a;
477}
478
479add_filter( 'comment_row_actions', 'akismet_comment_row_action', 10, 2 );
480
481function akismet_comment_status_meta_box($comment) {
482	$history = akismet_get_comment_history( $comment->comment_ID );
483
484	if ( $history ) {
485		echo '<div class="akismet-history" style="margin: 13px;">';
486		foreach ( $history as $row ) {
487			$time = date( 'D d M Y @ h:i:m a', $row['time'] ) . ' GMT';
488			echo '<div style="margin-bottom: 13px;"><span style="color: #999;" alt="' . $time . '" title="' . $time . '">' . sprintf( __('%s ago'), human_time_diff( $row['time'] ) ) . '</span> - ';
489			echo esc_html( $row['message'] ) . '</div>';
490		}
491		
492		echo '</div>';
493
494	}
495}
496
497
498// add an extra column header to the comments screen
499function akismet_comments_columns( $columns ) {
500	$columns[ 'akismet' ] = __( 'Akismet' );
501	return $columns;
502}
503
504#add_filter( 'manage_edit-comments_columns', 'akismet_comments_columns' );
505
506// Show stuff in the extra column
507function akismet_comment_column_row( $column, $comment_id ) {
508	if ( $column != 'akismet' )
509		return;
510		
511	$history = akismet_get_comment_history( $comment_id );
512	
513	if ( $history ) {
514		echo '<dl class="akismet-history">';
515		foreach ( $history as $row ) {
516			echo '<dt>' . sprintf( __('%s ago'), human_time_diff( $row['time'] ) ) . '</dt>';
517			echo '<dd>' . esc_html( $row['message'] ) . '</dd>';
518		}
519		
520		echo '</dl>';
521	}
522}
523
524#add_action( 'manage_comments_custom_column', 'akismet_comment_column_row', 10, 2 );
525
526// END FIXME
527
528// call out URLS in comments
529function akismet_text_add_link_callback( $m ) {	
530	// bare link?
531	if ( $m[4] == $m[2] )
532		return '<a '.$m[1].' href="'.$m[2].'" '.$m[3].' class="comment-link">'.$m[4].'</a>';
533	else
534	    return '<span title="'.$m[2].'" class="comment-link"><a '.$m[1].' href="'.$m[2].'" '.$m[3].' class="comment-link">'.$m[4].'</a></span>';
535}
536
537function akismet_text_add_link_class( $comment_text ) {
538	return preg_replace_callback( '#<a ([^>]*)href="([^"]+)"([^>]*)>(.*?)</a>#i', 'akismet_text_add_link_callback', $comment_text );
539}
540
541add_filter('comment_text', 'akismet_text_add_link_class');
542
543
544// WP 2.5+
545function akismet_rightnow() {
546	global $submenu, $wp_db_version;
547
548	if ( 8645 < $wp_db_version  ) // 2.7
549		$link = 'edit-comments.php?comment_status=spam';
550	elseif ( isset( $submenu['edit-comments.php'] ) )
551		$link = 'edit-comments.php?page=akismet-admin';
552	else
553		$link = 'edit.php?page=akismet-admin';
554
555	if ( $count = get_option('akismet_spam_count') ) {
556		$intro = sprintf( _n(
557			'<a href="%1$s">Akismet</a> has protected your site from %2$s spam comment already. ',
558			'<a href="%1$s">Akismet</a> has protected your site from %2$s spam comments already. ',
559			$count
560		), 'http://akismet.com/?return=true', number_format_i18n( $count ) );
561	} else {
562		$intro = sprintf( __('<a href="%1$s">Akismet</a> blocks spam from getting to your blog. '), 'http://akismet.com/?return=true' );
563	}
564
565	$link = function_exists( 'esc_url' ) ? esc_url( $link ) : clean_url( $link );
566	if ( $queue_count = akismet_spam_count() ) {
567		$queue_text = sprintf( _n(
568			'There\'s <a href="%2$s">%1$s comment</a> in your spam queue right now.',
569			'There are <a href="%2$s">%1$s comments</a> in your spam queue right now.',
570			$queue_count
571		), number_format_i18n( $queue_count ), $link );
572	} else {
573		$queue_text = sprintf( __( "There's nothing in your <a href='%1\$s'>spam queue</a> at the moment." ), $link );
574	}
575
576	$text = $intro . '<br />' . $queue_text;
577	echo "<p class='akismet-right-now'>$text</p>\n";
578}
579	
580add_action('rightnow_end', 'akismet_rightnow');
581
582
583// For WP >= 2.5
584function akismet_check_for_spam_button($comment_status) {
585	if ( 'approved' == $comment_status )
586		return;
587	if ( function_exists('plugins_url') )
588		$link = 'admin.php?action=akismet_recheck_queue';
589	else
590		$link = 'edit-comments.php?page=akismet-admin&amp;recheckqueue=true&amp;noheader=true';
591	echo "</div><div class='alignleft'><a class='button-secondary checkforspam' href='$link'>" . __('Check for Spam') . "</a>";
592}
593add_action('manage_comments_nav', 'akismet_check_for_spam_button');
594
595function akismet_submit_nonspam_comment ( $comment_id ) {
596	global $wpdb, $akismet_api_host, $akismet_api_port, $current_user, $current_site;
597	$comment_id = (int) $comment_id;
598
599	$comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_id'");
600	if ( !$comment ) // it was deleted
601		return;
602		
603	// use the original version stored in comment_meta if available	
604	$as_submitted = get_comment_meta( $comment_id, 'akismet_as_submitted', true);
605	if ( $as_submitted && is_array($as_submitted) && isset($as_submitted['comment_content']) ) {
606		$comment = (object) array_merge( (array)$comment, $as_submitted );
607	}
608	
609	$comment->blog = get_bloginfo('url');
610	$comment->blog_lang = get_locale();
611	$comment->blog_charset = get_option('blog_charset');
612	$comment->permalink = get_permalink($comment->comment_post_ID);
613	if ( is_object($current_user) ) {
614	    $comment->reporter = $current_user->user_login;
615	}
616	if ( is_object($current_site) ) {
617		$comment->site_domain = $current_site->domain;
618	}
619
620	$comment->user_role = '';
621	if ( isset( $comment->user_ID ) )
622		$comment->user_role = akismet_get_user_roles($comment->user_ID);
623
624	if ( akismet_test_mode() )
625		$comment->is_test = 'true';
626
627	$post = get_post( $comment->comment_post_ID );
628	$comment->comment_post_modified_gmt = $post->post_modified_gmt;
629
630	$query_string = '';
631	foreach ( $comment as $key => $data )
632		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&';
633
634	$response = akismet_http_post($query_string, $akismet_api_host, "/1.1/submit-ham", $akismet_api_port);
635	if ( $comment->reporter ) {
636		akismet_update_comment_history( $comment_id, sprintf( __('%s reported this comment as not spam'), $comment->reporter ), 'report-ham' );
637		update_comment_meta( $comment_id, 'akismet_user_result', 'false' );
638		update_comment_meta( $comment_id, 'akismet_user', $comment->reporter );
639	}
640	
641	do_action('akismet_submit_nonspam_comment', $comment_id, $response[1]);
642}
643
644function akismet_submit_spam_comment ( $comment_id ) {
645	global $wpdb, $akismet_api_host, $akismet_api_port, $current_user, $current_site;
646	$comment_id = (int) $comment_id;
647
648	$comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_id'");
649	if ( !$comment ) // it was deleted
650		return;
651	if ( 'spam' != $comment->comment_approved )
652		return;
653	
654	// use the original version stored in comment_meta if available	
655	$as_submitted = get_comment_meta( $comment_id, 'akismet_as_submitted', true);
656	if ( $as_submitted && is_array($as_submitted) && isset($as_submitted['comment_content']) ) {
657		$comment = (object) array_merge( (array)$comment, $as_submitted );
658	}
659	
660	$comment->blog = get_bloginfo('url');
661	$comment->blog_lang = get_locale();
662	$comment->blog_charset = get_option('blog_charset');
663	$comment->permalink = get_permalink($comment->comment_post_ID);
664	if ( is_object($current_user) ) {
665	    $comment->reporter = $current_user->user_login;
666	}
667	if ( is_object($current_site) ) {
668		$comment->site_domain = $current_site->domain;
669	}
670
671	$comment->user_role = '';
672	if ( isset( $comment->user_ID ) )
673		$comment->user_role = akismet_get_user_roles($comment->user_ID);
674
675	if ( akismet_test_mode() )
676		$comment->is_test = 'true';
677
678	$post = get_post( $comment->comment_post_ID );
679	$comment->comment_post_modified_gmt = $post->post_modified_gmt;
680
681	$query_string = '';
682	foreach ( $comment as $key => $data )
683		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&';
684
685	$response = akismet_http_post($query_string, $akismet_api_host, "/1.1/submit-spam", $akismet_api_port);
686	if ( $comment->reporter ) {
687		akismet_update_comment_history( $comment_id, sprintf( __('%s reported this comment as spam'), $comment->reporter ), 'report-spam' );
688		update_comment_meta( $comment_id, 'akismet_user_result', 'true' );
689		update_comment_meta( $comment_id, 'akismet_user', $comment->reporter );
690	}
691	do_action('akismet_submit_spam_comment', $comment_id, $response[1]);
692}
693
694// For WP 2.7+
695function akismet_transition_comment_status( $new_status, $old_status, $comment ) {
696	if ( $new_status == $old_status )
697		return;
698
699	# we don't need to record a history item for deleted comments
700	if ( $new_status == 'delete' )
701		return;
702		
703	if ( !is_admin() )
704		return;
705		
706	if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) && !current_user_can( 'moderate_comments' ) )
707		return;
708
709	if ( defined('WP_IMPORTING') && WP_IMPORTING == true )
710		return;
711
712	// if this is present, it means the status has been changed by a re-check, not an explicit user action
713	if ( get_comment_meta( $comment->comment_ID, 'akismet_rechecking' ) )
714		return;
715		
716	global $current_user;
717	$reporter = '';
718	if ( is_object( $current_user ) )
719		$reporter = $current_user->user_login;
720	
721	// Assumption alert:
722	// We want to submit comments to Akismet only when a moderator explicitly spams or approves it - not if the status
723	// is changed automatically by another plugin.  Unfortunately WordPress doesn't provide an unambiguous way to
724	// determine why the transition_comment_status action was triggered.  And there are several different ways by which
725	// to spam and unspam comments: bulk actions, ajax, links in moderation emails, the dashboard, and perhaps others.
726	// We'll assume that this is an explicit user action if POST or GET has an 'action' key.
727	if ( isset($_POST['action']) || isset($_GET['action']) ) {
728		if ( $new_status == 'spam' && ( $old_status == 'approved' || $old_status == 'unapproved' || !$old_status ) ) {
729				return akismet_submit_spam_comment( $comment->comment_ID );
730		} elseif ( $old_status == 'spam' && ( $new_status == 'approved' || $new_status == 'unapproved' ) ) {
731				return akismet_submit_nonspam_comment( $comment->comment_ID );
732		}
733	}
734	
735	akismet_update_comment_history( $comment->comment_ID, sprintf( __('%s changed the comment status to %s'), $reporter, $new_status ), 'status-' . $new_status );
736}
737
738add_action( 'transition_comment_status', 'akismet_transition_comment_status', 10, 3 );
739
740// Total spam in queue
741// get_option( 'akismet_spam_count' ) is the total caught ever
742function akismet_spam_count( $type = false ) {
743	global $wpdb;
744
745	if ( !$type ) { // total
746		$count = wp_cache_get( 'akismet_spam_count', 'widget' );
747		if ( false === $count ) {
748			if ( function_exists('wp_count_comments') ) {
749				$count = wp_count_comments();
750				$count = $count->spam;
751			} else {
752				$count = (int) $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam'");
753			}
754			wp_cache_set( 'akismet_spam_count', $count, 'widget', 3600 );
755		}
756		return $count;
757	} elseif ( 'comments' == $type || 'comment' == $type ) { // comments
758		$type = '';
759	} else { // pingback, trackback, ...
760		$type  = $wpdb->escape( $type );
761	}
762
763	return (int) $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam' AND comment_type='$type'");
764}
765
766
767function akismet_recheck_queue() {
768	global $wpdb, $akismet_api_host, $akismet_api_port;
769
770	akismet_fix_scheduled_recheck();
771
772	if ( ! ( isset( $_GET['recheckqueue'] ) || ( isset( $_REQUEST['action'] ) && 'akismet_recheck_queue' == $_REQUEST['action'] ) ) )
773		return;
774		
775	$moderation = $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE comment_approved = '0'", ARRAY_A );
776	foreach ( (array) $moderation as $c ) {
777		$c['user_ip']    = $c['comment_author_IP'];
778		$c['user_agent'] = $c['comment_agent'];
779		$c['referrer']   = '';
780		$c['blog']       = get_bloginfo('url');
781		$c['blog_lang']  = get_locale();
782		$c['blog_charset'] = get_option('blog_charset');
783		$c['permalink']  = get_permalink($c['comment_post_ID']);
784
785		$c['user_role'] = '';
786		if ( isset( $c['user_ID'] ) )
787			$c['user_role']  = akismet_get_user_roles($c['user_ID']);
788
789		if ( akismet_test_mode() )
790			$c['is_test'] = 'true';
791
792		$id = (int) $c['comment_ID'];
793
794		$query_string = '';
795		foreach ( $c as $key => $data )
796		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&';
797
798		add_comment_meta( $c['comment_ID'], 'akismet_rechecking', true );
799		$response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
800		if ( 'true' == $response[1] ) {
801			wp_set_comment_status($c['comment_ID'], 'spam');
802			update_comment_meta( $c['comment_ID'], 'akismet_result', 'true' );
803			delete_comment_meta( $c['comment_ID'], 'akismet_error' );
804			akismet_update_comment_history( $c['comment_ID'], __('Akismet re-checked and caught this comment as spam'), 'check-spam' );
805		
806		} elseif ( 'false' == $response[1] ) {
807			update_comment_meta( $c['comment_ID'], 'akismet_result', 'false' );
808			delete_comment_meta( $c['comment_ID'], 'akismet_error' );
809			akismet_update_comment_history( $c['comment_ID'], __('Akismet re-checked and cleared this comment'), 'check-ham' );
810		// abnormal result: error
811		} else {
812			update_comment_meta( $c['comment_ID'], 'akismet_result', 'error' );
813			akismet_update_comment_history( $c['comment_ID'], sprintf( __('Akismet was unable to re-check this comment (response: %s)'), substr($response[1], 0, 50)), 'check-error' );
814		}
815
816		delete_comment_meta( $c['comment_ID'], 'akismet_rechecking' );
817	}
818	$redirect_to = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : admin_url( 'edit-comments.php' );
819	wp_safe_redirect( $redirect_to );
820	exit;
821}
822
823add_action('admin_action_akismet_recheck_queue', 'akismet_recheck_queue');
824
825// Adds an 'x' link next to author URLs, clicking will remove the author URL and show an undo link
826function akismet_remove_comment_author_url() {
827    if ( !empty($_POST['id'] ) && check_admin_referer( 'comment_author_url_nonce' ) ) {
828        global $wpdb;
829        $comment = get_comment( intval($_POST['id']), ARRAY_A );
830        if (current_user_can('edit_comment', $comment['comment_ID'])) {
831            $comment['comment_author_url'] = '';
832            do_action( 'comment_remove_author_url' );
833            print(wp_update_comment( $comment ));
834            die();
835        }
836    }
837}
838
839add_action('wp_ajax_comment_author_deurl', 'akismet_remove_comment_author_url');
840
841function akismet_add_comment_author_url() {
842    if ( !empty( $_POST['id'] ) && !empty( $_POST['url'] ) && check_admin_referer( 'comment_author_url_nonce' ) ) {
843        global $wpdb;
844        $comment = get_comment( intval($_POST['id']), ARRAY_A );
845        if (current_user_can('edit_comment', $comment['comment_ID'])) {
846            $comment['comment_author_url'] = esc_url($_POST['url']);
847            do_action( 'comment_add_author_url' );
848            print(wp_update_comment( $comment ));
849            die();
850        }
851    }
852}
853
854add_action('wp_ajax_comment_author_reurl', 'akismet_add_comment_author_url');
855
856// Check connectivity between the WordPress blog and Akismet's servers.
857// 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).
858function akismet_check_server_connectivity() {
859	global $akismet_api_host, $akismet_api_port, $wpcom_api_key;
860	
861	$test_host = 'rest.akismet.com';
862	
863	// Some web hosts may disable one or both functions
864	if ( !function_exists('fsockopen') || !function_exists('gethostbynamel') )
865		return array();
866	
867	$ips = gethostbynamel($test_host);
868	if ( !$ips || !is_array($ips) || !count($ips) )
869		return array();
870		
871	$servers = array();
872	foreach ( $ips as $ip ) {
873		$response = akismet_verify_key( akismet_get_key(), $ip );
874		// even if the key is invalid, at least we know we have connectivity
875		if ( $response == 'valid' || $response == 'invalid' )
876			$servers[$ip] = true;
877		else
878			$servers[$ip] = false;
879	}
880
881	return $servers;
882}
883
884// Check the server connectivity and store the results in an option.
885// Cached results will be used if not older than the specified timeout in seconds; use $cache_timeout = 0 to force an update.
886// Returns the same associative array as akismet_check_server_connectivity()
887function akismet_get_server_connectivity( $cache_timeout = 86400 ) {
888	$servers = get_option('akismet_available_servers');
889	if ( (time() - get_option('akismet_connectivity_time') < $cache_timeout) && $servers !== false )
890		return $servers;
891	
892	// There's a race condition here but the effect is harmless.
893	$servers = akismet_check_server_connectivity();
894	update_option('akismet_available_servers', $servers);
895	update_option('akismet_connectivity_time', time());
896	return $servers;
897}
898
899// Returns true if server connectivity was OK at the last check, false if there was a problem that needs to be fixed.
900function akismet_server_connectivity_ok() {
901	// skip the check on WPMU because the status page is hidden
902	global $wpcom_api_key;
903	if ( $wpcom_api_key )
904		return true;
905	$servers = akismet_get_server_connectivity();
906	return !( empty($servers) || !count($servers) || count( array_filter($servers) ) < count($servers) );
907}
908
909function akismet_admin_menu() {
910	if ( class_exists( 'Jetpack' ) ) {
911		add_action( 'jetpack_admin_menu', 'akismet_load_menu' );
912	} else {
913		akismet_load_menu();
914	}
915}
916
917function akismet_load_menu() {	
918	if ( class_exists( 'Jetpack' ) ) {
919		add_submenu_page( 'jetpack', __( 'Akismet' ), __( 'Akismet' ), 'manage_options', 'akismet-key-config', 'akismet_conf' );
920		add_submenu_page( 'jetpack', __( 'Akismet Stats' ), __( 'Akismet Stats' ), 'manage_options', 'akismet-stats-display', 'akismet_stats_display' );
921	} else {
922		add_submenu_page('plugins.php', __('Akismet'), __('Akismet'), 'manage_options', 'akismet-key-config', 'akismet_conf');
923		add_submenu_page('index.php', __('Akismet Stats'), __('Akismet Stats'), 'manage_options', 'akismet-stats-display', 'akismet_stats_display');
924	}
925}