diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2011-11-19 15:11:20 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2011-11-19 15:11:20 +0000 |
commit | e4cda67cf48624d5f72732b080a10ef708c353c3 (patch) | |
tree | eaeaec57ed4e2af7815d40fd37763915de4509c8 /app/models | |
parent | 280faf6780d286dd0efefbf7b3f7b5af1d3ebc72 (diff) | |
download | redmine-e4cda67cf48624d5f72732b080a10ef708c353c3.tar.gz redmine-e4cda67cf48624d5f72732b080a10ef708c353c3.zip |
Fixed: Issue filter by assigned_to_role is not project specific (#9540).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@7847 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/query.rb | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/app/models/query.rb b/app/models/query.rb index 1ac18c7f5..2f99d0fe7 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -617,25 +617,22 @@ class Query < ActiveRecord::Base end def sql_for_assigned_to_role_field(field, operator, value) - if operator == "*" # Any Role - roles = Role.givable - operator = '=' # Override the operator since we want to find by assigned_to - elsif operator == "!*" # No role - roles = Role.givable - operator = '!' # Override the operator since we want to find by assigned_to - else - roles = Role.givable.find_all_by_id(value) + case operator + when "*", "!*" # Member / Not member + sw = operator == "!*" ? 'NOT' : '' + nl = operator == "!*" ? "#{Issue.table_name}.assigned_to_id IS NULL OR" : '' + "(#{nl} #{Issue.table_name}.assigned_to_id #{sw} IN (SELECT DISTINCT #{Member.table_name}.user_id FROM #{Member.table_name}" + + " WHERE #{Member.table_name}.project_id = #{Issue.table_name}.project_id))" + when "=", "!" + role_cond = value.any? ? + "#{MemberRole.table_name}.role_id IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")" : + "1=0" + + sw = operator == "!" ? 'NOT' : '' + nl = operator == "!" ? "#{Issue.table_name}.assigned_to_id IS NULL OR" : '' + "(#{nl} #{Issue.table_name}.assigned_to_id #{sw} IN (SELECT DISTINCT #{Member.table_name}.user_id FROM #{Member.table_name}, #{MemberRole.table_name}" + + " WHERE #{Member.table_name}.project_id = #{Issue.table_name}.project_id AND #{Member.table_name}.id = #{MemberRole.table_name}.member_id AND #{role_cond}))" end - roles ||= [] - - members_of_roles = roles.inject([]) {|user_ids, role| - if role && role.members - user_ids << role.members.collect(&:user_id) - end - user_ids.flatten.uniq.compact - }.sort.collect(&:to_s) - - '(' + sql_for_field("assigned_to_id", operator, members_of_roles, Issue.table_name, "assigned_to_id", false) + ')' end private |