Commit d74cb53f9291d34ca9479a532284768171374625
1 parent
97bae885
Exists in
master
and in
29 other branches
Expired forms can't be answered
Showing
4 changed files
with
20 additions
and
5 deletions
Show diff stats
plugins/custom_forms/controllers/custom_forms_plugin_profile_controller.rb
... | ... | @@ -18,6 +18,7 @@ class CustomFormsPluginProfileController < ProfileController |
18 | 18 | if request.post? |
19 | 19 | begin |
20 | 20 | raise 'Submission already present!' if user.present? && CustomFormsPlugin::Submission.find_by_form_id_and_profile_id(@form.id,user.id) |
21 | + raise 'Form expired!' if @form.expired? | |
21 | 22 | |
22 | 23 | # @submission.answers for some reason has the same answer twice |
23 | 24 | failed_answers = answers.select {|answer| !answer.valid? } | ... | ... |
plugins/custom_forms/lib/custom_forms_plugin/helper.rb
... | ... | @@ -77,26 +77,26 @@ module CustomFormsPlugin::Helper |
77 | 77 | |
78 | 78 | def display_text_field(field, answer, form) |
79 | 79 | value = answer.present? ? answer.value : field.default_value |
80 | - text_field(form, "#{field.id}", :value => value, :disabled => answer.present? && answer.id.present?) | |
80 | + text_field(form, "#{field.id}", :value => value, :disabled => (answer.present? && answer.id.present?) || field.form.expired? ) | |
81 | 81 | end |
82 | 82 | |
83 | 83 | def display_select_field(field, answer, form) |
84 | 84 | case field.select_field_type |
85 | 85 | when 'multiple_select' |
86 | 86 | selected = answer.present? ? answer.value.split(',') : field.alternatives.select {|a| a.selected_by_default}.map{|a| a.id.to_s} |
87 | - select_tag "submission[#{field.id}]", options_for_select(field.alternatives.map{|a| [a.label, a.id.to_s]}, selected), :multiple => true, :size => field.alternatives.size, :disabled => answer.present? && answer.id.present? | |
87 | + select_tag "submission[#{field.id}]", options_for_select(field.alternatives.map{|a| [a.label, a.id.to_s]}, selected), :multiple => true, :size => field.alternatives.size, :disabled => (answer.present? && answer.id.present?) || field.form.expired? | |
88 | 88 | when 'check_box' |
89 | 89 | field.alternatives.map do |alternative| |
90 | 90 | default = answer.present? ? answer.value.split(',').include?(alternative.id.to_s) : alternative.selected_by_default |
91 | - labelled_check_box alternative.label, "submission[#{field.id}][#{alternative.id}]", '1', default, :disabled => answer.present? && answer.id.present? | |
91 | + labelled_check_box alternative.label, "submission[#{field.id}][#{alternative.id}]", '1', default, :disabled => (answer.present? && answer.id.present?) || field.form.expired? | |
92 | 92 | end.join("\n") |
93 | 93 | when 'select' |
94 | 94 | selected = answer.present? ? answer.value.split(',') : field.alternatives.select {|a| a.selected_by_default}.map{|a| a.id.to_s} |
95 | - select_tag "submission[#{field.id}]", options_for_select([['','']] + field.alternatives.map {|a| [a.label, a.id.to_s]}, selected), :disabled => answer.present? && answer.id.present? | |
95 | + select_tag "submission[#{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 | 96 | when 'radio' |
97 | 97 | field.alternatives.map do |alternative| |
98 | 98 | default = answer.present? ? answer.value == alternative.id.to_s : alternative.selected_by_default |
99 | - labelled_radio_button alternative.label, "submission[#{field.id}]", alternative.id, default, :disabled => answer.present? && answer.id.present? | |
99 | + labelled_radio_button alternative.label, "submission[#{field.id}]", alternative.id, default, :disabled => (answer.present? && answer.id.present?) || field.form.expired? | |
100 | 100 | end.join("\n") |
101 | 101 | end |
102 | 102 | end | ... | ... |
plugins/custom_forms/test/functional/custom_forms_plugin_profile_controller_test.rb
... | ... | @@ -28,4 +28,14 @@ class CustomFormsPluginProfileControllerTest < ActionController::TestCase |
28 | 28 | assert !session[:notice].include?('not saved') |
29 | 29 | assert_redirected_to :action => 'show' |
30 | 30 | end |
31 | + | |
32 | + should 'disable fields if form expired' do | |
33 | + form = CustomFormsPlugin::Form.create!(:profile => profile, :name => 'Free Software', :begining => Time.now + 1.day) | |
34 | + form.fields << CustomFormsPlugin::TextField.create(:name => 'Field Name', :form => form, :default_value => "First Field") | |
35 | + | |
36 | + get :show, :profile => profile.identifier, :id => form.id | |
37 | + | |
38 | + assert_tag :tag => 'h2', :content => 'Sorry, you can\'t fill this form right now' | |
39 | + assert_tag :tag => 'input', :attributes => {:disabled => 'disabled'} | |
40 | + end | |
31 | 41 | end | ... | ... |
plugins/custom_forms/views/custom_forms_plugin_profile/show.html.erb