##// END OF EJS Templates
Adds "me" to user custom fields filters (#9923)....
Jean-Philippe Lang -
r8518:980b6db5c022
parent child
Show More
@@ -688,6 +688,12 class Query < ActiveRecord::Base
688 def sql_for_custom_field(field, operator, value, custom_field_id)
688 def sql_for_custom_field(field, operator, value, custom_field_id)
689 db_table = CustomValue.table_name
689 db_table = CustomValue.table_name
690 db_field = 'value'
690 db_field = 'value'
691 filter = @available_filters[field]
692 if filter && filter[:format] == 'user'
693 if value.delete('me')
694 value.push User.current.id.to_s
695 end
696 end
691 "#{Issue.table_name}.id IN (SELECT #{Issue.table_name}.id FROM #{Issue.table_name} LEFT OUTER JOIN #{db_table} ON #{db_table}.customized_type='Issue' AND #{db_table}.customized_id=#{Issue.table_name}.id AND #{db_table}.custom_field_id=#{custom_field_id} WHERE " +
697 "#{Issue.table_name}.id IN (SELECT #{Issue.table_name}.id FROM #{Issue.table_name} LEFT OUTER JOIN #{db_table} ON #{db_table}.customized_type='Issue' AND #{db_table}.customized_id=#{Issue.table_name}.id AND #{db_table}.custom_field_id=#{custom_field_id} WHERE " +
692 sql_for_field(field, operator, value, db_table, db_field, true) + ')'
698 sql_for_field(field, operator, value, db_table, db_field, true) + ')'
693 end
699 end
@@ -816,11 +822,15 class Query < ActiveRecord::Base
816 options = { :type => :float, :order => 20 }
822 options = { :type => :float, :order => 20 }
817 when "user", "version"
823 when "user", "version"
818 next unless project
824 next unless project
819 options = { :type => :list_optional, :values => field.possible_values_options(project), :order => 20}
825 values = field.possible_values_options(project)
826 if User.current.logged? && field.field_format == 'user'
827 values.unshift ["<< #{l(:label_me)} >>", "me"]
828 end
829 options = { :type => :list_optional, :values => values, :order => 20}
820 else
830 else
821 options = { :type => :string, :order => 20 }
831 options = { :type => :string, :order => 20 }
822 end
832 end
823 @available_filters["cf_#{field.id}"] = options.merge({ :name => field.name })
833 @available_filters["cf_#{field.id}"] = options.merge({ :name => field.name, :format => field.field_format })
824 end
834 end
825 end
835 end
826
836
@@ -413,6 +413,23 class QueryTest < ActiveSupport::TestCase
413 assert !result.include?(i3)
413 assert !result.include?(i3)
414 end
414 end
415
415
416 def test_user_custom_field_filtered_on_me
417 User.current = User.find(2)
418 cf = IssueCustomField.create!(:field_format => 'user', :is_for_all => true, :is_filter => true, :name => 'User custom field', :tracker_ids => [1])
419 issue1 = Issue.create!(:project_id => 1, :tracker_id => 1, :custom_field_values => {cf.id.to_s => '2'}, :subject => 'Test', :author_id => 1)
420 issue2 = Issue.generate!(:project_id => 1, :tracker_id => 1, :custom_field_values => {cf.id.to_s => '3'})
421
422 query = Query.new(:name => '_', :project => Project.find(1))
423 filter = query.available_filters["cf_#{cf.id}"]
424 assert_not_nil filter
425 assert_include 'me', filter[:values].map{|v| v[1]}
426
427 query.filters = { "cf_#{cf.id}" => {:operator => '=', :values => ['me']}}
428 result = query.issues
429 assert_equal 1, result.size
430 assert issue1, result.first
431 end
432
416 def test_filter_my_projects
433 def test_filter_my_projects
417 User.current = User.find(2)
434 User.current = User.find(2)
418 query = Query.new(:name => '_')
435 query = Query.new(:name => '_')
General Comments 0
You need to be logged in to leave comments. Login now