Skip to content

Commit ddd42d3

Browse files
authored
add gender options (#3)
* add gender options * add age range * add translations * add readme * fix locales
1 parent fe9d06f commit ddd42d3

File tree

34 files changed

+293
-69
lines changed

34 files changed

+293
-69
lines changed

README.md

Lines changed: 57 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,45 +15,43 @@ This module also enables an Export action in the participants admin panel, which
1515

1616
## Installation
1717

18-
Pick the version of the gem that matches your Decidim version.
19-
20-
For Decidim 0.28:
18+
Add this line to your application's Gemfile:
2119

2220
```ruby
23-
gem "decidim-extra_user_fields", git: "https://github.com/PopulateTools/decidim-module-extra_user_fields.git", branch: "release/0.28-stable"
21+
gem 'decidim-extra_user_fields', github: 'openpoke/decidim-module-extra_user_fields'
2422
```
2523

26-
For Decidim 0.27:
24+
or for the original one:
2725

2826
```ruby
29-
gem "decidim-extra_user_fields", git: "https://github.com/PopulateTools/decidim-module-extra_user_fields.git", branch: "release/0.27-stable"
27+
gem 'decidim-extra_user_fields', github: 'PopulateTools/decidim-module-extra_user_fields'
3028
```
3129

32-
For Decidim 0.26:
30+
And then execute:
3331

34-
```ruby
35-
gem "decidim-extra_user_fields", git: "https://github.com/PopulateTools/decidim-module-extra_user_fields.git", branch: "release/0.26-stable"
32+
```bash
33+
bundle
34+
bin/rails decidim:upgrade
35+
bin/rails db:migrate
3636
```
3737

38-
For Decidim 0.25:
38+
> **EXPERTS ONLY**
39+
>
40+
> Under the hood, when running `bundle exec rails decidim:upgrade` the `decidim-extra_user_fields` gem will run the following (that can also be run manually if you consider):
41+
>
42+
> ```bash
43+
> bin/rails decidim_extra_user_fields:install:migrations
44+
> ```
3945
40-
```ruby
41-
gem "decidim-extra_user_fields", git: "https://github.com/PopulateTools/decidim-module-extra_user_fields.git", branch: "release/0.25-stable"
42-
```
46+
You can also the version of the gem that matches your Decidim version:
4347
44-
For Decidim 0.24:
4548
4649
```ruby
47-
gem "decidim-extra_user_fields", git: "https://github.com/PopulateTools/decidim-module-extra_user_fields.git", branch: "release/0.24-stable"
48-
```
49-
50-
And then execute:
51-
52-
```bash
53-
bundle install
54-
# For versions >= 0.27
55-
bundle exec rake railties:install:migrations
56-
bundle exec rake db:migrate
50+
gem "decidim-extra_user_fields", github: "PopulateTools/decidim-module-extra_user_fields", branch: "release/0.28-stable"
51+
gem "decidim-extra_user_fields", github: "PopulateTools/decidim-module-extra_user_fields", branch: "release/0.27-stable"
52+
gem "decidim-extra_user_fields", github: "PopulateTools/decidim-module-extra_user_fields", branch: "release/0.26-stable"
53+
gem "decidim-extra_user_fields", github: "PopulateTools/decidim-module-extra_user_fields", branch: "release/0.25-stable"
54+
gem "decidim-extra_user_fields", github: "PopulateTools/decidim-module-extra_user_fields", branch: "release/0.24-stable"
5755
```
5856
5957
## Usage
@@ -62,7 +60,7 @@ bundle exec rake db:migrate
6260

6361
After installing the gem and migrating the database, you can enable the extra fields in the admin panel of the organization. Go to Settings > Manage extra user fields. There you can enable the fields you want to use. By default all fields are required and don't include any format validation.
6462

65-
![Admin panel](https://github.com/PopulateTools/decidim-module-extra_user_fields/blob/extra-fields-0-27/docs/resources/extra_user_fields_admin.png)
63+
![Admin panel](docs/resources/extra_user_fields_admin.png)
6664

6765
Most of the fields are plain text inputs, but other have a special format:
6866

@@ -73,16 +71,47 @@ Most of the fields are plain text inputs, but other have a special format:
7371

7472
Once the fields are enabled, they will be shown in the user signup form and in the user profile.
7573

76-
![User signup](https://github.com/PopulateTools/decidim-module-extra_user_fields/blob/extra-fields-0-27/docs/resources/extra_user_fields_signup.png)
74+
![User signup](docs/resources/extra_user_fields_signup.png)
7775

78-
![User profile](https://github.com/PopulateTools/decidim-module-extra_user_fields/blob/extra-fields-0-27/docs/resources/extra_user_fields_profile.png)
76+
![User profile](docs/resources/extra_user_fields_profile.png)
7977

8078

8179
### Admin users export
8280

8381
An extra feature of this plugin is to enable an Export action in the participants admin panel. This action allows to download a list of participants in CSV, JSON or Excel. The fields included in the export are the Decidim User attributes plus the extra fields enabled in the admin panel.
8482

85-
![User export](https://github.com/PopulateTools/decidim-module-extra_user_fields/blob/extra-fields-0-27/docs/resources/extra_user_fields_export.png)
83+
![User export](docs/resources/extra_user_fields_export.png)
84+
85+
86+
## Configuration
87+
88+
By default, the module is configured to read the configuration from ENV variables.
89+
90+
Currently, the following ENV variables are supported:
91+
92+
| ENV variable | Description | Default value |
93+
| ------------ | ----------- |-------|
94+
| EXTRA_USER_FIELDS_UNDERAGE_LIMIT | The minimum age limit to consider a user as underage. This is used to determine if the user falls into the underage category. | `18` |
95+
| EXTRA_USER_FIELDS_UNDERAGE_OPTIONS | Options for selecting the age for when someone is considered "underage". | `15 16 17 18 19 20 21` |
96+
| EXTRA_USER_FIELDS_GENDERS | Options for the gender field (you need to add the corresponding I18n keys, ie: `decidim.extra_user_fields.genders.prefer_not_to_say` ) | `female male other prefer_not_to_say` |
97+
| EXTRA_USER_FIELDS_AGE_RANGES | Options for the age range field (you need to add the corresponding I18n keys, e.g., `decidim.extra_user_fields.age_ranges.up_to_16`) | `up_to_16 17_to_30 31_to_60 61_or_more prefer_not_to_say` |
98+
99+
### Configuration through an initializer
100+
101+
It is also possible to configure the module using the an initializer:
102+
103+
Create an initializer (for instance `config/initializers/extra_user_fields.rb`) and configure the following:
104+
105+
```ruby
106+
# config/initializers/extra_user_fields.rb
107+
108+
Decidim::ExtraUserFields.configure do |config|
109+
config.genders = [:female, :male, :other, :prefer_not_to_say]
110+
config.age_ranges = ["30_or_younger", "31_or_older", "prefer_not_to_say"]
111+
112+
...
113+
end
114+
```
86115

87116
## Contributing
88117

app/commands/concerns/decidim/extra_user_fields/create_registrations_commands_overrides.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ def extended_data
5050
postal_code: form.postal_code,
5151
date_of_birth: form.date_of_birth,
5252
gender: form.gender,
53+
age_range: form.age_range,
5354
phone_number: form.phone_number,
5455
location: form.location,
5556
underage: form.underage,

app/commands/concerns/decidim/extra_user_fields/omniauth_commands_overrides.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ def extended_data
7777
postal_code: form.postal_code,
7878
date_of_birth: form.date_of_birth,
7979
gender: form.gender,
80+
age_range: form.age_range,
8081
phone_number: form.phone_number,
8182
location: form.location,
8283
underage: form.underage,

app/commands/concerns/decidim/extra_user_fields/update_account_commands_overrides.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ def extended_data
2626
postal_code: @form.postal_code,
2727
date_of_birth: @form.date_of_birth,
2828
gender: @form.gender,
29+
age_range: @form.age_range,
2930
phone_number: @form.phone_number,
3031
location: @form.location,
3132
underage: @form.underage,

app/commands/decidim/extra_user_fields/admin/update_extra_user_fields.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,27 +39,27 @@ def update_extra_user_fields!
3939
end
4040

4141
# rubocop:disable Metrics/CyclomaticComplexity
42+
# rubocop:disable Metrics/PerceivedComplexity
4243
def extra_user_fields
4344
{
4445
"enabled" => form.enabled.presence || false,
4546
"date_of_birth" => { "enabled" => form.date_of_birth.presence || false },
4647
"country" => { "enabled" => form.country.presence || false },
4748
"postal_code" => { "enabled" => form.postal_code.presence || false },
4849
"gender" => { "enabled" => form.gender.presence || false },
50+
"age_range" => { "enabled" => form.age_range.presence || false },
4951
"phone_number" => {
5052
"enabled" => form.phone_number.presence || false,
5153
"pattern" => form.phone_number_pattern.presence,
5254
"placeholder" => form.phone_number_placeholder.presence
5355
},
5456
"location" => { "enabled" => form.location.presence || false },
5557
"underage" => { "enabled" => form.underage || false },
56-
"underage_limit" => form.underage_limit || Decidim::ExtraUserFields::Engine::DEFAULT_UNDERAGE_LIMIT
57-
# Block ExtraUserFields SaveFieldInConfig
58-
59-
# EndBlock
58+
"underage_limit" => form.underage_limit || Decidim::ExtraUserFields.underage_limit
6059
}
6160
end
6261
# rubocop:enable Metrics/CyclomaticComplexity
62+
# rubocop:enable Metrics/PerceivedComplexity
6363
end
6464
end
6565
end

app/controllers/decidim/extra_user_fields/admin/extra_user_fields_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def update
2525
UpdateExtraUserFields.call(@form) do
2626
on(:ok) do
2727
flash[:notice] = t(".success")
28-
render action: "index"
28+
redirect_to root_path
2929
end
3030

3131
on(:invalid) do

app/forms/concerns/decidim/extra_user_fields/forms_definitions.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ module FormsDefinitions
1717
attribute :postal_code, String
1818
attribute :date_of_birth, Decidim::Attributes::LocalizedDate
1919
attribute :gender, String
20+
attribute :age_range, String
2021
attribute :phone_number, String
2122
attribute :location, String
2223
attribute :underage, ActiveRecord::Type::Boolean
@@ -29,7 +30,8 @@ module FormsDefinitions
2930
validates :country, presence: true, if: :country?
3031
validates :postal_code, presence: true, if: :postal_code?
3132
validates :date_of_birth, presence: true, if: :date_of_birth?
32-
validates :gender, presence: true, inclusion: { in: Decidim::ExtraUserFields::Engine::DEFAULT_GENDER_OPTIONS.map(&:to_s) }, if: :gender?
33+
validates :gender, presence: true, inclusion: { in: Decidim::ExtraUserFields.genders.map(&:to_s) }, if: :gender?
34+
validates :age_range, presence: true, inclusion: { in: Decidim::ExtraUserFields.age_ranges.map(&:to_s) }, if: :age_range?
3335
validates :phone_number, presence: true, if: :phone_number?
3436
validates(
3537
:phone_number,
@@ -55,6 +57,7 @@ def map_model(model)
5557
self.postal_code = extended_data[:postal_code]
5658
self.date_of_birth = Date.parse(extended_data[:date_of_birth]) if extended_data[:date_of_birth].present?
5759
self.gender = extended_data[:gender]
60+
self.age_range = extended_data[:age_range]
5861
self.phone_number = extended_data[:phone_number]
5962
self.location = extended_data[:location]
6063
self.underage = extended_data[:underage]
@@ -80,6 +83,10 @@ def gender?
8083
extra_user_fields_enabled && current_organization.activated_extra_field?(:gender)
8184
end
8285

86+
def age_range?
87+
extra_user_fields_enabled && current_organization.activated_extra_field?(:age_range)
88+
end
89+
8390
def postal_code?
8491
extra_user_fields_enabled && current_organization.activated_extra_field?(:postal_code)
8592
end

app/forms/decidim/extra_user_fields/admin/extra_user_fields_form.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class ExtraUserFieldsForm < Decidim::Form
1111
attribute :postal_code, Boolean
1212
attribute :date_of_birth, Boolean
1313
attribute :gender, Boolean
14+
attribute :age_range, Boolean
1415
attribute :phone_number, Boolean
1516
attribute :location, Boolean
1617
attribute :underage, Boolean
@@ -28,10 +29,11 @@ def map_model(model)
2829
self.postal_code = model.extra_user_fields.dig("postal_code", "enabled")
2930
self.date_of_birth = model.extra_user_fields.dig("date_of_birth", "enabled")
3031
self.gender = model.extra_user_fields.dig("gender", "enabled")
32+
self.age_range = model.extra_user_fields.dig("age_range", "enabled")
3133
self.phone_number = model.extra_user_fields.dig("phone_number", "enabled")
3234
self.location = model.extra_user_fields.dig("location", "enabled")
3335
self.underage = model.extra_user_fields.dig("underage", "enabled")
34-
self.underage_limit = model.extra_user_fields.fetch("underage_limit", Decidim::ExtraUserFields::Engine::DEFAULT_UNDERAGE_LIMIT)
36+
self.underage_limit = model.extra_user_fields.fetch("underage_limit", Decidim::ExtraUserFields.underage_limit)
3537
self.phone_number_pattern = model.extra_user_fields.dig("phone_number", "pattern")
3638
self.phone_number_placeholder = model.extra_user_fields.dig("phone_number", "placeholder")
3739
# Block ExtraUserFields MapModel

app/helpers/decidim/extra_user_fields/application_helper.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,17 @@ module ExtraUserFields
66
#
77
module ApplicationHelper
88
def gender_options_for_select
9-
Decidim::ExtraUserFields::Engine::DEFAULT_GENDER_OPTIONS.map do |gender|
9+
Decidim::ExtraUserFields.genders.map do |gender|
1010
[gender, I18n.t(gender, scope: "decidim.extra_user_fields.genders")]
1111
end
1212
end
1313

14+
def age_range_options_for_select
15+
Decidim::ExtraUserFields.age_ranges.map do |age_range|
16+
[age_range, I18n.t(age_range, scope: "decidim.extra_user_fields.age_ranges")]
17+
end
18+
end
19+
1420
def phone_number_extra_user_field_pattern
1521
current_organization.extra_user_field_configuration(:phone_number)["pattern"]
1622
end

app/serializers/decidim/extra_user_fields/user_export_serializer.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def serialize
1313
def extra_user_fields
1414
extended_data = resource.extended_data.symbolize_keys
1515

16-
[:gender, :country, :postal_code, :date_of_birth, :phone_number, :location, :underage, :statutory_representative_email].index_with do |key|
16+
[:gender, :age_range, :country, :postal_code, :date_of_birth, :phone_number, :location, :underage, :statutory_representative_email].index_with do |key|
1717
extended_data[key]
1818
end
1919
end
@@ -29,6 +29,7 @@ def blocking_data
2929
def extra_fields
3030
[
3131
:gender,
32+
:age_range,
3233
:country,
3334
:postal_code,
3435
:date_of_birth,

app/views/decidim/extra_user_fields/_profile_form.html.erb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
<%= f.collection_select :gender, f.object.gender_options_for_select, :first, :last %>
88
<% end %>
99

10+
<% if current_organization.activated_extra_field?(:age_range) %>
11+
<%= f.collection_select :age_range, f.object.age_range_options_for_select, :first, :last %>
12+
<% end %>
13+
1014
<% if current_organization.activated_extra_field?(:country) %>
1115
<%= f.label :country do %>
1216
<%= f.custom_country_select :country %>

app/views/decidim/extra_user_fields/_registration_form.html.erb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
<%= f.collection_select :gender, f.object.gender_options_for_select, :first, :last %>
1111
<% end %>
1212

13+
<% if current_organization.activated_extra_field?(:age_range) %>
14+
<%= f.collection_select :age_range, f.object.age_range_options_for_select, :first, :last %>
15+
<% end %>
16+
1317
<% if current_organization.activated_extra_field?(:country) %>
1418
<%= f.label :country do %>
1519
<%= f.custom_country_select :country %>

app/views/decidim/extra_user_fields/admin/extra_user_fields/_form.html.erb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<%= render partial: "decidim/extra_user_fields/admin/extra_user_fields/fields/country", locals: { form: form } %>
3030
<%= render partial: "decidim/extra_user_fields/admin/extra_user_fields/fields/postal_code", locals: { form: form } %>
3131
<%= render partial: "decidim/extra_user_fields/admin/extra_user_fields/fields/gender", locals: { form: form } %>
32+
<%= render partial: "decidim/extra_user_fields/admin/extra_user_fields/fields/age_range", locals: { form: form } %>
3233
<%= render partial: "decidim/extra_user_fields/admin/extra_user_fields/fields/phone_number", locals: { form: form } %>
3334
<%= render partial: "decidim/extra_user_fields/admin/extra_user_fields/fields/location", locals: { form: form } %>
3435
<%= render partial: "decidim/extra_user_fields/admin/extra_user_fields/fields/underage", locals: { form: form } %>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<div class="card-section">
2+
<div class="row column">
3+
<%= form.check_box :age_range, label: t(".label"), help_text: t(".description") %>
4+
</div>
5+
</div>

app/views/decidim/extra_user_fields/admin/extra_user_fields/fields/_underage.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
<div class="row column">
33
<p><%= t(".description") %></p>
44
<%= form.check_box :underage, label: t(".label") %>
5-
<%= form.select :underage_limit, ( Decidim::ExtraUserFields::Engine::DEFAULT_UNDERAGE_OPTIONS).to_a, selected: current_organization.extra_user_fields["underage_limit"] || Decidim::ExtraUserFields::Engine::DEFAULT_UNDERAGE_LIMIT, label: t(".limit") %>
5+
<%= form.select :underage_limit, ( Decidim::ExtraUserFields.underage_options).to_a, selected: current_organization.extra_user_fields["underage_limit"] || Decidim::ExtraUserFields.underage_limit, label: t(".limit") %>
66
</div>
77
</div>

config/i18n-tasks.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ ignore_unused:
99
- activemodel.errors.models.user.*
1010
- decidim.admin.extra_user_fields.menu.title
1111
- decidim.extra_user_fields.genders.*
12+
- decidim.extra_user_fields.age_ranges.*
1213

1314
ignore_missing:
1415
- decidim.participatory_processes.scopes.global

config/locales/ca.yml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ ca:
33
activemodel:
44
attributes:
55
user:
6+
age_range: Quina edat tens?
67
country: País
78
date_of_birth: Data de naixement
8-
gender: Gènere
9+
gender: Quin gènere identifiques?
910
location: Localització
1011
phone_number: Telèfon
1112
postal_code: Codi postal
@@ -36,6 +37,10 @@ ca:
3637
users: Participants
3738
extra_user_fields:
3839
fields:
40+
age_range:
41+
description: Aquest camp és una llista de rangs d'edat. Si está activat,
42+
l'usuari haurà de triar un rang d'edat.
43+
label: Habilitar camp de rang d'edat
3944
country:
4045
description: Aquest camp és una llista de països. Si está activat, l'usuari
4146
haurà de triar un país.
@@ -89,10 +94,17 @@ ca:
8994
update:
9095
failure: S'ha produït un error en l'actualització
9196
success: Camps d'usuari addicionals actualitzats correctament a l'organització
97+
age_ranges:
98+
17_to_30: De 17 a 30
99+
31_to_60: De 31 a 60
100+
61_or_more: 61 o més
101+
prefer_not_to_say: Prefereixo no dir-ho
102+
up_to_16: 16 o menys
92103
genders:
93104
female: Dona
94105
male: Home
95106
other: Altre
107+
prefer_not_to_say: Prefereixo no dir-ho
96108
registration_form:
97109
signup:
98110
legend: Més informació

0 commit comments

Comments
 (0)