diff app/models/issue_custom_field.rb @ 1517:dffacf8a6908 redmine-2.5

Update to Redmine SVN revision 13367 on 2.5-stable branch
author Chris Cannam
date Tue, 09 Sep 2014 09:29:00 +0100
parents e248c7af89ec
children
line wrap: on
line diff
--- a/app/models/issue_custom_field.rb	Tue Sep 09 09:28:31 2014 +0100
+++ b/app/models/issue_custom_field.rb	Tue Sep 09 09:29:00 2014 +0100
@@ -28,13 +28,14 @@
     super || (roles & user.roles_for_project(project)).present?
   end
 
-  def visibility_by_project_condition(*args)
+  def visibility_by_project_condition(project_key=nil, user=User.current, id_column=nil)
     sql = super
-    additional_sql = "#{Issue.table_name}.tracker_id IN (SELECT tracker_id FROM #{table_name_prefix}custom_fields_trackers#{table_name_suffix} WHERE custom_field_id = #{id})"
-    unless is_for_all?
-      additional_sql << " AND #{Issue.table_name}.project_id IN (SELECT project_id FROM #{table_name_prefix}custom_fields_projects#{table_name_suffix} WHERE custom_field_id = #{id})"
-    end
-    "((#{sql}) AND (#{additional_sql}))"
+    id_column ||= id
+    tracker_condition = "#{Issue.table_name}.tracker_id IN (SELECT tracker_id FROM #{table_name_prefix}custom_fields_trackers#{table_name_suffix} WHERE custom_field_id = #{id_column})"
+    project_condition = "EXISTS (SELECT 1 FROM #{CustomField.table_name} ifa WHERE ifa.is_for_all = #{connection.quoted_true} AND ifa.id = #{id_column})" + 
+      " OR #{Issue.table_name}.project_id IN (SELECT project_id FROM #{table_name_prefix}custom_fields_projects#{table_name_suffix} WHERE custom_field_id = #{id_column})"
+
+    "((#{sql}) AND (#{tracker_condition}) AND (#{project_condition}))"
   end
 
   def validate_custom_field