Commit f947ef5a84ff10cee85af89383928db59c7a427e
1 parent
44acf4c2
Exists in
master
and in
29 other branches
ActionItem5: functionality of affiliaton replaced by roles assignments
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@495 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
11 changed files
with
72 additions
and
74 deletions
Show diff stats
app/controllers/profile_admin/enterprise_controller.rb
@@ -5,8 +5,8 @@ class EnterpriseController < ProfileAdminController | @@ -5,8 +5,8 @@ class EnterpriseController < ProfileAdminController | ||
5 | 5 | ||
6 | # Redirects to show if there is only one action and to list otherwise | 6 | # Redirects to show if there is only one action and to list otherwise |
7 | def index | 7 | def index |
8 | - if @my_enterprises.size == 1 | ||
9 | - redirect_to :action => 'show', :id => @my_enterprises[0] | 8 | + if @person.enterprises.size == 1 |
9 | + redirect_to :action => 'show', :id => @person.enterprises[0] | ||
10 | else | 10 | else |
11 | redirect_to :action => 'list' | 11 | redirect_to :action => 'list' |
12 | end | 12 | end |
@@ -14,12 +14,12 @@ class EnterpriseController < ProfileAdminController | @@ -14,12 +14,12 @@ class EnterpriseController < ProfileAdminController | ||
14 | 14 | ||
15 | # Lists all enterprises | 15 | # Lists all enterprises |
16 | def list | 16 | def list |
17 | - @enterprises = Enterprise.find(:all) - @my_enterprises | 17 | + @enterprises = Enterprise.find(:all) - @person.enterprises |
18 | end | 18 | end |
19 | 19 | ||
20 | # Show details about an enterprise | 20 | # Show details about an enterprise |
21 | def show | 21 | def show |
22 | - @enterprise = @my_enterprises.find(params[:id]) | 22 | + @enterprise = Enterprise.find(params[:id]) |
23 | end | 23 | end |
24 | 24 | ||
25 | # Make a form to the creation of an eterprise | 25 | # Make a form to the creation of an eterprise |
@@ -47,13 +47,13 @@ class EnterpriseController < ProfileAdminController | @@ -47,13 +47,13 @@ class EnterpriseController < ProfileAdminController | ||
47 | 47 | ||
48 | # Provides an interface to editing the enterprise details | 48 | # Provides an interface to editing the enterprise details |
49 | def edit | 49 | def edit |
50 | - @enterprise = @my_enterprises.find(params[:id]) | 50 | + @enterprise = @person.enterprises(:id => params[:id])[0] |
51 | @validation_entities = Organization.find(:all) - [@enterprise] | 51 | @validation_entities = Organization.find(:all) - [@enterprise] |
52 | end | 52 | end |
53 | 53 | ||
54 | # Saves the changes made in an enterprise | 54 | # Saves the changes made in an enterprise |
55 | def update | 55 | def update |
56 | - @enterprise = @my_enterprises.find(params[:id]) | 56 | + @enterprise = @person.enterprises(:id => params[:id])[0] |
57 | if @enterprise.update_attributes(params[:enterprise]) && @enterprise.organization_info.update_attributes(params[:organization_info]) | 57 | if @enterprise.update_attributes(params[:enterprise]) && @enterprise.organization_info.update_attributes(params[:organization_info]) |
58 | redirect_to :action => 'index' | 58 | redirect_to :action => 'index' |
59 | else | 59 | else |
@@ -66,13 +66,14 @@ class EnterpriseController < ProfileAdminController | @@ -66,13 +66,14 @@ class EnterpriseController < ProfileAdminController | ||
66 | # Make the current user a new member of the enterprise | 66 | # Make the current user a new member of the enterprise |
67 | def affiliate | 67 | def affiliate |
68 | @enterprise = Enterprise.find(params[:id]) | 68 | @enterprise = Enterprise.find(params[:id]) |
69 | - @enterprise.people << @person | 69 | + member_role = Role.find_by_name('member') || Role.create(:name => 'member') |
70 | + @enterprise.affiliate(@person,member_role) | ||
70 | redirect_to :action => 'index' | 71 | redirect_to :action => 'index' |
71 | end | 72 | end |
72 | 73 | ||
73 | # Elimitates the enterprise of the system | 74 | # Elimitates the enterprise of the system |
74 | def destroy | 75 | def destroy |
75 | - @enterprise = @my_enterprises.find(params[:id]) | 76 | + @enterprise = @person.enterprises(:id => params[:id])[0] |
76 | if @enterprise | 77 | if @enterprise |
77 | @enterprise.destroy | 78 | @enterprise.destroy |
78 | else | 79 | else |
app/models/affiliation.rb
app/models/person.rb
1 | # A person is the profile of an user holding all relationships with the rest of the system | 1 | # A person is the profile of an user holding all relationships with the rest of the system |
2 | class Person < Profile | 2 | class Person < Profile |
3 | - ENTERPRISE = {:class_name => 'Enterprise', :through => :affiliations, :foreign_key => 'person_id', :source => 'profile'} | ||
4 | - | ||
5 | belongs_to :user | 3 | belongs_to :user |
6 | - has_many :affiliations, :dependent => :destroy | ||
7 | - has_many :profiles, :through => :affiliations | ||
8 | - has_many :enterprises, ENTERPRISE | ||
9 | - has_many :pending_enterprises, ENTERPRISE.merge(:conditions => ['active = ?', false]) | ||
10 | - has_many :active_enterprises, ENTERPRISE.merge(:conditions => ['active = ?', true]) | ||
11 | - has_many :friendships | ||
12 | - has_many :friends, :class_name => 'Person', :through => :friendships | ||
13 | - has_many :person_friendships | ||
14 | - has_many :people, :through => :person_friendships, :foreign_key => 'friend_id' | 4 | + |
5 | +# has_many :friendships | ||
6 | +# has_many :friends, :class_name => 'Person', :through => :friendships | ||
7 | +# has_many :person_friendships | ||
8 | +# has_many :people, :through => :person_friendships, :foreign_key => 'friend_id' | ||
9 | + | ||
15 | has_one :person_info | 10 | has_one :person_info |
16 | 11 | ||
17 | has_many :role_assignments | 12 | has_many :role_assignments |
13 | + has_many :memberships, :through => :role_assignments, :source => 'resource', :class_name => 'Enterprise' | ||
18 | 14 | ||
19 | def has_permission?(perm, res=nil) | 15 | def has_permission?(perm, res=nil) |
20 | role_assignments.any? {|ra| ra.has_permission?(perm, res)} | 16 | role_assignments.any? {|ra| ra.has_permission?(perm, res)} |
21 | end | 17 | end |
22 | 18 | ||
19 | + def self.conditions_for_profiles(conditions, person) | ||
20 | + new_conditions = sanitize_sql(['role_assignments.person_id = ?', person]) | ||
21 | + new_conditions << ' AND ' + sanitize_sql(conditions) unless conditions.blank? | ||
22 | + new_conditions | ||
23 | + end | ||
24 | + | ||
25 | + def profiles(conditions = {}) | ||
26 | + Profile.find( | ||
27 | + :all, | ||
28 | + :conditions => self.class.conditions_for_profiles(conditions, self), | ||
29 | + :joins => "LEFT JOIN role_assignments ON profiles.id = role_assignments.resource_id AND role_assignments.resource_type = \"#{Profile.base_class.name}\"", | ||
30 | + :select => 'profiles.*') | ||
31 | + end | ||
32 | + | ||
33 | + | ||
34 | + def enterprises(conditions = {}) | ||
35 | + profiles( ({:type => 'Enterprise'}).merge(conditions)) | ||
36 | + end | ||
37 | + | ||
38 | + def pending_enterprises | ||
39 | + enterprises :active => false | ||
40 | + end | ||
41 | + | ||
42 | + def active_enterprises | ||
43 | + enterprises :active => true | ||
44 | + end | ||
45 | + | ||
23 | def info | 46 | def info |
24 | person_info | 47 | person_info |
25 | end | 48 | end |
app/models/profile.rb
@@ -33,10 +33,9 @@ class Profile < ActiveRecord::Base | @@ -33,10 +33,9 @@ class Profile < ActiveRecord::Base | ||
33 | 33 | ||
34 | has_many :domains, :as => :owner | 34 | has_many :domains, :as => :owner |
35 | belongs_to :virtual_community | 35 | belongs_to :virtual_community |
36 | - has_many :affiliations, :dependent => :destroy | ||
37 | - has_many :people, :through => :affiliations | ||
38 | 36 | ||
39 | - has_many :role_assignment, :as => :resource | 37 | + has_many :role_assignments, :as => :resource |
38 | + has_many :people, :through => :role_assignments | ||
40 | 39 | ||
41 | 40 | ||
42 | # Sets the identifier for this profile. Raises an exception when called on a | 41 | # Sets the identifier for this profile. Raises an exception when called on a |
@@ -103,4 +102,7 @@ class Profile < ActiveRecord::Base | @@ -103,4 +102,7 @@ class Profile < ActiveRecord::Base | ||
103 | homepage.children.find(:all, :limit => limit, :order => 'created_on desc') | 102 | homepage.children.find(:all, :limit => limit, :order => 'created_on desc') |
104 | end | 103 | end |
105 | 104 | ||
105 | + def affiliate(person, role) | ||
106 | + RoleAssignment.new(:person => person, :role => role, :resource => self).save | ||
107 | + end | ||
106 | end | 108 | end |
db/migrate/007_create_affiliations.rb
test/fixtures/affiliations.yml
test/fixtures/role_assignments.yml
1 | # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html | 1 | # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html |
2 | one: | 2 | one: |
3 | id: 1 | 3 | id: 1 |
4 | + person_id: 4 | ||
5 | + role_id: 1 | ||
6 | + resource_id: 5 | ||
7 | + resource_type: 'Profile' | ||
4 | two: | 8 | two: |
5 | id: 2 | 9 | id: 2 |
10 | + person_id: 1 | ||
11 | + role_id: 1 | ||
12 | + resource_id: 5 | ||
13 | + resource_type: 'Profile' | ||
14 | +three: | ||
15 | + id: 3 | ||
16 | + person_id: 1 | ||
17 | + role_id: 1 | ||
18 | + resource_id: 6 | ||
19 | + resource_type: 'Profile' |
test/fixtures/roles.yml
test/unit/affiliation_test.rb
test/unit/person_test.rb
@@ -17,7 +17,8 @@ class PersonTest < Test::Unit::TestCase | @@ -17,7 +17,8 @@ class PersonTest < Test::Unit::TestCase | ||
17 | assert pr.save | 17 | assert pr.save |
18 | pe = User.create(:login => 'person', :email => 'person@test.net', :password => 'dhoe', :password_confirmation => 'dhoe').person | 18 | pe = User.create(:login => 'person', :email => 'person@test.net', :password => 'dhoe', :password_confirmation => 'dhoe').person |
19 | assert pe.save | 19 | assert pe.save |
20 | - pe.profiles << pr | 20 | + member_role = Role.create(:name => 'member') |
21 | + pr.affiliate(pe, member_role) | ||
21 | assert pe.profiles.include?(pr) | 22 | assert pe.profiles.include?(pr) |
22 | end | 23 | end |
23 | 24 | ||
@@ -26,16 +27,8 @@ class PersonTest < Test::Unit::TestCase | @@ -26,16 +27,8 @@ class PersonTest < Test::Unit::TestCase | ||
26 | assert e.save | 27 | assert e.save |
27 | p = User.create(:login => 'person', :email => 'person@test.net', :password => 'dhoe', :password_confirmation => 'dhoe').person | 28 | p = User.create(:login => 'person', :email => 'person@test.net', :password => 'dhoe', :password_confirmation => 'dhoe').person |
28 | assert p.save | 29 | assert p.save |
29 | - p.profiles << e | ||
30 | - assert p.enterprises.include?(e) | ||
31 | - end | ||
32 | - | ||
33 | - def test_can_belongs_to_an_enterprise | ||
34 | - e = Enterprise.new(:identifier => 'enterprise', :name => 'enterprise') | ||
35 | - assert e.save | ||
36 | - p = User.create(:login => 'person', :email => 'person@test.net', :password => 'dhoe', :password_confirmation => 'dhoe').person | ||
37 | - assert p.save | ||
38 | - p.profiles << e | 30 | + member_role = Role.create(:name => 'member') |
31 | + e.affiliate(p, member_role) | ||
39 | assert p.enterprises.include?(e) | 32 | assert p.enterprises.include?(e) |
40 | end | 33 | end |
41 | 34 |
test/unit/profile_test.rb
@@ -79,7 +79,10 @@ class ProfileTest < Test::Unit::TestCase | @@ -79,7 +79,10 @@ class ProfileTest < Test::Unit::TestCase | ||
79 | def test_can_have_affiliated_people | 79 | def test_can_have_affiliated_people |
80 | pr = Profile.create(:name => 'composite_profile', :identifier => 'composite') | 80 | pr = Profile.create(:name => 'composite_profile', :identifier => 'composite') |
81 | pe = User.create(:login => 'aff', :email => 'aff@pr.coop', :password => 'blih', :password_confirmation => 'blih').person | 81 | pe = User.create(:login => 'aff', :email => 'aff@pr.coop', :password => 'blih', :password_confirmation => 'blih').person |
82 | - pr.people << pe | 82 | + |
83 | + member_role = Role.new(:name => 'member') | ||
84 | + assert member_role.save | ||
85 | + assert pr.affiliate(pe, member_role) | ||
83 | 86 | ||
84 | assert pe.profiles.include?(pr) | 87 | assert pe.profiles.include?(pr) |
85 | end | 88 | end |