mirror of
https://github.com/meineerde/redmine.git
synced 2026-02-01 03:57:15 +00:00
Filter issues by notes (#5893).
Patch by Yuichi HARADA. git-svn-id: http://svn.redmine.org/redmine/trunk@20955 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
2be94d1ea1
commit
7ab1a667a9
@ -176,6 +176,7 @@ class IssueQuery < Query
|
||||
) if project
|
||||
add_available_filter "subject", :type => :text
|
||||
add_available_filter "description", :type => :text
|
||||
add_available_filter "notes", :type => :text
|
||||
add_available_filter "created_on", :type => :date_past
|
||||
add_available_filter "updated_on", :type => :date_past
|
||||
add_available_filter "closed_on", :type => :date_past
|
||||
@ -447,6 +448,14 @@ class IssueQuery < Query
|
||||
raise StatementInvalid.new(e.message)
|
||||
end
|
||||
|
||||
def sql_for_notes_field(field, operator, value)
|
||||
subquery = "SELECT 1 FROM #{Journal.table_name}" +
|
||||
" WHERE #{Journal.table_name}.journalized_type='Issue' AND #{Journal.table_name}.journalized_id=#{Issue.table_name}.id" +
|
||||
" AND (#{sql_for_field field, operator.sub(/^!/, ''), value, Journal.table_name, 'notes'})" +
|
||||
" AND (#{Journal.visible_notes_condition(User.current, :skip_pre_condition => true)})"
|
||||
"#{/^!/.match?(operator) ? "NOT EXISTS" : "EXISTS"} (#{subquery})"
|
||||
end
|
||||
|
||||
def sql_for_updated_by_field(field, operator, value)
|
||||
neg = (operator == '!' ? 'NOT' : '')
|
||||
subquery = "SELECT 1 FROM #{Journal.table_name}" +
|
||||
|
||||
@ -803,6 +803,47 @@ class QueryTest < ActiveSupport::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
def test_filter_notes
|
||||
user = User.generate!
|
||||
Journal.create!(:user_id => user.id, :journalized => Issue.find(2), :notes => 'Notes.')
|
||||
Journal.create!(:user_id => user.id, :journalized => Issue.find(3), :notes => 'Notes.')
|
||||
|
||||
issue_journals = Issue.find(1).journals.sort
|
||||
assert_equal ['Journal notes', 'Some notes with Redmine links: #2, r2.'], issue_journals.map(&:notes)
|
||||
assert_equal [false, false], issue_journals.map(&:private_notes)
|
||||
|
||||
query = IssueQuery.new(:name => '_')
|
||||
filter_name = 'notes'
|
||||
assert_include filter_name, query.available_filters.keys
|
||||
|
||||
{
|
||||
'~' => [1, 2, 3],
|
||||
'!~' => Issue.ids.sort - [1, 2, 3],
|
||||
'^' => [2, 3],
|
||||
'$' => [1],
|
||||
}.each do |operator, expected|
|
||||
query.filters = {filter_name => {:operator => operator, :values => ['Notes']}}
|
||||
assert_equal expected, find_issues_with_query(query).map(&:id).sort
|
||||
end
|
||||
end
|
||||
|
||||
def test_filter_notes_should_ignore_private_notes_that_are_not_visible
|
||||
user = User.generate!
|
||||
Journal.create!(:user_id => user.id, :journalized => Issue.find(2), :notes => 'Notes.', :private_notes => true)
|
||||
Journal.create!(:user_id => user.id, :journalized => Issue.find(3), :notes => 'Notes.')
|
||||
|
||||
issue_journals = Issue.find(1).journals.sort
|
||||
assert_equal ['Journal notes', 'Some notes with Redmine links: #2, r2.'], issue_journals.map(&:notes)
|
||||
assert_equal [false, false], issue_journals.map(&:private_notes)
|
||||
|
||||
query = IssueQuery.new(:name => '_')
|
||||
filter_name = 'notes'
|
||||
assert_include filter_name, query.available_filters.keys
|
||||
|
||||
query.filters = {filter_name => {:operator => '~', :values => ['Notes']}}
|
||||
assert_equal [1, 3], find_issues_with_query(query).map(&:id).sort
|
||||
end
|
||||
|
||||
def test_filter_updated_by
|
||||
user = User.generate!
|
||||
Journal.create!(:user_id => user.id, :journalized => Issue.find(2), :notes => 'Notes')
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user