Commit d74cb53f9291d34ca9479a532284768171374625

Authored by Larissa Reis
1 parent 97bae885

Expired forms can't be answered

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
1 1 <h1><%= @form.name %></h1>
2 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 8 <% if @submission.id.nil? %>
5 9 <%= error_messages_for :submission %>
6 10  
... ...