Index: app/models/principal.rb =================================================================== --- app/models/principal.rb (revision 1233) +++ app/models/principal.rb (working copy) @@ -60,6 +60,16 @@ active.uniq.joins(:members).where("#{Member.table_name}.project_id IN (?)", ids) end } + # Principals that are locked members of a collection of projects + scope :locked_member_of, lambda {|projects| + projects = [projects] unless project.is_a?(Array) + if projects.empty? + where("1=0") + else + ids = projects.map(&:id) + locked.uniq.joins(:members).where("#{Member.table_name}.project_id IN (?)", ids) + end + } # Principals that are not members of projects scope :not_member_of, lambda {|projects| projects = [projects] unless projects.is_a?(Array) Index: app/models/issue_query.rb =================================================================== --- app/models/issue_query.rb (revision 1233) +++ app/models/issue_query.rb (working copy) @@ -70,10 +70,13 @@ issue_custom_fields = [] if project - principals += project.principals.sort + principals += project.principals + principals += project.locked_principals + principals.sort unless project.leaf? subprojects = project.descendants.visible.all principals += Principal.member_of(subprojects) + principals += Principal.locked_member_of(subprojects) end versions = project.shared_versions.all categories = project.issue_categories.all @@ -82,6 +85,7 @@ else if all_projects.any? principals += Principal.member_of(all_projects) + principals += Principal.locked_member_of(all_projects) end versions = Version.visible.find_all_by_sharing('system') issue_custom_fields = IssueCustomField.where(:is_filter => true, :is_for_all => true).all Index: app/models/project.rb =================================================================== --- app/models/project.rb (revision 1233) +++ app/models/project.rb (working copy) @@ -33,8 +33,12 @@ has_many :member_principals, :class_name => 'Member', :include => :principal, :conditions => "#{Principal.table_name}.type='Group' OR (#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_ACTIVE})" + has_many :locked_member_principals, :class_name => 'Member', + :include => :principal, + :conditions => "#{Principal.table_name}.type='Group' OR (#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_LOCKED})" has_many :users, :through => :members has_many :principals, :through => :member_principals, :source => :principal + has_many :locked_principals, :through => :locked_member_principals, :source => :principal has_many :enabled_modules, :dependent => :delete_all has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position"