Commit 95cc44e0e00a6fd77f3f8c1e3c919c7256491d4b

Authored by Rodrigo Souto
1 parent be66917b

person: fix by_role and members_of scopes

Also define all roles as default set for profile_members_controller.
app/controllers/my_profile/profile_members_controller.rb
@@ -3,14 +3,15 @@ class ProfileMembersController < MyProfileController @@ -3,14 +3,15 @@ class ProfileMembersController < MyProfileController
3 3
4 def index 4 def index
5 @filters = params[:filters] || {:roles => []} 5 @filters = params[:filters] || {:roles => []}
6 - @filters[:roles] = [] unless @filters[:roles] 6 + all_roles = Profile::Roles.organization_member_roles(environment.id) | Profile::Roles.organization_custom_roles(environment.id, profile.id)
  7 + @filters[:roles] = all_roles unless @filters[:roles].present?
7 @data = {} 8 @data = {}
8 field = 'name' 9 field = 'name'
9 field = 'email' if @filters[:name] =~ /\@/ 10 field = 'email' if @filters[:name] =~ /\@/
10 11
11 @data[:members] = profile.members_by(field,@filters[:name]).by_role(@filters[:roles]) 12 @data[:members] = profile.members_by(field,@filters[:name]).by_role(@filters[:roles])
12 session[:members_filtered] = @data[:members].map{|m|m.id} if request.post? 13 session[:members_filtered] = @data[:members].map{|m|m.id} if request.post?
13 - @data[:roles] = Profile::Roles.organization_member_roles(environment.id) | Profile::Roles.organization_custom_roles(environment.id, profile.id) 14 + @data[:roles] = all_roles
14 15
15 end 16 end
16 17
app/models/person.rb
@@ -22,7 +22,7 @@ class Person < Profile @@ -22,7 +22,7 @@ class Person < Profile
22 joins << :user if User.attribute_names.include? field 22 joins << :user if User.attribute_names.include? field
23 23
24 conditions = resources.map {|resource| "role_assignments.resource_type = '#{resource.class.base_class.name}' AND role_assignments.resource_id = #{resource.id || -1}"}.join(' OR ') 24 conditions = resources.map {|resource| "role_assignments.resource_type = '#{resource.class.base_class.name}' AND role_assignments.resource_id = #{resource.id || -1}"}.join(' OR ')
25 - select('DISTINCT profiles.*').joins(joins).where([conditions]) 25 + distinct.select('profiles.*').joins(joins).where([conditions])
26 } 26 }
27 27
28 scope :not_members_of, -> resources { 28 scope :not_members_of, -> resources {
@@ -52,15 +52,6 @@ class Person &lt; Profile @@ -52,15 +52,6 @@ class Person &lt; Profile
52 ( ( friendships.person_id = ? ) OR (profiles.public_profile = ?)) AND (profiles.visible = ?) )', 'environment_administrator', Profile.name, person.id, person.id, true, true] 52 ( ( friendships.person_id = ? ) OR (profiles.public_profile = ?)) AND (profiles.visible = ?) )', 'environment_administrator', Profile.name, person.id, person.id, true, true]
53 ).uniq 53 ).uniq
54 } 54 }
55 - scope :by_role, lambda { |roles|  
56 -  
57 - roles = [roles] unless roles.kind_of?(Array)  
58 -  
59 - if roles.length > 0  
60 - {:select => 'DISTINCT profiles.*', :joins => :role_assignments, :conditions => ['role_assignments.role_id IN (?)', roles] }  
61 - end  
62 - }  
63 -  
64 55
65 def has_permission_with_admin?(permission, resource) 56 def has_permission_with_admin?(permission, resource)
66 return true if resource.blank? || resource.admins.include?(self) 57 return true if resource.blank? || resource.admins.include?(self)