function gwolle_gb_akismet($entry, $action) { $actions = array('comment-check', 'submit-ham', 'submit-spam'); if (!in_array($action, $actions)) { return false; } $akismet_active = get_option('gwolle_gb-akismet-active', 'false'); if ($akismet_active != 'true') { // Akismet is not active, so we don't do anything return false; } if (is_callable(array('Akismet', 'get_api_key'))) { // Akismet v3.0+ $api_key = (bool) Akismet::get_api_key(); } else { if (function_exists('akismet_get_key')) { $api_key = (bool) akismet_get_key(); } } if (!$api_key) { // No api key, no glory return false; } if (!is_object($entry)) { // No object, no fuss return false; } $comment = array(); $comment['comment_author'] = $entry->get_author_name(); $comment['comment_author_email'] = $entry->get_author_email(); $comment['comment_author_origin'] = $entry->get_author_origin(); $comment['comment_author_url'] = $entry->get_author_website(); $comment['comment_content'] = gwolle_gb_bbcode_strip($entry->get_content()); $comment['blog'] = get_option('home'); $comment['blog_lang'] = get_locale(); $comment['blog_charset'] = get_option('blog_charset'); $comment['user_ip'] = preg_replace('/[^0-9., ]/', '', $_SERVER['REMOTE_ADDR']); $comment['user_agent'] = $_SERVER['HTTP_USER_AGENT']; if (isset($_SERVER['HTTP_REFERER'])) { $comment['referrer'] = $_SERVER['HTTP_REFERER']; } // http://blog.akismet.com/2012/06/19/pro-tip-tell-us-your-comment_type/ $comment['comment_type'] = 'comment'; $permalink = get_permalink(get_the_ID()); if ($permalink) { $comment['permalink'] = $permalink; } $ignore = array('HTTP_COOKIE', 'HTTP_COOKIE2', 'PHP_AUTH_PW'); foreach ($_SERVER as $key => $value) { if (!in_array($key, (array) $ignore)) { $comment["{$key}"] = $value; } } // Send the thing to the Akismet service return gwolle_gb_akismet_entry_check($comment, $action); }
/** * is_enable * @return string APIキー */ private function is_enable() { if (is_callable(array('Akismet', 'get_api_key'))) { return Akismet::get_api_key(); } if (function_exists('akismet_get_key')) { return akismet_get_key(); } return false; }
function wpcf7_akismet_is_available() { if (is_callable(array('Akismet', 'get_api_key'))) { // Akismet v3.0+ return (bool) Akismet::get_api_key(); } if (function_exists('akismet_get_key')) { return (bool) akismet_get_key(); } return false; }
public static function get_api_key() { if (is_callable(array('Akismet', 'get_api_key'))) { /* Akismet v3.0+ */ return (bool) Akismet::get_api_key(); } if (function_exists('akismet_get_key')) { return (bool) akismet_get_key(); } return false; }
function wpcf7_akismet($spam) { if ($spam) { return $spam; } if (!function_exists('akismet_get_key') || !akismet_get_key()) { return false; } if (!($params = wpcf7_akismet_submitted_params())) { return false; } $c = array(); if (!empty($params['author'])) { $c['comment_author'] = $params['author']; } if (!empty($params['author_email'])) { $c['comment_author_email'] = $params['author_email']; } if (!empty($params['author_url'])) { $c['comment_author_url'] = $params['author_url']; } if (!empty($params['content'])) { $c['comment_content'] = $params['content']; } $c['blog'] = get_option('home'); $c['blog_lang'] = get_locale(); $c['blog_charset'] = get_option('blog_charset'); $c['user_ip'] = preg_replace('/[^0-9., ]/', '', $_SERVER['REMOTE_ADDR']); $c['user_agent'] = $_SERVER['HTTP_USER_AGENT']; $c['referrer'] = $_SERVER['HTTP_REFERER']; // http://blog.akismet.com/2012/06/19/pro-tip-tell-us-your-comment_type/ $c['comment_type'] = 'contact-form'; if ($permalink = get_permalink()) { $c['permalink'] = $permalink; } $ignore = array('HTTP_COOKIE', 'HTTP_COOKIE2', 'PHP_AUTH_PW'); foreach ($_SERVER as $key => $value) { if (!in_array($key, (array) $ignore)) { $c["{$key}"] = $value; } } return wpcf7_akismet_comment_check($c); }
function akismet_check_server_connectivity() { global $akismet_api_host, $akismet_api_port, $wpcom_api_key; $test_host = 'rest.akismet.com'; // Some web hosts may disable one or both functions if (!is_callable('fsockopen') || !is_callable('gethostbynamel')) { return array(); } $ips = gethostbynamel($test_host); if (!$ips || !is_array($ips) || !count($ips)) { return array(); } $servers = array(); foreach ($ips as $ip) { $response = akismet_verify_key(akismet_get_key(), $ip); // even if the key is invalid, at least we know we have connectivity if ($response == 'valid' || $response == 'invalid') { $servers[$ip] = true; } else { $servers[$ip] = false; } } return $servers; }
function akismet_stats_display() { global $akismet_api_host, $akismet_api_port, $wpcom_api_key; $blog = urlencode(get_option('home')); $url = 'http://'; if (is_ssl()) { $url = 'https://'; } $url .= 'akismet.com/web/1.0/user-stats.php'; $url .= "?blog={$blog}&api_key=" . akismet_get_key(); ?> <div class="wrap"> <iframe src="<?php echo $url; ?> " width="100%" height="100%" frameborder="0" id="akismet-stats-frame"></iframe> </div> <?php }
function akismet_cron_recheck() { global $wpdb; $status = akismet_verify_key(akismet_get_key()); if (get_option('akismet_alert_code') || $status == 'invalid') { // since there is currently a problem with the key, reschedule a check for 6 hours hence wp_schedule_single_event(time() + 21600, 'akismet_schedule_cron_recheck'); return false; } delete_option('akismet_available_servers'); $comment_errors = $wpdb->get_col("\n\t\tSELECT comment_id\n\t\tFROM {$wpdb->prefix}commentmeta\n\t\tWHERE meta_key = 'akismet_error'\n\t\tLIMIT 100\n\t"); foreach ((array) $comment_errors as $comment_id) { // if the comment no longer exists, or is too old, remove the meta entry from the queue to avoid getting stuck $comment = get_comment($comment_id); if (!$comment || strtotime($comment->comment_date_gmt) < strtotime("-15 days")) { delete_comment_meta($comment_id, 'akismet_error'); continue; } add_comment_meta($comment_id, 'akismet_rechecking', true); $status = akismet_check_db_comment($comment_id, 'retry'); $msg = ''; if ($status == 'true') { $msg = __('Akismet caught this comment as spam during an automatic retry.'); } elseif ($status == 'false') { $msg = __('Akismet cleared this comment during an automatic retry.'); } // If we got back a legit response then update the comment history // other wise just bail now and try again later. No point in // re-trying all the comments once we hit one failure. if (!empty($msg)) { delete_comment_meta($comment_id, 'akismet_error'); akismet_update_comment_history($comment_id, $msg, 'cron-retry'); update_comment_meta($comment_id, 'akismet_result', $status); // make sure the comment status is still pending. if it isn't, that means the user has already moved it elsewhere. $comment = get_comment($comment_id); if ($comment && 'unapproved' == wp_get_comment_status($comment_id)) { if ($status == 'true') { wp_spam_comment($comment_id); } elseif ($status == 'false') { // comment is good, but it's still in the pending queue. depending on the moderation settings // we may need to change it to approved. if (check_comment($comment->comment_author, $comment->comment_author_email, $comment->comment_author_url, $comment->comment_content, $comment->comment_author_IP, $comment->comment_agent, $comment->comment_type)) { wp_set_comment_status($comment_id, 1); } } } } else { delete_comment_meta($comment_id, 'akismet_rechecking'); wp_schedule_single_event(time() + 1200, 'akismet_schedule_cron_recheck'); return; } delete_comment_meta($comment_id, 'akismet_rechecking'); } $remaining = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->commentmeta} WHERE meta_key = 'akismet_error'"); if ($remaining && !wp_next_scheduled('akismet_schedule_cron_recheck')) { wp_schedule_single_event(time() + 1200, 'akismet_schedule_cron_recheck'); } }
function wpcf7_akismet($spam) { global $akismet_api_host, $akismet_api_port; if (!function_exists('akismet_get_key') || !akismet_get_key()) { return false; } $akismet_ready = false; $author = $author_email = $author_url = $content = ''; $fes = wpcf7_scan_shortcode(); foreach ($fes as $fe) { if (!isset($fe['name']) || !is_array($fe['options'])) { continue; } if (preg_grep('%^akismet:author$%', $fe['options'])) { $author .= ' ' . $_POST[$fe['name']]; $author = trim($author); $akismet_ready = true; } if (preg_grep('%^akismet:author_email$%', $fe['options']) && '' == $author_email) { $author_email = trim($_POST[$fe['name']]); $akismet_ready = true; } if (preg_grep('%^akismet:author_url$%', $fe['options']) && '' == $author_url) { $author_url = trim($_POST[$fe['name']]); $akismet_ready = true; } if ('' != $content) { $content .= "\n\n"; } $content .= $_POST[$fe['name']]; } if (!$akismet_ready) { return false; } $c['blog'] = get_option('home'); $c['blog_lang'] = get_locale(); $c['blog_charset'] = get_option('blog_charset'); $c['user_ip'] = preg_replace('/[^0-9., ]/', '', $_SERVER['REMOTE_ADDR']); $c['user_agent'] = $_SERVER['HTTP_USER_AGENT']; $c['referrer'] = $_SERVER['HTTP_REFERER']; $c['comment_type'] = 'contactform7'; if ($permalink = get_permalink()) { $c['permalink'] = $permalink; } if ('' != $author) { $c['comment_author'] = $author; } if ('' != $author_email) { $c['comment_author_email'] = $author_email; } if ('' != $author_url) { $c['comment_author_url'] = $author_url; } if ('' != $content) { $c['comment_content'] = $content; } $ignore = array('HTTP_COOKIE', 'HTTP_COOKIE2', 'PHP_AUTH_PW'); foreach ($_SERVER as $key => $value) { if (!in_array($key, (array) $ignore)) { $c["{$key}"] = $value; } } $query_string = ''; foreach ($c as $key => $data) { $query_string .= $key . '=' . urlencode(stripslashes((string) $data)) . '&'; } $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port); if ('true' == $response[1]) { $spam = true; } return $spam; }
public function __actionWPAjaxContactForm() { if (!isset($this->features['contact-form'])) { exit; } $contact_form = $this->features['contact-form']; $options = $this->theme_options->child(array($contact_form['group'], $contact_form['name'])); $output = function ($result, $message) use($contact_form) { echo json_encode(array($contact_form['result_var'] => $result, $contact_form['message_var'] => $message)); exit; }; $values = array(); foreach ($options->value('fields') as $field) { $value = isset($_POST[$field]) ? trim(strip_tags($_POST[$field])) : ''; switch ($field) { case 'name': if (empty($value)) { $output(false, __('Please enter your name.', $this->domain)); } break; case 'email': if (!preg_match('/^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)+$/i', $value)) { $output(false, __('Invalid email address.', $this->domain)); } break; case 'website': if (!empty($value) && !preg_match('|^(https?://)?(www\\.)?([-_a-z0-9]+\\.)+[-_a-z0-9]+$|i', $value)) { $output(false, __('Invalid website address.', $this->domain)); } break; case 'phone': if (!empty($value) && !preg_match('/^[-_#\\+\\*\\(\\)0-9 ]+$/', $value)) { $output(false, __('Invalid phone number.', $this->domain)); } break; case 'message': if (strlen($value) < 3) { $output(false, __('Please write your message.', $this->domain)); } break; case 'captcha': if (function_exists('cptch_check_custom_form') && !cptch_check_custom_form()) { $output(false, __('Please complete the captcha.', $this->domain)); } break; } $values[$field] = $value; } $to = $options->value('to'); switch ($options->value('from')) { case 'to': $from = $to; break; case 'field': $from = $values['email']; break; default: $from = get_option('admin_email'); } $reply_to = $values['email']; $author = isset($values['name']) ? $values['name'] : ''; $subject = $options->value('subject'); $subject = str_replace(array('%blogname%', '%blogurl%'), array(get_bloginfo('name'), home_url()), $subject); $subject = preg_replace_callback('/%([a-z]+)%/i', function ($m) use($values) { return isset($values[$m[1]]) ? $values[$m[1]] : ''; }, $subject); $subject = wp_specialchars_decode(trim(str_replace(array("\r", "\n"), ' ', $subject))); $message = "{$values['message']}\r\n\r\n---\r\n" . implode("\r\n", array_intersect_key($values, array_flip(array_intersect($options->value('fields'), array('name', 'email', 'website', 'phone'))))); if ($options->child('settings')->value('akismet') && function_exists('akismet_get_key') && akismet_get_key()) { $comment = array('blog' => home_url(), 'blog_lang' => get_locale(), 'blog_charset' => get_option('blog_charset'), 'user_ip' => $_SERVER['REMOTE_ADDR'], 'user_agent' => $_SERVER['HTTP_USER_AGENT'], 'referrer' => $_SERVER['HTTP_REFERER'], 'comment_type' => 'contactform'); if (isset($values['name'])) { $comment['comment_author'] = $values['name']; } if (isset($values['email'])) { $comment['comment_author_email'] = $values['email']; } if (isset($values['comment_author_url'])) { $comment['comment_author_email'] = $values['website']; } if (isset($values['message'])) { $comment['comment_content'] = $values['message']; } foreach ($_SERVER as $key => $value) { if (!in_array($key, array('HTTP_COOKIE', 'HTTP_COOKIE2', 'PHP_AUTH_PW')) && is_string($value)) { $comment[$key] = $value; } else { $comment[$key] = ''; } } $query_string = Func::arraySerialize(array_map('stripslashes', $comment)); $response = akismet_http_post($query_string, $GLOBALS['akismet_api_host'], '/1.1/comment-check', $GLOBALS['akismet_api_port']); if ($response[1] == 'true') { $output(false, __('Your message is recognized as spam.', $this->domain)); } } $result = @wp_mail($to, $subject, $message, ($options->child('settings')->value('from_header') ? "From: \"{$author}\" <{$from}>\r\n" : '') . "Reply-to: {$reply_to}\r\n" . "Content-type: text/plain; charset=\"" . get_bloginfo('charset') . "\"\r\n"); if ($result) { $output(true, __('Message sent.', $this->domain)); } else { $output(false, __("Error occured. Message couldn't be sent.", $this->domain)); } }
function akismet_stats_display() { global $akismet_api_host, $akismet_api_port, $wpcom_api_key; $blog = urlencode(get_option('home')); $url = "http://" . akismet_get_key() . ".web.akismet.com/1.0/user-stats.php?blog={$blog}"; ?> <div class="wrap"> <iframe src="<?php echo $url; ?> " width="100%" height="100%" frameborder="0" id="akismet-stats-frame"></iframe> </div> <?php }
function digressit_live_spam_check_comment($comment) { global $akismet_api_host, $akismet_api_port; if (function_exists('akismet_verify_key')) { if (akismet_verify_key(akismet_get_key())) { $comment['user_ip'] = $_SERVER['REMOTE_ADDR']; $comment['user_agent'] = $_SERVER['HTTP_USER_AGENT']; $comment['referrer'] = $_SERVER['HTTP_REFERER']; $comment['blog'] = get_option('home'); $comment['blog_lang'] = get_locale(); $comment['blog_charset'] = get_option('blog_charset'); $comment['permalink'] = get_permalink($comment['comment_post_ID']); $comment['user_role'] = akismet_get_user_roles($comment['user_ID']); $ignore = array('HTTP_COOKIE'); foreach ($_SERVER as $key => $value) { if (!in_array($key, $ignore) && is_string($value)) { $comment["{$key}"] = $value; } } $query_string = ''; foreach ($comment as $key => $data) { $query_string .= $key . '=' . urlencode(stripslashes($data)) . '&'; } $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port); if ('true' == $response[1]) { return true; } return false; } } return false; }