##// END OF EJS Templates
Fixed that custom fields with hidden/read-only combination may be displayed on issue form (#19297)....
Jean-Philippe Lang -
r13755:84c8ca6fefa3
parent child
Show More
@@ -548,13 +548,27 class Issue < ActiveRecord::Base
548 workflow_permissions = WorkflowPermission.where(:tracker_id => tracker_id, :old_status_id => status_id, :role_id => roles.map(&:id)).to_a
548 workflow_permissions = WorkflowPermission.where(:tracker_id => tracker_id, :old_status_id => status_id, :role_id => roles.map(&:id)).to_a
549 if workflow_permissions.any?
549 if workflow_permissions.any?
550 workflow_rules = workflow_permissions.inject({}) do |h, wp|
550 workflow_rules = workflow_permissions.inject({}) do |h, wp|
551 h[wp.field_name] ||= []
551 h[wp.field_name] ||= {}
552 h[wp.field_name] << wp.rule
552 h[wp.field_name][wp.role_id] = wp.rule
553 h
553 h
554 end
554 end
555 fields_with_roles = {}
556 IssueCustomField.where(:visible => false).joins(:roles).pluck(:id, "role_id").each do |field_id, role_id|
557 fields_with_roles[field_id] ||= []
558 fields_with_roles[field_id] << role_id
559 end
560 roles.each do |role|
561 fields_with_roles.each do |field_id, role_ids|
562 unless role_ids.include?(role.id)
563 field_name = field_id.to_s
564 workflow_rules[field_name] ||= {}
565 workflow_rules[field_name][role.id] = 'readonly'
566 end
567 end
568 end
555 workflow_rules.each do |attr, rules|
569 workflow_rules.each do |attr, rules|
556 next if rules.size < roles.size
570 next if rules.size < roles.size
557 uniq_rules = rules.uniq
571 uniq_rules = rules.values.uniq
558 if uniq_rules.size == 1
572 if uniq_rules.size == 1
559 result[attr] = uniq_rules.first
573 result[attr] = uniq_rules.first
560 else
574 else
@@ -911,7 +911,7 class IssueTest < ActiveSupport::TestCase
911 assert_equal [], issue.required_attribute_names(user.reload)
911 assert_equal [], issue.required_attribute_names(user.reload)
912
912
913 WorkflowPermission.create!(:old_status_id => 1, :tracker_id => 1,
913 WorkflowPermission.create!(:old_status_id => 1, :tracker_id => 1,
914 :role_id => 2, :field_name => 'due_date',
914 :role_id => 3, :field_name => 'due_date',
915 :rule => 'readonly')
915 :rule => 'readonly')
916 # required + readonly => required
916 # required + readonly => required
917 assert_equal %w(due_date), issue.required_attribute_names(user)
917 assert_equal %w(due_date), issue.required_attribute_names(user)
@@ -941,6 +941,23 class IssueTest < ActiveSupport::TestCase
941 assert_equal %w(due_date), issue.read_only_attribute_names(user)
941 assert_equal %w(due_date), issue.read_only_attribute_names(user)
942 end
942 end
943
943
944 # A field that is not visible by role 2 and readonly by role 1 should be readonly for user with role 1 and 2
945 def test_read_only_attribute_names_should_include_custom_fields_that_combine_readonly_and_not_visible_for_roles
946 field = IssueCustomField.generate!(
947 :is_for_all => true, :trackers => Tracker.all, :visible => false, :role_ids => [1]
948 )
949 WorkflowPermission.delete_all
950 WorkflowPermission.create!(
951 :old_status_id => 1, :tracker_id => 1, :role_id => 1, :field_name => field.id, :rule => 'readonly'
952 )
953 user = User.generate!
954 project = Project.find(1)
955 User.add_to_project(user, project, Role.where(:id => [1, 2]))
956
957 issue = Issue.new(:project_id => 1, :tracker_id => 1, :status_id => 1)
958 assert_equal [field.id.to_s], issue.read_only_attribute_names(user)
959 end
960
944 def test_workflow_rules_should_ignore_roles_without_issue_permissions
961 def test_workflow_rules_should_ignore_roles_without_issue_permissions
945 role = Role.generate! :permissions => [:view_issues, :edit_issues]
962 role = Role.generate! :permissions => [:view_issues, :edit_issues]
946 ignored_role = Role.generate! :permissions => [:view_issues]
963 ignored_role = Role.generate! :permissions => [:view_issues]
General Comments 0
You need to be logged in to leave comments. Login now