diff options
Diffstat (limited to 'app/controllers')
| -rw-r--r-- | app/controllers/comments_controller.rb | 59 |
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 @@ | |||
| 1 | class 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 | ||
| 59 | end | ||
