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,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