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