Version Description
- Add ajax paging to the check for spam button to handle large volumes of comments
- Optimize javascript and add localization support
- Fix bug in link to spam comments from right now dashboard widget
- Fix bug with deleting old comments to avoid timeouts dealing with large volumes of comments
- Include X-Pingback-Forwarded-For header in outbound WordPress pingback verifications
- Add pre-check for pingbacks, to stop spam before an outbound verification request is made
Download this release
Release Info
| Developer | tellyworth |
| Plugin | |
| Version | 2.6.0 |
| Comparing to | |
| See all releases | |
Code changes from version 2.5.9 to 2.6.0
- admin.php +39 -21
- akismet.css +1 -1
- akismet.js +83 -50
- akismet.php +123 -36
- readme.txt +10 -2
admin.php
CHANGED
|
@@ -39,13 +39,20 @@ function akismet_load_js_and_css() {
|
|
| 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(),
|
| 43 |
wp_enqueue_style( 'akismet.css');
|
| 44 |
|
| 45 |
-
wp_register_script( 'akismet.js', AKISMET_PLUGIN_URL . 'akismet.js', array('jquery'),
|
| 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 |
}
|
|
@@ -335,11 +342,7 @@ function akismet_stats() {
|
|
| 335 |
$path = plugin_basename(__FILE__);
|
| 336 |
echo '<h3>' . _x( 'Spam', 'comments' ) . '</h3>';
|
| 337 |
global $submenu;
|
| 338 |
-
|
| 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 |
}
|
| 344 |
add_action('activity_box_end', 'akismet_stats');
|
| 345 |
|
|
@@ -546,11 +549,11 @@ function akismet_rightnow() {
|
|
| 546 |
global $submenu, $wp_db_version;
|
| 547 |
|
| 548 |
if ( 8645 < $wp_db_version ) // 2.7
|
| 549 |
-
$link = 'edit-comments.php
|
| 550 |
elseif ( isset( $submenu['edit-comments.php'] ) )
|
| 551 |
-
$link = 'edit-comments.php
|
| 552 |
else
|
| 553 |
-
$link = '
|
| 554 |
|
| 555 |
if ( $count = get_option('akismet_spam_count') ) {
|
| 556 |
$intro = sprintf( _n(
|
|
@@ -581,14 +584,17 @@ add_action('rightnow_end', 'akismet_rightnow');
|
|
| 581 |
|
| 582 |
|
| 583 |
// For WP >= 2.5
|
| 584 |
-
function akismet_check_for_spam_button($comment_status) {
|
| 585 |
if ( 'approved' == $comment_status )
|
| 586 |
return;
|
|
|
|
| 587 |
if ( function_exists('plugins_url') )
|
| 588 |
-
$link = 'admin.php
|
| 589 |
else
|
| 590 |
-
$link = '
|
| 591 |
-
|
|
|
|
|
|
|
| 592 |
}
|
| 593 |
add_action('manage_comments_nav', 'akismet_check_for_spam_button');
|
| 594 |
|
|
@@ -771,8 +777,12 @@ function akismet_recheck_queue() {
|
|
| 771 |
|
| 772 |
if ( ! ( isset( $_GET['recheckqueue'] ) || ( isset( $_REQUEST['action'] ) && 'akismet_recheck_queue' == $_REQUEST['action'] ) ) )
|
| 773 |
return;
|
| 774 |
-
|
| 775 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
| 776 |
foreach ( (array) $moderation as $c ) {
|
| 777 |
$c['user_ip'] = $c['comment_author_IP'];
|
| 778 |
$c['user_agent'] = $c['comment_agent'];
|
|
@@ -780,7 +790,7 @@ function akismet_recheck_queue() {
|
|
| 780 |
$c['blog'] = get_bloginfo('url');
|
| 781 |
$c['blog_lang'] = get_locale();
|
| 782 |
$c['blog_charset'] = get_option('blog_charset');
|
| 783 |
-
$c['permalink']
|
| 784 |
|
| 785 |
$c['user_role'] = '';
|
| 786 |
if ( isset( $c['user_ID'] ) )
|
|
@@ -815,12 +825,20 @@ function akismet_recheck_queue() {
|
|
| 815 |
|
| 816 |
delete_comment_meta( $c['comment_ID'], 'akismet_rechecking' );
|
| 817 |
}
|
| 818 |
-
|
| 819 |
-
|
| 820 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 821 |
}
|
| 822 |
|
| 823 |
add_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
|
| 826 |
function akismet_remove_comment_author_url() {
|
| 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(), AKISMET_VERSION );
|
| 43 |
wp_enqueue_style( 'akismet.css');
|
| 44 |
|
| 45 |
+
wp_register_script( 'akismet.js', AKISMET_PLUGIN_URL . 'akismet.js', array('jquery'), AKISMET_VERSION );
|
| 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 |
+
'strings' => array(
|
| 50 |
+
'Remove this URL' => __( 'Remove this URL' ),
|
| 51 |
+
'Removing...' => __( 'Removing...' ),
|
| 52 |
+
'URL removed' => __( 'URL removed' ),
|
| 53 |
+
'(undo)' => __( '(undo)' ),
|
| 54 |
+
'Re-adding...' => __( 'Re-adding...' ),
|
| 55 |
+
)
|
| 56 |
) );
|
| 57 |
}
|
| 58 |
}
|
| 342 |
$path = plugin_basename(__FILE__);
|
| 343 |
echo '<h3>' . _x( 'Spam', 'comments' ) . '</h3>';
|
| 344 |
global $submenu;
|
| 345 |
+
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', esc_url( add_query_arg( array( 'page' => 'akismet-admin' ), admin_url( isset( $submenu['edit-comments.php'] ) ? 'edit-comments.php' : 'edit.php' ) ) ), number_format_i18n($count) ).'</p>';
|
|
|
|
|
|
|
|
|
|
|
|
|
| 346 |
}
|
| 347 |
add_action('activity_box_end', 'akismet_stats');
|
| 348 |
|
| 549 |
global $submenu, $wp_db_version;
|
| 550 |
|
| 551 |
if ( 8645 < $wp_db_version ) // 2.7
|
| 552 |
+
$link = add_query_arg( array( 'comment_status' => 'spam' ), admin_url( 'edit-comments.php' ) );
|
| 553 |
elseif ( isset( $submenu['edit-comments.php'] ) )
|
| 554 |
+
$link = add_query_arg( array( 'page' => 'akismet-admin' ), admin_url( 'edit-comments.php' ) );
|
| 555 |
else
|
| 556 |
+
$link = add_query_arg( array( 'page' => 'akismet-admin' ), admin_url( 'edit.php' ) );
|
| 557 |
|
| 558 |
if ( $count = get_option('akismet_spam_count') ) {
|
| 559 |
$intro = sprintf( _n(
|
| 584 |
|
| 585 |
|
| 586 |
// For WP >= 2.5
|
| 587 |
+
function akismet_check_for_spam_button( $comment_status ) {
|
| 588 |
if ( 'approved' == $comment_status )
|
| 589 |
return;
|
| 590 |
+
|
| 591 |
if ( function_exists('plugins_url') )
|
| 592 |
+
$link = add_query_arg( array( 'action' => 'akismet_recheck_queue' ), admin_url( 'admin.php' ) );
|
| 593 |
else
|
| 594 |
+
$link = add_query_arg( array( 'page' => 'akismet-admin', 'recheckqueue' => 'true', 'noheader' => 'true' ), admin_url( 'edit-comments.php' ) );
|
| 595 |
+
|
| 596 |
+
echo '</div><div class="alignleft"><a class="button-secondary checkforspam" href="' . $link . '">' . esc_html__('Check for Spam') . '</a>';
|
| 597 |
+
echo '<img src="' . esc_url( admin_url( 'images/wpspin_light.gif' ) ) . '" class="checkforspam-spinner" />';
|
| 598 |
}
|
| 599 |
add_action('manage_comments_nav', 'akismet_check_for_spam_button');
|
| 600 |
|
| 777 |
|
| 778 |
if ( ! ( isset( $_GET['recheckqueue'] ) || ( isset( $_REQUEST['action'] ) && 'akismet_recheck_queue' == $_REQUEST['action'] ) ) )
|
| 779 |
return;
|
| 780 |
+
|
| 781 |
+
$paginate = '';
|
| 782 |
+
if ( isset( $_POST['limit'] ) && isset( $_POST['offset'] ) ) {
|
| 783 |
+
$paginate = $wpdb->prepare( " LIMIT %d OFFSET %d", array( $_POST['limit'], $_POST['offset'] ) );
|
| 784 |
+
}
|
| 785 |
+
$moderation = $wpdb->get_results( "SELECT * FROM {$wpdb->comments} WHERE comment_approved = '0'{$paginate}", ARRAY_A );
|
| 786 |
foreach ( (array) $moderation as $c ) {
|
| 787 |
$c['user_ip'] = $c['comment_author_IP'];
|
| 788 |
$c['user_agent'] = $c['comment_agent'];
|
| 790 |
$c['blog'] = get_bloginfo('url');
|
| 791 |
$c['blog_lang'] = get_locale();
|
| 792 |
$c['blog_charset'] = get_option('blog_charset');
|
| 793 |
+
$c['permalink'] = get_permalink($c['comment_post_ID']);
|
| 794 |
|
| 795 |
$c['user_role'] = '';
|
| 796 |
if ( isset( $c['user_ID'] ) )
|
| 825 |
|
| 826 |
delete_comment_meta( $c['comment_ID'], 'akismet_rechecking' );
|
| 827 |
}
|
| 828 |
+
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
| 829 |
+
wp_send_json( array(
|
| 830 |
+
'processed' => count((array) $moderation),
|
| 831 |
+
));
|
| 832 |
+
}
|
| 833 |
+
else {
|
| 834 |
+
$redirect_to = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : admin_url( 'edit-comments.php' );
|
| 835 |
+
wp_safe_redirect( $redirect_to );
|
| 836 |
+
exit;
|
| 837 |
+
}
|
| 838 |
}
|
| 839 |
|
| 840 |
add_action('admin_action_akismet_recheck_queue', 'akismet_recheck_queue');
|
| 841 |
+
add_action('wp_ajax_akismet_recheck_queue', 'akismet_recheck_queue');
|
| 842 |
|
| 843 |
// Adds an 'x' link next to author URLs, clicking will remove the author URL and show an undo link
|
| 844 |
function akismet_remove_comment_author_url() {
|
akismet.css
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
#submitted-on{position:relative}#the-comment-list .author .akismet-user-comment-count{display:inline}#the-comment-list .author a span{text-decoration:none;color:#999}#the-comment-list .remove_url{margin-left:3px;color:#999;padding:2px 3px 2px 0}#the-comment-list .remove_url:hover{color:#A7301F;font-weight:bold;padding:2px 2px 2px 0}#dashboard_recent_comments .akismet-status{display:none}.akismet-status{float:right}.akismet-status a{color:#AAA;font-style:italic}span.comment-link a{text-decoration:underline}span.comment-link:after{content:" "attr(title) " ";color:#aaa;text-decoration:none}.mshot-arrow{width:0;height:0;border-top:10px solid transparent;border-bottom:10px solid transparent;border-right:10px solid #5C5C5C;position:absolute;left:-6px;top:91px}.mshot-container{background:#5C5C5C;position:absolute;top:-94px;padding:7px;width:450px;height:338px;z-index:20000;-moz-border-radius:6px;border-radius:6px;-webkit-border-radius:6px}h2.ak-header{padding-left:38px;background:url('img/logo.png') no-repeat 0 9px;margin-bottom:14px;line-height:32px}.key-status{padding:0.4em 1em;color:#fff;font-weight:bold;text-align:center;-webkit-border-radius:3px;border-radius:3px;border-width:1px;border-style:solid;max-width:23.3em}input#key{width:25.3em !important}input#key.valid{border-color:#4F800D}input#key.invalid,input#key.failed{border-color:#888}.key-status.under-input{margin-top:-5px;padding-bottom:0px}.key-status.invalid,.key-status.failed{background-color:#888}.key-status.valid{background-color:#4F800D}.key-status.some{background-color:#993300}.key-status.empty{display:none}table.network-status th,table.network-status td{padding:0.4em;margin:0;text-align:center}table.network-status{border-color:#dfdfdf;border-width:0 0 1px 1px;border-style:solid;border-spacing:0;width:25.6em}table.network-status th,table.network-status td{border-color:#dfdfdf;border-width:1px 1px 0 0;border-style:solid;margin:0;border-spacing:0}table.network-status td.key-status{border-radius:0px;-webkit-border-radius:0px}
|
| 1 |
+
#submitted-on{position:relative}#the-comment-list .author .akismet-user-comment-count{display:inline}#the-comment-list .author a span{text-decoration:none;color:#999}#the-comment-list .remove_url{margin-left:3px;color:#999;padding:2px 3px 2px 0}#the-comment-list .remove_url:hover{color:#A7301F;font-weight:bold;padding:2px 2px 2px 0}#dashboard_recent_comments .akismet-status{display:none}.akismet-status{float:right}.akismet-status a{color:#AAA;font-style:italic}span.comment-link a{text-decoration:underline}span.comment-link:after{content:" "attr(title) " ";color:#aaa;text-decoration:none}.mshot-arrow{width:0;height:0;border-top:10px solid transparent;border-bottom:10px solid transparent;border-right:10px solid #5C5C5C;position:absolute;left:-6px;top:91px}.mshot-container{background:#5C5C5C;position:absolute;top:-94px;padding:7px;width:450px;height:338px;z-index:20000;-moz-border-radius:6px;border-radius:6px;-webkit-border-radius:6px}h2.ak-header{padding-left:38px;background:url('img/logo.png') no-repeat 0 9px;margin-bottom:14px;line-height:32px}.key-status{padding:0.4em 1em;color:#fff;font-weight:bold;text-align:center;-webkit-border-radius:3px;border-radius:3px;border-width:1px;border-style:solid;max-width:23.3em}input#key{width:25.3em !important}input#key.valid{border-color:#4F800D}input#key.invalid,input#key.failed{border-color:#888}.key-status.under-input{margin-top:-5px;padding-bottom:0px}.key-status.invalid,.key-status.failed{background-color:#888}.key-status.valid{background-color:#4F800D}.key-status.some{background-color:#993300}.key-status.empty{display:none}table.network-status th,table.network-status td{padding:0.4em;margin:0;text-align:center}table.network-status{border-color:#dfdfdf;border-width:0 0 1px 1px;border-style:solid;border-spacing:0;width:25.6em}table.network-status th,table.network-status td{border-color:#dfdfdf;border-width:1px 1px 0 0;border-style:solid;margin:0;border-spacing:0}table.network-status td.key-status{border-radius:0px;-webkit-border-radius:0px}.checkforspam{display:inline-block !important;}.checkforspam-spinner{display:none;margin-top:10px;}
|
akismet.js
CHANGED
|
@@ -1,114 +1,154 @@
|
|
| 1 |
-
jQuery(
|
| 2 |
-
|
| 3 |
-
var no_key =
|
| 4 |
-
var have_key =
|
| 5 |
|
| 6 |
no_key.addClass( 'hidden' );
|
| 7 |
have_key.removeClass( 'hidden' );
|
| 8 |
|
| 9 |
return false;
|
| 10 |
});
|
| 11 |
-
|
| 12 |
document.akismet_activate.submit();
|
| 13 |
});
|
| 14 |
-
|
| 15 |
-
var thisId =
|
| 16 |
-
|
| 17 |
});
|
| 18 |
-
|
| 19 |
-
var thisId =
|
| 20 |
-
|
| 21 |
});
|
| 22 |
-
|
| 23 |
-
var thisTitle =
|
| 24 |
-
thisCommentId =
|
| 25 |
|
| 26 |
-
|
| 27 |
|
| 28 |
if (thisTitle) {
|
| 29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
}
|
| 31 |
});
|
| 32 |
-
|
| 33 |
-
var thisId =
|
| 34 |
var data = {
|
| 35 |
action: 'comment_author_deurl',
|
| 36 |
_wpnonce: WPAkismet.comment_author_url_nonce,
|
| 37 |
id: thisId
|
| 38 |
};
|
| 39 |
-
|
| 40 |
url: ajaxurl,
|
| 41 |
type: 'POST',
|
| 42 |
data: data,
|
| 43 |
beforeSend: function () {
|
| 44 |
// Removes "x" link
|
| 45 |
-
|
| 46 |
// Show temp status
|
| 47 |
-
|
| 48 |
},
|
| 49 |
success: function (response) {
|
| 50 |
if (response) {
|
| 51 |
// Show status/undo link
|
| 52 |
-
|
| 53 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 54 |
}
|
| 55 |
});
|
| 56 |
|
| 57 |
return false;
|
| 58 |
});
|
| 59 |
-
|
| 60 |
-
var thisId =
|
| 61 |
-
var thisUrl =
|
| 62 |
var data = {
|
| 63 |
action: 'comment_author_reurl',
|
| 64 |
_wpnonce: WPAkismet.comment_author_url_nonce,
|
| 65 |
id: thisId,
|
| 66 |
url: thisUrl
|
| 67 |
};
|
| 68 |
-
|
| 69 |
url: ajaxurl,
|
| 70 |
type: 'POST',
|
| 71 |
data: data,
|
| 72 |
beforeSend: function () {
|
| 73 |
// Show temp status
|
| 74 |
-
|
| 75 |
},
|
| 76 |
success: function (response) {
|
| 77 |
if (response) {
|
| 78 |
// Add "x" link
|
| 79 |
-
|
| 80 |
// Show link
|
| 81 |
-
|
| 82 |
}
|
| 83 |
}
|
| 84 |
});
|
| 85 |
|
| 86 |
return false;
|
| 87 |
});
|
| 88 |
-
|
| 89 |
var wpcomProtocol = ( 'https:' === location.protocol ) ? 'https://' : 'http://';
|
| 90 |
// Need to determine size of author column
|
| 91 |
-
var thisParentWidth =
|
| 92 |
// It changes based on if there is a gravatar present
|
| 93 |
-
thisParentWidth = (
|
| 94 |
-
if (
|
| 95 |
-
var
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
var thisHref =
|
| 99 |
-
|
| 100 |
setTimeout(function () {
|
| 101 |
-
|
| 102 |
}, 6000);
|
| 103 |
setTimeout(function () {
|
| 104 |
-
|
| 105 |
}, 12000);
|
| 106 |
} else {
|
| 107 |
-
|
| 108 |
}
|
| 109 |
}).mouseout(function () {
|
| 110 |
-
|
| 111 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
});
|
| 113 |
// URL encode plugin
|
| 114 |
jQuery.extend({URLEncode:function(c){var o='';var x=0;c=c.toString();var r=/(^[a-zA-Z0-9_.]*)/;
|
|
@@ -117,10 +157,3 @@ jQuery.extend({URLEncode:function(c){var o='';var x=0;c=c.toString();var r=/(^[a
|
|
| 117 |
}else{if(c[x]==' ')o+='+';else{var d=c.charCodeAt(x);var h=d.toString(16);
|
| 118 |
o+='%'+(h.length<2?'0':'')+h.toUpperCase();}x++;}}return o;}
|
| 119 |
});
|
| 120 |
-
// Preload mshot images after everything else has loaded
|
| 121 |
-
jQuery(window).load(function() {
|
| 122 |
-
var wpcomProtocol = ( 'https:' === location.protocol ) ? 'https://' : 'http://';
|
| 123 |
-
jQuery('a[id^="author_comment_url"]').each(function () {
|
| 124 |
-
jQuery.get(wpcomProtocol+'s0.wordpress.com/mshots/v1/'+jQuery.URLEncode(jQuery(this).attr('href'))+'?w=450');
|
| 125 |
-
});
|
| 126 |
-
});
|
| 1 |
+
jQuery( function ( $ ) {
|
| 2 |
+
$( '.switch-have-key' ).click( function() {
|
| 3 |
+
var no_key = $( this ).parents().find('div.no-key');
|
| 4 |
+
var have_key = $( this ).parents().find('div.have-key');
|
| 5 |
|
| 6 |
no_key.addClass( 'hidden' );
|
| 7 |
have_key.removeClass( 'hidden' );
|
| 8 |
|
| 9 |
return false;
|
| 10 |
});
|
| 11 |
+
$( 'p.need-key a' ).click( function(){
|
| 12 |
document.akismet_activate.submit();
|
| 13 |
});
|
| 14 |
+
$('.akismet-status').each(function () {
|
| 15 |
+
var thisId = $(this).attr('commentid');
|
| 16 |
+
$(this).prependTo('#comment-' + thisId + ' .column-comment div:first-child');
|
| 17 |
});
|
| 18 |
+
$('.akismet-user-comment-count').each(function () {
|
| 19 |
+
var thisId = $(this).attr('commentid');
|
| 20 |
+
$(this).insertAfter('#comment-' + thisId + ' .author strong:first').show();
|
| 21 |
});
|
| 22 |
+
$('#the-comment-list').find('tr.comment, tr[id ^= "comment-"]').find('.column-author a[title ^= "http://"]').each(function () {
|
| 23 |
+
var thisTitle = $(this).attr('title');
|
| 24 |
+
thisCommentId = $(this).parents('tr:first').attr('id').split("-");
|
| 25 |
|
| 26 |
+
$(this).attr("id", "author_comment_url_"+ thisCommentId[1]);
|
| 27 |
|
| 28 |
if (thisTitle) {
|
| 29 |
+
$(this).after(
|
| 30 |
+
$( '<a href="#" class="remove_url">x</a>' )
|
| 31 |
+
.attr( 'commentid', thisCommentId[1] )
|
| 32 |
+
.attr( 'title', WPAkismet.strings['Remove this URL'] )
|
| 33 |
+
);
|
| 34 |
}
|
| 35 |
});
|
| 36 |
+
$('.remove_url').live('click', function () {
|
| 37 |
+
var thisId = $(this).attr('commentid');
|
| 38 |
var data = {
|
| 39 |
action: 'comment_author_deurl',
|
| 40 |
_wpnonce: WPAkismet.comment_author_url_nonce,
|
| 41 |
id: thisId
|
| 42 |
};
|
| 43 |
+
$.ajax({
|
| 44 |
url: ajaxurl,
|
| 45 |
type: 'POST',
|
| 46 |
data: data,
|
| 47 |
beforeSend: function () {
|
| 48 |
// Removes "x" link
|
| 49 |
+
$("a[commentid='"+ thisId +"']").hide();
|
| 50 |
// Show temp status
|
| 51 |
+
$("#author_comment_url_"+ thisId).html( $( '<span/>' ).text( WPAkismet.strings['Removing...'] ) );
|
| 52 |
},
|
| 53 |
success: function (response) {
|
| 54 |
if (response) {
|
| 55 |
// Show status/undo link
|
| 56 |
+
$("#author_comment_url_"+ thisId)
|
| 57 |
+
.attr('cid', thisId)
|
| 58 |
+
.addClass('akismet_undo_link_removal')
|
| 59 |
+
.html(
|
| 60 |
+
$( '<span/>' ).text( WPAkismet.strings['URL removed'] )
|
| 61 |
+
)
|
| 62 |
+
.append( ' ' )
|
| 63 |
+
.append(
|
| 64 |
+
$( '<span/>' )
|
| 65 |
+
.text( WPAkismet.strings['(undo)'] )
|
| 66 |
+
.addClass( 'akismet-span-link' )
|
| 67 |
+
);
|
| 68 |
+
}
|
| 69 |
}
|
| 70 |
});
|
| 71 |
|
| 72 |
return false;
|
| 73 |
});
|
| 74 |
+
$('.akismet_undo_link_removal').live('click', function () {
|
| 75 |
+
var thisId = $(this).attr('cid');
|
| 76 |
+
var thisUrl = $(this).attr('href').replace("http://www.", "").replace("http://", "");
|
| 77 |
var data = {
|
| 78 |
action: 'comment_author_reurl',
|
| 79 |
_wpnonce: WPAkismet.comment_author_url_nonce,
|
| 80 |
id: thisId,
|
| 81 |
url: thisUrl
|
| 82 |
};
|
| 83 |
+
$.ajax({
|
| 84 |
url: ajaxurl,
|
| 85 |
type: 'POST',
|
| 86 |
data: data,
|
| 87 |
beforeSend: function () {
|
| 88 |
// Show temp status
|
| 89 |
+
$("#author_comment_url_"+ thisId).html( $( '<span/>' ).text( WPAkismet.strings['Re-adding...'] ) );
|
| 90 |
},
|
| 91 |
success: function (response) {
|
| 92 |
if (response) {
|
| 93 |
// Add "x" link
|
| 94 |
+
$("a[commentid='"+ thisId +"']").show();
|
| 95 |
// Show link
|
| 96 |
+
$("#author_comment_url_"+ thisId).removeClass('akismet_undo_link_removal').html(thisUrl);
|
| 97 |
}
|
| 98 |
}
|
| 99 |
});
|
| 100 |
|
| 101 |
return false;
|
| 102 |
});
|
| 103 |
+
$('a[id^="author_comment_url"], tr.pingback td.column-author a:first-of-type').mouseover(function () {
|
| 104 |
var wpcomProtocol = ( 'https:' === location.protocol ) ? 'https://' : 'http://';
|
| 105 |
// Need to determine size of author column
|
| 106 |
+
var thisParentWidth = $(this).parent().width();
|
| 107 |
// It changes based on if there is a gravatar present
|
| 108 |
+
thisParentWidth = ($(this).parent().find('.grav-hijack').length) ? thisParentWidth - 42 + 'px' : thisParentWidth + 'px';
|
| 109 |
+
if ($(this).find('.mShot').length == 0 && !$(this).hasClass('akismet_undo_link_removal')) {
|
| 110 |
+
var self = $( this );
|
| 111 |
+
$('.widefat td').css('overflow', 'visible');
|
| 112 |
+
$(this).css('position', 'relative');
|
| 113 |
+
var thisHref = $.URLEncode( $(this).attr('href') );
|
| 114 |
+
$(this).append('<div class="mShot mshot-container" style="left: '+thisParentWidth+'"><div class="mshot-arrow"></div><img src="//s0.wordpress.com/mshots/v1/'+thisHref+'?w=450" width="450" class="mshot-image" style="margin: 0;" /></div>');
|
| 115 |
setTimeout(function () {
|
| 116 |
+
self.find( '.mshot-image' ).attr('src', '//s0.wordpress.com/mshots/v1/'+thisHref+'?w=450&r=2');
|
| 117 |
}, 6000);
|
| 118 |
setTimeout(function () {
|
| 119 |
+
self.find( '.mshot-image' ).attr('src', '//s0.wordpress.com/mshots/v1/'+thisHref+'?w=450&r=3');
|
| 120 |
}, 12000);
|
| 121 |
} else {
|
| 122 |
+
$(this).find('.mShot').css('left', thisParentWidth).show();
|
| 123 |
}
|
| 124 |
}).mouseout(function () {
|
| 125 |
+
$(this).find('.mShot').hide();
|
| 126 |
});
|
| 127 |
+
$('.checkforspam:not(.button-disabled)').click( function(e) {
|
| 128 |
+
$('.checkforspam:not(.button-disabled)').addClass('button-disabled');
|
| 129 |
+
$('.checkforspam-spinner').show();
|
| 130 |
+
akismet_check_for_spam(0, 100);
|
| 131 |
+
e.preventDefault();
|
| 132 |
+
});
|
| 133 |
+
|
| 134 |
+
function akismet_check_for_spam(offset, limit) {
|
| 135 |
+
$.post(
|
| 136 |
+
ajaxurl,
|
| 137 |
+
{
|
| 138 |
+
'action': 'akismet_recheck_queue',
|
| 139 |
+
'offset': offset,
|
| 140 |
+
'limit': limit
|
| 141 |
+
},
|
| 142 |
+
function(result) {
|
| 143 |
+
if (result.processed < limit) {
|
| 144 |
+
window.location.reload();
|
| 145 |
+
}
|
| 146 |
+
else {
|
| 147 |
+
akismet_check_for_spam(offset + limit, limit);
|
| 148 |
+
}
|
| 149 |
+
}
|
| 150 |
+
);
|
| 151 |
+
}
|
| 152 |
});
|
| 153 |
// URL encode plugin
|
| 154 |
jQuery.extend({URLEncode:function(c){var o='';var x=0;c=c.toString();var r=/(^[a-zA-Z0-9_.]*)/;
|
| 157 |
}else{if(c[x]==' ')o+='+';else{var d=c.charCodeAt(x);var h=d.toString(16);
|
| 158 |
o+='%'+(h.length<2?'0':'')+h.toUpperCase();}x++;}}return o;}
|
| 159 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
akismet.php
CHANGED
|
@@ -6,7 +6,7 @@
|
|
| 6 |
Plugin Name: Akismet
|
| 7 |
Plugin URI: http://akismet.com/?return=true
|
| 8 |
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from comment and trackback spam</strong>. It keeps your site protected from spam even while you sleep. To get started: 1) Click the "Activate" link to the left of this description, 2) <a href="http://akismet.com/get/?return=true">Sign up for an Akismet API key</a>, and 3) Go to your Akismet configuration page, and save your API key.
|
| 9 |
-
Version: 2.
|
| 10 |
Author: Automattic
|
| 11 |
Author URI: http://automattic.com/wordpress-plugins/
|
| 12 |
License: GPLv2 or later
|
|
@@ -34,8 +34,9 @@ if ( !function_exists( 'add_action' ) ) {
|
|
| 34 |
exit;
|
| 35 |
}
|
| 36 |
|
| 37 |
-
define('AKISMET_VERSION', '2.
|
| 38 |
define('AKISMET_PLUGIN_URL', plugin_dir_url( __FILE__ ));
|
|
|
|
| 39 |
|
| 40 |
/** If you hardcode a WP.com API key here, all key config screens will be hidden */
|
| 41 |
if ( defined('WPCOM_API_KEY') )
|
|
@@ -197,17 +198,26 @@ function akismet_http_post($request, $host, $path, $port = 80, $ip=null) {
|
|
| 197 |
|
| 198 |
// filter handler used to return a spam result to pre_comment_approved
|
| 199 |
function akismet_result_spam( $approved ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 200 |
// bump the counter here instead of when the filter is added to reduce the possibility of overcounting
|
| 201 |
if ( $incr = apply_filters('akismet_spam_count_incr', 1) )
|
| 202 |
update_option( 'akismet_spam_count', get_option('akismet_spam_count') + $incr );
|
|
|
|
| 203 |
// this is a one-shot deal
|
| 204 |
-
|
| 205 |
return 'spam';
|
| 206 |
}
|
| 207 |
|
| 208 |
function akismet_result_hold( $approved ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 209 |
// once only
|
| 210 |
-
|
| 211 |
return '0';
|
| 212 |
}
|
| 213 |
|
|
@@ -321,7 +331,7 @@ function akismet_auto_check_comment( $commentdata ) {
|
|
| 321 |
global $akismet_api_host, $akismet_api_port, $akismet_last_comment;
|
| 322 |
|
| 323 |
$comment = $commentdata;
|
| 324 |
-
$comment['user_ip'] =
|
| 325 |
$comment['user_agent'] = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null;
|
| 326 |
$comment['referrer'] = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
|
| 327 |
$comment['blog'] = get_option('home');
|
|
@@ -422,58 +432,70 @@ function akismet_auto_check_comment( $commentdata ) {
|
|
| 422 |
|
| 423 |
add_action('preprocess_comment', 'akismet_auto_check_comment', 1);
|
| 424 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 425 |
function akismet_delete_old() {
|
| 426 |
global $wpdb;
|
| 427 |
-
|
| 428 |
-
$comment_ids = $wpdb->get_col("SELECT comment_id FROM $wpdb->comments WHERE DATE_SUB(
|
| 429 |
-
|
| 430 |
-
|
| 431 |
|
| 432 |
-
|
| 433 |
|
| 434 |
-
|
| 435 |
-
|
| 436 |
-
|
| 437 |
-
|
| 438 |
-
|
| 439 |
-
|
| 440 |
-
|
|
|
|
|
|
|
| 441 |
|
|
|
|
|
|
|
| 442 |
}
|
| 443 |
|
| 444 |
function akismet_delete_old_metadata() {
|
| 445 |
global $wpdb;
|
| 446 |
|
| 447 |
-
$now_gmt = current_time( 'mysql', 1 );
|
| 448 |
$interval = apply_filters( 'akismet_delete_commentmeta_interval', 15 );
|
| 449 |
|
| 450 |
# enfore a minimum of 1 day
|
| 451 |
$interval = absint( $interval );
|
| 452 |
-
if ( $interval < 1 )
|
| 453 |
-
|
| 454 |
-
}
|
| 455 |
|
| 456 |
// akismet_as_submitted meta values are large, so expire them
|
| 457 |
// after $interval days regardless of the comment status
|
| 458 |
-
while (
|
| 459 |
-
|
| 460 |
-
|
| 461 |
-
|
| 462 |
-
|
| 463 |
-
|
| 464 |
-
|
| 465 |
foreach ( $comment_ids as $comment_id ) {
|
| 466 |
delete_comment_meta( $comment_id, 'akismet_as_submitted' );
|
| 467 |
}
|
| 468 |
}
|
| 469 |
-
|
| 470 |
-
|
| 471 |
-
|
| 472 |
-
|
| 473 |
-
$wpdb->query( "OPTIMIZE TABLE $wpdb->commentmeta" );
|
| 474 |
-
}
|
| 475 |
-
*/
|
| 476 |
-
}
|
| 477 |
|
| 478 |
add_action('akismet_scheduled_delete', 'akismet_delete_old');
|
| 479 |
add_action('akismet_scheduled_delete', 'akismet_delete_old_metadata');
|
|
@@ -588,6 +610,71 @@ $akismet_comment_nonce_option = apply_filters( 'akismet_comment_nonce', get_opti
|
|
| 588 |
if ( $akismet_comment_nonce_option == 'true' || $akismet_comment_nonce_option == '' )
|
| 589 |
add_action( 'comment_form', 'akismet_add_comment_nonce' );
|
| 590 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 591 |
global $wp_version;
|
| 592 |
if ( '3.0.5' == $wp_version ) {
|
| 593 |
remove_filter( 'comment_text', 'wp_kses_data' );
|
| 6 |
Plugin Name: Akismet
|
| 7 |
Plugin URI: http://akismet.com/?return=true
|
| 8 |
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from comment and trackback spam</strong>. It keeps your site protected from spam even while you sleep. To get started: 1) Click the "Activate" link to the left of this description, 2) <a href="http://akismet.com/get/?return=true">Sign up for an Akismet API key</a>, and 3) Go to your Akismet configuration page, and save your API key.
|
| 9 |
+
Version: 2.6.0
|
| 10 |
Author: Automattic
|
| 11 |
Author URI: http://automattic.com/wordpress-plugins/
|
| 12 |
License: GPLv2 or later
|
| 34 |
exit;
|
| 35 |
}
|
| 36 |
|
| 37 |
+
define('AKISMET_VERSION', '2.6.0');
|
| 38 |
define('AKISMET_PLUGIN_URL', plugin_dir_url( __FILE__ ));
|
| 39 |
+
define('AKISMET_DELETE_LIMIT', 10000);
|
| 40 |
|
| 41 |
/** If you hardcode a WP.com API key here, all key config screens will be hidden */
|
| 42 |
if ( defined('WPCOM_API_KEY') )
|
| 198 |
|
| 199 |
// filter handler used to return a spam result to pre_comment_approved
|
| 200 |
function akismet_result_spam( $approved ) {
|
| 201 |
+
static $just_once = false;
|
| 202 |
+
if ( $just_once )
|
| 203 |
+
return $approved;
|
| 204 |
+
|
| 205 |
// bump the counter here instead of when the filter is added to reduce the possibility of overcounting
|
| 206 |
if ( $incr = apply_filters('akismet_spam_count_incr', 1) )
|
| 207 |
update_option( 'akismet_spam_count', get_option('akismet_spam_count') + $incr );
|
| 208 |
+
|
| 209 |
// this is a one-shot deal
|
| 210 |
+
$just_once = true;
|
| 211 |
return 'spam';
|
| 212 |
}
|
| 213 |
|
| 214 |
function akismet_result_hold( $approved ) {
|
| 215 |
+
static $just_once = false;
|
| 216 |
+
if ( $just_once )
|
| 217 |
+
return $approved;
|
| 218 |
+
|
| 219 |
// once only
|
| 220 |
+
$just_once = true;
|
| 221 |
return '0';
|
| 222 |
}
|
| 223 |
|
| 331 |
global $akismet_api_host, $akismet_api_port, $akismet_last_comment;
|
| 332 |
|
| 333 |
$comment = $commentdata;
|
| 334 |
+
$comment['user_ip'] = akismet_get_ip_address();
|
| 335 |
$comment['user_agent'] = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null;
|
| 336 |
$comment['referrer'] = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
|
| 337 |
$comment['blog'] = get_option('home');
|
| 432 |
|
| 433 |
add_action('preprocess_comment', 'akismet_auto_check_comment', 1);
|
| 434 |
|
| 435 |
+
function akismet_get_ip_address() {
|
| 436 |
+
foreach( array( 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR' ) as $key ) {
|
| 437 |
+
if ( array_key_exists( $key, $_SERVER ) === true ) {
|
| 438 |
+
foreach ( explode( ',', $_SERVER[$key] ) as $ip ) {
|
| 439 |
+
$ip = trim($ip);
|
| 440 |
+
|
| 441 |
+
if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false ) {
|
| 442 |
+
return $ip;
|
| 443 |
+
}
|
| 444 |
+
}
|
| 445 |
+
}
|
| 446 |
+
}
|
| 447 |
+
return null;
|
| 448 |
+
}
|
| 449 |
+
|
| 450 |
function akismet_delete_old() {
|
| 451 |
global $wpdb;
|
| 452 |
+
|
| 453 |
+
while( $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_id FROM {$wpdb->comments} WHERE DATE_SUB(NOW(), INTERVAL 15 DAY) > comment_date_gmt AND comment_approved = 'spam' LIMIT %d", defined( 'AKISMET_DELETE_LIMIT' ) ? AKISMET_DELETE_LIMIT : 10000 ) ) ) {
|
| 454 |
+
if ( empty( $comment_ids ) )
|
| 455 |
+
return;
|
| 456 |
|
| 457 |
+
$wpdb->queries = array();
|
| 458 |
|
| 459 |
+
do_action( 'delete_comment', $comment_ids );
|
| 460 |
+
|
| 461 |
+
$comma_comment_ids = implode( ', ', array_map('intval', $comment_ids) );
|
| 462 |
+
|
| 463 |
+
$wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_id IN ( $comma_comment_ids )");
|
| 464 |
+
$wpdb->query("DELETE FROM {$wpdb->commentmeta} WHERE comment_id IN ( $comma_comment_ids )");
|
| 465 |
+
|
| 466 |
+
clean_comment_cache( $comment_ids );
|
| 467 |
+
}
|
| 468 |
|
| 469 |
+
if ( apply_filters( 'akismet_optimize_table', ( mt_rand(1, 5000) == 11) ) ) // lucky number
|
| 470 |
+
$wpdb->query("OPTIMIZE TABLE {$wpdb->comments}");
|
| 471 |
}
|
| 472 |
|
| 473 |
function akismet_delete_old_metadata() {
|
| 474 |
global $wpdb;
|
| 475 |
|
|
|
|
| 476 |
$interval = apply_filters( 'akismet_delete_commentmeta_interval', 15 );
|
| 477 |
|
| 478 |
# enfore a minimum of 1 day
|
| 479 |
$interval = absint( $interval );
|
| 480 |
+
if ( $interval < 1 )
|
| 481 |
+
$interval = 1;
|
|
|
|
| 482 |
|
| 483 |
// akismet_as_submitted meta values are large, so expire them
|
| 484 |
// after $interval days regardless of the comment status
|
| 485 |
+
while ( $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT m.comment_id FROM {$wpdb->commentmeta} as m INNER JOIN {$wpdb->comments} as c USING(comment_id) WHERE m.meta_key = 'akismet_as_submitted' AND DATE_SUB(NOW(), INTERVAL %d DAY) > c.comment_date_gmt LIMIT 10000", $interval ) ) ) {
|
| 486 |
+
if ( empty( $comment_ids ) )
|
| 487 |
+
return;
|
| 488 |
+
|
| 489 |
+
$wpdb->queries = array();
|
| 490 |
+
|
|
|
|
| 491 |
foreach ( $comment_ids as $comment_id ) {
|
| 492 |
delete_comment_meta( $comment_id, 'akismet_as_submitted' );
|
| 493 |
}
|
| 494 |
}
|
| 495 |
+
|
| 496 |
+
if ( apply_filters( 'akismet_optimize_table', ( mt_rand(1, 5000) == 11) ) ) // lucky number
|
| 497 |
+
$wpdb->query("OPTIMIZE TABLE {$wpdb->comments}");
|
| 498 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 499 |
|
| 500 |
add_action('akismet_scheduled_delete', 'akismet_delete_old');
|
| 501 |
add_action('akismet_scheduled_delete', 'akismet_delete_old_metadata');
|
| 610 |
if ( $akismet_comment_nonce_option == 'true' || $akismet_comment_nonce_option == '' )
|
| 611 |
add_action( 'comment_form', 'akismet_add_comment_nonce' );
|
| 612 |
|
| 613 |
+
function akismet_pingback_forwarded_for( $r, $url ) {
|
| 614 |
+
static $urls = array();
|
| 615 |
+
|
| 616 |
+
// Call this with $r == null to prime the callback to add headers on a specific URL
|
| 617 |
+
if ( is_null( $r ) && !in_array( $url, $urls ) ) {
|
| 618 |
+
$urls[] = $url;
|
| 619 |
+
}
|
| 620 |
+
|
| 621 |
+
// Add X-Pingback-Forwarded-For header, but only for requests to a specific URL (the apparent pingback source)
|
| 622 |
+
if ( is_array( $r ) && is_array( $r['headers'] ) && !isset( $r['headers']['X-Pingback-Forwarded-For'] ) && in_array( $url, $urls ) ) {
|
| 623 |
+
$remote_ip = preg_replace( '/[^a-fx0-9:.,]/i', '', $_SERVER['REMOTE_ADDR'] );
|
| 624 |
+
|
| 625 |
+
// Note: this assumes REMOTE_ADDR is correct, and it may not be if a reverse proxy or CDN is in use
|
| 626 |
+
$r['headers']['X-Pingback-Forwarded-For'] = $remote_ip;
|
| 627 |
+
|
| 628 |
+
// Also identify the request as a pingback verification in the UA string so it appears in logs
|
| 629 |
+
$r['user-agent'] .= '; verifying pingback from ' . $remote_ip;
|
| 630 |
+
}
|
| 631 |
+
|
| 632 |
+
return $r;
|
| 633 |
+
}
|
| 634 |
+
|
| 635 |
+
function akismet_pre_check_pingback( $method ) {
|
| 636 |
+
|
| 637 |
+
if ( $method !== 'pingback.ping' )
|
| 638 |
+
return;
|
| 639 |
+
|
| 640 |
+
global $wp_xmlrpc_server;
|
| 641 |
+
|
| 642 |
+
if ( !is_object( $wp_xmlrpc_server ) )
|
| 643 |
+
return false;
|
| 644 |
+
|
| 645 |
+
// Lame: tightly coupled with the IXR class.
|
| 646 |
+
$args = $wp_xmlrpc_server->message->params;
|
| 647 |
+
|
| 648 |
+
if ( !empty( $args[1] ) ) {
|
| 649 |
+
$post_id = url_to_postid( $args[1] );
|
| 650 |
+
|
| 651 |
+
// If this gets through the pre-check, make sure we properly identify the outbound request as a pingback verification
|
| 652 |
+
akismet_pingback_forwarded_for( null, $args[0] );
|
| 653 |
+
add_filter( 'http_request_args', 'akismet_pingback_forwarded_for', 10, 2 );
|
| 654 |
+
|
| 655 |
+
$comment = array(
|
| 656 |
+
'comment_author_url' => $args[0],
|
| 657 |
+
'comment_post_ID' => $post_id,
|
| 658 |
+
'comment_author' => '',
|
| 659 |
+
'comment_author_email' => '',
|
| 660 |
+
'comment_content' => '',
|
| 661 |
+
'comment_type' => 'pingback',
|
| 662 |
+
'akismet_pre_check' => '1',
|
| 663 |
+
'comment_pingback_target' => $args[1],
|
| 664 |
+
);
|
| 665 |
+
|
| 666 |
+
$comment = akismet_auto_check_comment( $comment );
|
| 667 |
+
|
| 668 |
+
if ( isset( $comment['akismet_result'] ) && 'true' == $comment['akismet_result'] ) {
|
| 669 |
+
// Lame: tightly coupled with the IXR classes. Unfortunately the action provides no context and no way to return anything.
|
| 670 |
+
$wp_xmlrpc_server->error( new IXR_Error( 0, 'Invalid discovery target' ) );
|
| 671 |
+
}
|
| 672 |
+
}
|
| 673 |
+
}
|
| 674 |
+
|
| 675 |
+
// Run this early in the pingback call, before doing a remote fetch of the source uri
|
| 676 |
+
add_action( 'xmlrpc_call', 'akismet_pre_check_pingback' );
|
| 677 |
+
|
| 678 |
global $wp_version;
|
| 679 |
if ( '3.0.5' == $wp_version ) {
|
| 680 |
remove_filter( 'comment_text', 'wp_kses_data' );
|
readme.txt
CHANGED
|
@@ -2,8 +2,8 @@
|
|
| 2 |
Contributors: matt, ryan, andy, mdawaffe, tellyworth, josephscott, lessbloat, eoigal, automattic
|
| 3 |
Tags: akismet, comments, spam
|
| 4 |
Requires at least: 3.0
|
| 5 |
-
Tested up to: 3.
|
| 6 |
-
Stable tag: 2.
|
| 7 |
License: GPLv2 or later
|
| 8 |
|
| 9 |
Akismet checks your comments against the Akismet web service to see if they look like spam or not.
|
|
@@ -31,6 +31,14 @@ Upload the Akismet plugin to your blog, Activate it, then enter your [Akismet.co
|
|
| 31 |
|
| 32 |
== Changelog ==
|
| 33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
= 2.5.9 =
|
| 35 |
* Update 'Already have a key' link to redirect page rather than depend on javascript
|
| 36 |
* Fix some non-translatable strings to be translatable
|
| 2 |
Contributors: matt, ryan, andy, mdawaffe, tellyworth, josephscott, lessbloat, eoigal, automattic
|
| 3 |
Tags: akismet, comments, spam
|
| 4 |
Requires at least: 3.0
|
| 5 |
+
Tested up to: 3.8.1
|
| 6 |
+
Stable tag: 2.6.0
|
| 7 |
License: GPLv2 or later
|
| 8 |
|
| 9 |
Akismet checks your comments against the Akismet web service to see if they look like spam or not.
|
| 31 |
|
| 32 |
== Changelog ==
|
| 33 |
|
| 34 |
+
= 2.6.0 =
|
| 35 |
+
* Add ajax paging to the check for spam button to handle large volumes of comments
|
| 36 |
+
* Optimize javascript and add localization support
|
| 37 |
+
* Fix bug in link to spam comments from right now dashboard widget
|
| 38 |
+
* Fix bug with deleting old comments to avoid timeouts dealing with large volumes of comments
|
| 39 |
+
* Include X-Pingback-Forwarded-For header in outbound WordPress pingback verifications
|
| 40 |
+
* Add pre-check for pingbacks, to stop spam before an outbound verification request is made
|
| 41 |
+
|
| 42 |
= 2.5.9 =
|
| 43 |
* Update 'Already have a key' link to redirect page rather than depend on javascript
|
| 44 |
* Fix some non-translatable strings to be translatable
|
