Commit 1217170da52e81246c6d42b4cbd6de5fa55ce7ec
1 parent
2c68eefb
Exists in
master
and in
29 other branches
Fixed problems with members_of on postgres
Reverted Profile.members_of definition Added a members_count method (ActionItem1400)
Showing
7 changed files
with
39 additions
and
9 deletions
Show diff stats
app/models/person.rb
... | ... | @@ -4,7 +4,7 @@ class Person < Profile |
4 | 4 | acts_as_trackable :after_add => Proc.new {|p,t| notify_activity(t)} |
5 | 5 | acts_as_accessor |
6 | 6 | |
7 | - named_scope :members_of, lambda { |resource| { :select => 'DISTINCT profiles.*', :include => :role_assignments, :group => 'profiles.id', :conditions => ['role_assignments.resource_type = ? AND role_assignments.resource_id = ?', resource.class.base_class.name, resource.id ] } } | |
7 | + named_scope :members_of, lambda { |resource| { :select => 'DISTINCT profiles.*', :joins => :role_assignments, :conditions => ['role_assignments.resource_type = ? AND role_assignments.resource_id = ?', resource.class.base_class.name, resource.id ] } } | |
8 | 8 | |
9 | 9 | def memberships |
10 | 10 | Profile.memberships_of(self) | ... | ... |
app/models/profile.rb
... | ... | @@ -59,6 +59,10 @@ class Profile < ActiveRecord::Base |
59 | 59 | Person.members_of(self) |
60 | 60 | end |
61 | 61 | |
62 | + def members_count | |
63 | + members.count('DISTINCT(profiles.id)') | |
64 | + end | |
65 | + | |
62 | 66 | def members_by_role(role) |
63 | 67 | Person.members_of(self).all(:conditions => ['role_assignments.role_id = ?', role.id]) |
64 | 68 | end |
... | ... | @@ -563,10 +567,10 @@ private :generate_url, :url_options |
563 | 567 | # Adds a person as member of this Profile. |
564 | 568 | def add_member(person) |
565 | 569 | if self.has_members? |
566 | - if self.closed? && members.count > 0 | |
570 | + if self.closed? && members_count > 0 | |
567 | 571 | AddMember.create!(:person => person, :organization => self) unless self.already_request_membership?(person) |
568 | 572 | else |
569 | - if members.count == 0 | |
573 | + if members_count == 0 | |
570 | 574 | self.affiliate(person, Profile::Roles.admin(environment.id)) |
571 | 575 | end |
572 | 576 | self.affiliate(person, Profile::Roles.member(environment.id)) |
... | ... | @@ -783,7 +787,7 @@ private :generate_url, :url_options |
783 | 787 | end |
784 | 788 | |
785 | 789 | def more_popular_label |
786 | - amount = self.members.count | |
790 | + amount = self.members_count | |
787 | 791 | { |
788 | 792 | 0 => _('none'), |
789 | 793 | 1 => _('one member') | ... | ... |
app/views/profile/_organization_profile.rhtml
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 | <tr> |
7 | 7 | <td class='field-name'><%= _('Members') %></td> |
8 | 8 | <td> |
9 | - <%= link_to profile.members.count, :controller => 'profile', :action => 'members' %> | |
9 | + <%= link_to profile.members_count, :controller => 'profile', :action => 'members' %> | |
10 | 10 | </td> |
11 | 11 | </tr> |
12 | 12 | ... | ... |
app/views/profile_members/last_admin.rhtml
1 | 1 | <h1><%= _('Last administrator leaving %s') % profile.name %></h1> |
2 | 2 | |
3 | -<% if profile.members.count > 1 %> | |
3 | +<% if profile.members_count > 1 %> | |
4 | 4 | <div id='last-admin-message'> |
5 | 5 | <%= _('Since you are the last administrator, you must choose at least one member to administer this community.') % profile.name %> |
6 | 6 | </div> | ... | ... |
features/last_administrator_leaving.feature
... | ... | @@ -11,13 +11,22 @@ Feature: remove administrator role |
11 | 11 | And the following community |
12 | 12 | | name | identifier | |
13 | 13 | | Nice people | nice-people | |
14 | - And "Joao Silva" is admin of "Nice people" | |
14 | + And "Joao Silva" is a member of "Nice people" | |
15 | 15 | And I am logged in as "joaosilva" |
16 | 16 | |
17 | + Scenario: the last administrator removes his administrator role and must choose the new administrator | |
18 | + Given "Maria Souza" is a member of "Nice people" | |
19 | + And I am on Nice people's members management | |
20 | + And I follow "Edit" | |
21 | + And I uncheck "Profile Administrator" | |
22 | + When I press "Save changes" | |
23 | + Then I should see "Since you are the last administrator, you must choose" | |
24 | + | |
17 | 25 | Scenario: the last administrator and member removes his administrator role and the next member to join becomes the new administrator |
18 | 26 | Given I am on Nice people's members management |
19 | 27 | And I follow "Edit" |
20 | 28 | And I uncheck "Profile Administrator" |
29 | + And I uncheck "Profile Member" | |
21 | 30 | When I press "Save changes" |
22 | 31 | Then I should see "Since you are the last administrator and there is no other member in this community" |
23 | 32 | And I press "Ok, I want to leave" |
... | ... | @@ -30,6 +39,7 @@ Feature: remove administrator role |
30 | 39 | And I am on Nice people's members management |
31 | 40 | And I follow "Edit" |
32 | 41 | And I uncheck "Profile Administrator" |
42 | + And I uncheck "Profile Member" | |
33 | 43 | When I press "Save changes" |
34 | 44 | Then I should see "Since you are the last administrator and there is no other member in this community" |
35 | 45 | And I press "Ok, I want to leave" | ... | ... |
test/unit/person_test.rb
test/unit/profile_test.rb
... | ... | @@ -1743,7 +1743,7 @@ class ProfileTest < Test::Unit::TestCase |
1743 | 1743 | |
1744 | 1744 | should "return none on label if the profile hasn't members" do |
1745 | 1745 | p = fast_create(Profile) |
1746 | - assert_equal 0, p.members.count | |
1746 | + assert_equal 0, p.members_count | |
1747 | 1747 | assert_equal "none", p.more_popular_label |
1748 | 1748 | end |
1749 | 1749 | |
... | ... | @@ -1817,6 +1817,22 @@ class ProfileTest < Test::Unit::TestCase |
1817 | 1817 | assert_equal 3, p.forums.count |
1818 | 1818 | end |
1819 | 1819 | |
1820 | + should 'return unique members of a community' do | |
1821 | + person = fast_create(Person) | |
1822 | + community = fast_create(Community) | |
1823 | + community.add_member(person) | |
1824 | + | |
1825 | + assert_equal [person], community.members | |
1826 | + end | |
1827 | + | |
1828 | + should 'count unique members of a community' do | |
1829 | + person = fast_create(Person) | |
1830 | + community = fast_create(Community) | |
1831 | + community.add_member(person) | |
1832 | + | |
1833 | + assert_equal 1, community.members_count | |
1834 | + end | |
1835 | + | |
1820 | 1836 | private |
1821 | 1837 | |
1822 | 1838 | def assert_invalid_identifier(id) | ... | ... |