decidim-extra_user_fields 0.24.3
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.
- checksums.yaml +7 -0
- data/LICENSE-AGPLv3.txt +661 -0
- data/README.md +27 -0
- data/Rakefile +9 -0
- data/app/assets/config/decidim_extra_user_fields_manifest.js +0 -0
- data/app/assets/images/decidim/extra_user_fields/icon.svg +1 -0
- data/app/commands/concerns/decidim/extra_user_fields/commands_overrides.rb +49 -0
- data/app/commands/concerns/decidim/extra_user_fields/omniauth_commands_overrides.rb +53 -0
- data/app/commands/decidim/extra_user_fields/admin/export_users.rb +45 -0
- data/app/controllers/decidim/extra_user_fields/admin/application_controller.rb +12 -0
- data/app/controllers/decidim/extra_user_fields/admin/extra_user_fields_controller.rb +21 -0
- data/app/forms/concerns/decidim/extra_user_fields/forms_definitions.rb +35 -0
- data/app/helpers/decidim/extra_user_fields/admin/application_helper.rb +24 -0
- data/app/helpers/decidim/extra_user_fields/application_helper.rb +15 -0
- data/app/models/decidim/extra_user_fields/application_record.rb +10 -0
- data/app/overrides/decidim/account/show/extra_user_fields.html.erb.deface +3 -0
- data/app/overrides/decidim/admin/officializations/index/_export_users_dropdown.html.erb.deface +5 -0
- data/app/overrides/decidim/devise/omniauth_registrations/new/extra_user_fields.html.erb.deface +3 -0
- data/app/overrides/decidim/devise/registrations/new/extra_user_fields.html.erb.deface +3 -0
- data/app/serializers/decidim/extra_user_fields/user_export_serializer.rb +22 -0
- data/app/views/decidim/extra_user_fields/_profile_form.html.erb +4 -0
- data/app/views/decidim/extra_user_fields/_registration_form.html.erb +15 -0
- data/app/views/decidim/extra_user_fields/admin/export_users/_dropdown.html.erb +4 -0
- data/config/i18n-tasks.yml +10 -0
- data/config/locales/ca.yml +21 -0
- data/config/locales/en.yml +21 -0
- data/config/locales/es.yml +21 -0
- data/lib/decidim/extra_user_fields/admin.rb +10 -0
- data/lib/decidim/extra_user_fields/admin_engine.rb +38 -0
- data/lib/decidim/extra_user_fields/engine.rb +57 -0
- data/lib/decidim/extra_user_fields/form_builder_methods.rb +18 -0
- data/lib/decidim/extra_user_fields/test/factories.rb +13 -0
- data/lib/decidim/extra_user_fields/version.rb +14 -0
- data/lib/decidim/extra_user_fields.rb +12 -0
- metadata +119 -0
data/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# Decidim::ExtraUserFields
|
2
|
+
|
3
|
+
* Allows to collect and manage some extra user fields on registration and profile edition.
|
4
|
+
* Adds a link in admin participants panel to download users of organization in several formats.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
For Decidim 0.24:
|
11
|
+
```ruby
|
12
|
+
gem "decidim-extra_user_fields", git: "https://github.com/PopulateTools/decidim-module-extra_user_fields", branch: "release/0.24-stable"
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
```bash
|
18
|
+
bundle
|
19
|
+
```
|
20
|
+
|
21
|
+
## Contributing
|
22
|
+
|
23
|
+
See [Decidim](https://github.com/decidim/decidim).
|
24
|
+
|
25
|
+
## License
|
26
|
+
|
27
|
+
This engine is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
|
data/Rakefile
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "decidim/dev/common_rake"
|
4
|
+
|
5
|
+
desc "Generates a dummy app for testing"
|
6
|
+
task test_app: "decidim:generate_external_test_app"
|
7
|
+
|
8
|
+
desc "Generates a development app."
|
9
|
+
task development_app: "decidim:generate_external_development_app"
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 35 35"><path d="M17.5 35A17.5 17.5 0 1 1 35 17.5 17.52 17.52 0 0 1 17.5 35zm0-33.06A15.56 15.56 0 1 0 33.06 17.5 15.57 15.57 0 0 0 17.5 1.94zm9.5 13.7H8a1 1 0 0 1 0-1.94h19a1 1 0 0 1 0 1.94zm0 3.68H8a1 1 0 0 1 0-1.94h19a1 1 0 0 1 0 1.94zM22.26 23H8a1 1 0 0 1 0-1.94h14.26a1 1 0 0 1 0 1.94z"/></svg>
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/concern"
|
4
|
+
|
5
|
+
module Decidim
|
6
|
+
module ExtraUserFields
|
7
|
+
# Changes in methods to store extra fields in user profile
|
8
|
+
module CommandsOverrides
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def create_user
|
14
|
+
@user = User.create!(
|
15
|
+
email: @form.email,
|
16
|
+
name: @form.name,
|
17
|
+
nickname: @form.nickname,
|
18
|
+
password: @form.password,
|
19
|
+
password_confirmation: @form.password_confirmation,
|
20
|
+
organization: @form.current_organization,
|
21
|
+
tos_agreement: @form.tos_agreement,
|
22
|
+
newsletter_notifications_at: @form.newsletter_at,
|
23
|
+
email_on_notification: true,
|
24
|
+
accepted_tos_version: @form.current_organization.tos_version,
|
25
|
+
locale: @form.current_locale,
|
26
|
+
extended_data: extended_data
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def update_personal_data
|
31
|
+
@user.name = @form.name
|
32
|
+
@user.nickname = @form.nickname
|
33
|
+
@user.email = @form.email
|
34
|
+
@user.personal_url = @form.personal_url
|
35
|
+
@user.about = @form.about
|
36
|
+
@user.extended_data = extended_data
|
37
|
+
end
|
38
|
+
|
39
|
+
def extended_data
|
40
|
+
@extended_data ||= (@user&.extended_data || {}).merge(
|
41
|
+
country: @form.country,
|
42
|
+
postal_code: @form.postal_code,
|
43
|
+
date_of_birth: @form.date_of_birth,
|
44
|
+
gender: @form.gender
|
45
|
+
)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/concern"
|
4
|
+
|
5
|
+
module Decidim
|
6
|
+
module ExtraUserFields
|
7
|
+
# Changes in methods to store extra fields in user profile
|
8
|
+
module OmniauthCommandsOverrides
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def create_or_find_user
|
14
|
+
generated_password = SecureRandom.hex
|
15
|
+
|
16
|
+
@user = User.find_or_initialize_by(
|
17
|
+
email: verified_email,
|
18
|
+
organization: organization
|
19
|
+
)
|
20
|
+
|
21
|
+
if @user.persisted?
|
22
|
+
# If user has left the account unconfirmed and later on decides to sign
|
23
|
+
# in with omniauth with an already verified account, the account needs
|
24
|
+
# to be marked confirmed.
|
25
|
+
@user.skip_confirmation! if !@user.confirmed? && @user.email == verified_email
|
26
|
+
else
|
27
|
+
@user.email = (verified_email || form.email)
|
28
|
+
@user.name = form.name
|
29
|
+
@user.nickname = form.normalized_nickname
|
30
|
+
@user.newsletter_notifications_at = nil
|
31
|
+
@user.email_on_notification = true
|
32
|
+
@user.password = generated_password
|
33
|
+
@user.password_confirmation = generated_password
|
34
|
+
@user.remote_avatar_url = form.avatar_url if form.avatar_url.present?
|
35
|
+
@user.skip_confirmation! if verified_email
|
36
|
+
end
|
37
|
+
|
38
|
+
@user.tos_agreement = "1"
|
39
|
+
@user.extended_data = extended_data
|
40
|
+
@user.save!
|
41
|
+
end
|
42
|
+
|
43
|
+
def extended_data
|
44
|
+
@extended_data ||= (@user&.extended_data || {}).merge(
|
45
|
+
country: form.country,
|
46
|
+
postal_code: form.postal_code,
|
47
|
+
date_of_birth: form.date_of_birth,
|
48
|
+
gender: form.gender
|
49
|
+
)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ExtraUserFields
|
5
|
+
module Admin
|
6
|
+
# Command to export organization users from the participants admin panel.
|
7
|
+
class ExportUsers < Rectify::Command
|
8
|
+
# format - a string representing the export format
|
9
|
+
# current_user - the user performing the action
|
10
|
+
def initialize(format, current_user)
|
11
|
+
@format = format
|
12
|
+
@current_user = current_user
|
13
|
+
end
|
14
|
+
|
15
|
+
# Exports the current organization not deleted users.
|
16
|
+
#
|
17
|
+
# Broadcasts :ok if successful, :invalid otherwise.
|
18
|
+
def call
|
19
|
+
broadcast(:ok, export_data)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
attr_reader :current_user, :format
|
25
|
+
|
26
|
+
def export_data
|
27
|
+
Decidim.traceability.perform_action!(
|
28
|
+
:export_users,
|
29
|
+
current_organization,
|
30
|
+
current_user
|
31
|
+
) do
|
32
|
+
Decidim::Exporters
|
33
|
+
.find_exporter(format)
|
34
|
+
.new(collection, Decidim::ExtraUserFields::UserExportSerializer)
|
35
|
+
.export
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def collection
|
40
|
+
current_organization.users.not_deleted
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ExtraUserFields
|
5
|
+
module Admin
|
6
|
+
# This controller is the abstract class from which all other controllers of
|
7
|
+
# this engine inherit.
|
8
|
+
class ApplicationController < Decidim::Admin::ApplicationController
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ExtraUserFields
|
5
|
+
module Admin
|
6
|
+
# This controller is the abstract class from which all other controllers of
|
7
|
+
# this engine inherit.
|
8
|
+
class ExtraUserFieldsController < Admin::ApplicationController
|
9
|
+
def export_users
|
10
|
+
enforce_permission_to :read, :officialization
|
11
|
+
|
12
|
+
ExportUsers.call(params[:format], current_user) do
|
13
|
+
on(:ok) do |export_data|
|
14
|
+
send_data export_data.read, type: "text/#{export_data.extension}", filename: export_data.filename("participants")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/concern"
|
4
|
+
|
5
|
+
module Decidim
|
6
|
+
module ExtraUserFields
|
7
|
+
# Extra user fields definitions for forms
|
8
|
+
module FormsDefinitions
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
included do
|
12
|
+
include ::Decidim::ExtraUserFields::ApplicationHelper
|
13
|
+
|
14
|
+
attribute :country, String
|
15
|
+
attribute :postal_code, String
|
16
|
+
attribute :date_of_birth, Decidim::Attributes::LocalizedDate
|
17
|
+
attribute :gender, String
|
18
|
+
|
19
|
+
validates :country, presence: true
|
20
|
+
validates :postal_code, presence: true
|
21
|
+
validates :date_of_birth, presence: true
|
22
|
+
validates :gender, presence: true
|
23
|
+
end
|
24
|
+
|
25
|
+
def map_model(model)
|
26
|
+
extended_data = model.extended_data.with_indifferent_access
|
27
|
+
|
28
|
+
self.country = extended_data[:country]
|
29
|
+
self.postal_code = extended_data[:postal_code]
|
30
|
+
self.date_of_birth = Date.parse(extended_data[:date_of_birth]) if extended_data[:date_of_birth].present?
|
31
|
+
self.gender = extended_data[:gender]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ExtraUserFields
|
5
|
+
module Admin
|
6
|
+
# Custom helpers, scoped to the meetings admin engine.
|
7
|
+
#
|
8
|
+
module ApplicationHelper
|
9
|
+
def extra_user_fields_export_users_dropdown
|
10
|
+
content_tag(:ul, class: "vertical menu add-components") do
|
11
|
+
Decidim::ExtraUserFields::AdminEngine::DEFAULT_EXPORT_FORMATS.map do |format|
|
12
|
+
content_tag(:li, class: "exports--format--#{format.downcase} export--users") do
|
13
|
+
link_to(
|
14
|
+
t("decidim.admin.exports.export_as", name: t("decidim.extra_user_fields.admin.exports.users"), export_format: format.upcase),
|
15
|
+
AdminEngine.routes.url_helpers.extra_user_fields_export_users_path(format: format)
|
16
|
+
)
|
17
|
+
end
|
18
|
+
end.join.html_safe
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ExtraUserFields
|
5
|
+
# Custom helpers, scoped to the extra_user_fields engine.
|
6
|
+
#
|
7
|
+
module ApplicationHelper
|
8
|
+
def gender_options_for_select
|
9
|
+
Decidim::ExtraUserFields::Engine::DEFAULT_GENDER_OPTIONS.map do |gender|
|
10
|
+
[gender, I18n.t(gender, scope: "decidim.extra_user_fields.genders")]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
# This class serializes a User so can be exported to CSV
|
5
|
+
module ExtraUserFields
|
6
|
+
class UserExportSerializer < Decidim::DataPortabilitySerializers::DataPortabilityUserSerializer
|
7
|
+
# Public: Exports a hash with the serialized data for the user including
|
8
|
+
# extra user fields
|
9
|
+
def serialize
|
10
|
+
super.merge(extra_user_fields)
|
11
|
+
end
|
12
|
+
|
13
|
+
def extra_user_fields
|
14
|
+
extended_data = resource.extended_data.symbolize_keys
|
15
|
+
|
16
|
+
[:gender, :country, :postal_code, :date_of_birth].each_with_object({}) do |key, fields|
|
17
|
+
fields[key] = extended_data[key]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div class="field">
|
2
|
+
<%= f.date_field :date_of_birth %>
|
3
|
+
</div>
|
4
|
+
|
5
|
+
<div class="field">
|
6
|
+
<%= f.collection_select :gender, f.object.gender_options_for_select, :first, :last %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div class="field">
|
10
|
+
<%= f.custom_country_select :country %>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<div class="field">
|
14
|
+
<%= f.text_field :postal_code %>
|
15
|
+
</div>
|
@@ -0,0 +1,4 @@
|
|
1
|
+
<span class="exports dropdown tiny button button--simple" data-toggle="export-dropdown"><%= t "actions.export", scope: "decidim.admin" %></span>
|
2
|
+
<div class="dropdown-pane" id="export-dropdown" data-dropdown data-position=bottom data-alignment=right data-auto-focus="true" data-close-on-click="true">
|
3
|
+
<%= extra_user_fields_export_users_dropdown %>
|
4
|
+
</div>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
ca:
|
3
|
+
activemodel:
|
4
|
+
attributes:
|
5
|
+
user:
|
6
|
+
country: País
|
7
|
+
date_of_birth: Data de naixement
|
8
|
+
gender: Gènere
|
9
|
+
postal_code: Codi postal
|
10
|
+
decidim:
|
11
|
+
components:
|
12
|
+
extra_user_fields:
|
13
|
+
name: ExtraUserFields
|
14
|
+
extra_user_fields:
|
15
|
+
admin:
|
16
|
+
exports:
|
17
|
+
users: Participants
|
18
|
+
genders:
|
19
|
+
female: Dona
|
20
|
+
male: Home
|
21
|
+
other: Altre
|
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
activemodel:
|
4
|
+
attributes:
|
5
|
+
user:
|
6
|
+
country: Country
|
7
|
+
date_of_birth: Date of birth
|
8
|
+
gender: Gender
|
9
|
+
postal_code: Postal code
|
10
|
+
decidim:
|
11
|
+
components:
|
12
|
+
extra_user_fields:
|
13
|
+
name: ExtraUserFields
|
14
|
+
extra_user_fields:
|
15
|
+
admin:
|
16
|
+
exports:
|
17
|
+
users: Participants
|
18
|
+
genders:
|
19
|
+
female: Female
|
20
|
+
male: Male
|
21
|
+
other: Other
|
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
es:
|
3
|
+
activemodel:
|
4
|
+
attributes:
|
5
|
+
user:
|
6
|
+
country: País
|
7
|
+
date_of_birth: Fecha de nacimiento
|
8
|
+
gender: Género
|
9
|
+
postal_code: Código postal
|
10
|
+
decidim:
|
11
|
+
components:
|
12
|
+
extra_user_fields:
|
13
|
+
name: ExtraUserFields
|
14
|
+
extra_user_fields:
|
15
|
+
admin:
|
16
|
+
exports:
|
17
|
+
users: Participantes
|
18
|
+
genders:
|
19
|
+
female: Mujer
|
20
|
+
male: Hombre
|
21
|
+
other: Otro
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ExtraUserFields
|
5
|
+
# This is the engine that runs on the public interface of `ExtraUserFields`.
|
6
|
+
class AdminEngine < ::Rails::Engine
|
7
|
+
isolate_namespace Decidim::ExtraUserFields::Admin
|
8
|
+
|
9
|
+
DEFAULT_EXPORT_FORMATS = %w(CSV JSON Excel).freeze
|
10
|
+
|
11
|
+
paths["db/migrate"] = nil
|
12
|
+
paths["lib/tasks"] = nil
|
13
|
+
|
14
|
+
routes do
|
15
|
+
# Add admin engine routes here
|
16
|
+
namespace :extra_user_fields do
|
17
|
+
get :export_users
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
initializer "decidim_extra_user_fields.admin_mount_routes" do
|
22
|
+
Decidim::Core::Engine.routes do
|
23
|
+
mount Decidim::ExtraUserFields::AdminEngine, at: "/admin/extra_user_fields", as: "decidim_extra_user_fields"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
initializer "decidim_extra_user_fields.admin_export_users" do
|
28
|
+
Decidim::Admin::ApplicationHelper.class_eval do
|
29
|
+
include ExtraUserFields::Admin::ApplicationHelper
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def load_seed
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails"
|
4
|
+
require "decidim/core"
|
5
|
+
require "country_select"
|
6
|
+
require "deface"
|
7
|
+
|
8
|
+
module Decidim
|
9
|
+
module ExtraUserFields
|
10
|
+
# This is the engine that runs on the public interface of extra_user_fields.
|
11
|
+
class Engine < ::Rails::Engine
|
12
|
+
isolate_namespace Decidim::ExtraUserFields
|
13
|
+
|
14
|
+
DEFAULT_GENDER_OPTIONS = [:male, :female, :other].freeze
|
15
|
+
|
16
|
+
routes do
|
17
|
+
# Add engine routes here
|
18
|
+
# resources :extra_user_fields
|
19
|
+
# root to: "extra_user_fields#index"
|
20
|
+
end
|
21
|
+
|
22
|
+
initializer "decidim_extra_user_fields.assets" do |app|
|
23
|
+
app.config.assets.precompile += %w(decidim_extra_user_fields_manifest.js decidim_extra_user_fields_manifest.css)
|
24
|
+
end
|
25
|
+
|
26
|
+
initializer "decidim_extra_user_fields.registration_additions" do
|
27
|
+
Decidim::RegistrationForm.class_eval do
|
28
|
+
include ExtraUserFields::FormsDefinitions
|
29
|
+
end
|
30
|
+
|
31
|
+
Decidim::OmniauthRegistrationForm.class_eval do
|
32
|
+
include ExtraUserFields::FormsDefinitions
|
33
|
+
end
|
34
|
+
|
35
|
+
Decidim::AccountForm.class_eval do
|
36
|
+
include ExtraUserFields::FormsDefinitions
|
37
|
+
end
|
38
|
+
|
39
|
+
Decidim::CreateRegistration.class_eval do
|
40
|
+
prepend ExtraUserFields::CommandsOverrides
|
41
|
+
end
|
42
|
+
|
43
|
+
Decidim::CreateOmniauthRegistration.class_eval do
|
44
|
+
prepend ExtraUserFields::OmniauthCommandsOverrides
|
45
|
+
end
|
46
|
+
|
47
|
+
Decidim::UpdateAccount.class_eval do
|
48
|
+
prepend ExtraUserFields::CommandsOverrides
|
49
|
+
end
|
50
|
+
|
51
|
+
Decidim::FormBuilder.class_eval do
|
52
|
+
include ExtraUserFields::FormBuilderMethods
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ExtraUserFields
|
5
|
+
# This module adds the FormBuilder methods for extra user fields
|
6
|
+
module FormBuilderMethods
|
7
|
+
def custom_country_select(name, options = {})
|
8
|
+
label_text = options[:label].to_s
|
9
|
+
label_text = label_for(name) if label_text.blank?
|
10
|
+
|
11
|
+
template = ""
|
12
|
+
template += label(name, label_text + required_for_attribute(name)) if options.fetch(:label, true)
|
13
|
+
template += country_select(name)
|
14
|
+
template.html_safe
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "decidim/core/test/factories"
|
4
|
+
|
5
|
+
FactoryBot.define do
|
6
|
+
factory :extra_user_fields_component, parent: :component do
|
7
|
+
name { Decidim::Components::Namer.new(participatory_space.organization.available_locales, :extra_user_fields).i18n_name }
|
8
|
+
manifest_name :extra_user_fields
|
9
|
+
participatory_space { create(:participatory_process, :with_steps) }
|
10
|
+
end
|
11
|
+
|
12
|
+
# Add engine factories here
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "decidim/extra_user_fields/admin"
|
4
|
+
require "decidim/extra_user_fields/engine"
|
5
|
+
require "decidim/extra_user_fields/admin_engine"
|
6
|
+
require "decidim/extra_user_fields/form_builder_methods"
|
7
|
+
|
8
|
+
module Decidim
|
9
|
+
# This namespace holds the logic of the `ExtraUserFields` module.
|
10
|
+
module ExtraUserFields
|
11
|
+
end
|
12
|
+
end
|