diff options
Diffstat (limited to 'app/models/issue_query.rb')
-rw-r--r-- | app/models/issue_query.rb | 81 |
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 |