Commit d74cb53f9291d34ca9479a532284768171374625
1 parent
97bae885
Exists in
master
and in
28 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