decidim-core 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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>