about summary refs log tree commit diff stats
path: root/app/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/comments_controller.rb59
1 files changed, 59 insertions, 0 deletions
diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb new file mode 100644 index 0000000..60c8f6a --- /dev/null +++ b/app/controllers/comments_controller.rb
@@ -0,0 +1,59 @@
1class CommentsController < ApplicationController
2 def create
3 @blog = Blog.find_by_slug(params[:slug])
4
5 raise ActiveRecord::RecordNotFound unless @blog
6 raise ActiveRecord::RecordNotFound unless @blog.published
7
8 @comment = @blog.comments.new(comment_params)
9
10 unless @comment.valid?
11 flash.alert = "Error posting comment."
12 render "blogs/show"
13 return
14 end
15
16 akismet_vars = %w{ HTTP_ACCEPT HTTP_ACCEPT_ENCODING }
17 akismet_params = {
18 type: "comment",
19 text: @comment.body,
20 created_at: DateTime.now,
21 author: @comment.username,
22 author_email: @comment.email,
23 author_url: @comment.website,
24 post_url: url_for(@comment.blog),
25 post_modified_at: @comment.blog.updated_at,
26 referrer: request.referrer,
27 env: request.env.slice(*akismet_vars)
28 }
29
30 is_spam, is_blatant = Akismet.check(request.ip, request.user_agent, akismet_params)
31
32 if is_blatant
33 # I am lying.
34 flash.notice = "Comment submitted successfully! It will need to be moderated before it shows up on the blog."
35 else
36 if is_spam
37 @comment.status = :pending
38 flash_message = "Comment submitted successfully! It will need to be moderated before it shows up on the blog."
39 else
40 @comment.status = :published
41 flash_message = "Comment posted successfully!"
42 end
43
44 if @comment.save
45 flash.notice = flash_message
46 else
47 flash.alert = "Error posting comment."
48 end
49 end
50
51 redirect_to @comment.blog
52 end
53
54 private
55
56 def comment_params
57 params.require(:comment).permit(:username, :email, :website, :body)
58 end
59end