##// END OF EJS Templates
Fixed that the proposed users list may be empty when adding a project member (#10374)....
Jean-Philippe Lang -
r9008:6aad82e524c1
parent child
Show More
@@ -135,7 +135,7 class MembersController < ApplicationController
135 end
135 end
136
136
137 def autocomplete
137 def autocomplete
138 @principals = Principal.active.like(params[:q]).find(:all, :limit => 100) - @project.principals
138 @principals = Principal.active.not_member_of(@project).like(params[:q]).all(:limit => 100)
139 render :layout => false
139 render :layout => false
140 end
140 end
141
141
@@ -45,6 +45,7 class Principal < ActiveRecord::Base
45
45
46 # Principals that are members of a collection of projects
46 # Principals that are members of a collection of projects
47 named_scope :member_of, lambda {|projects|
47 named_scope :member_of, lambda {|projects|
48 projects = [projects] unless projects.is_a?(Array)
48 if projects.empty?
49 if projects.empty?
49 {:conditions => "1=0"}
50 {:conditions => "1=0"}
50 else
51 else
@@ -52,6 +53,16 class Principal < ActiveRecord::Base
52 {: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]}
53 {: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]}
53 end
54 end
54 }
55 }
56 # Principals that are not members of projects
57 named_scope :not_member_of, lambda {|projects|
58 projects = [projects] unless projects.is_a?(Array)
59 if projects.empty?
60 {:conditions => "1=0"}
61 else
62 ids = projects.map(&:id)
63 {:conditions => ["#{Principal.table_name}.id NOT IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids]}
64 end
65 }
55
66
56 before_create :set_default_empty_values
67 before_create :set_default_empty_values
57
68
@@ -55,7 +55,7
55 <% end %>
55 <% end %>
56 </div>
56 </div>
57
57
58 <% principals = Principal.active.find(:all, :limit => 100, :order => 'type, login, lastname ASC') - @project.principals %>
58 <% principals = Principal.active.not_member_of(@project).all(:limit => 100, :order => 'type, login, lastname ASC') %>
59
59
60 <div class="splitcontentright">
60 <div class="splitcontentright">
61 <% if roles.any? && principals.any? %>
61 <% if roles.any? && principals.any? %>
@@ -18,6 +18,7
18 require File.expand_path('../../test_helper', __FILE__)
18 require File.expand_path('../../test_helper', __FILE__)
19
19
20 class PrincipalTest < ActiveSupport::TestCase
20 class PrincipalTest < ActiveSupport::TestCase
21 fixtures :users, :projects, :members, :member_roles
21
22
22 def test_active_scope_should_return_groups_and_active_users
23 def test_active_scope_should_return_groups_and_active_users
23 result = Principal.active.all
24 result = Principal.active.all
@@ -32,6 +33,12 class PrincipalTest < ActiveSupport::TestCase
32 assert_equal projects.map(&:principals).flatten.sort, Principal.member_of(projects).sort
33 assert_equal projects.map(&:principals).flatten.sort, Principal.member_of(projects).sort
33 end
34 end
34
35
36 def test_not_member_of_scope_should_return_users_that_have_no_memberships
37 projects = Project.find_all_by_id(1, 2)
38 expected = (Principal.all - projects.map(&:memberships).flatten.map(&:principal)).sort
39 assert_equal expected, Principal.not_member_of(projects).sort
40 end
41
35 context "#like" do
42 context "#like" do
36 setup do
43 setup do
37 Principal.generate!(:login => 'login')
44 Principal.generate!(:login => 'login')
General Comments 0
You need to be logged in to leave comments. Login now