From 21ff0c0931e42890be35281c0e60abd88b374152 Mon Sep 17 00:00:00 2001 From: AntonioTerceiro Date: Wed, 19 Dec 2007 20:54:51 +0000 Subject: [PATCH] ActionItem22: first implementation of comments --- app/controllers/public/content_viewer_controller.rb | 12 ++++++++++++ app/models/article.rb | 2 ++ app/views/content_viewer/_comment.rhtml | 7 +++++++ app/views/content_viewer/_comment_form.rhtml | 19 +++++++++++++++++++ app/views/content_viewer/view_page.rhtml | 4 ++++ test/functional/content_viewer_controller_test.rb | 31 ++++++++++++++++++++++++------- 6 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 app/views/content_viewer/_comment.rhtml create mode 100644 app/views/content_viewer/_comment_form.rhtml diff --git a/app/controllers/public/content_viewer_controller.rb b/app/controllers/public/content_viewer_controller.rb index 8bd6d12..e2f0914 100644 --- a/app/controllers/public/content_viewer_controller.rb +++ b/app/controllers/public/content_viewer_controller.rb @@ -9,13 +9,25 @@ class ContentViewerController < PublicController @page = profile.home_page if @page.nil? render :action => 'no_home_page' + return end else @page = profile.articles.find_by_path(path) if @page.nil? render_not_found(@path) + return end end + + if request.post? && params[:comment] + @comment = Comment.new(params[:comment]) + @comment.author = user if logged_in? + @comment.article = @page + if @comment.save! + @comment = nil # clear the comment form + end + end + @comments = @page.comments(true) end end diff --git a/app/models/article.rb b/app/models/article.rb index 9a4d259..71fec9d 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -7,6 +7,8 @@ class Article < ActiveRecord::Base belongs_to :last_changed_by, :class_name => Person.name, :foreign_key => 'last_changed_by_id' + has_many :comments + acts_as_taggable N_('Tag list') diff --git a/app/views/content_viewer/_comment.rhtml b/app/views/content_viewer/_comment.rhtml new file mode 100644 index 0000000..023f93c --- /dev/null +++ b/app/views/content_viewer/_comment.rhtml @@ -0,0 +1,7 @@ +
+

<%= comment.title %>

+
<%= _('By %{author} on %{date}') % { :author => (comment.author ? comment.author.identifier : comment.name), :date => comment.created_on } %>
+
+ <%= comment.body %> +
+
diff --git a/app/views/content_viewer/_comment_form.rhtml b/app/views/content_viewer/_comment_form.rhtml new file mode 100644 index 0000000..6e6e058 --- /dev/null +++ b/app/views/content_viewer/_comment_form.rhtml @@ -0,0 +1,19 @@ +

<%= _('Post a comment') %>

+ +<% form_tag do %> + + <% unless logged_in? %> + + <%= labelled_form_field(_('Name'), text_field(:comment, :name)) %> + <%= labelled_form_field(_('e-mail'), text_field(:comment, :email)) %> + +

+ <%= _('If you are a registered user, you can login and be automatically recognized.') %> +

+ + <% end %> + + <%= labelled_form_field(_('Title'), text_field(:comment, :title)) %> + <%= labelled_form_field(_('Enter your comment'), text_area(:comment, :body)) %> + <%= submit_tag _('Post comment') %> +<% end %> diff --git a/app/views/content_viewer/view_page.rhtml b/app/views/content_viewer/view_page.rhtml index 1d082a9..b6b13c5 100644 --- a/app/views/content_viewer/view_page.rhtml +++ b/app/views/content_viewer/view_page.rhtml @@ -24,3 +24,7 @@ <% end %> <% end %> --> + +

<%= @comments.size == 0 ? _('No comments yet') : (n_('One comment', '%{comments} comments', @comments.size)) % { :comments => @comments.size} %>

+<%= render :partial => 'comment', :collection => @comments %> +<%= render :partial => 'comment_form' %> diff --git a/test/functional/content_viewer_controller_test.rb b/test/functional/content_viewer_controller_test.rb index e919739..6d35e15 100644 --- a/test/functional/content_viewer_controller_test.rb +++ b/test/functional/content_viewer_controller_test.rb @@ -53,9 +53,6 @@ class ContentViewerControllerTest < Test::Unit::TestCase uses_host 'anhetegua.net' get :view_page, :profile => 'aprofile', :page => ['some_unexisting_page'] assert_response :missing - # This is an idea of instead of give an error search for the term -# assert_response :redirect -# assert_redirected_to :controller => 'search', :action => 'index' end def test_should_get_not_found_error_for_unexisting_profile @@ -63,10 +60,30 @@ class ContentViewerControllerTest < Test::Unit::TestCase uses_host 'anhetegua' get :view_page, :profile => 'some_unexisting_profile', :page => [] assert_response :missing - - # This is an idea of instead of give an error search for the term -# assert_response :redirect -# assert_redirected_to :controller => 'search', :action => 'index' end + def test_should_be_able_to_post_comment_while_authenticated + profile = create_user('popstar').person + page = profile.articles.build(:name => 'myarticle', :body => 'the body of the text') + page.save! + profile.home_page = page; profile.save! + + assert_difference Comment, :count do + login_as('ze') + post :view_page, :profile => 'popstar', :page => [ 'myarticle' ], :comment => { :title => 'crap!', :body => 'I think that this article is crap' } + end + end + + def test_should_be_able_to_post_comment_while_not_authenticated + profile = create_user('popstar').person + page = profile.articles.build(:name => 'myarticle', :body => 'the body of the text') + page.save! + profile.home_page = page; profile.save! + + assert_difference Comment, :count do + post :view_page, :profile => 'popstar', :page => [ 'myarticle' ], :comment => { :title => 'crap!', :body => 'I think that this article is crap', :name => 'Anonymous coward', :email => 'coward@anonymous.com' } + end + end + + end -- libgit2 0.21.2