Commit d75fce5ece8bc97b8d57ffb866d51b4dd9820f9d
1 parent
1d62da97
Exists in
master
and in
28 other branches
ActionItem219: able users to delete comments in his articles
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1583 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
5 changed files
with
83 additions
and
32 deletions
Show diff stats
app/controllers/public/content_viewer_controller.rb
@@ -33,14 +33,33 @@ class ContentViewerController < PublicController | @@ -33,14 +33,33 @@ class ContentViewerController < PublicController | ||
33 | end | 33 | end |
34 | 34 | ||
35 | if request.post? && params[:comment] | 35 | if request.post? && params[:comment] |
36 | - @comment = Comment.new(params[:comment]) | ||
37 | - @comment.author = user if logged_in? | ||
38 | - @comment.article = @page | ||
39 | - if @comment.save! | ||
40 | - @comment = nil # clear the comment form | ||
41 | - end | 36 | + add_comment |
37 | + end | ||
38 | + | ||
39 | + if request.post? && params[:remove_comment] | ||
40 | + remove_comment | ||
42 | end | 41 | end |
42 | + | ||
43 | @comments = @page.comments(true) | 43 | @comments = @page.comments(true) |
44 | end | 44 | end |
45 | 45 | ||
46 | + protected | ||
47 | + | ||
48 | + def add_comment | ||
49 | + @comment = Comment.new(params[:comment]) | ||
50 | + @comment.author = user if logged_in? | ||
51 | + @comment.article = @page | ||
52 | + if @comment.save! | ||
53 | + @comment = nil # clear the comment form | ||
54 | + end | ||
55 | + end | ||
56 | + | ||
57 | + def remove_comment | ||
58 | + @comment = @page.comments.find(params[:remove_comment]) | ||
59 | + if (user == @comment.author) || (user == @page.profile) | ||
60 | + @comment.destroy | ||
61 | + end | ||
62 | + redirect_to :action => 'view_page' | ||
63 | + end | ||
64 | + | ||
46 | end | 65 | end |
app/helpers/cms_helper.rb
@@ -33,7 +33,8 @@ module CmsHelper | @@ -33,7 +33,8 @@ module CmsHelper | ||
33 | if cat.top_level? | 33 | if cat.top_level? |
34 | result << content_tag('h5', toplevel.name) | 34 | result << content_tag('h5', toplevel.name) |
35 | else | 35 | else |
36 | - result << content_tag('div', check_box_tag("#{object_name}[category_ids][]", cat.id, object.category_ids.include?(cat.id)) + cat.full_name_without_leading(1)) | 36 | + checkbox_id = "#{object_name}_#{cat.full_name.downcase.gsub(/\s+|\//, '_')}" |
37 | + result << content_tag('label', check_box_tag("#{object_name}[category_ids][]", cat.id, object.category_ids.include?(cat.id), :id => checkbox_id) + cat.full_name_without_leading(1), :for => checkbox_id) | ||
37 | end | 38 | end |
38 | end | 39 | end |
39 | end | 40 | end |
app/views/content_viewer/_comment.rhtml
1 | <div class="article-comment<%= ' comment-from-owner' if ( comment.author && (@page.profile.name == comment.author.name) ) %> comment-logged-<%= comment.author ? 'in' : 'out' %>"> | 1 | <div class="article-comment<%= ' comment-from-owner' if ( comment.author && (@page.profile.name == comment.author.name) ) %> comment-logged-<%= comment.author ? 'in' : 'out' %>"> |
2 | + <% if user == @page.profile || user == comment.author %> | ||
3 | + <% button_bar(:style => 'float: right; margin-top: 0;') do %> | ||
4 | + <%= button(:delete, 'Delete', { :remove_comment => comment.id }, :method => :post, :confirm => _('Are you sure you want to remove this comment?')) %> | ||
5 | + <% end %> | ||
6 | + <% end %> | ||
7 | + | ||
2 | <% if comment.author %> | 8 | <% if comment.author %> |
3 | <%= link_to content_tag( 'span', comment.author.name() ), comment.author.url, | 9 | <%= link_to content_tag( 'span', comment.author.name() ), comment.author.url, |
4 | :class => 'comment-picture', | 10 | :class => 'comment-picture', |
script/populate
@@ -1,24 +0,0 @@ | @@ -1,24 +0,0 @@ | ||
1 | -#!/usr/bin/env ruby | ||
2 | -require File.dirname(__FILE__) + '/../config/environment' | ||
3 | - | ||
4 | -Profile.destroy_all | ||
5 | - | ||
6 | -User.destroy_all | ||
7 | -User.create!(:login => 'testprofile', :email => 'admin@localhost.localdomain', :password => 'test', :password_confirmation => 'test') | ||
8 | -User.create!(:login => 'user', :email => 'user@localhost.localdomain', :password => 'user', :password_confirmation => 'user') | ||
9 | -User.create!(:login => 'usuario', :email => 'usuario@localhost.localdomain', :password => 'usuario', :password_confirmation => 'usuario') | ||
10 | -ze = User.create!(:login => 'ze', :email => 'ze@localhost.localdomain', :password => 'test', :password_confirmation => 'test').person | ||
11 | -root = User.create!(:login => 'root', :email => 'root@noosfero.org', :password => 'root', :password_confirmation => 'root').person | ||
12 | - | ||
13 | -Role.destroy_all | ||
14 | -admin_role = Role.create!(:name => 'admin', :permissions => ['edit_environment_features', 'edit_environment_design', 'manage_environment_categories', 'manage_environment_roles', 'manage_environment_validators']) | ||
15 | - | ||
16 | -RoleAssignment.create!(:accessor => root, :role => admin_role, :resource => nil) | ||
17 | - | ||
18 | -empa = Enterprise.create!(:name => 'Empreendimento A', :identifier => 'empreendimento_a') | ||
19 | - | ||
20 | -owner_role = Role.create!(:name => 'owner', :permissions => ['edit_profile', 'destroy_profile', 'manage_memberships', 'post_content', 'edit_profile_design']) | ||
21 | - | ||
22 | -RoleAssignment.create!(:accessor => ze, :role => owner_role, :resource => empa) | ||
23 | -RoleAssignment.create!(:accessor => root, :role => owner_role, :resource => Environmnet.default) if Environmnet.default | ||
24 | - |
test/functional/content_viewer_controller_test.rb
@@ -90,7 +90,7 @@ class ContentViewerControllerTest < Test::Unit::TestCase | @@ -90,7 +90,7 @@ class ContentViewerControllerTest < Test::Unit::TestCase | ||
90 | # for example, RSS feeds | 90 | # for example, RSS feeds |
91 | profile = create_user('someone').person | 91 | profile = create_user('someone').person |
92 | page = profile.articles.build(:name => 'myarticle', :body => 'the body of the text') | 92 | page = profile.articles.build(:name => 'myarticle', :body => 'the body of the text') |
93 | - page.save! | 93 | +page.save! |
94 | 94 | ||
95 | feed = RssFeed.new(:name => 'testfeed') | 95 | feed = RssFeed.new(:name => 'testfeed') |
96 | feed.profile = profile | 96 | feed.profile = profile |
@@ -104,5 +104,54 @@ class ContentViewerControllerTest < Test::Unit::TestCase | @@ -104,5 +104,54 @@ class ContentViewerControllerTest < Test::Unit::TestCase | ||
104 | assert_equal feed.data, @response.body | 104 | assert_equal feed.data, @response.body |
105 | end | 105 | end |
106 | 106 | ||
107 | + should 'be able to remove comment' do | ||
108 | + profile = create_user('testuser').person | ||
109 | + article = profile.articles.build(:name => 'test') | ||
110 | + article.save! | ||
111 | + comment = article.comments.build(:author => profile, :title => 'a comment', :body => 'lalala') | ||
112 | + comment.save! | ||
113 | + | ||
114 | + login_as 'testuser' | ||
115 | + assert_difference Comment, :count, -1 do | ||
116 | + post :view_page, :profile => profile.identifier, :page => [ 'test' ], :remove_comment => comment.id | ||
117 | + assert_response :redirect | ||
118 | + end | ||
119 | + | ||
120 | + end | ||
121 | + | ||
122 | + should "not be able to remove other people's comments" do | ||
123 | + profile = create_user('testuser').person | ||
124 | + article = profile.articles.build(:name => 'test') | ||
125 | + article.save! | ||
126 | + | ||
127 | + commenter = create_user('otheruser').person | ||
128 | + comment = article.comments.build(:author => commenter, :title => 'a comment', :body => 'lalala') | ||
129 | + comment.save! | ||
130 | + | ||
131 | + login_as 'ze' # ze cannot remove other people's comments | ||
132 | + assert_no_difference Comment, :count do | ||
133 | + post :view_page, :profile => profile.identifier, :page => [ 'test' ], :remove_comment => comment.id | ||
134 | + assert_response :redirect | ||
135 | + end | ||
136 | + | ||
137 | + end | ||
138 | + | ||
139 | + should 'be able to remove comments on their articles' do | ||
140 | + profile = create_user('testuser').person | ||
141 | + article = profile.articles.build(:name => 'test') | ||
142 | + article.save! | ||
143 | + | ||
144 | + commenter = create_user('otheruser').person | ||
145 | + comment = article.comments.build(:author => commenter, :title => 'a comment', :body => 'lalala') | ||
146 | + comment.save! | ||
147 | + | ||
148 | + login_as 'testuser' # testuser must be able to remove comments in his articles | ||
149 | + assert_difference Comment, :count, -1 do | ||
150 | + post :view_page, :profile => profile.identifier, :page => [ 'test' ], :remove_comment => comment.id | ||
151 | + assert_response :redirect | ||
152 | + end | ||
153 | + | ||
154 | + end | ||
155 | + | ||
107 | 156 | ||
108 | end | 157 | end |