git-svn-id: http://svn.redmine.org/redmine/trunk@14332 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/3.1.0
@@ -24,15 +24,13 @@ class MembersController < ApplicationController | |||
accept_api_auth :index, :show, :create, :update, :destroy | |||
def index | |||
scope = @project.memberships.active | |||
@offset, @limit = api_offset_and_limit | |||
@member_count = @project.member_principals.count | |||
@member_count = scope.count | |||
@member_pages = Paginator.new @member_count, @limit, params['page'] | |||
@offset ||= @member_pages.offset | |||
@members = @project.member_principals. | |||
order("#{Member.table_name}.id"). | |||
limit(@limit). | |||
offset(@offset). | |||
to_a | |||
@members = scope.order(:id).limit(@limit).offset(@offset).to_a | |||
respond_to do |format| | |||
format.html { head 406 } | |||
format.api |
@@ -29,6 +29,8 @@ class Member < ActiveRecord::Base | |||
before_destroy :set_issue_category_nil | |||
scope :active, lambda { joins(:principal).where(:users => {:status => Principal::STATUS_ACTIVE})} | |||
alias :base_reload :reload | |||
def reload(*args) | |||
@managed_roles = nil |
@@ -29,14 +29,10 @@ class Project < ActiveRecord::Base | |||
# Specific overridden Activities | |||
has_many :time_entry_activities | |||
has_many :memberships, :class_name => 'Member', :inverse_of => :project | |||
# Memberships of active users only | |||
has_many :members, | |||
lambda { joins(:principal, :roles). | |||
where("#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_ACTIVE}") } | |||
has_many :memberships, :class_name => 'Member' | |||
has_many :member_principals, | |||
lambda { joins(:principal). | |||
where("#{Principal.table_name}.status=#{Principal::STATUS_ACTIVE}")}, | |||
:class_name => 'Member' | |||
lambda { joins(:principal).where(:users => {:type => 'User', :status => Principal::STATUS_ACTIVE}) } | |||
has_many :enabled_modules, :dependent => :delete_all | |||
has_and_belongs_to_many :trackers, lambda {order(:position)} | |||
has_many :issues, :dependent => :destroy | |||
@@ -216,8 +212,9 @@ class Project < ActiveRecord::Base | |||
end | |||
def override_roles(role) | |||
@override_members ||= member_principals. | |||
where("#{Principal.table_name}.type IN (?)", ['GroupAnonymous', 'GroupNonMember']).to_a | |||
@override_members ||= memberships. | |||
joins(:principal). | |||
where(:users => {:type => ['GroupAnonymous', 'GroupNonMember']}).to_a | |||
group_class = role.anonymous? ? GroupAnonymous : GroupNonMember | |||
member = @override_members.detect {|m| m.principal.is_a? group_class} | |||
@@ -739,6 +736,11 @@ class Project < ActiveRecord::Base | |||
end | |||
end | |||
def member_principals | |||
ActiveSupport::Deprecation.warn "Project#member_principals is deprecated and will be removed in Redmine 4.0. Use #memberships.active instead." | |||
memberships.active | |||
end | |||
# Returns a new unsaved Project instance with attributes copied from +project+ | |||
def self.copy_from(project) | |||
project = project.is_a?(Project) ? project : Project.find(project) |
@@ -1,5 +1,5 @@ | |||
<% roles = Role.find_all_givable | |||
members = @project.member_principals.includes(:member_roles, :roles, :principal).to_a.sort %> | |||
members = @project.memberships.active.includes(:member_roles, :roles, :principal).to_a.sort %> | |||
<p><%= link_to l(:label_member_new), new_project_membership_path(@project), :remote => true, :class => "icon icon-add" %></p> | |||
@@ -48,7 +48,7 @@ class PrincipalTest < ActiveSupport::TestCase | |||
Role.non_member.update! :users_visibility => 'members_of_visible_projects' | |||
user = User.generate! | |||
expected = Project.visible(user).map(&:member_principals).flatten.map(&:principal).uniq << user | |||
expected = Project.visible(user).map {|p| p.memberships.active}.flatten.map(&:principal).uniq << user | |||
assert_equal expected.map(&:id).sort, Principal.visible(user).pluck(:id).sort | |||
end | |||