summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/members_controller.rb10
-rw-r--r--app/models/member.rb2
-rw-r--r--app/models/project.rb20
-rw-r--r--app/views/projects/settings/_members.html.erb2
-rw-r--r--test/unit/principal_test.rb2
5 files changed, 19 insertions, 17 deletions
diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb
index 5e5bee822..0f1f53f8e 100644
--- a/app/controllers/members_controller.rb
+++ b/app/controllers/members_controller.rb
@@ -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
diff --git a/app/models/member.rb b/app/models/member.rb
index c2a36b780..5dd04cc71 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -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
diff --git a/app/models/project.rb b/app/models/project.rb
index 05a5fa2e7..7c4ac3516 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -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)
diff --git a/app/views/projects/settings/_members.html.erb b/app/views/projects/settings/_members.html.erb
index c9a91e3b1..31415f80e 100644
--- a/app/views/projects/settings/_members.html.erb
+++ b/app/views/projects/settings/_members.html.erb
@@ -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>
diff --git a/test/unit/principal_test.rb b/test/unit/principal_test.rb
index fd8b4009f..b05f8950b 100644
--- a/test/unit/principal_test.rb
+++ b/test/unit/principal_test.rb
@@ -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