1
0
mirror of https://github.com/meineerde/redmine.git synced 2026-01-05 07:01:30 +00:00

Include locked members in filters (#15201).

Patch by Marius BALTEANU.


git-svn-id: http://svn.redmine.org/redmine/trunk@17371 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Go MAEDA 2018-06-09 08:07:08 +00:00
parent bff0fbce8b
commit b4d3715dc0
5 changed files with 65 additions and 9 deletions

View File

@ -94,7 +94,9 @@ class Principal < ActiveRecord::Base
where("1=0")
else
ids = projects.map(&:id)
active.where("#{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids)
# include active and locked users
where(:status => [STATUS_LOCKED, STATUS_ACTIVE]).
where("#{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

View File

@ -512,7 +512,7 @@ class Query < ActiveRecord::Base
@principal ||= begin
principals = []
if project
principals += project.principals.visible
principals += Principal.member_of(project).visible
unless project.leaf?
principals += Principal.member_of(project.descendants.visible).visible
end
@ -533,14 +533,14 @@ class Query < ActiveRecord::Base
def author_values
author_values = []
author_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
author_values += users.collect{|s| [s.name, s.id.to_s] }
author_values += users.sort_by(&:status).collect{|s| [s.name, s.id.to_s, l("status_#{User::LABEL_BY_STATUS[s.status]}")] }
author_values
end
def assigned_to_values
assigned_to_values = []
assigned_to_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
assigned_to_values += (Setting.issue_group_assignment? ? principals : users).collect{|s| [s.name, s.id.to_s] }
assigned_to_values += (Setting.issue_group_assignment? ? principals : users).sort_by(&:status).collect{|s| [s.name, s.id.to_s, l("status_#{User::LABEL_BY_STATUS[s.status]}")] }
assigned_to_values
end

View File

@ -514,7 +514,7 @@ class User < Principal
name
end
CSS_CLASS_BY_STATUS = {
LABEL_BY_STATUS = {
STATUS_ANONYMOUS => 'anon',
STATUS_ACTIVE => 'active',
STATUS_REGISTERED => 'registered',
@ -522,7 +522,7 @@ class User < Principal
}
def css_classes
"user #{CSS_CLASS_BY_STATUS[status]}"
"user #{LABEL_BY_STATUS[status]}"
end
# Returns the current day according to user's time zone

View File

@ -621,4 +621,58 @@ class QueriesControllerTest < Redmine::ControllerTest
assert_equal 4, json.count
assert_include ["Private child of eCookbook","5"], json
end
def test_assignee_filter_should_return_active_and_locked_users_grouped_by_status
@request.session[:user_id] = 1
get :filter, :params => {
:project_id => 1,
:type => 'IssueQuery',
:name => 'assigned_to_id'
}
assert_response :success
assert_equal 'application/json', response.content_type
json = ActiveSupport::JSON.decode(response.body)
assert_equal 6, json.count
# "me" value should not be grouped
assert_include ["<< me >>", "me"], json
assert_include ["Dave Lopper", "3", "active"], json
assert_include ["Dave2 Lopper2", "5", "locked"], json
end
def test_author_filter_should_return_active_and_locked_users_grouped_by_status
@request.session[:user_id] = 1
get :filter, :params => {
:project_id => 1,
:type => 'IssueQuery',
:name => 'author_id'
}
assert_response :success
assert_equal 'application/json', response.content_type
json = ActiveSupport::JSON.decode(response.body)
assert_equal 6, json.count
# "me" value should not be grouped
assert_include ["<< me >>", "me"], json
assert_include ["Dave Lopper", "3", "active"], json
assert_include ["Dave2 Lopper2", "5", "locked"], json
end
def test_user_filter_should_return_active_and_locked_users_grouped_by_status
@request.session[:user_id] = 1
get :filter, :params => {
:project_id => 1,
:type => 'TimeEntryQuery',
:name => 'user_id'
}
assert_response :success
assert_equal 'application/json', response.content_type
json = ActiveSupport::JSON.decode(response.body)
assert_equal 6, json.count
# "me" value should not be grouped
assert_include ["<< me >>", "me"], json
assert_include ["Dave Lopper", "3", "active"], json
assert_include ["Dave2 Lopper2", "5", "locked"], json
end
end

View File

@ -52,11 +52,11 @@ class PrincipalTest < ActiveSupport::TestCase
assert_equal expected.map(&:id).sort, Principal.visible(user).pluck(:id).sort
end
def test_member_of_scope_should_return_the_union_of_all_members
def test_member_of_scope_should_return_the_union_of_all_active_and_locked_members
projects = Project.find([1])
assert_equal [3, 2], Principal.member_of(projects).sort.map(&:id)
assert_equal [3, 5, 2], Principal.member_of(projects).sort.map(&:id)
projects = Project.find([1, 2])
assert_equal [3, 2, 8, 11], Principal.member_of(projects).sort.map(&:id)
assert_equal [3, 5, 2, 8, 11], Principal.member_of(projects).sort.map(&:id)
end
def test_member_of_scope_should_be_empty_for_no_projects