From 6c4b73b448fa4cc1614a1bec93beeaaacdb62510 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Mon, 3 Apr 2017 14:04:04 +0000 Subject: [PATCH] Query through multiple projects by issue custom field not possible anymore (#25501). git-svn-id: http://svn.redmine.org/redmine/trunk@16467 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/issue_query.rb | 8 +------- app/models/project.rb | 17 +++++++++++++++++ app/models/query.rb | 9 +++++++++ app/models/time_entry_query.rb | 8 -------- 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 9f3bf290d..5ca76a5bc 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -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} diff --git a/app/models/project.rb b/app/models/project.rb index 3d8878ca2..a425d8ca7 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -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 diff --git a/app/models/query.rb b/app/models/query.rb index a0f1969e3..863bdbc4a 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -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 diff --git a/app/models/time_entry_query.rb b/app/models/time_entry_query.rb index 656415d66..eab1113e2 100644 --- a/app/models/time_entry_query.rb +++ b/app/models/time_entry_query.rb @@ -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 -- 2.39.5