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,6 +18,7 @@ class CustomFormsPluginProfileController < ProfileController | ||
18 | if request.post? | 18 | if request.post? |
19 | begin | 19 | begin |
20 | raise 'Submission already present!' if user.present? && CustomFormsPlugin::Submission.find_by_form_id_and_profile_id(@form.id,user.id) | 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 | # @submission.answers for some reason has the same answer twice | 23 | # @submission.answers for some reason has the same answer twice |
23 | failed_answers = answers.select {|answer| !answer.valid? } | 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,26 +77,26 @@ module CustomFormsPlugin::Helper | ||
77 | 77 | ||
78 | def display_text_field(field, answer, form) | 78 | def display_text_field(field, answer, form) |
79 | value = answer.present? ? answer.value : field.default_value | 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 | end | 81 | end |
82 | 82 | ||
83 | def display_select_field(field, answer, form) | 83 | def display_select_field(field, answer, form) |
84 | case field.select_field_type | 84 | case field.select_field_type |
85 | when 'multiple_select' | 85 | when 'multiple_select' |
86 | selected = answer.present? ? answer.value.split(',') : field.alternatives.select {|a| a.selected_by_default}.map{|a| a.id.to_s} | 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 | when 'check_box' | 88 | when 'check_box' |
89 | field.alternatives.map do |alternative| | 89 | field.alternatives.map do |alternative| |
90 | default = answer.present? ? answer.value.split(',').include?(alternative.id.to_s) : alternative.selected_by_default | 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 | end.join("\n") | 92 | end.join("\n") |
93 | when 'select' | 93 | when 'select' |
94 | selected = answer.present? ? answer.value.split(',') : field.alternatives.select {|a| a.selected_by_default}.map{|a| a.id.to_s} | 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 | when 'radio' | 96 | when 'radio' |
97 | field.alternatives.map do |alternative| | 97 | field.alternatives.map do |alternative| |
98 | default = answer.present? ? answer.value == alternative.id.to_s : alternative.selected_by_default | 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 | end.join("\n") | 100 | end.join("\n") |
101 | end | 101 | end |
102 | end | 102 | end |
plugins/custom_forms/test/functional/custom_forms_plugin_profile_controller_test.rb
@@ -28,4 +28,14 @@ class CustomFormsPluginProfileControllerTest < ActionController::TestCase | @@ -28,4 +28,14 @@ class CustomFormsPluginProfileControllerTest < ActionController::TestCase | ||
28 | assert !session[:notice].include?('not saved') | 28 | assert !session[:notice].include?('not saved') |
29 | assert_redirected_to :action => 'show' | 29 | assert_redirected_to :action => 'show' |
30 | end | 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 | end | 41 | end |
plugins/custom_forms/views/custom_forms_plugin_profile/show.html.erb
1 | <h1><%= @form.name %></h1> | 1 | <h1><%= @form.name %></h1> |
2 | <p><%= @form.description %></p> | 2 | <p><%= @form.description %></p> |
3 | 3 | ||
4 | +<% if @form.expired? %> | ||
5 | + <h2><%= _('Sorry, you can\'t fill this form right now') %></h2> | ||
6 | +<% end %> | ||
7 | + | ||
4 | <% if @submission.id.nil? %> | 8 | <% if @submission.id.nil? %> |
5 | <%= error_messages_for :submission %> | 9 | <%= error_messages_for :submission %> |
6 | 10 |