[Git][noosfero/noosfero][master] 8 commits: Creates datetime field without save into form

Álax Alves gitlab at mg.gitlab.com
Wed Aug 28 13:19:48 BRT 2019



Álax Alves pushed to branch master at Noosfero / noosfero


Commits:
6164576c by Guilherme Augusto at 2019-06-18T17:09:52Z
Creates datetime field without save into form

- - - - -
3bd77dd4 by Iasmin Mendes at 2019-06-18T17:10:08Z
Fix submission value

- - - - -
d998bd20 by Guilherme Augusto at 2019-06-18T17:10:16Z
Fixes datetime field interface

- - - - -
7fb9308b by Guilherme Augusto at 2019-06-18T17:15:17Z
Implements unit test about DateTimeField

- - - - -
8b626e29 by Alax Alves at 2019-08-27T16:01:39Z
Fixing migration version and requiring recaptcha

- - - - -
f2d628fa by Alax Alves at 2019-08-28T15:17:23Z
Removing unnecessary migration

- - - - -
da817898 by Alax Alves at 2019-08-28T15:20:51Z
Merge branch 'master' of https://gitlab.com/noosfero/noosfero into adds-datetimes-field

- - - - -
fbe909b2 by Álax Alves at 2019-08-28T16:19:43Z
Merge branch 'adds-datetimes-field' into 'master'

Adds datetimes field to Custom Forms' survey

See merge request noosfero/noosfero!1741
- - - - -


10 changed files:

- app/api/helpers.rb
- db/migrate/20180126121926_create_profile_access_memberships.rb
- plugins/custom_forms/lib/custom_forms_plugin/answer.rb
- + plugins/custom_forms/lib/custom_forms_plugin/date_time_field.rb
- plugins/custom_forms/lib/custom_forms_plugin/helper.rb
- plugins/custom_forms/lib/custom_forms_plugin/submission.rb
- + plugins/custom_forms/test/unit/custom_forms_plugin/date_time_field_test.rb
- plugins/custom_forms/views/custom_forms_plugin_myprofile/_survey.html.erb
- + plugins/custom_forms/views/custom_forms_plugin_myprofile/custom_forms_plugin/_date_time_field.html.erb
- plugins/custom_forms/views/custom_forms_plugin_myprofile/custom_forms_plugin/_field.html.erb


Changes:

=====================================
app/api/helpers.rb
=====================================
@@ -1,5 +1,6 @@
 require 'base64'
 require 'tempfile'
+require 'recaptcha'
 
 module Api
   module Helpers


=====================================
db/migrate/20180126121926_create_profile_access_memberships.rb
=====================================
@@ -1,4 +1,4 @@
-class CreateProfileAccessMemberships < ActiveRecord::Migration[4.2]
+class CreateProfileAccessMemberships < ActiveRecord::Migration[5.1]
   def up
     noosfero_env = ENV['RAILS_ENV']
     if noosfero_env != 'production'


=====================================
plugins/custom_forms/lib/custom_forms_plugin/answer.rb
=====================================
@@ -26,6 +26,8 @@ class CustomFormsPlugin::Answer < ApplicationRecord
   def value
     if field.is_a? CustomFormsPlugin::SelectField
       form_answers.map { |f| f.alternative_id }.join(',')
+    elsif field.is_a? CustomFormsPlugin::DateTimeField
+      self['value'].to_date
     else
       self['value']
     end


=====================================
plugins/custom_forms/lib/custom_forms_plugin/date_time_field.rb
=====================================
@@ -0,0 +1,10 @@
+class CustomFormsPlugin::DateTimeField < CustomFormsPlugin::Field
+
+  self.table_name = :custom_forms_plugin_fields
+
+  validates_inclusion_of :show_as, :in => %w(datetime)
+
+  after_initialize do
+    self.show_as ||= 'datetime'
+  end
+end


=====================================
plugins/custom_forms/lib/custom_forms_plugin/helper.rb
=====================================
@@ -55,14 +55,16 @@ module CustomFormsPlugin::Helper
   def type_options
     [
       [c_('Text'),   'text_field'  ],
-      [_('Select'), 'select_field']
+      [_('Select'), 'select_field'],
+      [_('DateTime'), 'date_time_field']
     ]
   end
 
   def type_to_label(type)
     map = {
       'text_field' => _('Text field'),
-      'select_field' => _('Select field')
+      'select_field' => _('Select field'),
+      'date_time_field' => _('Datetime field')
     }
     map[type_for_options(type)]
   end
@@ -99,6 +101,19 @@ module CustomFormsPlugin::Helper
     answer.present? ? answer.alternatives.map {|m| m.id.to_s} : field.alternatives.select {|a| a.selected_by_default}.map{|a| a.id.to_s}
   end
 
+  def display_date_time_field(field, answer, form)
+    html_options = {}
+    date_value = answer.present? ? answer.value : DateTime.now
+    if field.show_as == 'datetime'
+      date_field(
+        "submission[#{field.id}]",
+        date_value,
+        {:disabled => display_disabled?(field, answer)},
+        html_options.merge({:id => :datetime_value})
+      )
+    end
+  end
+
   def display_select_field(field, answer, form)
     case field.show_as
     when 'select'
@@ -111,7 +126,7 @@ module CustomFormsPlugin::Helper
     when 'multiple_select'
       selected = default_selected(field, answer)
       input_name = form.to_s + "[#{field.id}]"
-      
+
       inputs = hidden_field_tag(input_name, '0')
       inputs += select_tag input_name, options_for_select(field.alternatives.map{|a| [a.label, a.id.to_s]}, selected),
               :multiple => true, :title => _('Hold down Ctrl to select options'),


=====================================
plugins/custom_forms/lib/custom_forms_plugin/submission.rb
=====================================
@@ -50,7 +50,7 @@ class CustomFormsPlugin::Submission < ApplicationRecord
   def chosen_alternatives_from_value(value)
     begin
       alternatives = []
-      
+
       if value.kind_of?(String)
         alternatives << CustomFormsPlugin::Alternative.find(value) if (value.to_i > 0)
       end


=====================================
plugins/custom_forms/test/unit/custom_forms_plugin/date_time_field_test.rb
=====================================
@@ -0,0 +1,16 @@
+require 'test_helper'
+
+class CustomFormsPlugin::DateTimeFieldTest < ActiveSupport::TestCase
+  should 'validate type' do
+    datetime = CustomFormsPlugin::DateTimeField.new()
+
+    datetime.update_attribute(:show_as, 'datetime')
+    assert datetime.invalid?
+
+  end
+
+  should 'field type defaults to datetime when initialized' do
+    datetime = CustomFormsPlugin::DateTimeField.new()
+    assert_equal 'datetime', datetime.show_as
+  end
+end


=====================================
plugins/custom_forms/views/custom_forms_plugin_myprofile/_survey.html.erb
=====================================
@@ -32,4 +32,5 @@
 <div class="addition-buttons">
   <%= button(:add, _('Add a new text field'), '#', :onclick => "customFormsPlugin.addFields(this, 'fields', #{html_for_field(f, :fields, CustomFormsPlugin::TextField).to_json}); return false")%>
   <%= button(:add, _('Add a new select field'), '#', :onclick => "customFormsPlugin.addFields(this, 'fields', #{html_for_field(f, :fields, CustomFormsPlugin::SelectField).to_json}); return false")%>
+  <%= button(:add, _('Add a new datetime field'), '#', :onclick => "customFormsPlugin.addFields(this, 'fields', #{html_for_field(f, :fields, CustomFormsPlugin::DateTimeField).to_json}); return false")%>
 </div>


=====================================
plugins/custom_forms/views/custom_forms_plugin_myprofile/custom_forms_plugin/_date_time_field.html.erb
=====================================
@@ -0,0 +1,11 @@
+<%= render :layout => 'field', :locals => { :f => f } do %>
+  <div class="field-text-default">
+    <div class='formfieldline'>
+      <%= f.label(:value, _('Default date:')) %>
+      <% html_options = {} %>
+      <%= date_field(
+        "datetime", "", {}, html_options.merge({:id => :default_value})
+        ) %>
+    </div>
+  </div>
+<% end %>


=====================================
plugins/custom_forms/views/custom_forms_plugin_myprofile/custom_forms_plugin/_field.html.erb
=====================================
@@ -4,6 +4,8 @@
   <%= render partial_for_class(CustomFormsPlugin::SelectField), :f => f %>
 <% when 'CustomFormsPlugin::TextField' %>
   <%= render partial_for_class(CustomFormsPlugin::TextField), :f => f %>
+<% when 'CustomFormsPlugin::DateTimeField' %>
+  <%= render partial_for_class(CustomFormsPlugin::DateTimeField), :f => f %>
 <% else %>
   <% raise 'This field has no valid type' %>
 <% end %>



View it on GitLab: https://gitlab.com/noosfero/noosfero/compare/6e20fa59160b59c8567d2d1cfbd6c627839653e5...fbe909b26c5d03c5e81abd9f0aef89760b4be532

-- 
View it on GitLab: https://gitlab.com/noosfero/noosfero/compare/6e20fa59160b59c8567d2d1cfbd6c627839653e5...fbe909b26c5d03c5e81abd9f0aef89760b4be532
You're receiving this email because of your account on gitlab.com.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-dev/attachments/20190828/1285c80c/attachment-0001.html>


More information about the Noosfero-dev mailing list