Actions
Feature #5893
closedFilter issues by notes
Start date:
2010-07-16
Due date:
% Done:
0%
Estimated time:
Resolution:
Description
We run a big Redmine installation with more than 20000 issues. What we are missing is the ability to apply a filter on description and notes.
For Redmine version 0.9.4 I made a patch that allows us to filter for these fields and now I would like to contribute this patch to all Redmine users.
Unfortunately I have no svn access to provide an official patch file. Also I don't know if my code (first Ruby code) is ok.
Here is what i did:
File app/models/query.rb:
Line 125ff:
Old:
QueryColumn.new(:subject, :sortable => "#{Issue.table_name}.subject"),
New:
QueryColumn.new(:subject, :sortable => "#{Issue.table_name}.subject"),
QueryColumn.new(:description, :sortable =>
Line 176ff:
Old:
"subject" => { :type => :text, :order => 8 },
New:
"subject" => { :type => :text, :order => 8 },
"description" => { :type => :text, :order => 16 },
"notes" => { :type => :text, :order => 17 },
Line 400ff:
Old:
elsif field == 'watcher_id'
db_table = Watcher.table_name
db_field = 'user_id'
sql << "#{Issue.table_name}.id #{ operator == '=' ? 'IN' : 'NOT IN' } (SELECT #{db_table}.watchable_id FROM #{db_table} WHERE #{db_table}.watchable_type='Issue' A$
sql << sql_for_field(field, '=', v, db_table, db_field) + ')'
else
New:
elsif field == 'watcher_id'
db_table = Watcher.table_name
db_field = 'user_id'
sql << "#{Issue.table_name}.id #{ operator == '=' ? 'IN' : 'NOT IN' } (SELECT #{db_table}.watchable_id FROM #{db_table} WHERE #{db_table}.watchable_type='Issue' A$
sql << sql_for_field(field, '=', v, db_table, db_field) + ')'
elsif field == 'notes'
db_table = Journal.table_name
db_field = 'notes'
sql << '((' + sql_for_field(field, operator, v, db_table, db_field) + ') OR (' + sql_for_field(field, operator, v, Issue.table_name, 'description') + '))'
else
Line 423ff:
Old:
def issue_count
Issue.count(:include => [:status, :project], :conditions => statement)
New:
def issue_count
r = false
filters.each_key do |field|
next unless field == "notes"
r = true
end
if r
Issue.count(:include => [:status, :project, :journals], :conditions => statement)
else
Issue.count(:include => [:status, :project], :conditions => statement)
end
Line 439ff:
Old:
def issue_count_by_group
r = nil
if grouped?
begin
# Rails will raise an (unexpected) RecordNotFound if there's only a nil group value
r = Issue.count(:group => group_by_statement, :include => [:status, :project], :conditions => statement)
New:
def issue_count_by_group
r = nil
if grouped?
begin
x = false
filters.each_key do |field|
next unless field == "notes"
x = true
end
if x
# Rails will raise an (unexpected) RecordNotFound if there's only a nil group value
r = Issue.count(:group => group_by_statement, :include => [:status, :project, :journals], :conditions => statement)
else
# Rails will raise an (unexpected) RecordNotFound if there's only a nil group value
r = Issue.count(:group => group_by_statement, :include => [:status, :project], :conditions => statement)
end
Line 470ff:
Old:
def issues(options={})
order_option = [group_by_sort_order, options[:order]].reject {|s| s.blank?}.join(',')
order_option = nil if order_option.blank?
Issue.find :all, :include => ([:status, :project] + (options[:include] || [])).uniq,
:conditions => Query.merge_conditions(statement, options[:conditions]),
:order => order_option,
:limit => options[:limit],
:offset => options[:offset]
New:
def issues(options={})
order_option = [group_by_sort_order, options[:order]].reject {|s| s.blank?}.join(',')
order_option = nil if order_option.blank?
r = false
filters.each_key do |field|
next unless field == "notes"
r = true
end
if r
Issue.find :all, :include => ([:status, :project, :journals] + (options[:include] || [])).uniq,
:conditions => Query.merge_conditions(statement, options[:conditions]),
:order => order_option,
:limit => options[:limit],
:offset => options[:offset]
else
Issue.find :all, :include => ([:status, :project] + (options[:include] || [])).uniq,
:conditions => Query.merge_conditions(statement, options[:conditions]),
:order => order_option,
:limit => options[:limit],
:offset => options[:offset]
end
It would be great if you would integrate this code into Redmine.
Thanks,
Peter
Files
Related issues
Actions
