decidim-decidim_awesome 0.12.3 → 0.12.4

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -1
  3. data/README.md +1 -1
  4. data/app/commands/concerns/decidim/decidim_awesome/admin/needs_constraint_helpers.rb +39 -5
  5. data/app/commands/decidim/decidim_awesome/admin/create_authorization_group.rb +42 -0
  6. data/app/commands/decidim/decidim_awesome/admin/create_custom_redirect.rb +10 -14
  7. data/app/commands/decidim/decidim_awesome/admin/create_menu_hack.rb +9 -8
  8. data/app/commands/decidim/decidim_awesome/admin/create_proposal_custom_field.rb +3 -8
  9. data/app/commands/decidim/decidim_awesome/admin/create_scoped_admin.rb +4 -8
  10. data/app/commands/decidim/decidim_awesome/admin/create_scoped_style.rb +3 -7
  11. data/app/commands/decidim/decidim_awesome/admin/destroy_authorization_group.rb +37 -0
  12. data/app/commands/decidim/decidim_awesome/admin/destroy_custom_redirect.rb +10 -9
  13. data/app/commands/decidim/decidim_awesome/admin/destroy_menu_hack.rb +8 -7
  14. data/app/commands/decidim/decidim_awesome/admin/destroy_proposal_custom_field.rb +7 -13
  15. data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_admin.rb +7 -10
  16. data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_style.rb +6 -11
  17. data/app/commands/decidim/decidim_awesome/admin/update_config.rb +12 -1
  18. data/app/commands/decidim/decidim_awesome/admin/update_custom_redirect.rb +11 -11
  19. data/app/commands/decidim/decidim_awesome/admin/update_menu_hack.rb +10 -8
  20. data/app/controllers/concerns/decidim/decidim_awesome/enforce_access_authorizations.rb +49 -0
  21. data/app/controllers/concerns/decidim/decidim_awesome/needs_hashcash.rb +7 -5
  22. data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +2 -0
  23. data/app/controllers/decidim/decidim_awesome/admin/force_authorizations_controller.rb +44 -0
  24. data/app/controllers/decidim/decidim_awesome/required_authorizations_controller.rb +51 -13
  25. data/app/forms/concerns/decidim/decidim_awesome/proposals/admin/proposal_form_customizations.rb +59 -0
  26. data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_customizations.rb +28 -28
  27. data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_customizations_base.rb +36 -0
  28. data/app/forms/decidim/decidim_awesome/admin/authorization_group_form.rb +66 -0
  29. data/app/forms/decidim/decidim_awesome/admin/config_form.rb +12 -26
  30. data/app/forms/decidim/decidim_awesome/admin/constraint_form.rb +2 -0
  31. data/app/helpers/concerns/decidim/decidim_awesome/amendments_helper_override.rb +2 -1
  32. data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +20 -17
  33. data/app/overrides/decidim/assemblies/admin/assemblies/_form/add_visibility_callout.html.erb.deface +3 -0
  34. data/app/overrides/decidim/conferences/admin/conferences/_form/add_visibility_callout.html.erb.deface +3 -0
  35. data/app/overrides/decidim/participatory_processes/admin/participatory_process_groups/_form/add_visibility_callout.html.erb.deface +3 -0
  36. data/app/overrides/decidim/participatory_processes/admin/participatory_processes/_form/add_visibility_callout.html.erb.deface +3 -0
  37. data/app/overrides/decidim/shared/_login_modal/add_hashcash.html.erb.deface +3 -0
  38. data/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js +15 -0
  39. data/app/packs/src/decidim/decidim_awesome/awesome_admin.js +0 -1
  40. data/app/packs/stylesheets/decidim/decidim_awesome/admin/codemirror.scss +6 -1
  41. data/app/packs/stylesheets/decidim/decidim_awesome/admin/constraints.scss +5 -0
  42. data/app/packs/stylesheets/decidim/decidim_awesome/admin/custom_fields.scss +1 -2
  43. data/app/queries/decidim/decidim_awesome/space_constraint_finder.rb +43 -0
  44. data/app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_methods.rb +3 -2
  45. data/app/services/decidim/decidim_awesome/access_authorization_service.rb +79 -0
  46. data/app/types/concerns/decidim/decidim_awesome/add_proposal_type_custom_fields.rb +2 -1
  47. data/app/views/decidim/decidim_awesome/admin/config/_authorization_options_form.html.erb +19 -0
  48. data/app/views/decidim/decidim_awesome/admin/config/_form_verifications.html.erb +71 -9
  49. data/app/views/decidim/decidim_awesome/admin/constraints/_form.html.erb +5 -4
  50. data/app/views/decidim/decidim_awesome/admin/shared/_visibility_notice.html.erb +8 -0
  51. data/app/views/decidim/decidim_awesome/hashcash/_hidden_field.html.erb +0 -1
  52. data/app/views/decidim/decidim_awesome/required_authorizations/index.html.erb +14 -4
  53. data/config/i18n-tasks.yml +1 -0
  54. data/config/locales/ca.yml +31 -7
  55. data/config/locales/cs.yml +32 -7
  56. data/config/locales/de.yml +31 -7
  57. data/config/locales/en.yml +36 -12
  58. data/config/locales/es.yml +32 -7
  59. data/config/locales/eu.yml +3 -8
  60. data/config/locales/fr.yml +3 -8
  61. data/config/locales/ja.yml +70 -7
  62. data/config/locales/sv.yml +49 -0
  63. data/lib/decidim/decidim_awesome/admin_engine.rb +1 -0
  64. data/lib/decidim/decidim_awesome/{authorizator.rb → authorizer.rb} +1 -1
  65. data/lib/decidim/decidim_awesome/awesome.rb +5 -17
  66. data/lib/decidim/decidim_awesome/awesome_helpers.rb +14 -5
  67. data/lib/decidim/decidim_awesome/checksums.yml +11 -0
  68. data/lib/decidim/decidim_awesome/config.rb +18 -7
  69. data/lib/decidim/decidim_awesome/context_analyzers/request_analyzer.rb +1 -1
  70. data/lib/decidim/decidim_awesome/engine.rb +3 -1
  71. data/lib/decidim/decidim_awesome/menu.rb +1 -1
  72. data/lib/decidim/decidim_awesome/middleware/current_config.rb +5 -10
  73. data/lib/decidim/decidim_awesome/test/initializer.rb +1 -1
  74. data/lib/decidim/decidim_awesome/test/shared_examples/proposal_form_examples.rb +191 -0
  75. data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +7 -3
  76. data/lib/decidim/decidim_awesome/version.rb +1 -1
  77. data/package.json +4 -4
  78. metadata +20 -5
  79. data/app/controllers/concerns/decidim/decidim_awesome/check_login_authorizations.rb +0 -60
  80. data/app/packs/src/decidim/decidim_awesome/admin/verification_selects.js +0 -21
@@ -0,0 +1,191 @@
1
+ # frozen_string_literal: true
2
+
3
+ shared_context "with a custom fields enabled" do
4
+ let(:organization) { create(:organization, available_locales: [:en]) }
5
+ let(:participatory_space) { create(:participatory_process, :with_steps, organization:) }
6
+ let(:component) { create(:proposal_component, participatory_space:) }
7
+ let(:title) { "More sidewalks and less roads" }
8
+ let(:body) { nil }
9
+ let(:private_body) { nil }
10
+ let(:body_template) { nil }
11
+ let(:author) { create(:user, organization:) }
12
+
13
+ let(:form) do
14
+ described_class.from_params(params).with_context(
15
+ current_component: component,
16
+ current_organization: component.organization,
17
+ current_participatory_space: participatory_space
18
+ )
19
+ end
20
+
21
+ let(:data) { '{"type":"text","label":"Full Name","subtype":"text","className":"form-control","name":"text-1476748004559"}' }
22
+ let(:private_data) { '{"type":"text","label":"Email","subtype":"text","className":"form-control","name":"text-1476748004569"}' }
23
+ let(:custom_fields) do
24
+ {
25
+ "foo" => "[#{data}]"
26
+ }
27
+ end
28
+ let(:private_custom_fields) do
29
+ {
30
+ "bar" => "[#{private_data}]"
31
+ }
32
+ end
33
+ let!(:config) { create(:awesome_config, organization:, var: :proposal_custom_fields, value: custom_fields) }
34
+ let!(:private_config) { create(:awesome_config, organization:, var: :proposal_private_custom_fields, value: private_custom_fields) }
35
+ let(:config_helper) { create(:awesome_config, organization:, var: :proposal_custom_field_foo, value: nil) }
36
+ let(:private_config_helper) { create(:awesome_config, organization:, var: :proposal_private_custom_field_bar, value: nil) }
37
+ let!(:constraint) do
38
+ create(:config_constraint, awesome_config: config_helper, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug })
39
+ end
40
+ let!(:private_constraint) { create(:config_constraint, awesome_config: private_config_helper, settings: { "participatory_space_manifest" => "participatory_processes" }) }
41
+ let(:slug) { participatory_space.slug }
42
+ end
43
+ shared_examples "starts with caps" do |prop|
44
+ let!(:config) { create(:awesome_config, organization:, var: "validate_#{prop}_start_with_caps", value: enabled) }
45
+ let!(:constraint) do
46
+ create(:config_constraint, awesome_config: config, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug })
47
+ end
48
+
49
+ let(:enabled) { false }
50
+ let(prop.to_sym) { "í don't start with caps" }
51
+
52
+ it { is_expected.to be_valid }
53
+
54
+ context "when scoped under different context" do
55
+ let(:slug) { "another-slug" }
56
+
57
+ it { is_expected.not_to be_valid }
58
+
59
+ context "when starts with caps" do
60
+ let(prop.to_sym) { "Í start with caps" }
61
+
62
+ it { is_expected.to be_valid }
63
+ end
64
+ end
65
+
66
+ context "when enabled" do
67
+ let(:enabled) { true }
68
+
69
+ it { is_expected.not_to be_valid }
70
+
71
+ context "when starts with caps" do
72
+ let(prop.to_sym) { "Í start with caps" }
73
+
74
+ it { is_expected.to be_valid }
75
+ end
76
+ end
77
+ end
78
+
79
+ shared_examples "minimum length" do |prop|
80
+ let!(:config) { create(:awesome_config, organization:, var: "validate_#{prop}_min_length", value: min_length) }
81
+ let!(:constraint) do
82
+ create(:config_constraint, awesome_config: config, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug })
83
+ end
84
+
85
+ let(:min_length) { 10 }
86
+ let(prop.to_sym) { "I am 10 yo" }
87
+
88
+ it { is_expected.to be_valid }
89
+
90
+ context "when scoped under different context" do
91
+ let(:slug) { "another-slug" }
92
+
93
+ it { is_expected.not_to be_valid }
94
+
95
+ context "when has more than 15 chars" do
96
+ let(prop.to_sym) { "I am 17 years old" }
97
+
98
+ it { is_expected.to be_valid }
99
+ end
100
+ end
101
+
102
+ context "when less than allowed" do
103
+ let(:min_length) { 11 }
104
+
105
+ it { is_expected.not_to be_valid }
106
+ end
107
+
108
+ context "when min_length is zero" do
109
+ let(:min_length) { 0 }
110
+ let(prop.to_sym) { "" }
111
+
112
+ if prop == :body
113
+ it { is_expected.to be_valid }
114
+ else
115
+ it { is_expected.not_to be_valid }
116
+ end
117
+ end
118
+ end
119
+
120
+ shared_examples "max caps percent" do |prop|
121
+ let!(:config) { create(:awesome_config, organization:, var: "validate_#{prop}_max_caps_percent", value: percent) }
122
+ let!(:constraint) do
123
+ create(:config_constraint, awesome_config: config, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug })
124
+ end
125
+
126
+ let(:percent) { 90 }
127
+ let(prop.to_sym) { "Í ÁM A SÈMI-CÁPS text" }
128
+
129
+ it { is_expected.to be_valid }
130
+
131
+ shared_examples "invalid percentage" do |per|
132
+ it "error message returns percentage" do
133
+ expect(form).not_to be_valid
134
+ expect(form.errors.messages.values.flatten.first).to include("over #{per}% of the text")
135
+ end
136
+ end
137
+
138
+ context "when scoped under different context" do
139
+ let(:slug) { "another-slug" }
140
+
141
+ it_behaves_like "invalid percentage", 25
142
+
143
+ context "when has less than 25% caps" do
144
+ let(prop.to_sym) { "Í only have some CÁPS" }
145
+
146
+ it { is_expected.to be_valid }
147
+ end
148
+ end
149
+
150
+ context "when less than allowed" do
151
+ let(:percent) { 11 }
152
+
153
+ it_behaves_like "invalid percentage", 11
154
+ end
155
+ end
156
+
157
+ shared_examples "max marks together" do |prop|
158
+ let!(:config) { create(:awesome_config, organization:, var: "validate_#{prop}_max_marks_together", value: max_marks) }
159
+ let!(:constraint) do
160
+ create(:config_constraint, awesome_config: config, settings: { "participatory_space_manifest" => "participatory_processes", "participatory_space_slug" => slug })
161
+ end
162
+
163
+ let(:max_marks) { 5 }
164
+ let(prop.to_sym) { "Am I a little bit noisy??!!!" }
165
+
166
+ it { is_expected.to be_valid }
167
+
168
+ context "when scoped under different context" do
169
+ let(:slug) { "another-slug" }
170
+
171
+ it { is_expected.not_to be_valid }
172
+
173
+ context "when has only 1 mark" do
174
+ let(prop.to_sym) { "I am not noisy!" }
175
+
176
+ it { is_expected.to be_valid }
177
+ end
178
+
179
+ context "when has 2 marks" do
180
+ let(prop.to_sym) { "I am not noisy!?" }
181
+
182
+ it { is_expected.not_to be_valid }
183
+ end
184
+ end
185
+
186
+ context "when less than allowed" do
187
+ let(:max_marks) { 4 }
188
+
189
+ it { is_expected.not_to be_valid }
190
+ end
191
+ end
@@ -38,6 +38,7 @@ shared_examples "activated concerns" do |enabled|
38
38
  expect(Decidim::ErrorsController.included_modules).to include(Decidim::DecidimAwesome::NotFoundRedirect)
39
39
  expect(Decidim::Proposals::ApplicationHelper.included_modules).to include(Decidim::DecidimAwesome::Proposals::ApplicationHelperOverride)
40
40
  expect(Decidim::Proposals::ProposalForm.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalFormCustomizations)
41
+ expect(Decidim::Proposals::Admin::ProposalForm.included_modules).to include(Decidim::DecidimAwesome::Proposals::Admin::ProposalFormCustomizations)
41
42
  expect(Decidim::Proposals::ProposalForm.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride)
42
43
  expect(Decidim::Proposals::Admin::ProposalForm.included_modules).to include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride)
43
44
  expect(Decidim::AmendmentsHelper.included_modules).to include(Decidim::DecidimAwesome::AmendmentsHelperOverride)
@@ -56,7 +57,7 @@ shared_examples "activated concerns" do |enabled|
56
57
  expect(Decidim::AmendmentsController.included_modules).to include(Decidim::DecidimAwesome::LimitPendingAmendments)
57
58
  expect(Decidim::Proposals::ProposalsController.included_modules).to include(Decidim::DecidimAwesome::Proposals::OrderableOverride)
58
59
  expect(Decidim::AdminLog::ComponentPresenter.included_modules).to include(Decidim::DecidimAwesome::AdminLog::ComponentPresenterOverride)
59
- expect(Decidim::ApplicationController.included_modules).to include(Decidim::DecidimAwesome::CheckLoginAuthorizations)
60
+ expect(Decidim::ApplicationController.included_modules).to include(Decidim::DecidimAwesome::EnforceAccessAuthorizations)
60
61
  expect(Decidim::ApplicationController.included_modules).to include(Decidim::DecidimAwesome::UseUserTimeZone)
61
62
  expect(Decidim::AccountForm.included_modules).to include(Decidim::DecidimAwesome::AccountFormOverride)
62
63
  expect(Decidim::UpdateAccount.included_modules).to include(Decidim::DecidimAwesome::UpdateAccountOverride)
@@ -77,6 +78,7 @@ shared_examples "activated concerns" do |enabled|
77
78
  expect(Decidim::ErrorsController.included_modules).not_to include(Decidim::DecidimAwesome::NotFoundRedirect)
78
79
  expect(Decidim::Proposals::ApplicationHelper.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ApplicationHelperOverride)
79
80
  expect(Decidim::Proposals::ProposalForm.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalFormCustomizations)
81
+ expect(Decidim::Proposals::Admin::ProposalForm.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::Admin::ProposalFormCustomizations)
80
82
  expect(Decidim::Proposals::ProposalForm.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride)
81
83
  expect(Decidim::Proposals::Admin::ProposalForm.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::ProposalFormOverride)
82
84
  expect(Decidim::AmendmentsHelper.included_modules).not_to include(Decidim::DecidimAwesome::AmendmentsHelperOverride)
@@ -95,7 +97,7 @@ shared_examples "activated concerns" do |enabled|
95
97
  expect(Decidim::AmendmentsController.included_modules).not_to include(Decidim::DecidimAwesome::LimitPendingAmendments)
96
98
  expect(Decidim::Proposals::ProposalsController.included_modules).not_to include(Decidim::DecidimAwesome::Proposals::OrderableOverride)
97
99
  expect(Decidim::AdminLog::ComponentPresenter.included_modules).not_to include(Decidim::DecidimAwesome::AdminLog::ComponentPresenterOverride)
98
- expect(Decidim::ApplicationController.included_modules).not_to include(Decidim::DecidimAwesome::CheckLoginAuthorizations)
100
+ expect(Decidim::ApplicationController.included_modules).not_to include(Decidim::DecidimAwesome::EnforceAccessAuthorizations)
99
101
  expect(Decidim::ApplicationController.included_modules).not_to include(Decidim::DecidimAwesome::UseUserTimeZone)
100
102
  expect(Decidim::AccountForm.included_modules).not_to include(Decidim::DecidimAwesome::AccountFormOverride)
101
103
  expect(Decidim::UpdateAccount.included_modules).not_to include(Decidim::DecidimAwesome::UpdateAccountOverride)
@@ -194,7 +196,7 @@ shared_examples "basic rendering" do |enabled|
194
196
  end
195
197
 
196
198
  it "renders the home page" do
197
- expect(page).to have_css(".home")
199
+ expect(page).to have_content("Welcome to")
198
200
  end
199
201
 
200
202
  it "has DecidimAwesome object" do
@@ -251,6 +253,8 @@ shared_examples "basic rendering" do |enabled|
251
253
  "menus/home_content_block_menu/hacks",
252
254
  "custom_redirects",
253
255
  "config/livechat",
256
+ "config/verifications",
257
+ "maintenance/private_data",
254
258
  "maintenance/hashcash"
255
259
  ]
256
260
  end
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  # This holds the decidim-decidim_awesome version.
5
5
  module DecidimAwesome
6
- VERSION = "0.12.3"
6
+ VERSION = "0.12.4"
7
7
  COMPAT_DECIDIM_VERSION = [">= 0.29.1", "< 0.30"].freeze
8
8
  end
9
9
  end
data/package.json CHANGED
@@ -34,10 +34,10 @@
34
34
  },
35
35
  "prettier": "@decidim/prettier-config",
36
36
  "devDependencies": {
37
- "@decidim/dev": "0.29.1",
38
- "@decidim/eslint-config": "0.29.1",
39
- "@decidim/prettier-config": "0.29.1",
40
- "@decidim/stylelint-config": "0.29.1",
37
+ "@decidim/dev": "0.29.4",
38
+ "@decidim/eslint-config": "0.29.4",
39
+ "@decidim/prettier-config": "0.29.4",
40
+ "@decidim/stylelint-config": "0.29.4",
41
41
  "postcss-scss": "^4.0.9"
42
42
  },
43
43
  "dependencies": {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-decidim_awesome
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.3
4
+ version: 0.12.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Vergés
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-06-23 00:00:00.000000000 Z
11
+ date: 2025-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_hashcash
@@ -125,12 +125,14 @@ files:
125
125
  - app/commands/concerns/decidim/decidim_awesome/system/create_organization_override.rb
126
126
  - app/commands/concerns/decidim/decidim_awesome/system/update_organization_override.rb
127
127
  - app/commands/concerns/decidim/decidim_awesome/update_account_override.rb
128
+ - app/commands/decidim/decidim_awesome/admin/create_authorization_group.rb
128
129
  - app/commands/decidim/decidim_awesome/admin/create_constraint.rb
129
130
  - app/commands/decidim/decidim_awesome/admin/create_custom_redirect.rb
130
131
  - app/commands/decidim/decidim_awesome/admin/create_menu_hack.rb
131
132
  - app/commands/decidim/decidim_awesome/admin/create_proposal_custom_field.rb
132
133
  - app/commands/decidim/decidim_awesome/admin/create_scoped_admin.rb
133
134
  - app/commands/decidim/decidim_awesome/admin/create_scoped_style.rb
135
+ - app/commands/decidim/decidim_awesome/admin/destroy_authorization_group.rb
134
136
  - app/commands/decidim/decidim_awesome/admin/destroy_constraint.rb
135
137
  - app/commands/decidim/decidim_awesome/admin/destroy_custom_redirect.rb
136
138
  - app/commands/decidim/decidim_awesome/admin/destroy_menu_hack.rb
@@ -147,8 +149,8 @@ files:
147
149
  - app/controllers/concerns/decidim/decidim_awesome/admin/maintenance_context.rb
148
150
  - app/controllers/concerns/decidim/decidim_awesome/admin_accountability/admin/filterable.rb
149
151
  - app/controllers/concerns/decidim/decidim_awesome/admin_accountability/admin/filterable_helper.rb
150
- - app/controllers/concerns/decidim/decidim_awesome/check_login_authorizations.rb
151
152
  - app/controllers/concerns/decidim/decidim_awesome/content_security_policy.rb
153
+ - app/controllers/concerns/decidim/decidim_awesome/enforce_access_authorizations.rb
152
154
  - app/controllers/concerns/decidim/decidim_awesome/limit_pending_amendments.rb
153
155
  - app/controllers/concerns/decidim/decidim_awesome/needs_awesome_config.rb
154
156
  - app/controllers/concerns/decidim/decidim_awesome/needs_hashcash.rb
@@ -164,6 +166,7 @@ files:
164
166
  - app/controllers/decidim/decidim_awesome/admin/config_controller.rb
165
167
  - app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb
166
168
  - app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb
169
+ - app/controllers/decidim/decidim_awesome/admin/force_authorizations_controller.rb
167
170
  - app/controllers/decidim/decidim_awesome/admin/hashcash_controller.rb
168
171
  - app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb
169
172
  - app/controllers/decidim/decidim_awesome/admin/private_data_controller.rb
@@ -178,9 +181,12 @@ files:
178
181
  - app/controllers/decidim/decidim_awesome/required_authorizations_controller.rb
179
182
  - app/controllers/decidim/decidim_awesome/utils_controller.rb
180
183
  - app/forms/concerns/decidim/decidim_awesome/account_form_override.rb
184
+ - app/forms/concerns/decidim/decidim_awesome/proposals/admin/proposal_form_customizations.rb
181
185
  - app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_customizations.rb
186
+ - app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_customizations_base.rb
182
187
  - app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb
183
188
  - app/forms/concerns/decidim/decidim_awesome/system/organization_form_override.rb
189
+ - app/forms/decidim/decidim_awesome/admin/authorization_group_form.rb
184
190
  - app/forms/decidim/decidim_awesome/admin/config_form.rb
185
191
  - app/forms/decidim/decidim_awesome/admin/constraint_form.rb
186
192
  - app/forms/decidim/decidim_awesome/admin/custom_redirect_form.rb
@@ -209,14 +215,19 @@ files:
209
215
  - app/overrides/decidim/admin/officializations/index/add_modal.html.erb.deface
210
216
  - app/overrides/decidim/admin/officializations/index/add_td.html.erb.deface
211
217
  - app/overrides/decidim/admin/officializations/index/add_th.html.erb.deface
218
+ - app/overrides/decidim/assemblies/admin/assemblies/_form/add_visibility_callout.html.erb.deface
219
+ - app/overrides/decidim/conferences/admin/conferences/_form/add_visibility_callout.html.erb.deface
212
220
  - app/overrides/decidim/devise/registrations/new/add_hashcash.html.erb.deface
213
221
  - app/overrides/decidim/devise/sessions/new/add_hashcash.html.erb.deface
222
+ - app/overrides/decidim/participatory_processes/admin/participatory_process_groups/_form/add_visibility_callout.html.erb.deface
223
+ - app/overrides/decidim/participatory_processes/admin/participatory_processes/_form/add_visibility_callout.html.erb.deface
214
224
  - app/overrides/decidim/proposals/admin/proposals/_form/replace_editor.html.erb.deface
215
225
  - app/overrides/decidim/proposals/admin/proposals/show/add_private_body.html.erb.deface
216
226
  - app/overrides/decidim/proposals/admin/proposals/show/replace_body.html.erb.deface
217
227
  - app/overrides/decidim/proposals/proposals/_proposal_aside/limit_amendments_modal.html.erb.deface
218
228
  - app/overrides/decidim/proposals/proposals/_vote_button/replace_vote_button.html.erb.deface
219
229
  - app/overrides/decidim/proposals/proposals/_votes_count/replace_counter.html.erb.deface
230
+ - app/overrides/decidim/shared/_login_modal/add_hashcash.html.erb.deface
220
231
  - app/overrides/decidim/system/organizations/_advanced_settings/add_awesome_config.html.erb.deface
221
232
  - app/overrides/layouts/decidim/_decidim_javascript/add_awesome_tags.html.erb.deface
222
233
  - app/overrides/layouts/decidim/_head/add_awesome_custom_styles.html.erb.deface
@@ -248,7 +259,6 @@ files:
248
259
  - app/packs/src/decidim/decidim_awesome/admin/proposal_sortings.js
249
260
  - app/packs/src/decidim/decidim_awesome/admin/tabs_change.js
250
261
  - app/packs/src/decidim/decidim_awesome/admin/user_picker.js
251
- - app/packs/src/decidim/decidim_awesome/admin/verification_selects.js
252
262
  - app/packs/src/decidim/decidim_awesome/admin/verifications.js
253
263
  - app/packs/src/decidim/decidim_awesome/amendments/show_modal_on_limits.js
254
264
  - app/packs/src/decidim/decidim_awesome/awesome_admin.js
@@ -343,10 +353,12 @@ files:
343
353
  - app/presenters/decidim/decidim_awesome/role_base_presenter.rb
344
354
  - app/presenters/decidim/decidim_awesome/user_entity_presenter.rb
345
355
  - app/queries/decidim/decidim_awesome/private_data_finder.rb
356
+ - app/queries/decidim/decidim_awesome/space_constraint_finder.rb
346
357
  - app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_methods.rb
347
358
  - app/serializers/concerns/decidim/decidim_awesome/proposals/proposal_serializer_override.rb
348
359
  - app/serializers/decidim/decidim_awesome/paper_trail_version_serializer.rb
349
360
  - app/serializers/decidim/decidim_awesome/proposals/private_proposal_serializer.rb
361
+ - app/services/decidim/decidim_awesome/access_authorization_service.rb
350
362
  - app/types/concerns/decidim/decidim_awesome/add_proposal_type_custom_fields.rb
351
363
  - app/types/concerns/decidim/decidim_awesome/add_proposal_type_vote_weights.rb
352
364
  - app/uploaders/decidim/decidim_awesome/image_uploader.rb
@@ -359,6 +371,7 @@ files:
359
371
  - app/views/decidim/decidim_awesome/admin/admin_authorizations/edit.html.erb
360
372
  - app/views/decidim/decidim_awesome/admin/checks/_assets_tester.html.erb
361
373
  - app/views/decidim/decidim_awesome/admin/checks/index.html.erb
374
+ - app/views/decidim/decidim_awesome/admin/config/_authorization_options_form.html.erb
362
375
  - app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb
363
376
  - app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb
364
377
  - app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb
@@ -396,6 +409,7 @@ files:
396
409
  - app/views/decidim/decidim_awesome/admin/proposals/_editor.html.erb
397
410
  - app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb
398
411
  - app/views/decidim/decidim_awesome/admin/shared/_filters_with_date.html.erb
412
+ - app/views/decidim/decidim_awesome/admin/shared/_visibility_notice.html.erb
399
413
  - app/views/decidim/decidim_awesome/amendments/_modal.html.erb
400
414
  - app/views/decidim/decidim_awesome/custom_fields/_form_render.html.erb
401
415
  - app/views/decidim/decidim_awesome/hashcash/_hidden_field.html.erb
@@ -450,7 +464,7 @@ files:
450
464
  - lib/decidim/decidim_awesome/admin_engine.rb
451
465
  - lib/decidim/decidim_awesome/api/types/localized_custom_fields_type.rb
452
466
  - lib/decidim/decidim_awesome/api/types/translated_custom_fields_type.rb
453
- - lib/decidim/decidim_awesome/authorizator.rb
467
+ - lib/decidim/decidim_awesome/authorizer.rb
454
468
  - lib/decidim/decidim_awesome/awesome.rb
455
469
  - lib/decidim/decidim_awesome/awesome_helpers.rb
456
470
  - lib/decidim/decidim_awesome/checksums.yml
@@ -487,6 +501,7 @@ files:
487
501
  - lib/decidim/decidim_awesome/test/shared_examples/custom_styles_examples.rb
488
502
  - lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb
489
503
  - lib/decidim/decidim_awesome/test/shared_examples/menu_hack_contexts.rb
504
+ - lib/decidim/decidim_awesome/test/shared_examples/proposal_form_examples.rb
490
505
  - lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb
491
506
  - lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb
492
507
  - lib/decidim/decidim_awesome/version.rb
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module DecidimAwesome
5
- module CheckLoginAuthorizations
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- include ::Decidim::DecidimAwesome::NeedsAwesomeConfig
10
- before_action :check_required_login_authorizations
11
- end
12
-
13
- private
14
-
15
- def check_required_login_authorizations
16
- return unless user_signed_in?
17
- return unless current_user.confirmed?
18
- return if current_user.blocked?
19
- return if allowed_controllers.include?(controller_name)
20
-
21
- unless user_is_authorized?
22
- flash[:alert] = I18n.t("decidim.decidim_awesome.session.authorization_is_required",
23
- authorizations: required_authorizations.map(&:fullname).join(", "))
24
- redirect_to decidim_decidim_awesome.required_authorizations_path(redirect_url: request.fullpath)
25
- end
26
- end
27
-
28
- def user_is_authorized?
29
- return true if required_authorizations.blank?
30
-
31
- @user_is_authorized ||= if awesome_config[:force_authorization_with_any_method]
32
- current_authorizations.any?
33
- else
34
- current_authorizations.count == required_authorizations.count
35
- end
36
- end
37
-
38
- def required_authorizations
39
- return unless awesome_config[:force_authorization_after_login].is_a?(Array)
40
-
41
- @required_authorizations ||= Decidim::Verifications::Adapter.from_collection(
42
- awesome_config[:force_authorization_after_login] & current_organization.available_authorizations & Decidim.authorization_workflows.map(&:name)
43
- )
44
- end
45
-
46
- def current_authorizations
47
- @current_authorizations ||= Decidim::Verifications::Authorizations.new(
48
- organization: current_organization,
49
- user: current_user,
50
- name: required_authorizations.map(&:name),
51
- granted: true
52
- )
53
- end
54
-
55
- def allowed_controllers
56
- %w(required_authorizations authorizations upload_validations timeouts editor_images locales pages tos) + awesome_config[:force_authorization_allowed_controller_names].to_a
57
- end
58
- end
59
- end
60
- end
@@ -1,21 +0,0 @@
1
- /* eslint-disable no-new */
2
-
3
- import TomSelect from "tom-select/dist/cjs/tom-select.popular";
4
-
5
- document.addEventListener("DOMContentLoaded", () => {
6
- const selectContainer = document.getElementById("config_force_authorization_after_login");
7
-
8
- if (!selectContainer) {
9
- return;
10
- }
11
-
12
- new TomSelect(selectContainer, {
13
- plugins: ["remove_button", "dropdown_input"],
14
- create: false,
15
- render: {
16
- option: function (data, escape) {
17
- return `<div>${escape(data.text)}</div>`;
18
- }
19
- }
20
- });
21
- });