From 13e381d31de0055905bd95813fc8034582b2dedc Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 20 Oct 2013 08:29:55 +0000 Subject: [PATCH] Projects selection on custom field form (#15136). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@12225 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/views/custom_fields/_form.html.erb | 49 +++++++++++++------ app/views/custom_fields/edit.html.erb | 1 - app/views/custom_fields/new.html.erb | 1 - public/javascripts/application.js | 6 +-- public/stylesheets/application.css | 2 +- .../custom_fields_controller_test.rb | 25 +++++++++- 6 files changed, 61 insertions(+), 23 deletions(-) diff --git a/app/views/custom_fields/_form.html.erb b/app/views/custom_fields/_form.html.erb index 4c0b70243..356d0bca3 100644 --- a/app/views/custom_fields/_form.html.erb +++ b/app/views/custom_fields/_form.html.erb @@ -1,5 +1,9 @@ <%= error_messages_for 'custom_field' %> +<% if @custom_field.is_a?(IssueCustomField) %> +
+<% end %> +

<%= f.text_field :name, :required => true %>

<%= f.select :field_format, custom_field_formats_for_select(@custom_field), {}, :disabled => !@custom_field.new_record? %>

@@ -46,20 +50,6 @@
<% case @custom_field.class.name when "IssueCustomField" %> - -
<%=l(:label_tracker_plural)%> - <% Tracker.sorted.all.each do |tracker| %> - <%= check_box_tag "custom_field[tracker_ids][]", - tracker.id, - (@custom_field.trackers.include? tracker), - :id => "custom_field_tracker_ids_#{tracker.id}" %> - - <% end %> - <%= hidden_field_tag "custom_field[tracker_ids][]", '' %> -
-  

<%= f.check_box :is_required %>

<%= f.check_box :is_for_all %>

<%= f.check_box :is_filter %>

@@ -113,6 +103,33 @@ when "IssueCustomField" %> <% end %> <%= call_hook(:"view_custom_fields_form_#{@custom_field.type.to_s.underscore}", :custom_field => @custom_field, :form => f) %>
+<%= submit_tag l(:button_save) %> + +<% if @custom_field.is_a?(IssueCustomField) %> +
+
+
<%=l(:label_tracker_plural)%> + <% Tracker.sorted.all.each do |tracker| %> + <%= check_box_tag "custom_field[tracker_ids][]", + tracker.id, + (@custom_field.trackers.include? tracker), + :id => "custom_field_tracker_ids_#{tracker.id}" %> + + <% end %> + <%= hidden_field_tag "custom_field[tracker_ids][]", '' %> +
+ +
<%= l(:label_project_plural) %> + <%= render_project_nested_lists(Project.all) do |p| + content_tag('label', check_box_tag('custom_field[project_ids][]', p.id, @custom_field.projects.to_a.include?(p), :id => nil) + ' ' + h(p)) + end %> + <%= hidden_field_tag('custom_field[project_ids][]', '', :id => nil) %> +

<%= check_all_links 'custom_field_project_ids' %>

+
+
+<% end %> <% include_calendar_headers_tags %> @@ -123,4 +140,8 @@ function toggleCustomFieldRoles(){ } $("#custom_field_visible_on, #custom_field_visible_off").change(toggleCustomFieldRoles); $(document).ready(toggleCustomFieldRoles); + +$("#custom_field_is_for_all").change(function(){ + $("#custom_field_project_ids input").attr("disabled", $(this).is(":checked")); +}).trigger('change'); <% end %> diff --git a/app/views/custom_fields/edit.html.erb b/app/views/custom_fields/edit.html.erb index 803ba0558..cd52e0075 100644 --- a/app/views/custom_fields/edit.html.erb +++ b/app/views/custom_fields/edit.html.erb @@ -4,5 +4,4 @@ <%= labelled_form_for :custom_field, @custom_field, :url => custom_field_path(@custom_field), :html => {:method => :put, :id => 'custom_field_form'} do |f| %> <%= render :partial => 'form', :locals => { :f => f } %> -<%= submit_tag l(:button_save) %> <% end %> diff --git a/app/views/custom_fields/new.html.erb b/app/views/custom_fields/new.html.erb index 7af7735f0..69328412e 100644 --- a/app/views/custom_fields/new.html.erb +++ b/app/views/custom_fields/new.html.erb @@ -5,7 +5,6 @@ <%= labelled_form_for :custom_field, @custom_field, :url => custom_fields_path, :html => {:id => 'custom_field_form'} do |f| %> <%= render :partial => 'form', :locals => { :f => f } %> <%= hidden_field_tag 'type', @custom_field.type %> -<%= submit_tag l(:button_save) %> <% end %> <%= javascript_tag do %> diff --git a/public/javascripts/application.js b/public/javascripts/application.js index e102af275..8ffef5bf0 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -2,11 +2,7 @@ Copyright (C) 2006-2013 Jean-Philippe Lang */ function checkAll(id, checked) { - if (checked) { - $('#'+id).find('input[type=checkbox]').attr('checked', true); - } else { - $('#'+id).find('input[type=checkbox]').removeAttr('checked'); - } + $('#'+id).find('input[type=checkbox]:enabled').attr('checked', checked); } function toggleCheckboxesBySelector(selector) { diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 13860beeb..c145abd5c 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -433,7 +433,7 @@ ul.projects li {list-style-type:none;} #projects-index ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; } .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; } -#notified-projects ul, #tracker_project_ids ul {max-height:250px; overflow-y:auto;} +#notified-projects ul, #tracker_project_ids ul, #custom_field_project_ids ul {max-height:250px; overflow-y:auto;} #related-issues li img {vertical-align:middle;} diff --git a/test/functional/custom_fields_controller_test.rb b/test/functional/custom_fields_controller_test.rb index c7efcfeb6..1a91fc306 100644 --- a/test/functional/custom_fields_controller_test.rb +++ b/test/functional/custom_fields_controller_test.rb @@ -18,7 +18,7 @@ require File.expand_path('../../test_helper', __FILE__) class CustomFieldsControllerTest < ActionController::TestCase - fixtures :custom_fields, :custom_values, :trackers, :users + fixtures :custom_fields, :custom_values, :trackers, :users, :projects def setup @request.session[:user_id] = 1 @@ -52,10 +52,22 @@ class CustomFieldsControllerTest < ActionController::TestCase assert_select 'option[value=user]', :text => 'User' assert_select 'option[value=version]', :text => 'Version' end + assert_select 'input[type=checkbox][name=?]', 'custom_field[project_ids][]', Project.count + assert_select 'input[type=hidden][name=?]', 'custom_field[project_ids][]', 1 assert_select 'input[type=hidden][name=type][value=IssueCustomField]' end end + def test_new_time_entry_custom_field_should_not_show_trackers_and_projects + get :new, :type => 'TimeEntryCustomField' + assert_response :success + assert_template 'new' + assert_select 'form#custom_field_form' do + assert_select 'input[name=?]', 'custom_field[tracker_ids][]', 0 + assert_select 'input[name=?]', 'custom_field[project_ids][]', 0 + end + end + def test_default_value_should_be_an_input_for_string_custom_field get :new, :type => 'IssueCustomField', :custom_field => {:field_format => 'string'} assert_response :success @@ -118,6 +130,17 @@ class CustomFieldsControllerTest < ActionController::TestCase assert_equal 1, field.trackers.size end + def test_create_with_project_ids + assert_difference 'CustomField.count' do + post :create, :type => "IssueCustomField", :custom_field => { + :name => "foo", :field_format => "string", :is_for_all => "0", :project_ids => ["1", "3", ""] + } + assert_response 302 + end + field = IssueCustomField.order("id desc").first + assert_equal [1, 3], field.projects.map(&:id).sort + end + def test_create_with_failure assert_no_difference 'CustomField.count' do post :create, :type => "IssueCustomField", :custom_field => {:name => ''} -- 2.39.5