Commit 45a88ecff7f5760f2102b30dd954194c357fc550

Authored by Rodrigo Souto
1 parent 4b5140d0

custom-forms-helper: encapsulate disabled logic and select default value

plugins/custom_forms/lib/custom_forms_plugin/helper.rb
@@ -75,28 +75,36 @@ module CustomFormsPlugin::Helper @@ -75,28 +75,36 @@ module CustomFormsPlugin::Helper
75 end 75 end
76 end 76 end
77 77
  78 + def display_disabled?(field, answer)
  79 + (answer.present? && answer.id.present?) || field.form.expired?
  80 + end
  81 +
78 def display_text_field(field, answer, form) 82 def display_text_field(field, answer, form)
79 value = answer.present? ? answer.value : field.default_value 83 value = answer.present? ? answer.value : field.default_value
80 - text_field(form, "#{field.id}", :value => value, :disabled => (answer.present? && answer.id.present?) || field.form.expired? ) 84 + text_field(form, "#{field.id}", :value => value, :disabled => display_disabled?(field, answer))
  85 + end
  86 +
  87 + def default_selected(field, answer)
  88 + answer.present? ? answer.value.split(',') : field.alternatives.select {|a| a.selected_by_default}.map{|a| a.id.to_s}
81 end 89 end
82 90
83 def display_select_field(field, answer, form) 91 def display_select_field(field, answer, form)
84 case field.select_field_type 92 case field.select_field_type
  93 + when 'select'
  94 + selected = default_selected(field, answer)
  95 + 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)
85 when 'multiple_select' 96 when 'multiple_select'
86 - selected = answer.present? ? answer.value.split(',') : field.alternatives.select {|a| a.selected_by_default}.map{|a| a.id.to_s}  
87 - 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? 97 + selected = default_selected(field, answer)
  98 + 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)
88 when 'check_box' 99 when 'check_box'
89 field.alternatives.map do |alternative| 100 field.alternatives.map do |alternative|
90 default = answer.present? ? answer.value.split(',').include?(alternative.id.to_s) : alternative.selected_by_default 101 default = answer.present? ? answer.value.split(',').include?(alternative.id.to_s) : alternative.selected_by_default
91 - labelled_check_box alternative.label, form.to_s + "[#{field.id}][#{alternative.id}]", '1', default, :disabled => (answer.present? && answer.id.present?) || field.form.expired? 102 + labelled_check_box alternative.label, form.to_s + "[#{field.id}][#{alternative.id}]", '1', default, :disabled => display_disabled?(field, answer)
92 end.join("\n") 103 end.join("\n")
93 - when 'select'  
94 - selected = answer.present? ? answer.value.split(',') : field.alternatives.select {|a| a.selected_by_default}.map{|a| a.id.to_s}  
95 - 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?  
96 when 'radio' 104 when 'radio'
97 field.alternatives.map do |alternative| 105 field.alternatives.map do |alternative|
98 default = answer.present? ? answer.value == alternative.id.to_s : alternative.selected_by_default 106 default = answer.present? ? answer.value == alternative.id.to_s : alternative.selected_by_default
99 - labelled_radio_button alternative.label, form.to_s + "[#{field.id}]", alternative.id, default, :disabled => (answer.present? && answer.id.present?) || field.form.expired? 107 + labelled_radio_button alternative.label, form.to_s + "[#{field.id}]", alternative.id, default, :disabled => display_disabled?(field, answer)
100 end.join("\n") 108 end.join("\n")
101 end 109 end
102 end 110 end