From 81575e7291adee92ecaa0757c1859d66506c66bf Mon Sep 17 00:00:00 2001 From: Marius Balteanu Date: Mon, 21 Mar 2022 22:13:19 +0000 Subject: [PATCH] Skip validation of required custom fields when creating a project if user does not have permissions to see those custom fields (#36593). Patch by mathieu-mbru. git-svn-id: https://svn.redmine.org/redmine/trunk@21488 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/project.rb | 11 +++++++++++ app/views/boards/new.html.erb | 4 ++-- test/unit/project_test.rb | 7 +++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index 90ef0e2e9..7ba9b4197 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -963,6 +963,17 @@ class Project < ActiveRecord::Base end end + # Overrides Redmine::Acts::Customizable::InstanceMethods#validate_custom_field_values + # so that custom values that are not editable are not validated (eg. a custom field that + # is marked as required should not trigger a validation error if the user is not allowed + # to edit this field). + def validate_custom_field_values + user = User.current + if new_record? || custom_field_values_changed? + editable_custom_field_values(user).each(&:validate_value) + end + end + # Returns the custom_field_values that can be edited by the given user def editable_custom_field_values(user=nil) visible_custom_field_values(user) diff --git a/app/views/boards/new.html.erb b/app/views/boards/new.html.erb index acdf43fcf..bf11bd146 100644 --- a/app/views/boards/new.html.erb +++ b/app/views/boards/new.html.erb @@ -1,6 +1,6 @@ -

<%= l(:label_board_new) %>

+<%#

<%= l(:label_board_new) %>

<%= labelled_form_for @board, :url => project_boards_path(@project) do |f| %> <%= render :partial => 'form', :locals => {:f => f} %> <%= submit_tag l(:button_create) %> -<% end %> +<% end %> %> diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb index cf457a48c..bf77b6235 100644 --- a/test/unit/project_test.rb +++ b/test/unit/project_test.rb @@ -358,6 +358,13 @@ class ProjectTest < ActiveSupport::TestCase assert_equal parent.children.sort_by(&:name), parent.children.to_a end + def test_validate_custom_field_values_of_project + User.current = User.find(3) + ProjectCustomField.generate!(:name => 'CustomFieldTest', :field_format => 'int', :is_required => true, :visible => false, :role_ids => [1]) + p = Project.new(:name => 'Project test', :identifier => 'project-t') + assert p.save! + end + def test_set_parent_should_update_issue_fixed_version_associations_when_a_fixed_version_is_moved_out_of_the_hierarchy # Parent issue with a hierarchy project's fixed version parent_issue = Issue.find(1) -- 2.39.5