decidim-proposals 0.28.1 → 0.28.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/decidim/proposals/orderable.rb +1 -1
  3. data/app/helpers/decidim/proposals/application_helper.rb +1 -1
  4. data/app/packs/entrypoints/participatory_texts_admin.js +2 -0
  5. data/app/packs/stylesheets/decidim/proposals/admin/participatory_texts.scss +23 -0
  6. data/app/presenters/decidim/proposals/admin_log/proposal_presenter.rb +1 -5
  7. data/app/presenters/decidim/proposals/admin_log/value_types/proposal_title_body_presenter.rb +1 -3
  8. data/app/presenters/decidim/proposals/log/valuation_assignment_presenter.rb +1 -1
  9. data/app/views/decidim/proposals/admin/participatory_texts/index.html.erb +6 -3
  10. data/app/views/decidim/proposals/admin/proposals/index.html.erb +2 -0
  11. data/app/views/decidim/proposals/proposals/_proposal_aside.html.erb +4 -2
  12. data/app/views/decidim/proposals/proposals/compare.html.erb +1 -1
  13. data/config/assets.rb +1 -0
  14. data/config/locales/ar.yml +1 -6
  15. data/config/locales/bg.yml +697 -1
  16. data/config/locales/ca.yml +9 -9
  17. data/config/locales/cs.yml +2 -5
  18. data/config/locales/de.yml +5 -5
  19. data/config/locales/el.yml +0 -5
  20. data/config/locales/en.yml +4 -4
  21. data/config/locales/es-MX.yml +6 -6
  22. data/config/locales/es-PY.yml +5 -5
  23. data/config/locales/es.yml +6 -6
  24. data/config/locales/eu.yml +6 -6
  25. data/config/locales/fi-plain.yml +4 -4
  26. data/config/locales/fi.yml +4 -4
  27. data/config/locales/fr-CA.yml +5 -5
  28. data/config/locales/fr.yml +5 -5
  29. data/config/locales/ga-IE.yml +6 -0
  30. data/config/locales/gl.yml +1 -6
  31. data/config/locales/hu.yml +1 -4
  32. data/config/locales/id-ID.yml +0 -1
  33. data/config/locales/is-IS.yml +0 -2
  34. data/config/locales/it.yml +1 -2
  35. data/config/locales/ja.yml +4 -4
  36. data/config/locales/lt.yml +0 -5
  37. data/config/locales/lv.yml +0 -1
  38. data/config/locales/nl.yml +1 -6
  39. data/config/locales/no.yml +0 -5
  40. data/config/locales/pl.yml +103 -1
  41. data/config/locales/pt-BR.yml +0 -1
  42. data/config/locales/pt.yml +0 -5
  43. data/config/locales/ro-RO.yml +0 -4
  44. data/config/locales/ru.yml +0 -2
  45. data/config/locales/sk.yml +0 -1
  46. data/config/locales/sv.yml +0 -5
  47. data/config/locales/tr-TR.yml +3 -2
  48. data/config/locales/uk.yml +0 -2
  49. data/config/locales/zh-CN.yml +0 -1
  50. data/config/locales/zh-TW.yml +0 -5
  51. data/lib/decidim/proposals/component.rb +2 -4
  52. data/lib/decidim/proposals/proposal_serializer.rb +51 -0
  53. data/lib/decidim/proposals/seeds.rb +5 -1
  54. data/lib/decidim/proposals/test/factories.rb +13 -1
  55. data/lib/decidim/proposals/version.rb +1 -1
  56. metadata +26 -25
  57. data/app/presenters/decidim/proposals/log/resource_presenter.rb +0 -22
@@ -138,9 +138,7 @@ zh-TW:
138
138
  comments_enabled: 已啟用留言
139
139
  comments_max_length: 評論字數最大長度(若要使用預設值請輸入0)
140
140
  default_sort_order: 預設提案排序
141
- default_sort_order_help: 默認意味著如果啟用了支持,則建議將提案按隨機順序排序,如果封鎖了支持,則將按最受支持的順序排序。
142
141
  default_sort_order_options:
143
- default: 預設值
144
142
  most_commented: 最多評論
145
143
  most_endorsed: 最多已連署
146
144
  most_followed: 最多追蹤者
@@ -167,7 +165,6 @@ zh-TW:
167
165
  proposal_wizard_step_1_help_text: 提案向導「創建」步驟說明文字
168
166
  proposal_wizard_step_2_help_text: 提案向導「比較」步驟說明文字
169
167
  proposal_wizard_step_3_help_text: 提案向導「完成」步驟說明文字
170
- proposal_wizard_step_4_help_text: 提案向導「發佈」步驟說明文字
171
168
  resources_permissions_enabled: 每個提案都可以設定行動權限
172
169
  scope_id: 範圍
173
170
  scopes_enabled: 啟用範圍
@@ -192,9 +189,7 @@ zh-TW:
192
189
  creation_enabled: 參與者可以建立提案
193
190
  creation_enabled_readonly: 啟用參與式文本功能後,此設置將被禁用。要將提案上傳為參與式文本,請點擊“參與式文本”按鈕,然後按照說明進行操作。
194
191
  default_sort_order: 預設提案排序
195
- default_sort_order_help: 默認意味著如果啟用了支持,則建議將提案按隨機順序排序,如果封鎖了支持,則將按最受支持的順序排序。
196
192
  default_sort_order_options:
197
- default: 預設值
198
193
  most_commented: 最多評論
199
194
  most_endorsed: 最多已連署
200
195
  most_followed: 最多追蹤者
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "decidim/meetings"
4
-
5
3
  Decidim.register_component(:proposals) do |component|
6
4
  component.engine = Decidim::Proposals::Engine
7
5
  component.admin_engine = Decidim::Proposals::AdminEngine
@@ -23,7 +21,7 @@ Decidim.register_component(:proposals) do |component|
23
21
 
24
22
  component.permissions_class_name = "Decidim::Proposals::Permissions"
25
23
 
26
- POSSIBLE_SORT_ORDERS = %w(default random recent most_endorsed most_voted most_commented most_followed with_more_authors).freeze
24
+ POSSIBLE_SORT_ORDERS = %w(automatic random recent most_endorsed most_voted most_commented most_followed with_more_authors).freeze
27
25
 
28
26
  component.settings(:global) do |settings|
29
27
  settings.attribute :scopes_enabled, type: :boolean, default: false
@@ -37,7 +35,7 @@ Decidim.register_component(:proposals) do |component|
37
35
  settings.attribute :threshold_per_proposal, type: :integer, default: 0, required: true
38
36
  settings.attribute :can_accumulate_supports_beyond_threshold, type: :boolean, default: false
39
37
  settings.attribute :proposal_answering_enabled, type: :boolean, default: true
40
- settings.attribute :default_sort_order, type: :select, default: "default", choices: -> { POSSIBLE_SORT_ORDERS }
38
+ settings.attribute :default_sort_order, type: :select, default: "automatic", choices: -> { POSSIBLE_SORT_ORDERS }
41
39
  settings.attribute :official_proposals_enabled, type: :boolean, default: true
42
40
  settings.attribute :comments_enabled, type: :boolean, default: true
43
41
  settings.attribute :comments_max_length, type: :integer, required: true
@@ -19,6 +19,9 @@ module Decidim
19
19
  def serialize
20
20
  {
21
21
  id: proposal.id,
22
+ author: {
23
+ **author_fields
24
+ },
22
25
  category: {
23
26
  id: proposal.category.try(:id),
24
27
  name: proposal.category.try(:name) || empty_translatable
@@ -102,6 +105,54 @@ module Decidim
102
105
 
103
106
  convert_to_text(value)
104
107
  end
108
+
109
+ def author_fields
110
+ is_author_user_group = resource.coauthorships.map(&:decidim_user_group_id).any?
111
+
112
+ {
113
+ id: resource.authors.map(&:id),
114
+ name: resource.authors.map do |author|
115
+ author_name(is_author_user_group ? resource.coauthorships.first.user_group : author)
116
+ end,
117
+ url: resource.authors.map do |author|
118
+ author_url(is_author_user_group ? resource.coauthorships.first.user_group : author)
119
+ end
120
+ }
121
+ end
122
+
123
+ def author_name(author)
124
+ if author.respond_to?(:name)
125
+ translated_attribute(author.name) # is a Decidim::User or Decidim::Organization or Decidim::UserGroup
126
+ elsif author.respond_to?(:title)
127
+ translated_attribute(author.title) # is a Decidim::Meetings::Meeting
128
+ end
129
+ end
130
+
131
+ def author_url(author)
132
+ if author.respond_to?(:nickname)
133
+ profile_url(author.nickname) # is a Decidim::User or Decidim::UserGroup
134
+ elsif author.respond_to?(:title)
135
+ meeting_url(author) # is a Decidim::Meetings::Meeting
136
+ else
137
+ root_url # is a Decidim::Organization
138
+ end
139
+ end
140
+
141
+ def profile_url(nickname)
142
+ Decidim::Core::Engine.routes.url_helpers.profile_url(nickname, host:)
143
+ end
144
+
145
+ def meeting_url(meeting)
146
+ Decidim::EngineRouter.main_proxy(meeting.component).meeting_url(id: meeting.id, host:)
147
+ end
148
+
149
+ def root_url
150
+ Decidim::Core::Engine.routes.url_helpers.root_url(host:)
151
+ end
152
+
153
+ def host
154
+ resource.organization.host
155
+ end
105
156
  end
106
157
  end
107
158
  end
@@ -69,6 +69,7 @@ module Decidim
69
69
  end
70
70
  end
71
71
 
72
+ # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
72
73
  def create_proposal!(component:)
73
74
  n = rand(5)
74
75
  state, answer, state_published_at = if n > 3
@@ -103,7 +104,7 @@ module Decidim
103
104
  visibility: "all"
104
105
  ) do
105
106
  proposal = Decidim::Proposals::Proposal.new(params)
106
- meeting_component = participatory_space.components.find_by(manifest_name: "meetings")
107
+ n = 3 if n == 2 && !Decidim.module_installed?(:meetings)
107
108
 
108
109
  coauthor = case n
109
110
  when 0
@@ -111,6 +112,8 @@ module Decidim
111
112
  when 1
112
113
  Decidim::UserGroup.where(organization:).sample
113
114
  when 2
115
+ meeting_component = participatory_space.components.find_by(manifest_name: "meetings")
116
+
114
117
  Decidim::Meetings::Meeting.where(component: meeting_component).sample
115
118
  else
116
119
  organization
@@ -120,6 +123,7 @@ module Decidim
120
123
  proposal
121
124
  end
122
125
  end
126
+ # rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
123
127
 
124
128
  def random_nickname
125
129
  "#{::Faker::Twitter.unique.screen_name}-#{SecureRandom.hex(4)}"[0, 20]
@@ -411,6 +411,12 @@ FactoryBot.define do
411
411
  proposal.attachments << create(:attachment, :with_pdf, attached_to: proposal, skip_injection: evaluator.skip_injection)
412
412
  end
413
413
  end
414
+
415
+ trait :moderated do
416
+ after(:create) do |proposal, evaluator|
417
+ create(:moderation, reportable: proposal, hidden_at: 2.days.ago, skip_injection: evaluator.skip_injection)
418
+ end
419
+ end
414
420
  end
415
421
 
416
422
  factory :proposal_vote, class: "Decidim::Proposals::ProposalVote" do
@@ -435,7 +441,13 @@ FactoryBot.define do
435
441
  transient do
436
442
  skip_injection { false }
437
443
  end
438
- body { Faker::Lorem.sentences(number: 3).join("\n") }
444
+ body do
445
+ if skip_injection
446
+ generate(:title)
447
+ else
448
+ "<script>alert(\"proposal_note_body\");</script> #{generate(:title)}"
449
+ end
450
+ end
439
451
  proposal { build(:proposal, skip_injection:) }
440
452
  author { build(:user, organization: proposal.organization, skip_injection:) }
441
453
  end
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds decidim-proposals version.
5
5
  module Proposals
6
6
  def self.version
7
- "0.28.1"
7
+ "0.28.2"
8
8
  end
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-proposals
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.28.1
4
+ version: 0.28.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
8
8
  - Marc Riera Casals
9
9
  - Oriol Gual Oliva
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-04-30 00:00:00.000000000 Z
13
+ date: 2024-07-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: decidim-comments
@@ -18,28 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.28.1
21
+ version: 0.28.2
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 0.28.1
28
+ version: 0.28.2
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: decidim-core
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - '='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.28.1
35
+ version: 0.28.2
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - '='
41
41
  - !ruby/object:Gem::Version
42
- version: 0.28.1
42
+ version: 0.28.2
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: doc2text
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -80,98 +80,98 @@ dependencies:
80
80
  requirements:
81
81
  - - '='
82
82
  - !ruby/object:Gem::Version
83
- version: 0.28.1
83
+ version: 0.28.2
84
84
  type: :development
85
85
  prerelease: false
86
86
  version_requirements: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - '='
89
89
  - !ruby/object:Gem::Version
90
- version: 0.28.1
90
+ version: 0.28.2
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: decidim-assemblies
93
93
  requirement: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - '='
96
96
  - !ruby/object:Gem::Version
97
- version: 0.28.1
97
+ version: 0.28.2
98
98
  type: :development
99
99
  prerelease: false
100
100
  version_requirements: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - '='
103
103
  - !ruby/object:Gem::Version
104
- version: 0.28.1
104
+ version: 0.28.2
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: decidim-budgets
107
107
  requirement: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - '='
110
110
  - !ruby/object:Gem::Version
111
- version: 0.28.1
111
+ version: 0.28.2
112
112
  type: :development
113
113
  prerelease: false
114
114
  version_requirements: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - '='
117
117
  - !ruby/object:Gem::Version
118
- version: 0.28.1
118
+ version: 0.28.2
119
119
  - !ruby/object:Gem::Dependency
120
120
  name: decidim-conference
121
121
  requirement: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - '='
124
124
  - !ruby/object:Gem::Version
125
- version: 0.28.1
125
+ version: 0.28.2
126
126
  type: :development
127
127
  prerelease: false
128
128
  version_requirements: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - '='
131
131
  - !ruby/object:Gem::Version
132
- version: 0.28.1
132
+ version: 0.28.2
133
133
  - !ruby/object:Gem::Dependency
134
134
  name: decidim-dev
135
135
  requirement: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - '='
138
138
  - !ruby/object:Gem::Version
139
- version: 0.28.1
139
+ version: 0.28.2
140
140
  type: :development
141
141
  prerelease: false
142
142
  version_requirements: !ruby/object:Gem::Requirement
143
143
  requirements:
144
144
  - - '='
145
145
  - !ruby/object:Gem::Version
146
- version: 0.28.1
146
+ version: 0.28.2
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: decidim-meetings
149
149
  requirement: !ruby/object:Gem::Requirement
150
150
  requirements:
151
151
  - - '='
152
152
  - !ruby/object:Gem::Version
153
- version: 0.28.1
153
+ version: 0.28.2
154
154
  type: :development
155
155
  prerelease: false
156
156
  version_requirements: !ruby/object:Gem::Requirement
157
157
  requirements:
158
158
  - - '='
159
159
  - !ruby/object:Gem::Version
160
- version: 0.28.1
160
+ version: 0.28.2
161
161
  - !ruby/object:Gem::Dependency
162
162
  name: decidim-participatory_processes
163
163
  requirement: !ruby/object:Gem::Requirement
164
164
  requirements:
165
165
  - - '='
166
166
  - !ruby/object:Gem::Version
167
- version: 0.28.1
167
+ version: 0.28.2
168
168
  type: :development
169
169
  prerelease: false
170
170
  version_requirements: !ruby/object:Gem::Requirement
171
171
  requirements:
172
172
  - - '='
173
173
  - !ruby/object:Gem::Version
174
- version: 0.28.1
174
+ version: 0.28.2
175
175
  description: A proposals component for decidim's participatory spaces.
176
176
  email:
177
177
  - josepjaume@gmail.com
@@ -333,6 +333,7 @@ files:
333
333
  - app/packs/documents/decidim/proposals/participatory_texts/participatory_text.odt
334
334
  - app/packs/entrypoints/decidim_proposals.js
335
335
  - app/packs/entrypoints/decidim_proposals_admin.js
336
+ - app/packs/entrypoints/participatory_texts_admin.js
336
337
  - app/packs/images/decidim/gamification/badges/decidim_gamification_badges_accepted_proposals.svg
337
338
  - app/packs/images/decidim/gamification/badges/decidim_gamification_badges_proposal_votes.svg
338
339
  - app/packs/images/decidim/gamification/badges/decidim_gamification_badges_proposals.svg
@@ -342,6 +343,7 @@ files:
342
343
  - app/packs/src/decidim/proposals/admin/proposals_form.js
343
344
  - app/packs/src/decidim/proposals/choose_proposals.js
344
345
  - app/packs/src/decidim/proposals/utils.js
346
+ - app/packs/stylesheets/decidim/proposals/admin/participatory_texts.scss
345
347
  - app/packs/stylesheets/decidim/proposals/proposals.scss
346
348
  - app/permissions/decidim/proposals/admin/permissions.rb
347
349
  - app/permissions/decidim/proposals/permissions.rb
@@ -352,7 +354,6 @@ files:
352
354
  - app/presenters/decidim/proposals/admin_log/value_types/proposal_title_body_presenter.rb
353
355
  - app/presenters/decidim/proposals/admin_log/value_types/valuator_role_user_presenter.rb
354
356
  - app/presenters/decidim/proposals/collaborative_draft_presenter.rb
355
- - app/presenters/decidim/proposals/log/resource_presenter.rb
356
357
  - app/presenters/decidim/proposals/log/valuation_assignment_presenter.rb
357
358
  - app/presenters/decidim/proposals/official_author_presenter.rb
358
359
  - app/presenters/decidim/proposals/proposal_presenter.rb
@@ -618,7 +619,7 @@ metadata:
618
619
  funding_uri: https://opencollective.com/decidim
619
620
  homepage_uri: https://decidim.org
620
621
  source_code_uri: https://github.com/decidim/decidim
621
- post_install_message:
622
+ post_install_message:
622
623
  rdoc_options: []
623
624
  require_paths:
624
625
  - lib
@@ -633,8 +634,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
633
634
  - !ruby/object:Gem::Version
634
635
  version: '0'
635
636
  requirements: []
636
- rubygems_version: 3.5.9
637
- signing_key:
637
+ rubygems_version: 3.3.7
638
+ signing_key:
638
639
  specification_version: 4
639
640
  summary: Decidim proposals module
640
641
  test_files: []
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Proposals
5
- module Log
6
- class ResourcePresenter < Decidim::Log::ResourcePresenter
7
- private
8
-
9
- # Private: Presents resource name.
10
- #
11
- # Returns an HTML-safe String.
12
- def present_resource_name
13
- if resource.present?
14
- Decidim::Proposals::ProposalPresenter.new(resource).title
15
- else
16
- super
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end