decidim-core 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/app/assets/config/decidim_core_manifest.js +1 -0
  4. data/app/assets/javascripts/decidim.js.es6 +3 -2
  5. data/app/assets/javascripts/decidim/append_elements.js.es6 +8 -0
  6. data/app/assets/javascripts/decidim/filters.js.es6 +22 -0
  7. data/app/assets/javascripts/decidim/form_filter.component.js.es6 +176 -0
  8. data/app/assets/javascripts/decidim/form_filter.component.test.js +151 -0
  9. data/app/assets/javascripts/decidim/inline_svg.js.es6 +12 -0
  10. data/app/assets/javascripts/decidim/user_registrations.js.es6 +22 -0
  11. data/app/assets/stylesheets/decidim/_variables.scss +1 -1
  12. data/app/assets/stylesheets/decidim/modules/_comments.scss +3 -6
  13. data/app/assets/stylesheets/decidim/modules/_cookie-bar.scss +22 -0
  14. data/app/assets/stylesheets/decidim/modules/_layout.scss +9 -1
  15. data/app/assets/stylesheets/decidim/modules/_navbar.scss +8 -5
  16. data/app/assets/stylesheets/decidim/modules/_order-by.scss +0 -1
  17. data/app/assets/stylesheets/decidim/modules/_process-phase.scss +4 -0
  18. data/app/assets/stylesheets/decidim/modules/_timeline.scss +62 -80
  19. data/app/assets/stylesheets/decidim/modules/_typography.scss +20 -31
  20. data/app/assets/stylesheets/decidim/utils/_fontface.scss +4 -16
  21. data/app/assets/stylesheets/decidim/utils/_settings.scss +29 -26
  22. data/app/assets/stylesheets/decidim/utils/_variables.scss +22 -0
  23. data/app/commands/decidim/authorize_user.rb +17 -1
  24. data/app/commands/decidim/create_omniauth_registration.rb +92 -0
  25. data/app/commands/decidim/create_registration.rb +50 -0
  26. data/app/commands/decidim/invite_user.rb +50 -0
  27. data/app/commands/decidim/invite_user_again.rb +25 -0
  28. data/app/commands/decidim/remove_user_role.rb +26 -0
  29. data/app/controllers/concerns/decidim/feature_settings.rb +27 -0
  30. data/app/controllers/concerns/decidim/filter_resource.rb +71 -0
  31. data/app/controllers/concerns/decidim/form_factory.rb +21 -18
  32. data/app/controllers/concerns/decidim/needs_participatory_process.rb +2 -3
  33. data/app/controllers/decidim/devise/confirmations_controller.rb +2 -0
  34. data/app/controllers/decidim/devise/invitations_controller.rb +4 -0
  35. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +96 -0
  36. data/app/controllers/decidim/devise/passwords_controller.rb +2 -0
  37. data/app/controllers/decidim/devise/registrations_controller.rb +34 -0
  38. data/app/controllers/decidim/devise/sessions_controller.rb +1 -0
  39. data/app/controllers/decidim/pages_controller.rb +10 -2
  40. data/app/controllers/decidim/participatory_process_steps_controller.rb +16 -0
  41. data/app/controllers/decidim/participatory_processes_controller.rb +6 -11
  42. data/app/forms/decidim/form.rb +6 -6
  43. data/app/forms/decidim/invite_admin_form.rb +37 -0
  44. data/app/forms/decidim/omniauth_registration_form.rb +24 -0
  45. data/app/forms/decidim/registration_form.rb +41 -0
  46. data/app/helpers/decidim/filters_helper.rb +21 -0
  47. data/app/helpers/decidim/layout_helper.rb +17 -1
  48. data/app/helpers/decidim/omniauth_helper.rb +23 -0
  49. data/app/helpers/decidim/paginate_helper.rb +21 -0
  50. data/app/helpers/decidim/participatory_process_helper.rb +14 -0
  51. data/app/helpers/decidim/participatory_process_steps_helper.rb +17 -0
  52. data/app/mailers/decidim/decidim_devise_mailer.rb +2 -2
  53. data/app/models/decidim/feature.rb +40 -0
  54. data/app/models/decidim/identity.rb +12 -0
  55. data/app/models/decidim/organization.rb +3 -10
  56. data/app/models/decidim/user.rb +3 -1
  57. data/app/models/decidim/user_group.rb +18 -0
  58. data/app/models/decidim/user_group_membership.rb +9 -0
  59. data/app/services/decidim/authorization_handler.rb +13 -13
  60. data/app/services/decidim/resource_search.rb +52 -0
  61. data/app/uploaders/decidim/organization_logo_uploader.rb +1 -1
  62. data/app/views/decidim/authorizations/new.html.erb +3 -1
  63. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +40 -0
  64. data/app/views/decidim/devise/registrations/new.html.erb +21 -1
  65. data/app/views/decidim/devise/sessions/new.html.erb +1 -0
  66. data/app/views/decidim/devise/shared/_links.html.erb +0 -8
  67. data/app/views/decidim/devise/shared/_omniauth_buttons.html.erb +21 -0
  68. data/app/views/decidim/participatory_process_steps/_participatory_process_step.html.erb +16 -0
  69. data/app/views/decidim/participatory_process_steps/_timeline.html.erb +7 -0
  70. data/app/views/decidim/participatory_process_steps/index.html.erb +12 -0
  71. data/app/views/decidim/participatory_processes/show.html.erb +5 -5
  72. data/app/views/decidim/shared/_login_modal.html.erb +30 -0
  73. data/app/views/devise/mailer/invite_admin.html.erb +17 -0
  74. data/app/views/devise/mailer/invite_admin.text.erb +15 -0
  75. data/app/views/devise/mailer/organization_admin_invitation_instructions.html.erb +1 -1
  76. data/app/views/devise/mailer/organization_admin_invitation_instructions.text.erb +1 -1
  77. data/app/views/layouts/decidim/_application.html.erb +1 -0
  78. data/app/views/layouts/decidim/_header.html.erb +1 -1
  79. data/app/views/layouts/decidim/_meta.html.erb +1 -0
  80. data/app/views/layouts/decidim/_process_header.html.erb +12 -1
  81. data/app/views/layouts/decidim/_process_header_steps.html.erb +1 -0
  82. data/app/views/layouts/decidim/_social_meta.html.erb +11 -0
  83. data/app/views/layouts/decidim/participatory_process.html.erb +4 -0
  84. data/app/views/pages/home.html.erb +29 -2
  85. data/config/i18n-tasks.yml +1 -0
  86. data/config/initializers/devise.rb +10 -1
  87. data/config/locales/ca.yml +45 -3
  88. data/config/locales/en.yml +45 -3
  89. data/config/locales/es.yml +45 -3
  90. data/config/routes.rb +9 -2
  91. data/config/secrets.yml +36 -0
  92. data/db/migrate/20170110133113_add_configuration_to_features.rb +7 -0
  93. data/db/migrate/20170110153807_add_handler_to_organization.rb +5 -0
  94. data/db/migrate/20170116110851_create_identities.rb +11 -0
  95. data/db/migrate/20170116135237_loosen_step_requirements.rb +6 -0
  96. data/db/migrate/20170117142904_add_uniqueness_field_to_authorizations.rb +7 -0
  97. data/db/migrate/20170119145359_create_user_groups.rb +11 -0
  98. data/db/migrate/20170119150255_create_user_group_memberships.rb +12 -0
  99. data/db/migrate/20170119150649_add_show_statistics_to_organization.rb +5 -0
  100. data/db/migrate/20170120120733_add_user_groups_verified.rb +5 -0
  101. data/db/seeds.rb +45 -79
  102. data/lib/decidim/core.rb +8 -0
  103. data/lib/decidim/core/engine.rb +8 -0
  104. data/lib/decidim/core/test/factories.rb +188 -0
  105. data/lib/decidim/core/version.rb +1 -1
  106. data/lib/decidim/devise_failure_app.rb +1 -0
  107. data/lib/decidim/feature_manifest.rb +27 -0
  108. data/lib/decidim/features/base_controller.rb +8 -3
  109. data/lib/decidim/features/settings_manifest.rb +94 -0
  110. data/lib/decidim/filter_form_builder.rb +56 -0
  111. data/lib/decidim/form_builder.rb +4 -7
  112. data/vendor/assets/javascripts/svg-injector.js +464 -0
  113. metadata +142 -26
  114. data/app/assets/stylesheets/decidim/modules/_owl-carousel.scss +0 -72
  115. data/app/assets/stylesheets/decidim/modules/_phase-nav.scss +0 -177
  116. data/app/assets/stylesheets/decidim/utils/_helpers.sass +0 -21
  117. data/app/assets/stylesheets/decidim/utils/_keyframes.sass +0 -13
  118. data/app/assets/stylesheets/decidim/utils/_mixins.sass +0 -33
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ # Helper that provides methods to enable or disable omniauth buttons
4
+ module OmniauthHelper
5
+ # Public: returns true if the social provider is enabled
6
+ def social_provider_enabled?(provider)
7
+ Rails.application.secrets.dig(:omniauth, provider.to_s, "enabled")
8
+ end
9
+
10
+ # Public: returns true if any provider is enabled
11
+ def any_social_provider_enabled?
12
+ User.omniauth_providers.any? do |provider|
13
+ social_provider_enabled? provider
14
+ end
15
+ end
16
+
17
+ # Public: normalize providers names to they can be used for buttons
18
+ # and icons.
19
+ def normalize_provider_name(provider)
20
+ provider.to_s.split("_").first
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ # Helper to paginate collections.
4
+ module PaginateHelper
5
+ # Displays pagination links for the given collection, setting the correct
6
+ # theme. This mostly acts as a proxy for the underlying pagination engine.
7
+ #
8
+ # collection - a collection of elements that need to be paginated
9
+ # paginate_params - a Hash with options to delegate to the pagination helper.
10
+ def decidim_paginate(collection, paginate_params)
11
+ # Kaminari uses url_for to generate the url, but this doesn't play nice with our engine system
12
+ # and unless we remove these params they are added again as query string :(
13
+ default_params = {
14
+ participatory_process_id: nil,
15
+ feature_id: nil
16
+ }
17
+
18
+ paginate collection, theme: "decidim", params: paginate_params.merge(default_params)
19
+ end
20
+ end
21
+ end
@@ -12,5 +12,19 @@ module Decidim
12
12
  dates = [participatory_process_step.start_date, participatory_process_step.end_date]
13
13
  dates.map { |date| date ? localize(date.to_date, format: :default) : "?" }.join(" - ")
14
14
  end
15
+
16
+ # Public: Returns an icon given an instance of a Feature. It defaults to
17
+ # a question mark when no icon is found.
18
+ #
19
+ # feature - The feature to generate the icon for.
20
+ #
21
+ # Returns an HTML tag with the icon.
22
+ def feature_icon(feature)
23
+ if feature.manifest.icon
24
+ external_icon feature.manifest.icon
25
+ else
26
+ icon "question-mark"
27
+ end
28
+ end
15
29
  end
16
30
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ # Helper that provides a single method to give a class to a
4
+ # ParticipatoryProcessStep depending on their date.
5
+ module ParticipatoryProcessStepsHelper
6
+ # Returns the class for the given step depending on their end_date.
7
+ #
8
+ # step - the given ParticipatoryProcessStep
9
+ # past - a Boolean indicating if the step is past or not
10
+ #
11
+ # Returns a String.
12
+ def step_class(step, past)
13
+ status = past ? "" : "timeline__item--inactive"
14
+ step.active? ? "timeline__item--current" : status
15
+ end
16
+ end
17
+ end
@@ -17,8 +17,8 @@ module Decidim
17
17
  with_user(user) do
18
18
  @token = token
19
19
 
20
- if opts[:invitation_instructions] == "organization_admin_invitation_instructions"
21
- opts[:subject] = I18n.t("devise.mailer.organization_admin_invitation_instructions.subject", organization: user.organization.name)
20
+ if opts[:invitation_instructions]
21
+ opts[:subject] = I18n.t("devise.mailer.#{opts[:invitation_instructions]}.subject", organization: user.organization.name)
22
22
  end
23
23
  end
24
24
 
@@ -11,6 +11,8 @@ module Decidim
11
11
 
12
12
  validates :participatory_process, presence: true
13
13
 
14
+ after_initialize :default_values
15
+
14
16
  # Public: Finds the manifest this feature is associated to.
15
17
  #
16
18
  # Returns a FeatureManifest.
@@ -26,5 +28,43 @@ module Decidim
26
28
  def manifest=(manifest)
27
29
  self.manifest_name = manifest.name
28
30
  end
31
+
32
+ def settings
33
+ settings_schema(:global).new(self[:settings]["global"])
34
+ end
35
+
36
+ def settings=(data)
37
+ self[:settings]["global"] = serialize_settings(settings_schema(:global), data)
38
+ end
39
+
40
+ def step_settings
41
+ participatory_process.steps.each_with_object({}) do |step, result|
42
+ result[step.id.to_s] = settings_schema(:step).new(self[:settings].dig("steps", step.id.to_s))
43
+ end
44
+ end
45
+
46
+ def step_settings=(data)
47
+ self[:settings]["steps"] = data.each_with_object({}) do |(key, value), result|
48
+ result[key.to_s] = serialize_settings(settings_schema(:step), value)
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def serialize_settings(schema, value)
55
+ if value.respond_to?(:attributes)
56
+ value.attributes
57
+ else
58
+ schema.new(value)
59
+ end
60
+ end
61
+
62
+ def settings_schema(name)
63
+ manifest.settings(name.to_sym).schema
64
+ end
65
+
66
+ def default_values
67
+ self[:settings] ||= {}
68
+ end
29
69
  end
30
70
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # Store user's social identities
5
+ class Identity < ApplicationRecord
6
+ belongs_to :user, foreign_key: :decidim_user_id, class_name: Decidim::User
7
+
8
+ validates :user, presence: true
9
+ validates :provider, presence: true
10
+ validates :uid, presence: true, uniqueness: { scope: :provider }
11
+ end
12
+ end
@@ -6,7 +6,9 @@ module Decidim
6
6
  class Organization < ApplicationRecord
7
7
  has_many :participatory_processes, foreign_key: "decidim_organization_id", class_name: Decidim::ParticipatoryProcess, inverse_of: :organization
8
8
  has_many :static_pages, foreign_key: "decidim_organization_id", class_name: Decidim::StaticPage, inverse_of: :organization
9
- has_many :scopes, foreign_key: "decidim_organization_id", class_name: Decidim::Scope, inverse_of: :organization
9
+ has_many :scopes, -> { order(name: :asc) }, foreign_key: "decidim_organization_id", class_name: Decidim::Scope, inverse_of: :organization
10
+ has_many :admins, -> { where("roles @> ?", "{admin}") }, foreign_key: "decidim_organization_id", class_name: Decidim::User
11
+ has_many :users, foreign_key: "decidim_organization_id", class_name: Decidim::User
10
12
 
11
13
  validates :name, :host, uniqueness: true
12
14
 
@@ -16,14 +18,5 @@ module Decidim
16
18
  def homepage_big_url
17
19
  homepage_image.big.url
18
20
  end
19
-
20
- # Fetches the admins of the given organization.
21
- #
22
- # Returns an ActiveRecord::Relation.
23
- def admins
24
- @admins ||= Decidim::User
25
- .where(organization: self)
26
- .where("roles @> ?", "{admin}")
27
- end
28
21
  end
29
22
  end
@@ -5,10 +5,12 @@ module Decidim
5
5
  # A User is a citizen that wants to join the platform to participate.
6
6
  class User < ApplicationRecord
7
7
  devise :invitable, :database_authenticatable, :registerable, :confirmable,
8
- :recoverable, :rememberable, :trackable, :decidim_validatable
8
+ :recoverable, :rememberable, :trackable, :decidim_validatable,
9
+ :omniauthable, omniauth_providers: [:facebook, :twitter, :google_oauth2]
9
10
 
10
11
  belongs_to :organization, foreign_key: "decidim_organization_id", class_name: Decidim::Organization
11
12
  has_many :authorizations, foreign_key: "decidim_user_id", class_name: Decidim::Authorization, inverse_of: :user
13
+ has_many :identities, foreign_key: "decidim_user_id", class_name: Decidim::Identity
12
14
 
13
15
  ROLES = %w(admin moderator official).freeze
14
16
 
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # A UserGroup is an organization of citizens
5
+ class UserGroup < ApplicationRecord
6
+ has_many :users, through: :memberships, class_name: Decidim::User, foreign_key: :decidim_user_id
7
+ has_many :memberships, class_name: Decidim::UserGroupMembership, foreign_key: :decidim_user_group_id
8
+
9
+ validates :name, presence: true
10
+ validates :document_number, presence: true
11
+ validates :phone, presence: true
12
+
13
+ # Public: Mark the user group as verified
14
+ def verify!
15
+ update_attribute(:verified, true)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # A UserGroupMembership associate user with user groups
5
+ class UserGroupMembership < ApplicationRecord
6
+ belongs_to :user, class_name: Decidim::User, foreign_key: :decidim_user_id
7
+ belongs_to :user_group, class_name: Decidim::UserGroup, foreign_key: :decidim_user_group_id
8
+ end
9
+ end
@@ -2,9 +2,12 @@
2
2
  module Decidim
3
3
  # This is the base class for authorization handlers, all implementations
4
4
  # should inherit from it.
5
- # Each AuthorizationHandler must define an `authorized?` method that will be
6
- # used to check if the authorization is valid or not. When it is valid a new
7
- # authorization will be created for the user.
5
+ # Each AuthorizationHandler is a form that will be used to check if the
6
+ # authorization is valid or not. When it is valid a new authorization will
7
+ # be created for the user.
8
+ #
9
+ # Feel free to use validations to assert fields against a remote API,
10
+ # local database, or whatever.
8
11
  #
9
12
  # It also sets two default attributes, `user` and `handler_name`.
10
13
  class AuthorizationHandler < Form
@@ -15,6 +18,13 @@ module Decidim
15
18
  # infer the class name of the authorization handler.
16
19
  attribute :handler_name, String
17
20
 
21
+ # A unique ID to be implemented by the authorization handler that ensures
22
+ # no duplicates are created. This uniqueness check will be skipped if
23
+ # unique_id returns nil.
24
+ def unique_id
25
+ nil
26
+ end
27
+
18
28
  # THe attributes of the handler that should be exposed as form input when
19
29
  # rendering the handler in a form.
20
30
  #
@@ -23,16 +33,6 @@ module Decidim
23
33
  attributes.except(:id, :user).keys
24
34
  end
25
35
 
26
- # Whether the authorization is valid or not. Each AuthorizationHandler
27
- # implementation must implemement this method. This is were you check for
28
- # validation errors or against third party systems to validate the
29
- # authorization.
30
- #
31
- # Returns a Boolean.
32
- def authorized?
33
- raise NotImplementedError
34
- end
35
-
36
36
  # The String partial path so Rails can render the handler as a form. This
37
37
  # is useful if you want to have a custom view to render the form instead of
38
38
  # the default view.
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ # This is the base class to be used by other search services.
4
+ # Searchlight documentation: https://github.com/nathanl/searchlight
5
+ class ResourceSearch < Searchlight::Search
6
+ # Initialize the Searchlight::Search base class with the options provided.
7
+ #
8
+ # scope - The scope used to create the base query
9
+ # options - A hash of options to modify the search. These options will be
10
+ # converted to methods by SearchLight so they can be used on filter #
11
+ # methods. (Default {})
12
+ def initialize(scope, options = {})
13
+ super(options)
14
+ @scope = scope
15
+ end
16
+
17
+ # Creates the SearchLight base query.
18
+ # Check if the option feature was provided.
19
+ def base_query
20
+ # raise order_start_time.inspect
21
+ raise "Missing feature" unless feature
22
+
23
+ @scope
24
+ .page(options[:page] || 1)
25
+ .per(options[:per_page] || 12)
26
+ .where(feature: feature)
27
+ end
28
+
29
+ # Handle the category_id filter
30
+ def search_category_id
31
+ query.where(decidim_category_id: category_ids)
32
+ end
33
+
34
+ private
35
+
36
+ # Private: Creates an array of category ids.
37
+ # It contains categories' subcategories ids as well.
38
+ def category_ids
39
+ feature
40
+ .categories
41
+ .where(id: category_id)
42
+ .or(feature.categories.where(parent_id: category_id))
43
+ .pluck(:id)
44
+ end
45
+
46
+ # Private: Since feature is not used by a search method we need
47
+ # to define the method manually.
48
+ def feature
49
+ options[:feature]
50
+ end
51
+ end
52
+ end
@@ -3,7 +3,7 @@ module Decidim
3
3
  # This class deals with uploading hero images to ParticipatoryProcesses.
4
4
  class OrganizationLogoUploader < ImageUploader
5
5
  version :medium do
6
- process resize_to_limit: [140, 45]
6
+ process resize_to_limit: [500, 500]
7
7
  end
8
8
  end
9
9
  end
@@ -11,8 +11,10 @@
11
11
  <div class="card">
12
12
  <div class="card__content">
13
13
  <%= authorization_form_for(handler) do |form| %>
14
+ <%= form.error_for(:base) %>
15
+
14
16
  <% if lookup_context.exists?(handler.to_partial_path, [], true) %>
15
- <%= render partial: handler, as: "handler", locals: { form: form } %>
17
+ <%= render partial: handler.to_partial_path, locals: { handler: handler, form: form } %>
16
18
  <% else %>
17
19
  <%= form.all_fields %>
18
20
  <div class="actions">
@@ -0,0 +1,40 @@
1
+ <main class="wrapper">
2
+ <div class="row collapse">
3
+ <div class="row collapse">
4
+ <div class="columns large-8 large-centered text-center page-title">
5
+ <h1><%= t(".sign_up") %></h1>
6
+ <p>
7
+ <%= t(".subtitle") %>
8
+ </p>
9
+ </div>
10
+ </div>
11
+
12
+ <div class="row">
13
+ <div class="columns large-6 medium-10 medium-centered">
14
+ <div class="card">
15
+ <div class="card__content">
16
+ <%= form_for(@form, as: resource_name, url: omniauth_registrations_path(resource_name), html: { class: "register-form new_user" }) do |f| %>
17
+ <div class="user-person">
18
+ <div class="field">
19
+ <%= f.text_field :name, help_text: t("devise.registrations.new.username_help") %>
20
+ </div>
21
+ </div>
22
+
23
+ <div class="field">
24
+ <%= f.email_field :email %>
25
+ </div>
26
+
27
+ <%= f.hidden_field :uid %>
28
+ <%= f.hidden_field :provider %>
29
+ <%= f.hidden_field :oauth_signature %>
30
+
31
+ <div class="actions">
32
+ <%= f.submit t(".complete_profile"), class: "button expanded" %>
33
+ </div>
34
+ <% end %>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ </main>
@@ -17,7 +17,12 @@
17
17
  <div class="columns large-6 medium-10 medium-centered">
18
18
  <div class="card">
19
19
  <div class="card__content">
20
- <%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { class: "register-form new_user" }) do |f| %>
20
+ <%= form_for(@form, as: resource_name, url: registration_path(resource_name), html: { class: "register-form new_user" }) do |f| %>
21
+ <fieldset class="text-center">
22
+ <legend class="text-center heading5"><%= t(".sign_up_as.legend") %></legend>
23
+ <%= f.collection_radio_buttons :sign_up_as, [["user", t(".sign_up_as.user")], ["user_group", t(".sign_up_as.user_group") ]], :first, :last %>
24
+ </fieldset>
25
+
21
26
  <div class="user-person">
22
27
  <div class="field">
23
28
  <%= f.text_field :name, help_text: t(".username_help") %>
@@ -36,6 +41,20 @@
36
41
  <%= f.password_field :password_confirmation, autocomplete: "off" %>
37
42
  </div>
38
43
 
44
+ <div class="user-group-fields">
45
+ <div class="field">
46
+ <%= f.text_field :user_group_name %>
47
+ </div>
48
+
49
+ <div class="field">
50
+ <%= f.text_field :user_group_document_number %>
51
+ </div>
52
+
53
+ <div class="field">
54
+ <%= f.text_field :user_group_phone %>
55
+ </div>
56
+ </div>
57
+
39
58
  <fieldset>
40
59
  <div class="field">
41
60
  <%= f.check_box :tos_agreement, label: t(".tos_agreement", link: link_to(t(".terms"), page_path("terms-and-conditions"))) %>
@@ -51,5 +70,6 @@
51
70
  </div>
52
71
  </div>
53
72
  </div>
73
+ <%= render "decidim/devise/shared/omniauth_buttons" %>
54
74
  </div>
55
75
  </main>
@@ -38,5 +38,6 @@
38
38
  </div>
39
39
  </div>
40
40
  </div>
41
+ <%= render "decidim/devise/shared/omniauth_buttons" %>
41
42
  </div>
42
43
  </main>