--- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -136,6 +136,8 @@ add_available_filter "estimated_hours", :type => :float add_available_filter "done_ratio", :type => :integer + add_available_filter "notes", :type => :text + if User.current.allowed_to?(:set_issues_private, nil, :global => true) || User.current.allowed_to?(:set_own_issues_private, nil, :global => true) add_available_filter "is_private", @@ -465,6 +467,14 @@ "(#{nl} #{sql_for_field("fixed_version_id", "=", version_ids, Issue.table_name, "fixed_version_id")})" 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.ends_with?("~") ? "~" : "*", value, Journal.table_name, 'notes'})" + + " AND (#{Journal.visible_notes_condition(User.current, :skip_pre_condition => true)})" + "#{operator.starts_with?("!") ? "NOT EXISTS" : "EXISTS"} (#{subquery})" + end + def sql_for_is_private_field(field, operator, value) op = (operator == "=" ? 'IN' : 'NOT IN') va = value.map {|v| v == '0' ? self.class.connection.quoted_false : self.class.connection.quoted_true}.uniq.join(',')