Index: app/models/query.rb =================================================================== --- app/models/query.rb (revision 2823) +++ app/models/query.rb (working copy) @@ -160,7 +160,7 @@ "due_date" => { :type => :date, :order => 12 }, "estimated_hours" => { :type => :integer, :order => 13 }, "done_ratio" => { :type => :integer, :order => 14 }} - + user_values = [] user_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged? if project @@ -171,7 +171,7 @@ end @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values } unless user_values.empty? @available_filters["author_id"] = { :type => :list, :order => 5, :values => user_values } unless user_values.empty? - + @available_filters["ever_assigned_to_id"] = { :type => :list , :order => 4, :values => user_values } unless user_values.empty? if User.current.logged? @available_filters["watcher_id"] = { :type => :list, :order => 15, :values => [["<< #{l(:label_me)} >>", "me"]] } end @@ -348,7 +348,7 @@ operator = operator_for(field) # "me" value subsitution - if %w(assigned_to_id author_id watcher_id).include?(field) + if %w(assigned_to_id author_id watcher_id ever_assigned_to_id).include?(field)# or %w(ever_assigned_to_id author_id).include?(field) v.push(User.current.logged? ? User.current.id.to_s : "0") if v.delete("me") end @@ -359,12 +359,20 @@ db_field = 'value' is_custom_filter = true sql << "#{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=#{$1} WHERE " - sql << sql_for_field(field, operator, v, db_table, db_field, true) + ')' + sql << sql_for_field(field, operator, v, db_table, db_field,'',false, is_custom_filter) + ')' 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' AND " sql << sql_for_field(field, '=', v, db_table, db_field) + ')' + elsif field == "ever_assigned_to_id" + db_table = JournalDetail.table_name + db_field = 'old_value' + db_field2 = 'value' + is_custom_filter = true + has_double_field = true + sql << "#{Issue.table_name}.id #{ operator == '=' ? 'IN' : 'NOT IN' } (SELECT #{Issue.table_name}.id FROM #{Issue.table_name} INNER JOIN #{Journal.table_name} ON #{Journal.table_name}.journalized_type='Issue' AND #{Journal.table_name}.journalized_id=#{Issue.table_name}.id LEFT OUTER JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id=#{Journal.table_name}.id AND #{JournalDetail.table_name}.prop_key='assigned_to_id' WHERE " + sql << sql_for_field(field, '=', v, db_table, db_field,db_field2,has_double_field,is_custom_filter) + ')' else # regular field db_table = Issue.table_name @@ -381,11 +389,13 @@ private # Helper method to generate the WHERE sql for a +field+, +operator+ and a +value+ - def sql_for_field(field, operator, value, db_table, db_field, is_custom_filter=false) + def sql_for_field(field, operator, value, db_table, db_field,db_field2='',has_double_field=false, is_custom_filter=false) sql = '' case operator when "=" + sql << "(" if has_double_field sql = "#{db_table}.#{db_field} IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")" + sql << " OR #{db_table}.#{db_field2} IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")" if has_double_field when "!" sql = "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + "))" when "!*" Index: config/locales/en.yml =================================================================== --- config/locales/en.yml (revision 2823) +++ config/locales/en.yml (working copy) @@ -161,6 +161,7 @@ field_description: Description field_summary: Summary field_is_required: Required + field_ever_assigned_to: Ever assigned to field_firstname: Firstname field_lastname: Lastname field_mail: Email