Commit e00297c0 authored by jplang's avatar jplang

Query through multiple projects by issue custom field not possible anymore (#25501).

git-svn-id: https://svn.redmine.org/redmine/trunk@16467 e93f8b46-1217-0410-a6f0-8f06a7374b81
parent fa36e0b8
......@@ -164,10 +164,7 @@ class IssueQuery < Query
: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|
......@@ -186,10 +183,7 @@ class IssueQuery < Query
def available_columns
return @available_columns if @available_columns
@available_columns = self.class.available_columns.dup
@available_columns += (project ?
project.all_issue_custom_fields :
IssueCustomField
).visible.collect {|cf| QueryCustomFieldColumn.new(cf) }
@available_columns += issue_custom_fields.visible.collect {|cf| QueryCustomFieldColumn.new(cf) }
if User.current.allowed_to?(:view_time_entries, project, :global => true)
index = @available_columns.find_index {|column| column.name == :total_estimated_hours}
......
......@@ -325,6 +325,7 @@ class Project < ActiveRecord::Base
@shared_versions = nil
@rolled_up_versions = nil
@rolled_up_trackers = nil
@rolled_up_custom_fields = nil
@all_issue_custom_fields = nil
@all_time_entry_custom_fields = nil
@to_param = nil
......@@ -579,6 +580,22 @@ class Project < ActiveRecord::Base
end
end
# Returns a scope of all custom fields enabled for issues of the project
# and its subprojects
def rolled_up_custom_fields
if leaf?
all_issue_custom_fields
else
@rolled_up_custom_fields ||= IssueCustomField.
sorted.
where("is_for_all = ? OR EXISTS (SELECT 1" +
" FROM #{table_name_prefix}custom_fields_projects#{table_name_suffix} cfp" +
" JOIN #{Project.table_name} p ON p.id = cfp.project_id" +
" WHERE cfp.custom_field_id = #{CustomField.table_name}.id" +
" AND p.lft >= ? AND p.rgt <= ?)", true, lft, rgt)
end
end
def project
self
end
......
......@@ -551,6 +551,15 @@ 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
# Returns a scope of issue custom fields that are available as columns or filters
def issue_custom_fields
if project
project.rolled_up_custom_fields
else
IssueCustomField.all
end
end
# Adds available filters
def initialize_available_filters
# implemented by sub-classes
......
......@@ -218,12 +218,4 @@ class TimeEntryQuery < Query
joins.compact!
joins.any? ? joins.join(' ') : nil
end
def issue_custom_fields
if project
project.all_issue_custom_fields
else
IssueCustomField.where(:is_for_all => true)
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment