decidim-participatory_processes 0.30.2 → 0.31.0.rc1

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 (127) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/participatory_process_groups/content_blocks/main_data/content.erb +1 -1
  3. data/app/cells/decidim/participatory_process_groups/content_blocks/main_data_cell.rb +1 -15
  4. data/app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats/show.erb +74 -0
  5. data/app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats_cell.rb +29 -0
  6. data/app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats_settings_form/citizen_influence.erb +32 -0
  7. data/app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats_settings_form/inclusiveness.erb +69 -0
  8. data/app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats_settings_form/informativeness.erb +29 -0
  9. data/app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats_settings_form/show.erb +10 -0
  10. data/app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats_settings_form_cell.rb +81 -0
  11. data/app/cells/decidim/participatory_processes/content_blocks/highlighted_processes_settings_form/show.erb +3 -1
  12. data/app/cells/decidim/participatory_processes/content_blocks/main_data_cell.rb +10 -2
  13. data/app/cells/decidim/participatory_processes/indicator/show.erb +11 -0
  14. data/app/cells/decidim/participatory_processes/indicator_cell.rb +25 -0
  15. data/app/cells/decidim/participatory_processes/process_dropdown_metadata/metadata.erb +0 -7
  16. data/app/cells/decidim/participatory_processes/process_filters_cell.rb +2 -0
  17. data/app/cells/decidim/participatory_processes/process_step/show.erb +1 -1
  18. data/app/commands/decidim/participatory_processes/admin/create_participatory_process.rb +1 -1
  19. data/app/commands/decidim/participatory_processes/admin/create_participatory_process_group.rb +1 -1
  20. data/app/commands/decidim/participatory_processes/admin/{copy_participatory_process.rb → duplicate_participatory_process.rb} +25 -26
  21. data/app/commands/decidim/participatory_processes/admin/import_participatory_process.rb +1 -1
  22. data/app/commands/decidim/participatory_processes/admin/update_participatory_process.rb +16 -4
  23. data/app/commands/decidim/participatory_processes/admin/update_participatory_process_group.rb +1 -1
  24. data/app/controllers/decidim/participatory_processes/admin/{participatory_process_copies_controller.rb → participatory_process_duplicates_controller.rb} +7 -7
  25. data/app/controllers/decidim/participatory_processes/admin/participatory_process_group_landing_page_controller.rb +4 -0
  26. data/app/controllers/decidim/participatory_processes/admin/participatory_process_groups_controller.rb +3 -3
  27. data/app/controllers/decidim/participatory_processes/admin/participatory_process_imports_controller.rb +1 -1
  28. data/app/controllers/decidim/participatory_processes/admin/participatory_process_landing_page_controller.rb +4 -0
  29. data/app/controllers/decidim/participatory_processes/admin/participatory_process_steps_controller.rb +2 -2
  30. data/app/controllers/decidim/participatory_processes/admin/participatory_processes_controller.rb +3 -3
  31. data/app/controllers/decidim/participatory_processes/participatory_processes_controller.rb +0 -9
  32. data/app/forms/decidim/participatory_processes/admin/{participatory_process_copy_form.rb → participatory_process_duplicate_form.rb} +5 -5
  33. data/app/forms/decidim/participatory_processes/admin/participatory_process_form.rb +2 -1
  34. data/app/forms/decidim/participatory_processes/admin/participatory_process_group_form.rb +0 -1
  35. data/app/helpers/decidim/participatory_processes/application_helper.rb +14 -0
  36. data/app/models/decidim/participatory_process.rb +4 -4
  37. data/app/models/decidim/participatory_process_group.rb +9 -0
  38. data/app/permissions/decidim/participatory_processes/permissions.rb +4 -4
  39. data/app/presenters/decidim/participatory_processes/admin_log/participatory_process_group_presenter.rb +0 -1
  40. data/app/presenters/decidim/participatory_processes/admin_log/participatory_process_presenter.rb +0 -1
  41. data/app/presenters/decidim/participatory_processes/participatory_process_democratic_quality_stats_presenter.rb +312 -0
  42. data/app/presenters/decidim/participatory_processes/participatory_process_group_stats_presenter.rb +1 -11
  43. data/app/presenters/decidim/participatory_processes/participatory_process_presenter.rb +35 -1
  44. data/app/presenters/decidim/participatory_processes/participatory_process_stats_presenter.rb +1 -3
  45. data/app/queries/decidim/participatory_processes/participatory_processes_stats_followers_count.rb +31 -0
  46. data/app/queries/decidim/participatory_processes/participatory_processes_stats_participants_count.rb +27 -0
  47. data/app/serializers/decidim/participatory_processes/participatory_process_importer.rb +0 -1
  48. data/app/views/decidim/participatory_processes/admin/{participatory_process_copies → participatory_process_duplicates}/_form.html.erb +5 -5
  49. data/app/views/decidim/participatory_processes/admin/participatory_process_duplicates/new.html.erb +19 -0
  50. data/app/views/decidim/participatory_processes/admin/participatory_process_groups/_form.html.erb +3 -7
  51. data/app/views/decidim/participatory_processes/admin/participatory_process_groups/index.html.erb +31 -15
  52. data/app/views/decidim/participatory_processes/admin/participatory_process_steps/_form.html.erb +1 -1
  53. data/app/views/decidim/participatory_processes/admin/participatory_process_steps/index.html.erb +39 -21
  54. data/app/views/decidim/participatory_processes/admin/participatory_process_user_roles/index.html.erb +42 -24
  55. data/app/views/decidim/participatory_processes/admin/participatory_processes/_form.html.erb +10 -14
  56. data/app/views/decidim/participatory_processes/admin/participatory_processes/_process_row.html.erb +125 -53
  57. data/app/views/decidim/participatory_processes/admin/participatory_processes/edit.html.erb +0 -8
  58. data/app/views/decidim/participatory_processes/admin/participatory_processes/index.html.erb +2 -2
  59. data/app/views/decidim/participatory_processes/admin/participatory_processes/manage_trash.html.erb +2 -1
  60. data/app/views/layouts/decidim/admin/_manage_processes.html.erb +1 -1
  61. data/app/views/layouts/decidim/admin/participatory_process_group.html.erb +1 -1
  62. data/config/assets.rb +2 -2
  63. data/config/locales/ar.yml +0 -13
  64. data/config/locales/bg.yml +0 -24
  65. data/config/locales/bs-BA.yml +0 -4
  66. data/config/locales/ca-IT.yml +319 -25
  67. data/config/locales/ca.yml +319 -25
  68. data/config/locales/cs.yml +93 -26
  69. data/config/locales/de.yml +123 -25
  70. data/config/locales/el.yml +0 -21
  71. data/config/locales/en.yml +303 -24
  72. data/config/locales/es-MX.yml +319 -25
  73. data/config/locales/es-PY.yml +319 -25
  74. data/config/locales/es.yml +319 -25
  75. data/config/locales/eu.yml +304 -25
  76. data/config/locales/fi-plain.yml +303 -24
  77. data/config/locales/fi.yml +303 -24
  78. data/config/locales/fr-CA.yml +86 -24
  79. data/config/locales/fr.yml +86 -24
  80. data/config/locales/ga-IE.yml +0 -7
  81. data/config/locales/gl.yml +0 -19
  82. data/config/locales/hu.yml +0 -21
  83. data/config/locales/id-ID.yml +0 -13
  84. data/config/locales/is-IS.yml +0 -11
  85. data/config/locales/it.yml +0 -20
  86. data/config/locales/ja.yml +123 -25
  87. data/config/locales/lb.yml +0 -20
  88. data/config/locales/lt.yml +0 -21
  89. data/config/locales/lv.yml +0 -14
  90. data/config/locales/nl.yml +0 -20
  91. data/config/locales/no.yml +0 -21
  92. data/config/locales/pl.yml +16 -24
  93. data/config/locales/pt-BR.yml +0 -23
  94. data/config/locales/pt.yml +0 -20
  95. data/config/locales/ro-RO.yml +2 -21
  96. data/config/locales/ru.yml +0 -11
  97. data/config/locales/sk.yml +0 -14
  98. data/config/locales/sr-CS.yml +0 -4
  99. data/config/locales/sv.yml +86 -24
  100. data/config/locales/tr-TR.yml +0 -20
  101. data/config/locales/uk.yml +0 -11
  102. data/config/locales/zh-CN.yml +0 -17
  103. data/config/locales/zh-TW.yml +0 -21
  104. data/db/migrate/20250403110052_add_democratic_quality_static_page.rb +34 -0
  105. data/db/migrate/20250605114136_remove_hashtag_from_participatory_processes.rb +7 -0
  106. data/db/migrate/20250605114415_remove_hashtag_from_participatory_processes_groups.rb +7 -0
  107. data/decidim-participatory_processes.gemspec +3 -0
  108. data/lib/decidim/api/participatory_process_group_type.rb +9 -0
  109. data/lib/decidim/api/participatory_process_input_filter.rb +0 -1
  110. data/lib/decidim/api/participatory_process_step_type.rb +2 -0
  111. data/lib/decidim/api/participatory_process_type.rb +17 -11
  112. data/lib/decidim/participatory_processes/admin_engine.rb +1 -1
  113. data/lib/decidim/participatory_processes/content_blocks/registry_manager.rb +25 -5
  114. data/lib/decidim/participatory_processes/engine.rb +22 -25
  115. data/lib/decidim/participatory_processes/participatory_space.rb +1 -4
  116. data/lib/decidim/participatory_processes/seeds.rb +3 -5
  117. data/lib/decidim/participatory_processes/test/factories.rb +2 -3
  118. data/lib/decidim/participatory_processes/version.rb +1 -1
  119. metadata +72 -22
  120. data/app/cells/decidim/participatory_processes/content_blocks/metrics_cell.rb +0 -25
  121. data/app/presenters/decidim/participatory_processes/participatory_process_metric_charts_presenter.rb +0 -21
  122. data/app/queries/decidim/participatory_processes/metrics/participatory_process_followers_metric_measure.rb +0 -31
  123. data/app/queries/decidim/participatory_processes/metrics/participatory_processes_metric_manage.rb +0 -27
  124. data/app/queries/decidim/participatory_processes/stats_followers_count.rb +0 -60
  125. data/app/queries/decidim/participatory_processes/stats_participants_count.rb +0 -136
  126. data/app/views/decidim/participatory_processes/admin/participatory_process_copies/new.html.erb +0 -19
  127. data/app/views/decidim/participatory_processes/participatory_processes/all_metrics.html.erb +0 -25
@@ -24,7 +24,7 @@ module Decidim
24
24
  end
25
25
  resources :participatory_processes, param: :slug, except: [:show, :destroy] do
26
26
  resource :publish, controller: "participatory_process_publications", only: [:create, :destroy]
27
- resources :copies, controller: "participatory_process_copies", only: [:new, :create]
27
+ resources :duplicates, controller: "participatory_process_duplicates", only: [:new, :create]
28
28
 
29
29
  member do
30
30
  patch :soft_delete
@@ -125,11 +125,6 @@ module Decidim
125
125
  content_block.public_name_key = "decidim.content_blocks.participatory_space_stats.name"
126
126
  end
127
127
 
128
- Decidim.content_blocks.register(:participatory_process_homepage, :metrics) do |content_block|
129
- content_block.cell = "decidim/participatory_processes/content_blocks/metrics"
130
- content_block.public_name_key = "decidim.content_blocks.participatory_space_metrics.name"
131
- end
132
-
133
128
  Decidim.content_blocks.register(:participatory_process_homepage, :related_processes) do |content_block|
134
129
  content_block.cell = "decidim/participatory_processes/content_blocks/related_processes"
135
130
  content_block.settings_form_cell = "decidim/participatory_processes/content_blocks/highlighted_processes_settings_form"
@@ -172,6 +167,31 @@ module Decidim
172
167
  register_highlighted_proposals
173
168
  register_highlighted_results
174
169
  register_related_assemblies
170
+ register_democratic_quality_stats
171
+ end
172
+
173
+ def self.register_democratic_quality_stats
174
+ return unless Decidim.module_installed?(:meetings)
175
+ return unless Decidim.module_installed?(:proposals)
176
+ return unless Decidim.module_installed?(:accountability)
177
+ return unless Decidim.module_installed?(:budgets)
178
+
179
+ Decidim.content_blocks.register(:participatory_process_homepage, :democratic_quality_stats) do |content_block|
180
+ content_block.cell = "decidim/participatory_processes/content_blocks/democratic_quality_stats"
181
+ content_block.public_name_key = "decidim.participatory_processes.content_blocks.democratic_quality_stats.name"
182
+ content_block.settings_form_cell = "decidim/participatory_processes/content_blocks/democratic_quality_stats_settings_form"
183
+ content_block.settings do |settings|
184
+ settings.attribute :functional_diversity_invited, type: :integer, default: -1
185
+ settings.attribute :languages_communicated, type: :integer, default: -1
186
+ settings.attribute :mobility_meeting_access, type: :integer, default: -1
187
+ settings.attribute :participation_scheduling_times, type: :integer, default: -1
188
+ settings.attribute :digital_support_offered, type: :integer, default: -1
189
+ settings.attribute :citizen_influence_level, type: :integer, default: -1
190
+ settings.attribute :citizen_decisional_intervention, type: :integer, default: -1
191
+ settings.attribute :published_information_clarity, type: :integer, default: -1
192
+ settings.attribute :information_provided, type: :integer, default: -1
193
+ end
194
+ end
175
195
  end
176
196
 
177
197
  def self.register_highlighted_debates
@@ -25,14 +25,8 @@ module Decidim
25
25
  process ? "/processes/#{process.slug}/f/#{params[:component_id]}" : "/404"
26
26
  }, constraints: { process_id: /[0-9]+/ }
27
27
 
28
- get "processes/:process_id/all-metrics", to: redirect { |params, _request|
29
- process = Decidim::ParticipatoryProcess.find(params[:process_id])
30
- process ? "/processes/#{process.slug}/all-metrics" : "/404"
31
- }, constraints: { process_id: /[0-9]+/ }, as: :all_metrics
32
-
33
28
  resources :participatory_process_groups, only: :show, path: "processes_groups"
34
29
  resources :participatory_processes, only: [:index, :show], param: :slug, path: "processes" do
35
- get "all-metrics", on: :member
36
30
  resources :participatory_space_private_users, only: :index, path: "members"
37
31
  end
38
32
 
@@ -56,6 +50,8 @@ module Decidim
56
50
  initializer "decidim_participatory_processes.register_icons" do
57
51
  Decidim.icons.register(name: "Decidim::ParticipatoryProcess", icon: "treasure-map-line", description: "Participatory Process", category: "activity",
58
52
  engine: :participatory_process)
53
+ Decidim.icons.register(name: "Decidim::ParticipatoryProcessGroup", icon: "treasure-map-line", description: "Participatory Process Group", category: "activity",
54
+ engine: :participatory_process)
59
55
  Decidim.icons.register(name: "archive-line", icon: "archive-line", category: "system", description: "", engine: :participatory_process)
60
56
  Decidim.icons.register(name: "grid-line", icon: "grid-line", category: "system", description: "", engine: :participatory_process)
61
57
  Decidim.icons.register(name: "globe-line", icon: "globe-line", category: "system", description: "", engine: :participatory_process)
@@ -81,32 +77,33 @@ module Decidim
81
77
  end
82
78
 
83
79
  initializer "decidim_participatory_processes.stats" do
84
- Decidim.stats.register :followers_count, priority: StatsRegistry::HIGH_PRIORITY do |participatory_space|
85
- Decidim::ParticipatoryProcesses::StatsFollowersCount.for(participatory_space)
86
- end
87
-
88
- Decidim.stats.register :participants_count, priority: StatsRegistry::HIGH_PRIORITY do |participatory_space|
89
- Decidim::ParticipatoryProcesses::StatsParticipantsCount.for(participatory_space)
80
+ Decidim.stats.register :processes_count,
81
+ priority: StatsRegistry::HIGH_PRIORITY,
82
+ icon_name: "treasure-map-line",
83
+ tooltip_key: "processes_count_tooltip" do |organization, start_at, end_at|
84
+ processes = ParticipatoryProcesses::OrganizationPrioritizedParticipatoryProcesses.new(organization)
85
+
86
+ processes = processes.where(created_at: start_at..) if start_at.present?
87
+ processes = processes.where(created_at: ..end_at) if end_at.present?
88
+ processes.count
90
89
  end
91
- end
92
90
 
93
- initializer "decidim_participatory_processes.register_metrics" do
94
- Decidim.metrics_registry.register(:participatory_processes) do |metric_registry|
95
- metric_registry.manager_class = "Decidim::ParticipatoryProcesses::Metrics::ParticipatoryProcessesMetricManage"
96
-
97
- metric_registry.settings do |settings|
98
- settings.attribute :highlighted, type: :boolean, default: false
99
- settings.attribute :scopes, type: :array, default: %w(home)
100
- settings.attribute :weight, type: :integer, default: 2
101
- end
91
+ Decidim.stats.register :followers_count,
92
+ priority: StatsRegistry::MEDIUM_PRIORITY,
93
+ icon_name: "user-follow-line",
94
+ tooltip_key: "followers_count_tooltip" do |participatory_space|
95
+ Decidim::ParticipatoryProcesses::ParticipatoryProcessesStatsFollowersCount.for(participatory_space)
102
96
  end
103
97
 
104
- Decidim.metrics_operation.register(:followers, :participatory_process) do |metric_operation|
105
- metric_operation.manager_class = "Decidim::ParticipatoryProcesses::Metrics::ParticipatoryProcessFollowersMetricMeasure"
98
+ Decidim.stats.register :participants_count,
99
+ priority: StatsRegistry::MEDIUM_PRIORITY,
100
+ icon_name: "user-line",
101
+ tooltip_key: "participants_count_tooltip" do |participatory_space|
102
+ Decidim::ParticipatoryProcesses::ParticipatoryProcessesStatsParticipantsCount.for(participatory_space)
106
103
  end
107
104
  end
108
105
 
109
- initializer "decidim_participatory_processes.webpacker.assets_path" do
106
+ initializer "decidim_participatory_processes.shakapacker.assets_path" do
110
107
  Decidim.register_assets_path File.expand_path("app/packs", root)
111
108
  end
112
109
  end
@@ -27,10 +27,7 @@ Decidim.register_participatory_space(:participatory_processes) do |participatory
27
27
  resource.model_class_name = "Decidim::ParticipatoryProcessGroup"
28
28
  resource.card = "decidim/participatory_processes/process_group"
29
29
  resource.content_blocks_scope_name = "participatory_process_group_homepage"
30
- end
31
-
32
- participatory_space.register_stat :followers_count, tag: :followers, priority: Decidim::StatsRegistry::LOW_PRIORITY do |spaces, _start_at, _end_at|
33
- Decidim::Follow.where(followable: spaces).count
30
+ resource.searchable = true
34
31
  end
35
32
 
36
33
  participatory_space.context(:public) do |context|
@@ -10,7 +10,7 @@ module Decidim
10
10
  create_content_block!
11
11
 
12
12
  process_groups = []
13
- 2.times do
13
+ number_of_records.times do
14
14
  process_groups << create_process_group!
15
15
  end
16
16
 
@@ -19,7 +19,7 @@ module Decidim
19
19
  end
20
20
 
21
21
  taxonomy = create_taxonomy!(name: "Process Types", parent: nil)
22
- 2.times do
22
+ number_of_records.times do
23
23
  create_taxonomy!(name: ::Faker::Lorem.word, parent: taxonomy)
24
24
  end
25
25
  # filters for processes only
@@ -27,7 +27,7 @@ module Decidim
27
27
  taxonomies: taxonomy.all_children,
28
28
  participatory_space_manifests: [:participatory_processes])
29
29
 
30
- 2.times do |_n|
30
+ number_of_records.times do |_n|
31
31
  process = create_process!(process_group: process_groups.sample)
32
32
 
33
33
  create_follow!(Decidim::User.where(organization:, admin: true).first, process)
@@ -61,7 +61,6 @@ module Decidim
61
61
  description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
62
62
  Decidim::Faker::Localized.paragraph(sentence_count: 3)
63
63
  end,
64
- hashtag: ::Faker::Internet.slug,
65
64
  group_url: ::Faker::Internet.url,
66
65
  organization:,
67
66
  hero_image: ::Faker::Boolean.boolean(true_ratio: 0.5) ? hero_image : nil, # Keep after organization
@@ -80,7 +79,6 @@ module Decidim
80
79
  title: Decidim::Faker::Localized.sentence(word_count: 5),
81
80
  slug: Decidim::Faker::Internet.unique.slug(words: nil, glue: "-"),
82
81
  subtitle: Decidim::Faker::Localized.sentence(word_count: 2),
83
- hashtag: "##{::Faker::Lorem.word}",
84
82
  short_description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
85
83
  Decidim::Faker::Localized.sentence(word_count: 3)
86
84
  end,
@@ -111,7 +111,6 @@ FactoryBot.define do
111
111
  description { generate_localized_description(:participatory_process_group_description, skip_injection:) }
112
112
  hero_image { Decidim::Dev.test_file("city.jpeg", "image/jpeg") }
113
113
  organization
114
- hashtag { Faker::Internet.slug }
115
114
  group_url { Faker::Internet.url }
116
115
  developer_group { generate_localized_title(:participatory_process_group_developer_group, skip_injection:) }
117
116
  local_area { generate_localized_title(:participatory_process_group_local_area, skip_injection:) }
@@ -227,7 +226,7 @@ FactoryBot.define do
227
226
  end
228
227
  end
229
228
 
230
- factory :process_valuator, parent: :user, class: "Decidim::User" do
229
+ factory :process_evaluator, parent: :user, class: "Decidim::User" do
231
230
  transient do
232
231
  skip_injection { false }
233
232
  participatory_process { create(:participatory_process, skip_injection:) }
@@ -240,7 +239,7 @@ FactoryBot.define do
240
239
  create(:participatory_process_user_role,
241
240
  user:,
242
241
  participatory_process: evaluator.participatory_process,
243
- role: :valuator, skip_injection: evaluator.skip_injection)
242
+ role: :evaluator, skip_injection: evaluator.skip_injection)
244
243
  end
245
244
  end
246
245
 
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-participatory_processes version.
5
5
  module ParticipatoryProcesses
6
6
  def self.version
7
- "0.30.2"
7
+ "0.31.0.rc1"
8
8
  end
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-participatory_processes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.2
4
+ version: 0.31.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2025-09-23 00:00:00.000000000 Z
13
+ date: 2025-09-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: decidim-core
@@ -18,56 +18,98 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.30.2
21
+ version: 0.31.0.rc1
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.30.2
28
+ version: 0.31.0.rc1
29
+ - !ruby/object:Gem::Dependency
30
+ name: decidim-accountability
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '='
34
+ - !ruby/object:Gem::Version
35
+ version: 0.31.0.rc1
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - '='
41
+ - !ruby/object:Gem::Version
42
+ version: 0.31.0.rc1
29
43
  - !ruby/object:Gem::Dependency
30
44
  name: decidim-admin
31
45
  requirement: !ruby/object:Gem::Requirement
32
46
  requirements:
33
47
  - - '='
34
48
  - !ruby/object:Gem::Version
35
- version: 0.30.2
49
+ version: 0.31.0.rc1
36
50
  type: :development
37
51
  prerelease: false
38
52
  version_requirements: !ruby/object:Gem::Requirement
39
53
  requirements:
40
54
  - - '='
41
55
  - !ruby/object:Gem::Version
42
- version: 0.30.2
56
+ version: 0.31.0.rc1
57
+ - !ruby/object:Gem::Dependency
58
+ name: decidim-budgets
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - '='
62
+ - !ruby/object:Gem::Version
63
+ version: 0.31.0.rc1
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '='
69
+ - !ruby/object:Gem::Version
70
+ version: 0.31.0.rc1
43
71
  - !ruby/object:Gem::Dependency
44
72
  name: decidim-dev
45
73
  requirement: !ruby/object:Gem::Requirement
46
74
  requirements:
47
75
  - - '='
48
76
  - !ruby/object:Gem::Version
49
- version: 0.30.2
77
+ version: 0.31.0.rc1
50
78
  type: :development
51
79
  prerelease: false
52
80
  version_requirements: !ruby/object:Gem::Requirement
53
81
  requirements:
54
82
  - - '='
55
83
  - !ruby/object:Gem::Version
56
- version: 0.30.2
84
+ version: 0.31.0.rc1
57
85
  - !ruby/object:Gem::Dependency
58
86
  name: decidim-meetings
59
87
  requirement: !ruby/object:Gem::Requirement
60
88
  requirements:
61
89
  - - '='
62
90
  - !ruby/object:Gem::Version
63
- version: 0.30.2
91
+ version: 0.31.0.rc1
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - '='
97
+ - !ruby/object:Gem::Version
98
+ version: 0.31.0.rc1
99
+ - !ruby/object:Gem::Dependency
100
+ name: decidim-proposals
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - '='
104
+ - !ruby/object:Gem::Version
105
+ version: 0.31.0.rc1
64
106
  type: :development
65
107
  prerelease: false
66
108
  version_requirements: !ruby/object:Gem::Requirement
67
109
  requirements:
68
110
  - - '='
69
111
  - !ruby/object:Gem::Version
70
- version: 0.30.2
112
+ version: 0.31.0.rc1
71
113
  description: Participatory processes component for decidim.
72
114
  email:
73
115
  - josepjaume@gmail.com
@@ -89,6 +131,13 @@ files:
89
131
  - app/cells/decidim/participatory_process_groups/content_blocks/statistics_cell.rb
90
132
  - app/cells/decidim/participatory_process_groups/process_filters_cell.rb
91
133
  - app/cells/decidim/participatory_processes/content_block_cell.rb
134
+ - app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats/show.erb
135
+ - app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats_cell.rb
136
+ - app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats_settings_form/citizen_influence.erb
137
+ - app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats_settings_form/inclusiveness.erb
138
+ - app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats_settings_form/informativeness.erb
139
+ - app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats_settings_form/show.erb
140
+ - app/cells/decidim/participatory_processes/content_blocks/democratic_quality_stats_settings_form_cell.rb
92
141
  - app/cells/decidim/participatory_processes/content_blocks/extra_data/active_step.erb
93
142
  - app/cells/decidim/participatory_processes/content_blocks/extra_data_cell.rb
94
143
  - app/cells/decidim/participatory_processes/content_blocks/highlighted_processes_cell.rb
@@ -96,7 +145,6 @@ files:
96
145
  - app/cells/decidim/participatory_processes/content_blocks/highlighted_processes_settings_form_cell.rb
97
146
  - app/cells/decidim/participatory_processes/content_blocks/main_data_cell.rb
98
147
  - app/cells/decidim/participatory_processes/content_blocks/metadata_cell.rb
99
- - app/cells/decidim/participatory_processes/content_blocks/metrics_cell.rb
100
148
  - app/cells/decidim/participatory_processes/content_blocks/processes_settings_form/show.erb
101
149
  - app/cells/decidim/participatory_processes/content_blocks/processes_settings_form_cell.rb
102
150
  - app/cells/decidim/participatory_processes/content_blocks/related_processes/content.erb
@@ -104,6 +152,8 @@ files:
104
152
  - app/cells/decidim/participatory_processes/content_blocks/stats_cell.rb
105
153
  - app/cells/decidim/participatory_processes/filtered_participatory_processes/show.erb
106
154
  - app/cells/decidim/participatory_processes/filtered_participatory_processes_cell.rb
155
+ - app/cells/decidim/participatory_processes/indicator/show.erb
156
+ - app/cells/decidim/participatory_processes/indicator_cell.rb
107
157
  - app/cells/decidim/participatory_processes/process_cell.rb
108
158
  - app/cells/decidim/participatory_processes/process_dropdown_metadata/metadata.erb
109
159
  - app/cells/decidim/participatory_processes/process_dropdown_metadata_cell.rb
@@ -123,11 +173,11 @@ files:
123
173
  - app/cells/decidim/participatory_processes/processes/show.erb
124
174
  - app/cells/decidim/participatory_processes/processes_cell.rb
125
175
  - app/commands/decidim/participatory_processes/admin/activate_participatory_process_step.rb
126
- - app/commands/decidim/participatory_processes/admin/copy_participatory_process.rb
127
176
  - app/commands/decidim/participatory_processes/admin/create_participatory_process.rb
128
177
  - app/commands/decidim/participatory_processes/admin/create_participatory_process_group.rb
129
178
  - app/commands/decidim/participatory_processes/admin/create_participatory_process_step.rb
130
179
  - app/commands/decidim/participatory_processes/admin/destroy_participatory_process_step.rb
180
+ - app/commands/decidim/participatory_processes/admin/duplicate_participatory_process.rb
131
181
  - app/commands/decidim/participatory_processes/admin/import_participatory_process.rb
132
182
  - app/commands/decidim/participatory_processes/admin/reorder_participatory_process_steps.rb
133
183
  - app/commands/decidim/participatory_processes/admin/update_participatory_process.rb
@@ -147,7 +197,7 @@ files:
147
197
  - app/controllers/decidim/participatory_processes/admin/moderations_controller.rb
148
198
  - app/controllers/decidim/participatory_processes/admin/participatory_process_attachment_collections_controller.rb
149
199
  - app/controllers/decidim/participatory_processes/admin/participatory_process_attachments_controller.rb
150
- - app/controllers/decidim/participatory_processes/admin/participatory_process_copies_controller.rb
200
+ - app/controllers/decidim/participatory_processes/admin/participatory_process_duplicates_controller.rb
151
201
  - app/controllers/decidim/participatory_processes/admin/participatory_process_exports_controller.rb
152
202
  - app/controllers/decidim/participatory_processes/admin/participatory_process_group_landing_page_content_blocks_controller.rb
153
203
  - app/controllers/decidim/participatory_processes/admin/participatory_process_group_landing_page_controller.rb
@@ -172,7 +222,7 @@ files:
172
222
  - app/events/decidim/participatory_process_role_assigned_event.rb
173
223
  - app/events/decidim/participatory_process_step_activated_event.rb
174
224
  - app/events/decidim/participatory_process_step_changed_event.rb
175
- - app/forms/decidim/participatory_processes/admin/participatory_process_copy_form.rb
225
+ - app/forms/decidim/participatory_processes/admin/participatory_process_duplicate_form.rb
176
226
  - app/forms/decidim/participatory_processes/admin/participatory_process_form.rb
177
227
  - app/forms/decidim/participatory_processes/admin/participatory_process_group_form.rb
178
228
  - app/forms/decidim/participatory_processes/admin/participatory_process_import_form.rb
@@ -200,9 +250,9 @@ files:
200
250
  - app/presenters/decidim/participatory_processes/admin_log/participatory_process_user_role_presenter.rb
201
251
  - app/presenters/decidim/participatory_processes/admin_log/step_presenter.rb
202
252
  - app/presenters/decidim/participatory_processes/admin_log/value_types/role_presenter.rb
253
+ - app/presenters/decidim/participatory_processes/participatory_process_democratic_quality_stats_presenter.rb
203
254
  - app/presenters/decidim/participatory_processes/participatory_process_group_presenter.rb
204
255
  - app/presenters/decidim/participatory_processes/participatory_process_group_stats_presenter.rb
205
- - app/presenters/decidim/participatory_processes/participatory_process_metric_charts_presenter.rb
206
256
  - app/presenters/decidim/participatory_processes/participatory_process_presenter.rb
207
257
  - app/presenters/decidim/participatory_processes/participatory_process_stats_presenter.rb
208
258
  - app/queries/decidim/participatory_processes/admin/admin_users.rb
@@ -212,8 +262,6 @@ files:
212
262
  - app/queries/decidim/participatory_processes/group_participatory_processes.rb
213
263
  - app/queries/decidim/participatory_processes/group_published_participatory_processes.rb
214
264
  - app/queries/decidim/participatory_processes/highlighted_participatory_processes.rb
215
- - app/queries/decidim/participatory_processes/metrics/participatory_process_followers_metric_measure.rb
216
- - app/queries/decidim/participatory_processes/metrics/participatory_processes_metric_manage.rb
217
265
  - app/queries/decidim/participatory_processes/organization_participatory_process_groups.rb
218
266
  - app/queries/decidim/participatory_processes/organization_participatory_processes.rb
219
267
  - app/queries/decidim/participatory_processes/organization_prioritized_participatory_process_groups.rb
@@ -221,12 +269,12 @@ files:
221
269
  - app/queries/decidim/participatory_processes/organization_promoted_participatory_process_groups.rb
222
270
  - app/queries/decidim/participatory_processes/organization_published_participatory_processes.rb
223
271
  - app/queries/decidim/participatory_processes/participatory_processes_by_group.rb
272
+ - app/queries/decidim/participatory_processes/participatory_processes_stats_followers_count.rb
273
+ - app/queries/decidim/participatory_processes/participatory_processes_stats_participants_count.rb
224
274
  - app/queries/decidim/participatory_processes/prioritized_participatory_processes.rb
225
275
  - app/queries/decidim/participatory_processes/promoted_participatory_process_groups.rb
226
276
  - app/queries/decidim/participatory_processes/promoted_participatory_processes.rb
227
277
  - app/queries/decidim/participatory_processes/published_participatory_processes.rb
228
- - app/queries/decidim/participatory_processes/stats_followers_count.rb
229
- - app/queries/decidim/participatory_processes/stats_participants_count.rb
230
278
  - app/queries/decidim/participatory_processes/visible_participatory_process_groups.rb
231
279
  - app/queries/decidim/participatory_processes/visible_participatory_processes.rb
232
280
  - app/serializers/decidim/participatory_processes/open_data_participatory_process_serializer.rb
@@ -234,8 +282,8 @@ files:
234
282
  - app/serializers/decidim/participatory_processes/participatory_process_serializer.rb
235
283
  - app/views/decidim/participatory_process_groups/_participatory_process_group.html.erb
236
284
  - app/views/decidim/participatory_processes/_participatory_process.html.erb
237
- - app/views/decidim/participatory_processes/admin/participatory_process_copies/_form.html.erb
238
- - app/views/decidim/participatory_processes/admin/participatory_process_copies/new.html.erb
285
+ - app/views/decidim/participatory_processes/admin/participatory_process_duplicates/_form.html.erb
286
+ - app/views/decidim/participatory_processes/admin/participatory_process_duplicates/new.html.erb
239
287
  - app/views/decidim/participatory_processes/admin/participatory_process_groups/_form.html.erb
240
288
  - app/views/decidim/participatory_processes/admin/participatory_process_groups/edit.html.erb
241
289
  - app/views/decidim/participatory_processes/admin/participatory_process_groups/index.html.erb
@@ -261,7 +309,6 @@ files:
261
309
  - app/views/decidim/participatory_processes/participatory_process_groups/show.html.erb
262
310
  - app/views/decidim/participatory_processes/participatory_process_groups/show.js.erb
263
311
  - app/views/decidim/participatory_processes/participatory_processes/_collection.html.erb
264
- - app/views/decidim/participatory_processes/participatory_processes/all_metrics.html.erb
265
312
  - app/views/decidim/participatory_processes/participatory_processes/index.html.erb
266
313
  - app/views/decidim/participatory_processes/participatory_processes/index.js.erb
267
314
  - app/views/decidim/participatory_processes/participatory_processes/show.html.erb
@@ -410,6 +457,9 @@ files:
410
457
  - db/migrate/20241108141423_remove_column_show_metrics_from_participatory_processes.rb
411
458
  - db/migrate/20241108141514_remove_column_banner_image_from_participatory_processes.rb
412
459
  - db/migrate/20241108141605_remove_column_show_statistics_from_participatory_processes.rb
460
+ - db/migrate/20250403110052_add_democratic_quality_static_page.rb
461
+ - db/migrate/20250605114136_remove_hashtag_from_participatory_processes.rb
462
+ - db/migrate/20250605114415_remove_hashtag_from_participatory_processes_groups.rb
413
463
  - decidim-participatory_processes.gemspec
414
464
  - lib/decidim/api/participatory_process_group_type.rb
415
465
  - lib/decidim/api/participatory_process_input_filter.rb
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module ParticipatoryProcesses
5
- module ContentBlocks
6
- class MetricsCell < Decidim::ContentBlocks::ParticipatorySpaceMetricsCell
7
- include ParticipatorySpaceContentBlocksHelper
8
-
9
- private
10
-
11
- def metrics
12
- @metrics ||= ParticipatoryProcessMetricChartsPresenter.new(participatory_process: resource)
13
- end
14
-
15
- def scope
16
- "participatory_process"
17
- end
18
-
19
- def show_all_path
20
- decidim_participatory_processes.all_metrics_participatory_process_path(resource)
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module ParticipatoryProcesses
5
- # A presenter to render metrics in ParticipatoryProcesses statistics page
6
- class ParticipatoryProcessMetricChartsPresenter < Decidim::MetricChartsPresenter
7
- delegate :hidden_field_tag, :link_to, :capture, to: :view_context
8
-
9
- def participatory_process
10
- __getobj__.fetch(:participatory_process)
11
- end
12
-
13
- def params
14
- capture do
15
- concat(hidden_field_tag(:metrics_space_type, participatory_process.class.name, id: :"metrics-space_type"))
16
- concat(hidden_field_tag(:metrics_space_id, participatory_process.id, id: :"metrics-space_id"))
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module ParticipatoryProcesses
5
- module Metrics
6
- # Searches for unique Users following the next objects
7
- # - ParticipatoryProcesses
8
- class ParticipatoryProcessFollowersMetricMeasure < Decidim::MetricMeasure
9
- def valid?
10
- super && @resource.is_a?(Decidim::Participable)
11
- end
12
-
13
- def calculate
14
- participatory_process = @resource
15
-
16
- process_followers = Decidim::Follow.where(followable: participatory_process).joins(:user)
17
- .where(decidim_follows: { created_at: ..end_time })
18
- cumulative_users = process_followers.pluck(:decidim_user_id)
19
-
20
- process_followers = process_followers.where(decidim_follows: { created_at: start_time.. })
21
- quantity_users = process_followers.pluck(:decidim_user_id)
22
-
23
- {
24
- cumulative_users: cumulative_users.uniq,
25
- quantity_users: quantity_users.uniq
26
- }
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module ParticipatoryProcesses
5
- module Metrics
6
- class ParticipatoryProcessesMetricManage < Decidim::MetricManage
7
- def metric_name
8
- "participatory_processes"
9
- end
10
-
11
- private
12
-
13
- def query
14
- return @query if @query
15
-
16
- @query = Decidim::ParticipatoryProcess.where(organization: @organization)
17
- @query = @query.where(decidim_participatory_processes: { published_at: ..end_time })
18
- @query
19
- end
20
-
21
- def quantity
22
- @quantity ||= query.where(decidim_participatory_processes: { published_at: start_time.. }).count
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module ParticipatoryProcesses
5
- # This class counts all Followers of a participatory process or
6
- # participatory processes belonging to a participatory process group
7
- class StatsFollowersCount < Decidim::Query
8
- def self.for(participatory_space)
9
- return 0 unless participatory_space.is_a?(Decidim::ParticipatoryProcess) ||
10
- (participatory_space.is_a?(Decidim::ParticipatoryProcessGroup) && participatory_space.participatory_processes.exists?)
11
-
12
- new(participatory_space).query
13
- end
14
-
15
- def initialize(participatory_space)
16
- @participatory_space = participatory_space
17
- end
18
-
19
- def query
20
- space_query + components_query
21
- end
22
-
23
- private
24
-
25
- attr_reader :participatory_space
26
-
27
- def components_query
28
- Decidim.component_manifests.sum do |component|
29
- component.stats
30
- .filter(tag: :followers)
31
- .with_context(space_components)
32
- .map { |_name, value| value }
33
- .sum
34
- end
35
- end
36
-
37
- def space_query
38
- Decidim.participatory_space_manifests.sum do |space|
39
- space.stats
40
- .filter(tag: :followers)
41
- .with_context(participatory_space_items)
42
- .map { |_name, value| value }
43
- .sum
44
- end
45
- end
46
-
47
- def participatory_space_items
48
- @participatory_space_items ||= if participatory_space.is_a?(Decidim::ParticipatoryProcess)
49
- participatory_space
50
- else
51
- participatory_space.participatory_processes
52
- end
53
- end
54
-
55
- def space_components
56
- @space_components ||= Decidim::Component.where(participatory_space: participatory_space_items).published
57
- end
58
- end
59
- end
60
- end