Fixed that the proposed users list may be empty when adding a project member (#10374).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9128 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
b7555bd1ff
commit
6aad82e524
|
@ -135,7 +135,7 @@ class MembersController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def autocomplete
|
def autocomplete
|
||||||
@principals = Principal.active.like(params[:q]).find(:all, :limit => 100) - @project.principals
|
@principals = Principal.active.not_member_of(@project).like(params[:q]).all(:limit => 100)
|
||||||
render :layout => false
|
render :layout => false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,7 @@ class Principal < ActiveRecord::Base
|
||||||
|
|
||||||
# Principals that are members of a collection of projects
|
# Principals that are members of a collection of projects
|
||||||
named_scope :member_of, lambda {|projects|
|
named_scope :member_of, lambda {|projects|
|
||||||
|
projects = [projects] unless projects.is_a?(Array)
|
||||||
if projects.empty?
|
if projects.empty?
|
||||||
{:conditions => "1=0"}
|
{:conditions => "1=0"}
|
||||||
else
|
else
|
||||||
|
@ -52,6 +53,16 @@ class Principal < ActiveRecord::Base
|
||||||
{:conditions => ["#{Principal.table_name}.status = 1 AND #{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids]}
|
{:conditions => ["#{Principal.table_name}.status = 1 AND #{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids]}
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
# Principals that are not members of projects
|
||||||
|
named_scope :not_member_of, lambda {|projects|
|
||||||
|
projects = [projects] unless projects.is_a?(Array)
|
||||||
|
if projects.empty?
|
||||||
|
{:conditions => "1=0"}
|
||||||
|
else
|
||||||
|
ids = projects.map(&:id)
|
||||||
|
{:conditions => ["#{Principal.table_name}.id NOT IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids]}
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
before_create :set_default_empty_values
|
before_create :set_default_empty_values
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<% principals = Principal.active.find(:all, :limit => 100, :order => 'type, login, lastname ASC') - @project.principals %>
|
<% principals = Principal.active.not_member_of(@project).all(:limit => 100, :order => 'type, login, lastname ASC') %>
|
||||||
|
|
||||||
<div class="splitcontentright">
|
<div class="splitcontentright">
|
||||||
<% if roles.any? && principals.any? %>
|
<% if roles.any? && principals.any? %>
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
require File.expand_path('../../test_helper', __FILE__)
|
require File.expand_path('../../test_helper', __FILE__)
|
||||||
|
|
||||||
class PrincipalTest < ActiveSupport::TestCase
|
class PrincipalTest < ActiveSupport::TestCase
|
||||||
|
fixtures :users, :projects, :members, :member_roles
|
||||||
|
|
||||||
def test_active_scope_should_return_groups_and_active_users
|
def test_active_scope_should_return_groups_and_active_users
|
||||||
result = Principal.active.all
|
result = Principal.active.all
|
||||||
|
@ -32,6 +33,12 @@ class PrincipalTest < ActiveSupport::TestCase
|
||||||
assert_equal projects.map(&:principals).flatten.sort, Principal.member_of(projects).sort
|
assert_equal projects.map(&:principals).flatten.sort, Principal.member_of(projects).sort
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_not_member_of_scope_should_return_users_that_have_no_memberships
|
||||||
|
projects = Project.find_all_by_id(1, 2)
|
||||||
|
expected = (Principal.all - projects.map(&:memberships).flatten.map(&:principal)).sort
|
||||||
|
assert_equal expected, Principal.not_member_of(projects).sort
|
||||||
|
end
|
||||||
|
|
||||||
context "#like" do
|
context "#like" do
|
||||||
setup do
|
setup do
|
||||||
Principal.generate!(:login => 'login')
|
Principal.generate!(:login => 'login')
|
||||||
|
|
Loading…
Reference in New Issue