Feature #15201 » 15201_include_locked_members_in_assignee_users_v2.patch
| app/models/principal.rb | ||
|---|---|---|
| 89 | 89 |
where("1=0")
|
| 90 | 90 |
else |
| 91 | 91 |
ids = projects.map(&:id) |
| 92 |
active.where("#{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids)
|
|
| 92 |
# include active and locked users |
|
| 93 |
where(:status => [STATUS_LOCKED, STATUS_ACTIVE]). |
|
| 94 |
where("#{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids)
|
|
| 93 | 95 |
end |
| 94 | 96 |
} |
| 95 | 97 |
# Principals that are not members of projects |
| app/models/query.rb | ||
|---|---|---|
| 511 | 511 |
@principal ||= begin |
| 512 | 512 |
principals = [] |
| 513 | 513 |
if project |
| 514 |
principals += project.principals.visible
|
|
| 514 |
principals += Principal.member_of(project).visible
|
|
| 515 | 515 |
unless project.leaf? |
| 516 | 516 |
principals += Principal.member_of(project.descendants.visible).visible |
| 517 | 517 |
end |
| ... | ... | |
| 532 | 532 |
def author_values |
| 533 | 533 |
author_values = [] |
| 534 | 534 |
author_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
|
| 535 |
author_values += users.collect{|s| [s.name, s.id.to_s] }
|
|
| 535 |
author_values += users.sort_by(&:status).collect{|s| [s.name, s.id.to_s, l("status_#{User::LABEL_BY_STATUS[s.status]}")] }
|
|
| 536 | 536 |
author_values |
| 537 | 537 |
end |
| 538 | 538 | |
| 539 | 539 |
def assigned_to_values |
| 540 | 540 |
assigned_to_values = [] |
| 541 | 541 |
assigned_to_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
|
| 542 |
assigned_to_values += (Setting.issue_group_assignment? ? principals : users).collect{|s| [s.name, s.id.to_s] }
|
|
| 542 |
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]}")] }
|
|
| 543 | 543 |
assigned_to_values |
| 544 | 544 |
end |
| 545 | 545 | |
| app/models/user.rb | ||
|---|---|---|
| 514 | 514 |
name |
| 515 | 515 |
end |
| 516 | 516 | |
| 517 |
CSS_CLASS_BY_STATUS = {
|
|
| 517 |
LABEL_BY_STATUS = {
|
|
| 518 | 518 |
STATUS_ANONYMOUS => 'anon', |
| 519 | 519 |
STATUS_ACTIVE => 'active', |
| 520 | 520 |
STATUS_REGISTERED => 'registered', |
| ... | ... | |
| 522 | 522 |
} |
| 523 | 523 | |
| 524 | 524 |
def css_classes |
| 525 |
"user #{CSS_CLASS_BY_STATUS[status]}"
|
|
| 525 |
"user #{LABEL_BY_STATUS[status]}"
|
|
| 526 | 526 |
end |
| 527 | 527 | |
| 528 | 528 |
# Returns the current day according to user's time zone |
| test/functional/queries_controller_test.rb | ||
|---|---|---|
| 592 | 592 |
json = ActiveSupport::JSON.decode(response.body) |
| 593 | 593 |
assert_include ["OnlineStore - Systemwide visible version", "7", "open"], json |
| 594 | 594 |
end |
| 595 | ||
| 596 |
def test_assignee_filter_should_return_active_and_locked_users_grouped_by_status |
|
| 597 |
@request.session[:user_id] = 1 |
|
| 598 |
get :filter, :params => {
|
|
| 599 |
:project_id => 1, |
|
| 600 |
:type => 'IssueQuery', |
|
| 601 |
:name => 'assigned_to_id' |
|
| 602 |
} |
|
| 603 |
assert_response :success |
|
| 604 |
assert_equal 'application/json', response.content_type |
|
| 605 |
json = ActiveSupport::JSON.decode(response.body) |
|
| 606 | ||
| 607 |
assert_equal 6, json.count |
|
| 608 |
# "me" value should not be grouped |
|
| 609 |
assert_include ["<< me >>", "me"], json |
|
| 610 |
assert_include ["Dave Lopper", "3", "active"], json |
|
| 611 |
assert_include ["Dave2 Lopper2", "5", "locked"], json |
|
| 612 |
end |
|
| 613 | ||
| 614 |
def test_author_filter_should_return_active_and_locked_users_grouped_by_status |
|
| 615 |
@request.session[:user_id] = 1 |
|
| 616 |
get :filter, :params => {
|
|
| 617 |
:project_id => 1, |
|
| 618 |
:type => 'IssueQuery', |
|
| 619 |
:name => 'author_id' |
|
| 620 |
} |
|
| 621 |
assert_response :success |
|
| 622 |
assert_equal 'application/json', response.content_type |
|
| 623 |
json = ActiveSupport::JSON.decode(response.body) |
|
| 624 | ||
| 625 |
assert_equal 6, json.count |
|
| 626 |
# "me" value should not be grouped |
|
| 627 |
assert_include ["<< me >>", "me"], json |
|
| 628 |
assert_include ["Dave Lopper", "3", "active"], json |
|
| 629 |
assert_include ["Dave2 Lopper2", "5", "locked"], json |
|
| 630 |
end |
|
| 631 | ||
| 632 |
def test_user_filter_should_return_active_and_locked_users_grouped_by_status |
|
| 633 |
@request.session[:user_id] = 1 |
|
| 634 |
get :filter, :params => {
|
|
| 635 |
:project_id => 1, |
|
| 636 |
:type => 'TimeEntryQuery', |
|
| 637 |
:name => 'user_id' |
|
| 638 |
} |
|
| 639 |
assert_response :success |
|
| 640 |
assert_equal 'application/json', response.content_type |
|
| 641 |
json = ActiveSupport::JSON.decode(response.body) |
|
| 642 | ||
| 643 |
assert_equal 6, json.count |
|
| 644 |
# "me" value should not be grouped |
|
| 645 |
assert_include ["<< me >>", "me"], json |
|
| 646 |
assert_include ["Dave Lopper", "3", "active"], json |
|
| 647 |
assert_include ["Dave2 Lopper2", "5", "locked"], json |
|
| 648 |
end |
|
| 595 | 649 |
end |
| test/unit/principal_test.rb | ||
|---|---|---|
| 52 | 52 |
assert_equal expected.map(&:id).sort, Principal.visible(user).pluck(:id).sort |
| 53 | 53 |
end |
| 54 | 54 | |
| 55 |
def test_member_of_scope_should_return_the_union_of_all_members |
|
| 55 |
def test_member_of_scope_should_return_the_union_of_all_active_and_locked_members
|
|
| 56 | 56 |
projects = Project.find([1]) |
| 57 |
assert_equal [3, 2], Principal.member_of(projects).sort.map(&:id) |
|
| 57 |
assert_equal [3, 5, 2], Principal.member_of(projects).sort.map(&:id)
|
|
| 58 | 58 |
projects = Project.find([1, 2]) |
| 59 |
assert_equal [3, 2, 8, 11], Principal.member_of(projects).sort.map(&:id) |
|
| 59 |
assert_equal [3, 5, 2, 8, 11], Principal.member_of(projects).sort.map(&:id)
|
|
| 60 | 60 |
end |
| 61 | 61 | |
| 62 | 62 |
def test_member_of_scope_should_be_empty_for_no_projects |