/** * Function: create * Attempts to create a comment using the passed information. If a Defensio API key is present, it will check it. * * Parameters: * $author - The name of the commenter. * $email - The commenter's email. * $url - The commenter's website. * $body - The comment. * $post - The <Post> they're commenting on. * $type - The type of comment. Optional, used for trackbacks/pingbacks. */ static function create($author, $email, $url, $body, $post, $type = null) { if (!self::user_can($post->id) and !in_array($type, array("trackback", "pingback"))) { return; } $config = Config::current(); $route = Route::current(); $visitor = Visitor::current(); if (!$type) { $status = $post->user_id == $visitor->id ? "approved" : $config->default_comment_status; $type = "comment"; } else { $status = $type; } if (!empty($config->defensio_api_key)) { $comment = array("user-ip" => $_SERVER['REMOTE_ADDR'], "article-date" => when("Y/m/d", $post->created_at), "comment-author" => $author, "comment-type" => $type, "comment-content" => $body, "comment-author-email" => $email, "comment-author-url" => $url, "permalink" => $post->url(), "referrer" => $_SERVER['HTTP_REFERER'], "user-logged-in" => logged_in()); $defensio = new Defensio($config->url, $config->defensio_api_key); list($spam, $spaminess, $signature) = $defensio->auditComment($comment); if ($spam) { self::add($body, $author, $url, $email, $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT'], "spam", $signature, null, null, $post, $visitor->id); error(__("Spam Comment"), __("Your comment has been marked as spam. It will have to be approved before it will show up.", "comments")); } else { $comment = self::add($body, $author, $url, $email, $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT'], $status, $signature, null, null, $post, $visitor->id); fallback($_SESSION['comments'], array()); $_SESSION['comments'][] = $comment->id; if (isset($_POST['ajax'])) { exit("{ comment_id: " . $comment->id . ", comment_timestamp: \"" . $comment->created_at . "\" }"); } Flash::notice(__("Comment added."), $post->url() . "#comment_" . $comment->id); } } else { $comment = self::add($body, $author, $url, $email, $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT'], $status, "", null, null, $post, $visitor->id); fallback($_SESSION['comments'], array()); $_SESSION['comments'][] = $comment->id; if (isset($_POST['ajax'])) { exit("{ comment_id: " . $comment->id . ", comment_timestamp: \"" . $comment->created_at . "\" }"); } Flash::notice(__("Comment added."), $post->url() . "#comment_" . $comment->id); } }