@@ -333,6 +333,10 class Query < ActiveRecord::Base | |||
|
333 | 333 | available_filters[field][:type] if available_filters.has_key?(field) |
|
334 | 334 | end |
|
335 | 335 | |
|
336 | def allowed_values_for(field) | |
|
337 | available_filters[field][:values] if available_filters.has_key?(field) | |
|
338 | end | |
|
339 | ||
|
336 | 340 | def operator_for(field) |
|
337 | 341 | has_filter?(field) ? filters[field][:operator] : nil |
|
338 | 342 | end |
@@ -649,6 +653,7 class Query < ActiveRecord::Base | |||
|
649 | 653 | sql = '' |
|
650 | 654 | case operator |
|
651 | 655 | when "=" |
|
656 | value &= allowed_values_for(field).collect {|val| val[1]} if value.present? && allowed_values_for(field).present? | |
|
652 | 657 | if value.any? |
|
653 | 658 | case type_for(field) |
|
654 | 659 | when :date, :date_past |
@@ -665,6 +670,7 class Query < ActiveRecord::Base | |||
|
665 | 670 | sql = "1=0" |
|
666 | 671 | end |
|
667 | 672 | when "!" |
|
673 | value &= allowed_values_for(field).collect {|val| val[1]} if value.present? && allowed_values_for(field).present? | |
|
668 | 674 | if value.any? |
|
669 | 675 | sql = "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + "))" |
|
670 | 676 | else |
@@ -162,7 +162,9 class IssuesControllerTest < ActionController::TestCase | |||
|
162 | 162 | '!~This is part of a subject' => { :op => '!~', :values => ['This is part of a subject'] }}, |
|
163 | 163 | 'tracker_id' => { |
|
164 | 164 | '3' => { :op => '=', :values => ['3'] }, |
|
165 |
'=3' => { :op => '=', :values => ['3'] } |
|
|
165 | '=3' => { :op => '=', :values => ['3'] }, | |
|
166 | '*' => { :op => '=', :values => ['*'] }, | |
|
167 | '!*' => { :op => '!', :values => ['*'] }}, | |
|
166 | 168 | 'start_date' => { |
|
167 | 169 | '2011-10-12' => { :op => '=', :values => ['2011-10-12'] }, |
|
168 | 170 | '=2011-10-12' => { :op => '=', :values => ['2011-10-12'] }, |
General Comments 0
You need to be logged in to leave comments.
Login now