diff --git a/app/models/issue_category.rb b/app/models/issue_category.rb index 6476cfbce..20bb77842 100644 --- a/app/models/issue_category.rb +++ b/app/models/issue_category.rb @@ -29,6 +29,10 @@ class IssueCategory < ActiveRecord::Base safe_attributes 'name', 'assigned_to_id' scope :named, lambda {|arg| where("LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip)} + scope :visible, lambda {|*args| + joins(:project). + where(Project.allowed_to_condition(args.first || User.current, :view_issues)) + } alias :destroy_without_reassign :destroy diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 6d1298c1f..5771abb2e 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -124,7 +124,7 @@ class IssueQuery < Query add_available_filter "category_id", :type => :list_optional, - :values => lambda { project.issue_categories.collect{|s| [s.name, s.id.to_s] } } if project + :values => lambda { issue_category_values } add_available_filter "subject", :type => :text add_available_filter "description", :type => :text diff --git a/app/models/project.rb b/app/models/project.rb index 420306889..2d1b134e8 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -323,6 +323,7 @@ class Project < ActiveRecord::Base @users = nil @shared_versions = nil @rolled_up_versions = nil + @rolled_up_issue_categories = nil @rolled_up_trackers = nil @rolled_up_custom_fields = nil @all_issue_custom_fields = nil @@ -471,6 +472,13 @@ class Project < ActiveRecord::Base where("#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status <> ?", lft, rgt, STATUS_ARCHIVED) end + def rolled_up_issue_categories + @rolled_up_issue_categories ||= + IssueCategory. + joins(:project). + where("#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status <> ?", lft, rgt, STATUS_ARCHIVED) + end + # Returns a scope of the Versions used by the project def shared_versions if new_record? diff --git a/app/models/query.rb b/app/models/query.rb index 863bdbc4a..a21e77df2 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -551,6 +551,16 @@ class Query < ActiveRecord::Base Version.sort_by_status(versions).collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s, l("version_status_#{s.status}")] } end + def issue_category_values + categories = [] + if project + categories = project.rolled_up_issue_categories.to_a + else + categories = IssueCategory.visible.to_a + end + categories.collect {|c| [c.name, c.id.to_s] } + end + # Returns a scope of issue custom fields that are available as columns or filters def issue_custom_fields if project