Skip to content
This repository has been archived by the owner on Nov 19, 2020. It is now read-only.

Commit

Permalink
Merged r16196 to 3.3-stable (#15773).
Browse files Browse the repository at this point in the history
git-svn-id: http://svn.redmine.org/redmine/branches/3.3-stable@19074 e93f8b46-1217-0410-a6f0-8f06a7374b81
  • Loading branch information
jplang committed Nov 16, 2019
1 parent 1734cbf commit 04d4a1a
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
13 changes: 10 additions & 3 deletions app/models/query.rb
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ class StatementInvalid < ::ActiveRecord::StatementInvalid
:list => [ "=", "!" ],
:list_status => [ "o", "=", "!", "c", "*" ],
:list_optional => [ "=", "!", "!*", "*" ],
:list_subprojects => [ "*", "!*", "=" ],
:list_subprojects => [ "*", "!*", "=", "!" ],
:date => [ "=", ">=", "<=", "><", "<t+", ">t+", "><t+", "t+", "t", "ld", "w", "lw", "l2w", "m", "lm", "y", ">t-", "<t-", "><t-", "t-", "!*", "*" ],
:date_past => [ "=", ">=", "<=", "><", ">t-", "<t-", "><t-", "t-", "t", "ld", "w", "lw", "l2w", "m", "lm", "y", "!*", "*" ],
:string => [ "=", "~", "!", "!~", "!*", "*" ],
Expand Down Expand Up @@ -573,12 +573,19 @@ def group_by_statement

def project_statement
project_clauses = []
if project && !project.descendants.active.empty?
active_subprojects_ids = []

active_subprojects_ids = project.descendants.active.map(&:id) if project
if active_subprojects_ids.any?
if has_filter?("subproject_id")
case operator_for("subproject_id")
when '='
# include the selected subprojects
ids = [project.id] + values_for("subproject_id").each(&:to_i)
ids = [project.id] + values_for("subproject_id").map(&:to_i)
project_clauses << "#{Project.table_name}.id IN (%s)" % ids.join(',')
when '!'
# exclude the selected subprojects
ids = [project.id] + active_subprojects_ids - values_for("subproject_id").map(&:to_i)
project_clauses << "#{Project.table_name}.id IN (%s)" % ids.join(',')
when '!*'
# main project only
Expand Down
17 changes: 17 additions & 0 deletions test/unit/query_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1820,4 +1820,21 @@ def test_date_clause_should_respect_user_time_zone_with_utc_default
ActiveRecord::Base.default_timezone = :local # restore Redmine default
end

def test_filter_on_subprojects
query = IssueQuery.new(:name => '_', :project => Project.find(1))
filter_name = "subproject_id"
assert_include filter_name, query.available_filters.keys

# "is" operator should include issues of parent project + issues of the selected subproject
query.filters = {filter_name => {:operator => '=', :values => ['3']}}
issues = find_issues_with_query(query)
assert_equal [1, 2, 3, 5, 7, 8, 11, 12, 13, 14], issues.map(&:id).sort

# "is not" operator should include issues of parent project + issues of all active subprojects - issues of the selected subprojects
query = IssueQuery.new(:name => '_', :project => Project.find(1))
query.filters = {filter_name => {:operator => '!', :values => ['3']}}
issues = find_issues_with_query(query)
assert_equal [1, 2, 3, 6, 7, 8, 9, 10, 11, 12], issues.map(&:id).sort
end

end

0 comments on commit 04d4a1a

Please sign in to comment.