Commit f688afe0c4746433a8d54ff84587ae99a5aa7b3b
1 parent
90f24f9a
Exists in
master
and in
29 other branches
ActionItem568: owner can destroy community
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2295 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
6 changed files
with
87 additions
and
4 deletions
Show diff stats
app/controllers/my_profile/memberships_controller.rb
@@ -33,4 +33,14 @@ class MembershipsController < MyProfileController | @@ -33,4 +33,14 @@ class MembershipsController < MyProfileController | ||
33 | end | 33 | end |
34 | end | 34 | end |
35 | 35 | ||
36 | + def destroy_community | ||
37 | + @community = Community.find(params[:id]) | ||
38 | + if request.post? | ||
39 | + if @community.destroy | ||
40 | + flash[:notice] = _('%s was destroyed!') % @community.display_name | ||
41 | + redirect_to :action => 'index' | ||
42 | + end | ||
43 | + end | ||
44 | + end | ||
45 | + | ||
36 | end | 46 | end |
@@ -0,0 +1,9 @@ | @@ -0,0 +1,9 @@ | ||
1 | +<h1><%= _('Destroy %s') % @community.display_name %></h1> | ||
2 | + | ||
3 | +<p><strong><%= _('Are you sure you want to destroy %s?') % @community.display_name %></strong></p> | ||
4 | + | ||
5 | +<% form_tag do %> | ||
6 | + <%= hidden_field_tag(:confirmation, 1) %> | ||
7 | + <%= submit_button(:ok, _("Yes, I want to destroy.") % @community.display_name) %> | ||
8 | + <%= button(:cancel, _("No, I don't want."), :action => 'index') %> | ||
9 | +<% end %> |
app/views/memberships/index.rhtml
@@ -12,13 +12,13 @@ | @@ -12,13 +12,13 @@ | ||
12 | <strong><%= membership.display_name %></strong><br/> | 12 | <strong><%= membership.display_name %></strong><br/> |
13 | <%= _('Role: %s') % rolename_for(profile, membership) %> <br/> | 13 | <%= _('Role: %s') % rolename_for(profile, membership) %> <br/> |
14 | <%= _('Type: %s') % _(membership.class.name) %> <br/> | 14 | <%= _('Type: %s') % _(membership.class.name) %> <br/> |
15 | - <%= _('Description: %s') % membership.description + '<br/>' if membership.kind_of?(Community) %> | 15 | + <%= _('Description: %s') % membership.description + '<br/>' if membership.community? %> |
16 | <%= _('Members: %s') % membership.members.size.to_s %> <br/> | 16 | <%= _('Members: %s') % membership.members.size.to_s %> <br/> |
17 | <%= _('Created at: %s') % show_date(membership.created_at) %> <br/> | 17 | <%= _('Created at: %s') % show_date(membership.created_at) %> <br/> |
18 | <%= [ link_to(_('Manage'), membership.admin_url), | 18 | <%= [ link_to(_('Manage'), membership.admin_url), |
19 | - link_to(_('Leave'), { :profile => profile.identifier, :controller => 'memberships', :action => 'leave', :id => membership.id }), | ||
20 | - link_to(_('Destroy'), { :profile => profile.identifier, :controller => 'memberships', :action => 'destroy', :id => membership.id }) | ||
21 | - ].join(', ') | 19 | + link_to(_('Leave'), { :profile => profile.identifier, :controller => 'memberships', :action => 'leave', :id => membership }), |
20 | + (membership.community? && user.has_permission?(:destroy_profile, membership) ? link_to(_('Destroy'), { :action => 'destroy_community', :id => membership }) : nil) | ||
21 | + ].compact.join(', ') | ||
22 | %> | 22 | %> |
23 | </span> | 23 | </span> |
24 | </li> | 24 | </li> |
test/fixtures/roles.yml
@@ -36,6 +36,7 @@ profile_admin: | @@ -36,6 +36,7 @@ profile_admin: | ||
36 | permissions: | 36 | permissions: |
37 | - edit_profile_design | 37 | - edit_profile_design |
38 | - moderate_comments | 38 | - moderate_comments |
39 | + - destroy_profile | ||
39 | profile_member: | 40 | profile_member: |
40 | id: 6 | 41 | id: 6 |
41 | key: 'profile_member' | 42 | key: 'profile_member' |
test/functional/memberships_controller_test.rb
@@ -171,4 +171,48 @@ class MembershipsControllerTest < Test::Unit::TestCase | @@ -171,4 +171,48 @@ class MembershipsControllerTest < Test::Unit::TestCase | ||
171 | assert_tag :tag => 'a', :content => 'Register a new Enterprise' | 171 | assert_tag :tag => 'a', :content => 'Register a new Enterprise' |
172 | end | 172 | end |
173 | 173 | ||
174 | + should 'render destroy_community template' do | ||
175 | + community = Community.create!(:name => 'A community to destroy') | ||
176 | + get :destroy_community, :profile => 'testuser', :id => community.id | ||
177 | + assert_template 'destroy_community' | ||
178 | + end | ||
179 | + | ||
180 | + should 'display destroy link only to communities' do | ||
181 | + community = Community.create!(:name => 'A community to destroy') | ||
182 | + enterprise = Enterprise.create!(:name => 'A enterprise test', :identifier => 'enterprise-test') | ||
183 | + | ||
184 | + person = Person['testuser'] | ||
185 | + community.add_admin(person) | ||
186 | + enterprise.add_admin(person) | ||
187 | + | ||
188 | + get :index, :profile => 'testuser' | ||
189 | + | ||
190 | + assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testuser/memberships/destroy_community/#{community.id}" } | ||
191 | + assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/testuser/memberships/destroy_community/#{enterprise.id}" } | ||
192 | + end | ||
193 | + | ||
194 | + should 'be able to destroy communities' do | ||
195 | + community = Community.create!(:name => 'A community to destroy') | ||
196 | + | ||
197 | + person = Person['testuser'] | ||
198 | + community.add_admin(person) | ||
199 | + | ||
200 | + assert_difference Community, :count, -1 do | ||
201 | + post :destroy_community, :profile => 'testuser', :id => community.id | ||
202 | + end | ||
203 | + end | ||
204 | + | ||
205 | + should 'not display destroy link to normal members' do | ||
206 | + community = Community.create!(:name => 'A community to destroy') | ||
207 | + | ||
208 | + person = Person['testuser'] | ||
209 | + community.add_member(person) | ||
210 | + | ||
211 | + login_as('testuser') | ||
212 | + get :index, :profile => 'testuser' | ||
213 | + | ||
214 | + assert_template 'index' | ||
215 | + assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/testuser/memberships/destroy_community/#{community.id}" } | ||
216 | + end | ||
217 | + | ||
174 | end | 218 | end |
test/unit/community_test.rb
@@ -64,4 +64,23 @@ class CommunityTest < Test::Unit::TestCase | @@ -64,4 +64,23 @@ class CommunityTest < Test::Unit::TestCase | ||
64 | assert_not_includes c.members, p | 64 | assert_not_includes c.members, p |
65 | end | 65 | end |
66 | 66 | ||
67 | + should 'clear relationships after destroy' do | ||
68 | + c = Community.create!(:name => 'my test profile', :identifier => 'mytestprofile') | ||
69 | + member = create_user('memberuser').person | ||
70 | + admin = create_user('adminuser').person | ||
71 | + moderator = create_user('moderatoruser').person | ||
72 | + | ||
73 | + c.add_member(member) | ||
74 | + c.add_admin(admin) | ||
75 | + c.add_moderator(moderator) | ||
76 | + | ||
77 | + relationships = c.role_assignments | ||
78 | + assert_not_nil relationships | ||
79 | + | ||
80 | + c.destroy | ||
81 | + relationships.each do |i| | ||
82 | + assert !RoleAssignment.exists?(i.id) | ||
83 | + end | ||
84 | + end | ||
85 | + | ||
67 | end | 86 | end |