summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2007-03-19 20:31:02 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2007-03-19 20:31:02 +0000
commitdfb81dd89c504daec22a26f0020b8c376609304f (patch)
tree5b80d6fab478c478938760c04e7da46c6f2255d5 /app
parent59e3802c7476591cfa1d50c2008ecf9e67e75828 (diff)
downloadredmine-dfb81dd89c504daec22a26f0020b8c376609304f.tar.gz
redmine-dfb81dd89c504daec22a26f0020b8c376609304f.zip
added back "subproject" filter on issue list
git-svn-id: http://redmine.rubyforge.org/svn/trunk@350 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r--app/models/query.rb19
-rw-r--r--app/views/queries/_filters.rhtml2
2 files changed, 18 insertions, 3 deletions
diff --git a/app/models/query.rb b/app/models/query.rb
index fbf48927a..fcfad6839 100644
--- a/app/models/query.rb
+++ b/app/models/query.rb
@@ -45,6 +45,7 @@ class Query < ActiveRecord::Base
@@operators_by_filter_type = { :list => [ "=", "!" ],
:list_status => [ "o", "=", "!", "c", "*" ],
:list_optional => [ "=", "!", "!*", "*" ],
+ :list_one_or_more => [ "*", "=" ],
:date => [ "<t+", ">t+", "t+", "t", ">t-", "<t-", "t-" ],
:date_past => [ ">t-", "<t-", "t-", "t" ],
:text => [ "~", "!~" ] }
@@ -83,6 +84,9 @@ class Query < ActiveRecord::Base
@available_filters["author_id"] = { :type => :list, :order => 5, :values => @project.users.collect{|s| [s.name, s.id.to_s] } }
@available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => @project.issue_categories.collect{|s| [s.name, s.id.to_s] } }
@available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => @project.versions.collect{|s| [s.name, s.id.to_s] } }
+ unless @project.children.empty?
+ @available_filters["subproject_id"] = { :type => :list_one_or_more, :order => 13, :values => @project.children.collect{|s| [s.name, s.id.to_s] } }
+ end
# remove category filter if no category defined
@available_filters.delete "category_id" if @available_filters["category_id"][:values].empty?
end
@@ -123,9 +127,20 @@ class Query < ActiveRecord::Base
end
def statement
- sql = "1=1"
- sql << " AND #{Issue.table_name}.project_id=%d" % project.id if project
+ sql = "1=1"
+ if has_filter?("subproject_id")
+ subproject_ids = []
+ if operator_for("subproject_id") == "="
+ subproject_ids = values_for("subproject_id").each(&:to_i)
+ else
+ subproject_ids = project.children.collect{|p| p.id}
+ end
+ sql << " AND #{Issue.table_name}.project_id IN (%d,%s)" % [project.id, subproject_ids.join(",")] if project
+ else
+ sql << " AND #{Issue.table_name}.project_id=%d" % project.id if project
+ end
filters.each_key do |field|
+ next if field == "subproject_id"
v = values_for field
next unless v and !v.empty?
sql = sql + " AND " unless sql.empty?
diff --git a/app/views/queries/_filters.rhtml b/app/views/queries/_filters.rhtml
index aa64dbb8f..0314e30b5 100644
--- a/app/views/queries/_filters.rhtml
+++ b/app/views/queries/_filters.rhtml
@@ -74,7 +74,7 @@ function toggle_multi_select(field) {
<td valign="top">
<div id="div_values_<%= field %>">
<% case options[:type]
- when :list, :list_optional, :list_status %>
+ when :list, :list_optional, :list_status, :list_one_or_more %>
<select <%= "multiple=true" if query.values_for(field) and query.values_for(field).length > 1 %> name="values[<%= field %>][]" id="values_<%= field %>" class="select-small" style="vertical-align: top;">
<%= options_for_select options[:values], query.values_for(field) %>
</select>