diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2014-02-07 07:57:59 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2014-02-07 07:57:59 +0000 |
commit | 7b127ee489a134436ab457467c2da42e32aa652d (patch) | |
tree | 3b0437c386393ba8690998debd616a76a7f4b312 | |
parent | 09b95905dc2df3476ac46d2266bb6c9fd4bc2c93 (diff) | |
download | redmine-7b127ee489a134436ab457467c2da42e32aa652d.tar.gz redmine-7b127ee489a134436ab457467c2da42e32aa652d.zip |
Show tabs for existing custom field types only and adds a view for choosing the type when adding a new custom field.
git-svn-id: http://svn.redmine.org/redmine/trunk@12849 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/controllers/custom_fields_controller.rb | 2 | ||||
-rw-r--r-- | app/helpers/application_helper.rb | 8 | ||||
-rw-r--r-- | app/helpers/custom_fields_helper.rb | 9 | ||||
-rw-r--r-- | app/views/common/_tabs.html.erb | 2 | ||||
-rw-r--r-- | app/views/custom_fields/_index.html.erb | 2 | ||||
-rw-r--r-- | app/views/custom_fields/index.html.erb | 10 | ||||
-rw-r--r-- | app/views/custom_fields/select_type.html.erb | 15 | ||||
-rw-r--r-- | config/locales/en.yml | 1 | ||||
-rw-r--r-- | config/locales/fr.yml | 1 | ||||
-rw-r--r-- | test/functional/custom_fields_controller_test.rb | 21 |
10 files changed, 59 insertions, 12 deletions
diff --git a/app/controllers/custom_fields_controller.rb b/app/controllers/custom_fields_controller.rb index 3f721b145..28178e98b 100644 --- a/app/controllers/custom_fields_controller.rb +++ b/app/controllers/custom_fields_controller.rb @@ -77,7 +77,7 @@ class CustomFieldsController < ApplicationController def build_new_custom_field @custom_field = CustomField.new_subclass_instance(params[:type], params[:custom_field]) if @custom_field.nil? - render_404 + render :action => 'select_type' end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 25096a11d..363653cd8 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -309,9 +309,13 @@ module ApplicationHelper end # Renders tabs and their content - def render_tabs(tabs) + def render_tabs(tabs, selected=params[:tab]) if tabs.any? - render :partial => 'common/tabs', :locals => {:tabs => tabs} + unless tabs.detect {|tab| tab[:name] == selected} + selected = nil + end + selected ||= tabs.first[:name] + render :partial => 'common/tabs', :locals => {:tabs => tabs, :selected_tab => selected} else content_tag 'p', l(:label_no_data), :class => "nodata" end diff --git a/app/helpers/custom_fields_helper.rb b/app/helpers/custom_fields_helper.rb index 5447130a5..173e0d5f8 100644 --- a/app/helpers/custom_fields_helper.rb +++ b/app/helpers/custom_fields_helper.rb @@ -40,8 +40,13 @@ module CustomFieldsHelper :label => DocumentCategory::OptionName} ] - def custom_fields_tabs - CUSTOM_FIELDS_TABS + def render_custom_fields_tabs(types) + tabs = CUSTOM_FIELDS_TABS.select {|h| types.include?(h[:name]) } + render_tabs tabs + end + + def custom_field_type_options + CUSTOM_FIELDS_TABS.map {|h| [l(h[:label]), h[:name]]} end def render_custom_field_format_partial(form, custom_field) diff --git a/app/views/common/_tabs.html.erb b/app/views/common/_tabs.html.erb index 8cbcda51a..34fd570ea 100644 --- a/app/views/common/_tabs.html.erb +++ b/app/views/common/_tabs.html.erb @@ -1,5 +1,3 @@ -<% selected_tab = params[:tab] ? params[:tab].to_s : tabs.first[:name] %> - <div class="tabs"> <ul> <% tabs.each do |tab| -%> diff --git a/app/views/custom_fields/_index.html.erb b/app/views/custom_fields/_index.html.erb index 4752c2519..0b578d6ee 100644 --- a/app/views/custom_fields/_index.html.erb +++ b/app/views/custom_fields/_index.html.erb @@ -28,5 +28,3 @@ <% end; reset_cycle %> </tbody> </table> - -<p><%= link_to l(:label_custom_field_new), new_custom_field_path(:type => tab[:name]), :class => 'icon icon-add' %></p> diff --git a/app/views/custom_fields/index.html.erb b/app/views/custom_fields/index.html.erb index b4e87f066..e4464132f 100644 --- a/app/views/custom_fields/index.html.erb +++ b/app/views/custom_fields/index.html.erb @@ -1,3 +1,11 @@ +<div class="contextual"> +<%= link_to l(:label_custom_field_new), new_custom_field_path, :class => 'icon icon-add' %> +</div> + <%= title l(:label_custom_field_plural) %> -<%= render_tabs custom_fields_tabs %> +<% if @custom_fields_by_type.present? %> + <%= render_custom_fields_tabs(@custom_fields_by_type.keys) %> +<% else %> + <p class="nodata"><%= l(:label_no_data) %></p> +<% end %> diff --git a/app/views/custom_fields/select_type.html.erb b/app/views/custom_fields/select_type.html.erb new file mode 100644 index 000000000..fd9c5a210 --- /dev/null +++ b/app/views/custom_fields/select_type.html.erb @@ -0,0 +1,15 @@ +<%= title [l(:label_custom_field_plural), custom_fields_path], + l(:label_custom_field_new) %> + +<% selected = 0 %> +<%= form_tag new_custom_field_path, :method => 'get' do %> + <div class="box"> + <p><%= l(:label_custom_field_select_type) %>:</p> + <p> + <% custom_field_type_options.each do |name, type| %> + <label style="display:block;"><%= radio_button_tag 'type', type, 1==selected+=1 %> <%= name %></label> + <% end %> + </p> + </div> + <p><%= submit_tag l(:label_next).html_safe + " »".html_safe, :name => nil %></p> +<% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index c9256ae40..39b7d8f04 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -910,6 +910,7 @@ en: label_drop_down_list: drop-down list label_checkboxes: checkboxes label_link_values_to: Link values to URL + label_custom_field_select_type: Select the type of object to which the custom field is to be attached button_login: Login button_submit: Submit diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 2eff8fcd3..ad7ca550d 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -886,6 +886,7 @@ fr: label_drop_down_list: liste déroulante label_checkboxes: cases à cocher label_link_values_to: Lier les valeurs vers l'URL + label_custom_field_select_type: Selectionner le type d'objet auquel attacher le champ personnalisé button_login: Connexion button_submit: Soumettre diff --git a/test/functional/custom_fields_controller_test.rb b/test/functional/custom_fields_controller_test.rb index 394ede20a..76579d74a 100644 --- a/test/functional/custom_fields_controller_test.rb +++ b/test/functional/custom_fields_controller_test.rb @@ -30,6 +30,14 @@ class CustomFieldsControllerTest < ActionController::TestCase assert_template 'index' end + def test_new_without_type_should_render_select_type + get :new + assert_response :success + assert_template 'select_type' + assert_select 'input[name=type]', CustomField.subclasses.size + assert_select 'input[name=type][checked=checked]', 1 + end + def test_new_should_work_for_each_customized_class_and_format custom_field_classes.each do |klass| Redmine::FieldFormat.available_formats.each do |format_name| @@ -113,9 +121,10 @@ class CustomFieldsControllerTest < ActionController::TestCase assert_equal 'list', field.field_format end - def test_new_with_invalid_custom_field_class_should_render_404 + def test_new_with_invalid_custom_field_class_should_render_select_type get :new, :type => 'UnknownCustomField' - assert_response 404 + assert_response :success + assert_template 'select_type' end def test_create_list_custom_field @@ -160,6 +169,14 @@ class CustomFieldsControllerTest < ActionController::TestCase assert_template 'new' end + def test_create_without_type_should_render_select_type + assert_no_difference 'CustomField.count' do + post :create, :custom_field => {:name => ''} + end + assert_response :success + assert_template 'select_type' + end + def test_edit get :edit, :id => 1 assert_response :success |