decidim-participatory_processes 0.29.4 → 0.30.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 (114) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/participatory_process_groups/process_filters_cell.rb +4 -5
  3. data/app/cells/decidim/participatory_processes/content_blocks/highlighted_processes_settings_form/show.erb +1 -1
  4. data/app/cells/decidim/participatory_processes/process_dropdown_metadata_cell.rb +7 -0
  5. data/app/cells/decidim/participatory_processes/process_filters/show.erb +0 -1
  6. data/app/cells/decidim/participatory_processes/process_filters_cell.rb +6 -32
  7. data/app/commands/decidim/participatory_processes/admin/copy_participatory_process.rb +2 -57
  8. data/app/commands/decidim/participatory_processes/admin/create_participatory_process.rb +3 -3
  9. data/app/commands/decidim/participatory_processes/admin/import_participatory_process.rb +0 -1
  10. data/app/commands/decidim/participatory_processes/admin/update_participatory_process.rb +3 -3
  11. data/app/controllers/decidim/participatory_processes/admin/component_share_tokens_controller.rb +18 -0
  12. data/app/controllers/decidim/participatory_processes/admin/participatory_process_share_tokens_controller.rb +16 -0
  13. data/app/controllers/decidim/participatory_processes/admin/participatory_processes_controller.rb +15 -3
  14. data/app/controllers/decidim/participatory_processes/participatory_processes_controller.rb +2 -4
  15. data/app/controllers/decidim/participatory_processes/participatory_space_private_users_controller.rb +27 -0
  16. data/app/forms/decidim/participatory_processes/admin/participatory_process_copy_form.rb +0 -2
  17. data/app/forms/decidim/participatory_processes/admin/participatory_process_form.rb +3 -33
  18. data/app/forms/decidim/participatory_processes/admin/participatory_process_import_form.rb +0 -1
  19. data/app/helpers/decidim/participatory_processes/participatory_process_helper.rb +28 -20
  20. data/app/jobs/decidim/participatory_processes/change_active_step_job.rb +1 -1
  21. data/app/models/decidim/participatory_process.rb +19 -3
  22. data/app/permissions/decidim/participatory_processes/permissions.rb +18 -21
  23. data/app/presenters/decidim/participatory_processes/admin_log/participatory_process_presenter.rb +1 -1
  24. data/app/queries/decidim/participatory_processes/metrics/participatory_process_followers_metric_measure.rb +2 -2
  25. data/app/queries/decidim/participatory_processes/metrics/participatory_processes_metric_manage.rb +2 -2
  26. data/app/serializers/decidim/participatory_processes/open_data_participatory_process_serializer.rb +47 -0
  27. data/app/serializers/decidim/participatory_processes/participatory_process_importer.rb +1 -43
  28. data/app/serializers/decidim/participatory_processes/participatory_process_serializer.rb +17 -126
  29. data/app/views/decidim/participatory_processes/admin/participatory_process_copies/_form.html.erb +0 -8
  30. data/app/views/decidim/participatory_processes/admin/participatory_process_groups/_form.html.erb +0 -1
  31. data/app/views/decidim/participatory_processes/admin/participatory_process_imports/_form.html.erb +0 -3
  32. data/app/views/decidim/participatory_processes/admin/participatory_processes/_form.html.erb +25 -60
  33. data/app/views/decidim/participatory_processes/admin/participatory_processes/_process_row.html.erb +83 -0
  34. data/app/views/decidim/participatory_processes/admin/participatory_processes/_processes_thead.html.erb +19 -0
  35. data/app/views/decidim/participatory_processes/admin/participatory_processes/index.html.erb +16 -84
  36. data/app/views/decidim/participatory_processes/admin/participatory_processes/manage_trash.html.erb +20 -0
  37. data/app/views/decidim/participatory_processes/participatory_process_groups/show.html.erb +3 -1
  38. data/app/views/decidim/participatory_processes/participatory_processes/index.html.erb +3 -1
  39. data/app/views/decidim/participatory_processes/participatory_processes/show.html.erb +6 -6
  40. data/app/views/decidim/participatory_processes/participatory_space_private_users/index.html.erb +22 -0
  41. data/config/assets.rb +1 -2
  42. data/config/locales/ar.yml +0 -17
  43. data/config/locales/bg.yml +0 -36
  44. data/config/locales/bs-BA.yml +0 -9
  45. data/config/locales/ca.yml +61 -39
  46. data/config/locales/cs.yml +60 -38
  47. data/config/locales/de.yml +60 -38
  48. data/config/locales/el.yml +0 -36
  49. data/config/locales/en.yml +60 -38
  50. data/config/locales/es-MX.yml +61 -39
  51. data/config/locales/es-PY.yml +61 -39
  52. data/config/locales/es.yml +62 -40
  53. data/config/locales/eu.yml +141 -119
  54. data/config/locales/fi-plain.yml +60 -36
  55. data/config/locales/fi.yml +60 -36
  56. data/config/locales/fr-CA.yml +23 -37
  57. data/config/locales/fr.yml +23 -37
  58. data/config/locales/ga-IE.yml +0 -14
  59. data/config/locales/gl.yml +0 -18
  60. data/config/locales/hu.yml +0 -36
  61. data/config/locales/id-ID.yml +0 -17
  62. data/config/locales/is-IS.yml +0 -16
  63. data/config/locales/it.yml +0 -36
  64. data/config/locales/ja.yml +60 -38
  65. data/config/locales/lb.yml +0 -20
  66. data/config/locales/lt.yml +0 -36
  67. data/config/locales/lv.yml +0 -20
  68. data/config/locales/nl.yml +0 -21
  69. data/config/locales/no.yml +0 -36
  70. data/config/locales/pl.yml +0 -36
  71. data/config/locales/pt-BR.yml +0 -33
  72. data/config/locales/pt.yml +0 -21
  73. data/config/locales/ro-RO.yml +1 -38
  74. data/config/locales/ru.yml +0 -17
  75. data/config/locales/sk.yml +1 -21
  76. data/config/locales/sr-CS.yml +0 -9
  77. data/config/locales/sv.yml +53 -37
  78. data/config/locales/tr-TR.yml +0 -21
  79. data/config/locales/uk.yml +0 -17
  80. data/config/locales/zh-CN.yml +0 -20
  81. data/config/locales/zh-TW.yml +0 -36
  82. data/db/migrate/20210310120750_add_followable_counter_cache_to_participatory_processes.rb +1 -1
  83. data/db/migrate/20240822161355_add_deleted_at_to_decidim_participatory_processes.rb +8 -0
  84. data/db/migrate/20241108141423_remove_column_show_metrics_from_participatory_processes.rb +7 -0
  85. data/db/migrate/20241108141514_remove_column_banner_image_from_participatory_processes.rb +7 -0
  86. data/db/migrate/20241108141605_remove_column_show_statistics_from_participatory_processes.rb +7 -0
  87. data/decidim-participatory_processes.gemspec +1 -1
  88. data/lib/decidim/api/participatory_process_group_type.rb +3 -3
  89. data/lib/decidim/api/participatory_process_step_type.rb +7 -9
  90. data/lib/decidim/api/participatory_process_type.rb +18 -23
  91. data/lib/decidim/api/participatory_process_type_type.rb +3 -3
  92. data/lib/decidim/participatory_processes/admin_engine.rb +85 -59
  93. data/lib/decidim/participatory_processes/content_blocks/registry_manager.rb +11 -0
  94. data/lib/decidim/participatory_processes/engine.rb +7 -0
  95. data/lib/decidim/participatory_processes/menu.rb +9 -17
  96. data/lib/decidim/participatory_processes/participatory_space.rb +5 -2
  97. data/lib/decidim/participatory_processes/seeds.rb +8 -16
  98. data/lib/decidim/participatory_processes/test/factories.rb +14 -14
  99. data/lib/decidim/participatory_processes/version.rb +1 -1
  100. metadata +24 -26
  101. data/app/cells/decidim/participatory_processes/process_filters/type_filter.erb +0 -17
  102. data/app/commands/decidim/participatory_processes/admin/create_participatory_process_type.rb +0 -17
  103. data/app/commands/decidim/participatory_processes/admin/update_participatory_process_type.rb +0 -13
  104. data/app/controllers/decidim/participatory_processes/admin/categories_controller.rb +0 -13
  105. data/app/controllers/decidim/participatory_processes/admin/participatory_process_types_controller.rb +0 -117
  106. data/app/forms/decidim/participatory_processes/admin/participatory_process_type_form.rb +0 -20
  107. data/app/helpers/decidim/participatory_processes/admin/participatory_process_helper.rb +0 -24
  108. data/app/packs/entrypoints/decidim_participatory_processes_admin.js +0 -1
  109. data/app/packs/src/decidim/participatory_processes/admin/participatory_processes.js +0 -18
  110. data/app/views/decidim/participatory_processes/admin/participatory_process_types/_form.html.erb +0 -9
  111. data/app/views/decidim/participatory_processes/admin/participatory_process_types/edit.html.erb +0 -18
  112. data/app/views/decidim/participatory_processes/admin/participatory_process_types/index.html.erb +0 -58
  113. data/app/views/decidim/participatory_processes/admin/participatory_process_types/new.html.erb +0 -18
  114. data/config/locales/ca-IT.yml +0 -524
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 638da94129c4ea244343f361423df19de628ff9877b6087198b1b00b98f29842
4
- data.tar.gz: 966c9bbee561e69dff485f866e2d5cd875f9d1b244f1991a32efc035ab5532b7
3
+ metadata.gz: dbfb295a849ce25e210c1a15ab82ddbb956bca9f5162059bc198996f8ff49bfc
4
+ data.tar.gz: 753b670abee7c70c2eab25a172714f205cd712f07242a6fe5ee8a888457cbf82
5
5
  SHA512:
6
- metadata.gz: 8ba330c8d79a06a96098ec14b3c95ba719141eb51af017c8ab737ff9ade2cdd42be2245fb6306e5d8921e607205f5b1a01ffa0961d4598f6a499ddea9fcfa808
7
- data.tar.gz: 7ab9b68628b4c7bc549534694eb0dc5c647a121a1bedae2af3df3da38184feef35d3b1ea80050ae65bc962d39bc5d413292c5665beb96df39aaa37eb82342d5e
6
+ metadata.gz: 6ad3ae1d2c5f1964e78ebd2d83a4b424c3f7799110623b22d75d71f3cf184daea23d93ab81e69d0c40f13b0d4b834e4945f32ade829b537d49f4d036ef59cf59
7
+ data.tar.gz: 4fcb241071f32cfc906018a189c9a19fc4c28588386bc9b9b5e4edb1e5d7e5ce4ade3d7ea0374d51e14886962a26f9090de7ce60bd7fee4840d0054a040b723d
@@ -25,11 +25,11 @@ module Decidim
25
25
  # date_filter: "active"
26
26
  # )
27
27
  class ProcessFiltersCell < Decidim::ParticipatoryProcesses::ProcessFiltersCell
28
- def filter_link(date_filter, type_filter = nil)
28
+ def filter_link(date_filter)
29
29
  Decidim::ParticipatoryProcesses::Engine
30
30
  .routes
31
31
  .url_helpers
32
- .participatory_process_group_path(model, **filter_params(date_filter, type_filter))
32
+ .participatory_process_group_path(model, **filter_params(date_filter))
33
33
  end
34
34
 
35
35
  def current_filter
@@ -52,13 +52,12 @@ module Decidim
52
52
  end
53
53
  end
54
54
 
55
- def filtered_processes(date_filter, filter_with_type: true)
55
+ def filtered_processes(date_filter)
56
56
  query = base_relation.ransack(
57
57
  {
58
58
  with_date: date_filter,
59
59
  with_any_scope: get_filter(:with_any_scope),
60
- with_any_area: get_filter(:with_any_area),
61
- with_any_type: filter_with_type ? get_filter(:with_any_type) : nil
60
+ with_any_area: get_filter(:with_any_area)
62
61
  },
63
62
  current_user:,
64
63
  organization: current_organization
@@ -1,3 +1,3 @@
1
1
  <% form.fields_for :settings, form.object.settings do |settings_fields| %>
2
- <%= settings_fields.select :max_results, [6, 9, 12], prompt: "", label: %>
2
+ <%= settings_fields.number_field :max_results, label: %>
3
3
  <% end %>
@@ -20,11 +20,18 @@ module Decidim
20
20
  hash << "decidim/process_dropdown_metadata"
21
21
  hash << id
22
22
  hash << current_user.try(:id).to_s
23
+ hash << nav_items_hashes.join("-")
23
24
  hash << I18n.locale.to_s
24
25
 
25
26
  hash.join(Decidim.cache_key_separator)
26
27
  end
27
28
 
29
+ def nav_items_hashes
30
+ nav_items.map do |item|
31
+ item[:id]
32
+ end
33
+ end
34
+
28
35
  def step_title
29
36
  decidim_html_escape translated_attribute(process.active_step&.title)
30
37
  end
@@ -4,7 +4,6 @@
4
4
  <%= title %>
5
5
  <%= render :filter_tabs %>
6
6
  </h3>
7
- <%= render :type_filter if participatory_process_types_for_select.present? %>
8
7
  </div>
9
8
  <hr>
10
9
  </div>
@@ -5,22 +5,17 @@ module Decidim
5
5
  class ProcessFiltersCell < Decidim::ViewModel
6
6
  ALL_FILTERS = %w(active upcoming past all).freeze
7
7
 
8
- def filter_link(date_filter, type_filter = nil)
8
+ def filter_link(date_filter)
9
9
  Decidim::ParticipatoryProcesses::Engine
10
10
  .routes
11
11
  .url_helpers
12
- .participatory_processes_path(**filter_params(date_filter, type_filter))
12
+ .participatory_processes_path(**filter_params(date_filter))
13
13
  end
14
14
 
15
15
  def current_filter
16
16
  get_filter_in(:with_date, ALL_FILTERS, model[:default_filter])
17
17
  end
18
18
 
19
- def current_type_filter_name
20
- participatory_process_types_for_select.find { |_, id| id == get_filter(:with_any_type) }&.first ||
21
- I18n.t("all_types", scope: "decidim.participatory_processes.participatory_processes.filters")
22
- end
23
-
24
19
  def get_filter(filter_name, default = nil)
25
20
  params&.dig(:filter, filter_name) || default
26
21
  end
@@ -30,24 +25,22 @@ module Decidim
30
25
  options.include?(value) ? value : default
31
26
  end
32
27
 
33
- def filter_params(date_filter, type_filter)
28
+ def filter_params(date_filter)
34
29
  {
35
30
  filter: {
36
31
  with_date: date_filter,
37
32
  with_any_scope: get_filter(:with_any_scope),
38
- with_any_area: get_filter(:with_any_area),
39
- with_any_type: type_filter || get_filter(:with_any_type)
33
+ with_any_area: get_filter(:with_any_area)
40
34
  }
41
35
  }
42
36
  end
43
37
 
44
- def filtered_processes(date_filter, filter_with_type: true)
38
+ def filtered_processes(date_filter)
45
39
  query = ParticipatoryProcess.where(organization: current_organization).ransack(
46
40
  {
47
41
  with_date: date_filter,
48
42
  with_any_scope: get_filter(:with_any_scope),
49
- with_any_area: get_filter(:with_any_area),
50
- with_any_type: filter_with_type ? get_filter(:with_any_type) : nil
43
+ with_any_area: get_filter(:with_any_area)
51
44
  },
52
45
  current_user:
53
46
  ).result
@@ -86,10 +79,6 @@ module Decidim
86
79
  I18n.t(current_filter, scope: "decidim.participatory_processes.participatory_processes.filters.counters", count: process_count_by_filter[current_filter])
87
80
  end
88
81
 
89
- def filter_type_label
90
- I18n.t("filter_by", scope: "decidim.participatory_processes.participatory_processes.filters")
91
- end
92
-
93
82
  def filter_name(filter)
94
83
  I18n.t(filter, scope: "decidim.participatory_processes.participatory_processes.filters.names")
95
84
  end
@@ -108,21 +97,6 @@ module Decidim
108
97
 
109
98
  "no_active_nor_upcoming"
110
99
  end
111
-
112
- def participatory_process_types
113
- @participatory_process_types ||= Decidim::ParticipatoryProcessType.joins(:processes).where(
114
- decidim_participatory_processes: { id: filtered_processes(current_filter, filter_with_type: false) }
115
- ).distinct
116
- end
117
-
118
- def participatory_process_types_for_select
119
- return if participatory_process_types.blank?
120
-
121
- [[I18n.t("all_types", scope: "decidim.participatory_processes.participatory_processes.filters"), ""]] +
122
- participatory_process_types.map do |type|
123
- [translated_attribute(type.title), type.id.to_s]
124
- end
125
- end
126
100
  end
127
101
  end
128
102
  end
@@ -30,9 +30,7 @@ module Decidim
30
30
  copy_participatory_process
31
31
  copy_participatory_process_attachments
32
32
  copy_participatory_process_steps if @form.copy_steps?
33
- copy_participatory_process_categories if @form.copy_categories?
34
33
  copy_participatory_process_components if @form.copy_components?
35
- copy_landing_page_blocks if @form.copy_landing_page_blocks?
36
34
  end
37
35
  end
38
36
 
@@ -53,10 +51,8 @@ module Decidim
53
51
  description: @participatory_process.description,
54
52
  short_description: @participatory_process.short_description,
55
53
  promoted: @participatory_process.promoted,
56
- scope: @participatory_process.scope,
57
54
  developer_group: @participatory_process.developer_group,
58
55
  local_area: @participatory_process.local_area,
59
- area: @participatory_process.area,
60
56
  target: @participatory_process.target,
61
57
  participatory_scope: @participatory_process.participatory_scope,
62
58
  participatory_structure: @participatory_process.participatory_structure,
@@ -64,7 +60,8 @@ module Decidim
64
60
  start_date: @participatory_process.start_date,
65
61
  end_date: @participatory_process.end_date,
66
62
  participatory_process_group: @participatory_process.participatory_process_group,
67
- private_space: @participatory_process.private_space
63
+ private_space: @participatory_process.private_space,
64
+ taxonomies: @participatory_process.taxonomies
68
65
  )
69
66
  end
70
67
 
@@ -91,25 +88,6 @@ module Decidim
91
88
  end
92
89
  end
93
90
 
94
- def copy_participatory_process_categories
95
- @participatory_process.categories.first_class.each do |category|
96
- new_category = Category.create!(
97
- name: category.name,
98
- description: category.description,
99
- participatory_space: @copied_process
100
- )
101
-
102
- category.descendants.each do |child|
103
- Category.create!(
104
- name: child.name,
105
- description: child.description,
106
- participatory_space: @copied_process,
107
- parent: new_category
108
- )
109
- end
110
- end
111
- end
112
-
113
91
  def copy_participatory_process_components
114
92
  @participatory_process.components.each do |component|
115
93
  copied_step_settings = @form.copy_steps? ? map_step_settings(component.step_settings) : {}
@@ -130,39 +108,6 @@ module Decidim
130
108
  acc.update(@steps_relationship[step_id.to_s] => settings)
131
109
  end
132
110
  end
133
-
134
- def copy_landing_page_blocks
135
- blocks = Decidim::ContentBlock.where(scoped_resource_id: @participatory_process.id, scope_name: "participatory_process_homepage",
136
- organization: @participatory_process.organization)
137
- return if blocks.blank?
138
-
139
- blocks.each do |block|
140
- new_block = Decidim::ContentBlock.create!(
141
- organization: @copied_process.organization,
142
- scope_name: "participatory_process_homepage",
143
- scoped_resource_id: @copied_process.id,
144
- manifest_name: block.manifest_name,
145
- settings: block.settings,
146
- weight: block.weight,
147
- published_at: block.published_at.present? ? @copied_process.created_at : nil # determine if block is active/inactive
148
- )
149
- copy_block_attachments(block, new_block) if block.attachments.present?
150
- end
151
- end
152
-
153
- def copy_block_attachments(block, new_block)
154
- block.attachments.map(&:name).each do |name|
155
- original_image = block.images_container.send(name).blob
156
- next if original_image.blank?
157
-
158
- new_block.images_container.send("#{name}=", ActiveStorage::Blob.create_and_upload!(
159
- io: StringIO.new(original_image.download),
160
- filename: "image.png",
161
- content_type: block.images_container.background_image.blob.content_type
162
- ))
163
- new_block.save!
164
- end
165
- end
166
111
  end
167
112
  end
168
113
  end
@@ -9,10 +9,10 @@ module Decidim
9
9
  fetch_file_attributes :hero_image
10
10
 
11
11
  fetch_form_attributes :organization, :title, :subtitle, :weight, :slug, :hashtag, :description,
12
- :short_description, :promoted, :scopes_enabled, :scope, :announcement,
13
- :scope_type_max_depth, :private_space, :developer_group, :local_area, :area, :target,
12
+ :short_description, :promoted, :taxonomizations, :announcement,
13
+ :private_space, :developer_group, :local_area, :target,
14
14
  :participatory_scope, :participatory_structure, :meta_scope, :start_date, :end_date,
15
- :participatory_process_group, :participatory_process_type
15
+ :participatory_process_group
16
16
 
17
17
  protected
18
18
 
@@ -42,7 +42,6 @@ module Decidim
42
42
  Decidim.traceability.perform_action!("import", Decidim::ParticipatoryProcess, current_user) do
43
43
  @imported_process = importer.import(original_process, current_user, title: form.title, slug: form.slug)
44
44
  importer.import_participatory_process_steps(original_process["participatory_process_steps"]) if form.import_steps?
45
- importer.import_categories(original_process["participatory_process_categories"]) if form.import_categories?
46
45
  importer.import_folders_and_attachments(original_process["attachments"]) if form.import_attachments?
47
46
  importer.import_components(original_process["components"]) if form.import_components?
48
47
  @imported_process
@@ -9,10 +9,10 @@ module Decidim
9
9
  fetch_file_attributes :hero_image
10
10
 
11
11
  fetch_form_attributes :title, :subtitle, :weight, :slug, :hashtag, :promoted, :description,
12
- :short_description, :scopes_enabled, :scope, :scope_type_max_depth,
13
- :private_space, :developer_group, :local_area, :area, :target, :participatory_scope,
12
+ :short_description, :taxonomizations,
13
+ :private_space, :developer_group, :local_area, :target, :participatory_scope,
14
14
  :participatory_structure, :meta_scope, :start_date, :end_date, :participatory_process_group,
15
- :participatory_process_type, :announcement
15
+ :announcement
16
16
 
17
17
  private
18
18
 
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ParticipatoryProcesses
5
+ module Admin
6
+ # This controller allows sharing unpublished things.
7
+ # It is targeted for customizations for sharing unpublished things that lives under
8
+ # an process.
9
+ class ComponentShareTokensController < Decidim::Admin::ShareTokensController
10
+ include Concerns::ParticipatoryProcessAdmin
11
+
12
+ def resource
13
+ @resource ||= current_participatory_space.components.find(params[:component_id])
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ParticipatoryProcesses
5
+ module Admin
6
+ # This controller allows admins to manage moderations in a participatory process.
7
+ class ParticipatoryProcessShareTokensController < Decidim::Admin::ShareTokensController
8
+ include Concerns::ParticipatoryProcessAdmin
9
+
10
+ def resource
11
+ current_participatory_process
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -8,13 +8,13 @@ module Decidim
8
8
  class ParticipatoryProcessesController < Decidim::ParticipatoryProcesses::Admin::ApplicationController
9
9
  include Decidim::Admin::ParticipatorySpaceAdminContext
10
10
  include Decidim::ParticipatoryProcesses::Admin::Filterable
11
+ include Decidim::Admin::HasTrashableResources
11
12
 
12
13
  add_breadcrumb_item_from_menu :admin_participatory_process_menu, only: :show
13
14
 
14
15
  participatory_space_admin_layout only: [:edit]
15
16
 
16
17
  helper ProcessGroupsForSelectHelper
17
- helper Decidim::ParticipatoryProcesses::Admin::ParticipatoryProcessHelper
18
18
 
19
19
  helper_method :current_participatory_process, :current_participatory_space, :process_group
20
20
 
@@ -79,6 +79,18 @@ module Decidim
79
79
 
80
80
  private
81
81
 
82
+ def trashable_deleted_resource_type
83
+ :participatory_process
84
+ end
85
+
86
+ def trashable_deleted_resource
87
+ @trashable_deleted_resource ||= current_participatory_process
88
+ end
89
+
90
+ def trashable_deleted_collection
91
+ @trashable_deleted_collection = filtered_collection.only_deleted.deleted_at_desc
92
+ end
93
+
82
94
  def process_group
83
95
  @process_group ||= ParticipatoryProcessGroup.find_by(id: ransack_params[:decidim_participatory_process_group_id_eq], organization: current_organization)
84
96
  end
@@ -88,8 +100,8 @@ module Decidim
88
100
  end
89
101
 
90
102
  def current_participatory_process
91
- @current_participatory_process ||= collection.where(slug: params[:slug]).or(
92
- collection.where(id: params[:slug])
103
+ @current_participatory_process ||= collection.with_deleted.where(slug: params[:slug]).or(
104
+ collection.with_deleted.where(id: params[:slug])
93
105
  ).first
94
106
  end
95
107
 
@@ -38,14 +38,12 @@ module Decidim
38
38
  private
39
39
 
40
40
  def search_collection
41
- published_processes.query
41
+ ParticipatoryProcess.where(organization: current_organization).published.visible_for(current_user)
42
42
  end
43
43
 
44
44
  def default_filter_params
45
45
  {
46
- with_any_scope: nil,
47
- with_any_area: nil,
48
- with_any_type: nil,
46
+ with_any_taxonomies: nil,
49
47
  with_date: default_date_filter
50
48
  }
51
49
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ParticipatoryProcesses
5
+ class ParticipatorySpacePrivateUsersController < Decidim::ParticipatoryProcesses::ApplicationController
6
+ include ParticipatorySpaceContext
7
+ include Decidim::HasMembersPage
8
+
9
+ def index
10
+ raise ActionController::RoutingError, "No members for this participatory process" if members.none?
11
+
12
+ enforce_permission_to :list, :members
13
+ redirect_to decidim_participatory_processes.participatory_process_path(current_participatory_space) unless can_visit_index?
14
+ end
15
+
16
+ private
17
+
18
+ def current_participatory_space
19
+ return unless params[:participatory_process_slug]
20
+
21
+ @current_participatory_space ||= OrganizationParticipatoryProcesses.new(current_organization).query.where(slug: params[:participatory_process_slug]).or(
22
+ OrganizationParticipatoryProcesses.new(current_organization).query.where(id: params[:participatory_process_slug])
23
+ ).first!
24
+ end
25
+ end
26
+ end
27
+ end
@@ -15,9 +15,7 @@ module Decidim
15
15
 
16
16
  attribute :slug, String
17
17
  attribute :copy_steps, Boolean
18
- attribute :copy_categories, Boolean
19
18
  attribute :copy_components, Boolean
20
- attribute :copy_landing_page_blocks, Boolean
21
19
 
22
20
  validates :slug, presence: true, format: { with: Decidim::ParticipatoryProcess.slug_format }
23
21
  validates :title, translatable_presence: true
@@ -9,6 +9,7 @@ module Decidim
9
9
  class ParticipatoryProcessForm < Form
10
10
  include TranslatableAttributes
11
11
  include Decidim::HasUploadValidations
12
+ include Decidim::HasTaxonomyFormAttributes
12
13
 
13
14
  mimic :participatory_process
14
15
 
@@ -27,17 +28,12 @@ module Decidim
27
28
  attribute :hashtag, String
28
29
  attribute :slug, String
29
30
 
30
- attribute :area_id, Integer
31
31
  attribute :participatory_process_group_id, Integer
32
- attribute :scope_id, Integer
33
32
  attribute :related_process_ids, Array[Integer]
34
- attribute :scope_type_max_depth_id, Integer
35
33
  attribute :weight, Integer, default: 0
36
34
 
37
35
  attribute :private_space, Boolean
38
36
  attribute :promoted, Boolean
39
- attribute :scopes_enabled, Boolean
40
- attribute :participatory_process_type_id, Integer
41
37
 
42
38
  attribute :end_date, Decidim::Attributes::LocalizedDate
43
39
  attribute :start_date, Decidim::Attributes::LocalizedDate
@@ -45,8 +41,6 @@ module Decidim
45
41
  attribute :hero_image
46
42
  attribute :remove_hero_image, Boolean, default: false
47
43
 
48
- validates :area, presence: true, if: proc { |object| object.area_id.present? }
49
- validates :scope, presence: true, if: proc { |object| object.scope_id.present? }
50
44
  validates :slug, presence: true, format: { with: Decidim::ParticipatoryProcess.slug_format }
51
45
 
52
46
  validate :slug_uniqueness
@@ -60,49 +54,25 @@ module Decidim
60
54
  alias organization current_organization
61
55
 
62
56
  def map_model(model)
63
- self.scope_id = model.decidim_scope_id
64
57
  self.participatory_process_group_id = model.decidim_participatory_process_group_id
65
- self.participatory_process_type_id = model.decidim_participatory_process_type_id
66
58
  self.related_process_ids = model.linked_participatory_space_resources(:participatory_process, "related_processes").pluck(:id)
67
59
  @processes = Decidim::ParticipatoryProcess.where(organization: model.organization).where.not(id: model.id)
68
60
  end
69
61
 
70
- def scope
71
- @scope ||= current_organization.scopes.find_by(id: scope_id)
72
- end
73
-
74
- def scope_type_max_depth
75
- @scope_type_max_depth ||= current_organization.scope_types.find_by(id: scope_type_max_depth_id)
76
- end
77
-
78
- def area
79
- @area ||= current_organization.areas.find_by(id: area_id)
62
+ def participatory_space_manifest
63
+ :participatory_processes
80
64
  end
81
65
 
82
66
  def participatory_process_group
83
67
  Decidim::ParticipatoryProcessGroup.find_by(id: participatory_process_group_id)
84
68
  end
85
69
 
86
- def participatory_process_type
87
- Decidim::ParticipatoryProcessType.find_by(id: participatory_process_type_id)
88
- end
89
-
90
70
  def processes
91
71
  @processes ||= Decidim::ParticipatoryProcess.where(organization: current_organization)
92
72
  end
93
73
 
94
- def participatory_process_types_for_select
95
- @participatory_process_types_for_select ||= participatory_process_types.map do |type|
96
- [translated_attribute(type.title), type.id]
97
- end
98
- end
99
-
100
74
  private
101
75
 
102
- def participatory_process_types
103
- Decidim::ParticipatoryProcessType.where(organization: current_organization)
104
- end
105
-
106
76
  def organization_participatory_processes
107
77
  OrganizationParticipatoryProcesses.new(current_organization).query
108
78
  end
@@ -26,7 +26,6 @@ module Decidim
26
26
 
27
27
  attribute :slug, String
28
28
  attribute :import_steps, Boolean, default: true
29
- attribute :import_categories, Boolean, default: true
30
29
  attribute :import_attachments, Boolean, default: true
31
30
  attribute :import_components, Boolean, default: true
32
31
  attribute :document, Decidim::Attributes::Blob
@@ -59,37 +59,45 @@ module Decidim
59
59
 
60
60
  # Items to display in the navigation of a process
61
61
  def process_nav_items(participatory_space)
62
- components = participatory_space.components.published.or(Decidim::Component.where(id: try(:current_component)))
62
+ components = participatory_space
63
+ .components
64
+ .published.or(Decidim::Component.where(id: try(:current_component)))
65
+ .where(visible: true)
63
66
 
64
- components.map do |component|
67
+ [
68
+ *(if participatory_space.members_public_page?
69
+ [{
70
+ name: t("member_menu_item", scope: "layouts.decidim.participatory_process_navigation"),
71
+ url: decidim_participatory_processes.participatory_process_participatory_space_private_users_path(participatory_space),
72
+ active: is_active_link?(decidim_participatory_processes.participatory_process_participatory_space_private_users_path(participatory_space), :inclusive)
73
+ }]
74
+ end
75
+ )
76
+ ] + components.map do |component|
65
77
  {
78
+ id: component.id,
66
79
  name: decidim_escape_translated(component.name),
67
80
  url: main_component_path(component),
68
81
  active: is_active_link?(main_component_path(component), :inclusive)
69
82
  }
70
- end
83
+ end.compact
71
84
  end
72
85
 
73
86
  def filter_sections
74
- [
75
- { method: :with_date, collection: filter_dates_values, label_scope: "decidim.participatory_processes.participatory_processes.filters", id: "date" },
76
- { method: :with_any_scope, collection: filter_global_scopes_values, label_scope: "decidim.shared.participatory_space_filters.filters", id: "scope" },
77
- { method: :with_any_area, collection: filter_areas_values, label_scope: "decidim.shared.participatory_space_filters.filters", id: "area" },
78
- { method: :with_any_type, collection: filter_types_values, label_scope: "decidim.participatory_processes.participatory_processes.filters", id: "type" }
79
- ].reject { |item| item[:collection].blank? }
80
- end
81
-
82
- def process_types
83
- @process_types ||= Decidim::ParticipatoryProcessType.joins(:processes).distinct
87
+ items = [
88
+ { method: :with_date, collection: filter_dates_values, label: t("decidim.participatory_processes.participatory_processes.filters.date"), id: "date" }
89
+ ]
90
+ available_taxonomy_filters.find_each do |taxonomy_filter|
91
+ items.append(method: "with_any_taxonomies[#{taxonomy_filter.root_taxonomy_id}]",
92
+ collection: filter_taxonomy_values_for(taxonomy_filter),
93
+ label: decidim_sanitize_translated(taxonomy_filter.name),
94
+ id: "taxonomy")
95
+ end
96
+ items.reject { |item| item[:collection].blank? }
84
97
  end
85
98
 
86
- def filter_types_values
87
- return if process_types.blank?
88
-
89
- type_values = process_types.map { |type| [type.id.to_s, translated_attribute(type.title)] }
90
- type_values.prepend(["", t("decidim.participatory_processes.participatory_processes.filters.names.all")])
91
-
92
- filter_tree_from_array(type_values)
99
+ def available_taxonomy_filters
100
+ Decidim::TaxonomyFilter.for(current_organization).for_manifest(:participatory_processes)
93
101
  end
94
102
 
95
103
  def filter_dates_values
@@ -16,7 +16,7 @@ module Decidim
16
16
  active_step = process.steps.find_by(active: true)
17
17
  if steps.empty? && active_step
18
18
  next_position = active_step.position + 1
19
- next_step = process.steps.where("start_date <= ?", Time.zone.now.to_date).find_by(position: next_position)
19
+ next_step = process.steps.where(start_date: ..Time.zone.now.to_date).find_by(position: next_position)
20
20
  if next_step.present?
21
21
  active_step.update(active: false)
22
22
  next_step.update(active: true)