summaryrefslogtreecommitdiffstats
path: root/app/models/issue_query.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/issue_query.rb')
-rw-r--r--app/models/issue_query.rb81
1 files changed, 20 insertions, 61 deletions
diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb
index 137764e82..3e2e7a64d 100644
--- a/app/models/issue_query.rb
+++ b/app/models/issue_query.rb
@@ -78,80 +78,37 @@ class IssueQuery < Query
end
def initialize_available_filters
- principals = []
- subprojects = []
- versions = []
- categories = []
- issue_custom_fields = []
-
- if project
- principals += project.principals.visible
- unless project.leaf?
- subprojects = project.descendants.visible.to_a
- principals += Principal.member_of(subprojects).visible
- end
- versions = project.shared_versions.to_a
- categories = project.issue_categories.to_a
- issue_custom_fields = project.all_issue_custom_fields
- else
- if all_projects.any?
- principals += Principal.member_of(all_projects).visible
- end
- versions = Version.visible.where(:sharing => 'system').to_a
- issue_custom_fields = IssueCustomField.where(:is_for_all => true)
- end
- principals.uniq!
- principals.sort!
- principals.reject! {|p| p.is_a?(GroupBuiltin)}
- users = principals.select {|p| p.is_a?(User)}
-
add_available_filter "status_id",
- :type => :list_status, :values => IssueStatus.sorted.collect{|s| [s.name, s.id.to_s] }
+ :type => :list_status, :values => lambda { IssueStatus.sorted.collect{|s| [s.name, s.id.to_s] } }
- if project.nil?
- project_values = []
- if User.current.logged? && User.current.memberships.any?
- project_values << ["<< #{l(:label_my_projects).downcase} >>", "mine"]
- end
- project_values += all_projects_values
- add_available_filter("project_id",
- :type => :list, :values => project_values
- ) unless project_values.empty?
- end
+ add_available_filter("project_id",
+ :type => :list, :values => lambda { project_values }
+ ) if project.nil?
add_available_filter "tracker_id",
:type => :list, :values => trackers.collect{|s| [s.name, s.id.to_s] }
+
add_available_filter "priority_id",
:type => :list, :values => IssuePriority.all.collect{|s| [s.name, s.id.to_s] }
- author_values = []
- author_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
- author_values += users.collect{|s| [s.name, s.id.to_s] }
add_available_filter("author_id",
- :type => :list, :values => author_values
- ) unless author_values.empty?
+ :type => :list, :values => lambda { author_values }
+ )
- assigned_to_values = []
- assigned_to_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
- assigned_to_values += (Setting.issue_group_assignment? ?
- principals : users).collect{|s| [s.name, s.id.to_s] }
add_available_filter("assigned_to_id",
- :type => :list_optional, :values => assigned_to_values
- ) unless assigned_to_values.empty?
+ :type => :list_optional, :values => lambda { assigned_to_values }
+ )
- group_values = Group.givable.visible.collect {|g| [g.name, g.id.to_s] }
add_available_filter("member_of_group",
- :type => :list_optional, :values => group_values
- ) unless group_values.empty?
+ :type => :list_optional, :values => lambda { Group.givable.visible.collect {|g| [g.name, g.id.to_s] } }
+ )
- role_values = Role.givable.collect {|r| [r.name, r.id.to_s] }
add_available_filter("assigned_to_role",
- :type => :list_optional, :values => role_values
- ) unless role_values.empty?
+ :type => :list_optional, :values => lambda { Role.givable.collect {|r| [r.name, r.id.to_s] } }
+ )
add_available_filter "fixed_version_id",
- :type => :list_optional,
- :values => Version.sort_by_status(versions).collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s, l("version_status_#{s.status}")] }
+ :type => :list_optional, :values => lambda { fixed_version_values }
add_available_filter "fixed_version.due_date",
:type => :date,
@@ -164,7 +121,7 @@ class IssueQuery < Query
add_available_filter "category_id",
:type => :list_optional,
- :values => categories.collect{|s| [s.name, s.id.to_s] }
+ :values => lambda { project.issue_categories.collect{|s| [s.name, s.id.to_s] } } if project
add_available_filter "subject", :type => :text
add_available_filter "description", :type => :text
@@ -188,18 +145,20 @@ class IssueQuery < Query
:type => :list, :values => [["<< #{l(:label_me)} >>", "me"]]
end
- if subprojects.any?
+ if project && !project.leaf?
add_available_filter "subproject_id",
:type => :list_subprojects,
- :values => subprojects.collect{|s| [s.name, s.id.to_s] }
+ :values => lambda { subproject_values }
end
+
+ issue_custom_fields = project ? project.all_issue_custom_fields : IssueCustomField.where(:is_for_all => true)
add_custom_fields_filters(issue_custom_fields)
add_associations_custom_fields_filters :project, :author, :assigned_to, :fixed_version
IssueRelation::TYPES.each do |relation_type, options|
- add_available_filter relation_type, :type => :relation, :label => options[:name]
+ add_available_filter relation_type, :type => :relation, :label => options[:name], :values => lambda {all_projects_values}
end
add_available_filter "parent_id", :type => :tree, :label => :field_parent_issue
add_available_filter "child_id", :type => :tree, :label => :label_subtask_plural