@@ -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 |
|
|
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