From 45a88ecff7f5760f2102b30dd954194c357fc550 Mon Sep 17 00:00:00 2001 From: Rodrigo Souto Date: Mon, 27 Jan 2014 20:51:58 +0000 Subject: [PATCH] custom-forms-helper: encapsulate disabled logic and select default value --- plugins/custom_forms/lib/custom_forms_plugin/helper.rb | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/plugins/custom_forms/lib/custom_forms_plugin/helper.rb b/plugins/custom_forms/lib/custom_forms_plugin/helper.rb index 4b1a76c..7f158b2 100644 --- a/plugins/custom_forms/lib/custom_forms_plugin/helper.rb +++ b/plugins/custom_forms/lib/custom_forms_plugin/helper.rb @@ -75,28 +75,36 @@ module CustomFormsPlugin::Helper end end + def display_disabled?(field, answer) + (answer.present? && answer.id.present?) || field.form.expired? + end + def display_text_field(field, answer, form) value = answer.present? ? answer.value : field.default_value - text_field(form, "#{field.id}", :value => value, :disabled => (answer.present? && answer.id.present?) || field.form.expired? ) + text_field(form, "#{field.id}", :value => value, :disabled => display_disabled?(field, answer)) + end + + def default_selected(field, answer) + answer.present? ? answer.value.split(',') : field.alternatives.select {|a| a.selected_by_default}.map{|a| a.id.to_s} end def display_select_field(field, answer, form) case field.select_field_type + when 'select' + selected = default_selected(field, answer) + select_tag form.to_s + "[#{field.id}]", options_for_select([['','']] + field.alternatives.map {|a| [a.label, a.id.to_s]}, selected), :disabled => display_disabled?(field, answer) when 'multiple_select' - selected = answer.present? ? answer.value.split(',') : field.alternatives.select {|a| a.selected_by_default}.map{|a| a.id.to_s} - select_tag form.to_s + "[#{field.id}]", options_for_select(field.alternatives.map{|a| [a.label, a.id.to_s]}, selected), :multiple => true, :title => _('Hold down Ctrl to select options'), :size => field.alternatives.size, :disabled => (answer.present? && answer.id.present?) || field.form.expired? + selected = default_selected(field, answer) + select_tag form.to_s + "[#{field.id}]", options_for_select(field.alternatives.map{|a| [a.label, a.id.to_s]}, selected), :multiple => true, :title => _('Hold down Ctrl to select options'), :size => field.alternatives.size, :disabled => display_disabled?(field, answer) when 'check_box' field.alternatives.map do |alternative| default = answer.present? ? answer.value.split(',').include?(alternative.id.to_s) : alternative.selected_by_default - labelled_check_box alternative.label, form.to_s + "[#{field.id}][#{alternative.id}]", '1', default, :disabled => (answer.present? && answer.id.present?) || field.form.expired? + labelled_check_box alternative.label, form.to_s + "[#{field.id}][#{alternative.id}]", '1', default, :disabled => display_disabled?(field, answer) end.join("\n") - when 'select' - selected = answer.present? ? answer.value.split(',') : field.alternatives.select {|a| a.selected_by_default}.map{|a| a.id.to_s} - select_tag form.to_s + "[#{field.id}]", options_for_select([['','']] + field.alternatives.map {|a| [a.label, a.id.to_s]}, selected), :disabled => (answer.present? && answer.id.present?) || field.form.expired? when 'radio' field.alternatives.map do |alternative| default = answer.present? ? answer.value == alternative.id.to_s : alternative.selected_by_default - labelled_radio_button alternative.label, form.to_s + "[#{field.id}]", alternative.id, default, :disabled => (answer.present? && answer.id.present?) || field.form.expired? + labelled_radio_button alternative.label, form.to_s + "[#{field.id}]", alternative.id, default, :disabled => display_disabled?(field, answer) end.join("\n") end end -- libgit2 0.21.2