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