summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2012-03-06 18:37:30 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2012-03-06 18:37:30 +0000
commit6aad82e524c1b2cc8afc3299e129b239f834105b (patch)
tree44f8b8999729f2bc21ad28fc2991ac780623b7cc /app
parentb7555bd1ff6b738590679ca7c3fd00d2297a1c74 (diff)
downloadredmine-6aad82e524c1b2cc8afc3299e129b239f834105b.tar.gz
redmine-6aad82e524c1b2cc8afc3299e129b239f834105b.zip
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
Diffstat (limited to 'app')
-rw-r--r--app/controllers/members_controller.rb2
-rw-r--r--app/models/principal.rb11
-rw-r--r--app/views/projects/settings/_members.html.erb2
3 files changed, 13 insertions, 2 deletions
diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb
index 80328aa7f..11cbeff32 100644
--- a/app/controllers/members_controller.rb
+++ b/app/controllers/members_controller.rb
@@ -135,7 +135,7 @@ class MembersController < ApplicationController
end
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
end
diff --git a/app/models/principal.rb b/app/models/principal.rb
index 9955501e3..de6539986 100644
--- a/app/models/principal.rb
+++ b/app/models/principal.rb
@@ -45,6 +45,7 @@ class Principal < ActiveRecord::Base
# Principals that are members of a collection of projects
named_scope :member_of, lambda {|projects|
+ projects = [projects] unless projects.is_a?(Array)
if projects.empty?
{:conditions => "1=0"}
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]}
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
diff --git a/app/views/projects/settings/_members.html.erb b/app/views/projects/settings/_members.html.erb
index 2710fa82a..b5086d836 100644
--- a/app/views/projects/settings/_members.html.erb
+++ b/app/views/projects/settings/_members.html.erb
@@ -55,7 +55,7 @@
<% end %>
</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">
<% if roles.any? && principals.any? %>