decidim-participatory_processes 0.26.2 → 0.27.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -4
  3. data/app/cells/decidim/participatory_process_groups/content_blocks/highlighted_participatory_processes/filters.erb +3 -3
  4. data/app/cells/decidim/participatory_process_groups/content_blocks/highlighted_participatory_processes/show.erb +1 -0
  5. data/app/cells/decidim/participatory_process_groups/content_blocks/highlighted_participatory_processes_cell.rb +6 -11
  6. data/app/cells/decidim/participatory_process_groups/process_filters_cell.rb +15 -18
  7. data/app/cells/decidim/participatory_processes/content_blocks/highlighted_processes/show.erb +1 -1
  8. data/app/cells/decidim/participatory_processes/content_blocks/highlighted_processes/single_process.erb +1 -1
  9. data/app/cells/decidim/participatory_processes/content_blocks/highlighted_processes_cell.rb +1 -1
  10. data/app/cells/decidim/participatory_processes/filtered_participatory_processes_cell.rb +11 -7
  11. data/app/cells/decidim/participatory_processes/process_filters/show.erb +13 -9
  12. data/app/cells/decidim/participatory_processes/process_filters/type_filter.erb +17 -0
  13. data/app/cells/decidim/participatory_processes/process_filters_cell.rb +50 -16
  14. data/app/cells/decidim/participatory_processes/process_group_s/image.erb +1 -1
  15. data/app/cells/decidim/participatory_processes/process_s/image.erb +1 -1
  16. data/app/commands/decidim/participatory_processes/admin/activate_participatory_process_step.rb +1 -1
  17. data/app/commands/decidim/participatory_processes/admin/copy_participatory_process.rb +11 -8
  18. data/app/commands/decidim/participatory_processes/admin/create_participatory_process.rb +2 -1
  19. data/app/commands/decidim/participatory_processes/admin/create_participatory_process_group.rb +1 -1
  20. data/app/commands/decidim/participatory_processes/admin/create_participatory_process_step.rb +1 -1
  21. data/app/commands/decidim/participatory_processes/admin/create_participatory_process_type.rb +47 -0
  22. data/app/commands/decidim/participatory_processes/admin/destroy_participatory_process_admin.rb +1 -1
  23. data/app/commands/decidim/participatory_processes/admin/destroy_participatory_process_group.rb +1 -1
  24. data/app/commands/decidim/participatory_processes/admin/destroy_participatory_process_step.rb +1 -1
  25. data/app/commands/decidim/participatory_processes/admin/destroy_participatory_process_type.rb +49 -0
  26. data/app/commands/decidim/participatory_processes/admin/import_participatory_process.rb +9 -6
  27. data/app/commands/decidim/participatory_processes/admin/notify_role_assigned_to_participatory_process.rb +1 -1
  28. data/app/commands/decidim/participatory_processes/admin/publish_participatory_process.rb +1 -1
  29. data/app/commands/decidim/participatory_processes/admin/reorder_participatory_process_steps.rb +1 -1
  30. data/app/commands/decidim/participatory_processes/admin/unpublish_participatory_process.rb +1 -1
  31. data/app/commands/decidim/participatory_processes/admin/update_participatory_process.rb +2 -1
  32. data/app/commands/decidim/participatory_processes/admin/update_participatory_process_group.rb +1 -1
  33. data/app/commands/decidim/participatory_processes/admin/update_participatory_process_step.rb +1 -1
  34. data/app/commands/decidim/participatory_processes/admin/update_participatory_process_type.rb +49 -0
  35. data/app/controllers/decidim/participatory_processes/admin/participatory_process_copies_controller.rb +1 -1
  36. data/app/controllers/decidim/participatory_processes/admin/participatory_process_types_controller.rb +98 -0
  37. data/app/controllers/decidim/participatory_processes/admin/reminders_controller.rb +14 -0
  38. data/app/controllers/decidim/participatory_processes/participatory_processes_controller.rb +8 -7
  39. data/app/events/decidim/participatory_process_role_assigned_event.rb +1 -1
  40. data/app/forms/decidim/participatory_processes/admin/participatory_process_form.rb +16 -0
  41. data/app/forms/decidim/participatory_processes/admin/participatory_process_import_form.rb +5 -7
  42. data/app/forms/decidim/participatory_processes/admin/participatory_process_type_form.rb +20 -0
  43. data/app/models/decidim/participatory_process.rb +35 -6
  44. data/app/models/decidim/participatory_process_type.rb +27 -0
  45. data/app/permissions/decidim/participatory_processes/permissions.rb +14 -0
  46. data/app/presenters/decidim/log/value_types/participatory_process_type_presenter.rb +27 -0
  47. data/app/presenters/decidim/participatory_processes/admin_log/participatory_process_presenter.rb +3 -2
  48. data/app/presenters/decidim/participatory_processes/admin_log/participatory_process_type_presenter.rb +38 -0
  49. data/app/presenters/decidim/participatory_processes/participatory_process_group_stats_presenter.rb +4 -1
  50. data/app/presenters/decidim/participatory_processes/participatory_process_metric_charts_presenter.rb +5 -1
  51. data/app/presenters/decidim/participatory_processes/participatory_process_stats_presenter.rb +4 -1
  52. data/app/queries/decidim/participatory_processes/admin/admin_users.rb +1 -1
  53. data/app/queries/decidim/participatory_processes/admin/moderators.rb +1 -1
  54. data/app/queries/decidim/participatory_processes/filtered_participatory_process_groups.rb +1 -1
  55. data/app/queries/decidim/participatory_processes/filtered_participatory_processes.rb +1 -1
  56. data/app/queries/decidim/participatory_processes/group_participatory_processes.rb +1 -1
  57. data/app/queries/decidim/participatory_processes/group_published_participatory_processes.rb +2 -2
  58. data/app/queries/decidim/participatory_processes/highlighted_participatory_processes.rb +1 -1
  59. data/app/queries/decidim/participatory_processes/organization_participatory_process_groups.rb +1 -1
  60. data/app/queries/decidim/participatory_processes/organization_participatory_processes.rb +1 -1
  61. data/app/queries/decidim/participatory_processes/organization_prioritized_participatory_process_groups.rb +2 -2
  62. data/app/queries/decidim/participatory_processes/organization_prioritized_participatory_processes.rb +2 -2
  63. data/app/queries/decidim/participatory_processes/organization_promoted_participatory_process_groups.rb +1 -1
  64. data/app/queries/decidim/participatory_processes/organization_published_participatory_processes.rb +2 -2
  65. data/app/queries/decidim/participatory_processes/participatory_processes_by_group.rb +1 -1
  66. data/app/queries/decidim/participatory_processes/prioritized_participatory_processes.rb +1 -1
  67. data/app/queries/decidim/participatory_processes/promoted_participatory_process_groups.rb +1 -1
  68. data/app/queries/decidim/participatory_processes/promoted_participatory_processes.rb +1 -1
  69. data/app/queries/decidim/participatory_processes/published_participatory_processes.rb +1 -1
  70. data/app/queries/decidim/participatory_processes/stats_followers_count.rb +2 -2
  71. data/app/queries/decidim/participatory_processes/stats_participants_count.rb +2 -2
  72. data/app/queries/decidim/participatory_processes/visible_participatory_process_groups.rb +1 -1
  73. data/app/queries/decidim/participatory_processes/visible_participatory_processes.rb +1 -1
  74. data/app/serializers/decidim/participatory_processes/participatory_process_importer.rb +4 -3
  75. data/app/views/decidim/participatory_processes/admin/participatory_process_types/_form.html.erb +11 -0
  76. data/app/views/decidim/participatory_processes/admin/participatory_process_types/edit.html.erb +9 -0
  77. data/app/views/decidim/participatory_processes/admin/participatory_process_types/index.html.erb +60 -0
  78. data/app/views/decidim/participatory_processes/admin/participatory_process_types/new.html.erb +9 -0
  79. data/app/views/decidim/participatory_processes/admin/participatory_processes/_form.html.erb +10 -0
  80. data/app/views/decidim/participatory_processes/participatory_process_groups/show.html.erb +3 -1
  81. data/app/views/decidim/participatory_processes/participatory_process_groups/show.js.erb +9 -6
  82. data/app/views/decidim/participatory_processes/participatory_processes/_promoted_process.html.erb +1 -1
  83. data/app/views/decidim/participatory_processes/participatory_processes/_promoted_process_group.html.erb +1 -1
  84. data/app/views/decidim/participatory_processes/participatory_processes/index.html.erb +3 -1
  85. data/app/views/decidim/participatory_processes/participatory_processes/index.js.erb +3 -1
  86. data/app/views/layouts/decidim/_process_header.html.erb +1 -1
  87. data/app/views/layouts/decidim/admin/participatory_process_type.html.erb +15 -0
  88. data/config/locales/ar.yml +1 -0
  89. data/config/locales/bg.yml +1 -0
  90. data/config/locales/ca.yml +43 -1
  91. data/config/locales/cs.yml +49 -7
  92. data/config/locales/de.yml +38 -1
  93. data/config/locales/el.yml +1 -6
  94. data/config/locales/en.yml +42 -1
  95. data/config/locales/es-MX.yml +43 -1
  96. data/config/locales/es-PY.yml +43 -1
  97. data/config/locales/es.yml +43 -1
  98. data/config/locales/eu.yml +1 -6
  99. data/config/locales/fi-plain.yml +43 -1
  100. data/config/locales/fi.yml +43 -1
  101. data/config/locales/fr-CA.yml +43 -1
  102. data/config/locales/fr.yml +44 -2
  103. data/config/locales/ga-IE.yml +1 -0
  104. data/config/locales/gl.yml +1 -6
  105. data/config/locales/hu.yml +116 -1
  106. data/config/locales/id-ID.yml +1 -0
  107. data/config/locales/is-IS.yml +2 -1
  108. data/config/locales/it.yml +1 -6
  109. data/config/locales/ja.yml +43 -1
  110. data/config/locales/lb.yml +1 -6
  111. data/config/locales/lt.yml +546 -0
  112. data/config/locales/lv.yml +1 -6
  113. data/config/locales/nl.yml +1 -6
  114. data/config/locales/no.yml +17 -6
  115. data/config/locales/pl.yml +7 -6
  116. data/config/locales/pt-BR.yml +1 -6
  117. data/config/locales/pt.yml +1 -6
  118. data/config/locales/ro-RO.yml +1 -6
  119. data/config/locales/ru.yml +1 -0
  120. data/config/locales/sk.yml +1 -6
  121. data/config/locales/sl.yml +1 -0
  122. data/config/locales/sr-CS.yml +1 -0
  123. data/config/locales/sv.yml +15 -6
  124. data/config/locales/tr-TR.yml +1 -6
  125. data/config/locales/uk.yml +1 -0
  126. data/config/locales/zh-CN.yml +1 -6
  127. data/db/migrate/20211125202008_create_decidim_participatory_process_types.rb +22 -0
  128. data/lib/decidim/api/participatory_process_type_type.rb +17 -0
  129. data/lib/decidim/participatory_processes/admin_engine.rb +12 -1
  130. data/lib/decidim/participatory_processes/api.rb +1 -0
  131. data/lib/decidim/participatory_processes/participatory_space.rb +17 -8
  132. data/lib/decidim/participatory_processes/query_extensions.rb +22 -0
  133. data/lib/decidim/participatory_processes/test/factories.rb +17 -0
  134. data/lib/decidim/participatory_processes/version.rb +1 -1
  135. metadata +31 -15
  136. data/app/services/decidim/participatory_processes/participatory_process_search.rb +0 -27
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ecf0de779cae260d26ae80421334dbcf80607db69a3110089329ca80200c43de
4
- data.tar.gz: 0b426b362c8e20fcab2f0488635fe2b9c15532b3d4b38d1648bbe093807b74fb
3
+ metadata.gz: 51f4676696876612d94725645014c81391de134950e722c6a3e36a422f1e8503
4
+ data.tar.gz: ff3f5646e194f975f87b8665a23ea38cad29adaaba9df4db0badcfc2a2d0d656
5
5
  SHA512:
6
- metadata.gz: 5df071fd00f0ad61e415d3b467a54b7de0002c2440e99e6d206a0da428901d204b1b50b87bf4e2db0cc9e4988b3c86c3e48cce6f922caa058b34e3d8c3518c29
7
- data.tar.gz: a7ae4bb0af3b24a336b95d181b1764c3ea3b618efe03753dd05d1bff489ea22782409c262ad80427ea73a9f8b2f4c499bce054a36f494ba985405c0ee9d03b54
6
+ metadata.gz: 396508f01b683362af92ea578085b0d0e77bf4bfda3741c9ec49edfbe024fd65d3fc0551ea7d5f9d4c425a63f416ef18ac8e6e3e94c66d746054988dfe93fa29
7
+ data.tar.gz: 34ca459acc5edfcb19d4883c6571a3c73dc347df5415e94fc6f5b5cd0df6681b8d64b32acfad966a0d01bedc6a05f7406e430f5521af374651b6845e584c0b3b
data/README.md CHANGED
@@ -33,10 +33,6 @@ This is on the default Decidim installation so you shouldn't change anything to
33
33
 
34
34
  ![Admin View](docs/screenshot02.png)
35
35
 
36
- ## Documentation
37
-
38
- Read more about this Space on [Admin Manual](https://docs.decidim.org/admin-manual/en/processess/).
39
-
40
36
  ## Contributing
41
37
 
42
38
  See [Decidim](https://github.com/decidim/decidim).
@@ -3,7 +3,7 @@
3
3
  <%= cell(
4
4
  "decidim/scopes_picker",
5
5
  form,
6
- attribute: :scope_id,
6
+ attribute: :with_scope,
7
7
  multiple: true,
8
8
  legend_title: I18n.t("decidim.scopes.scopes"),
9
9
  label: false,
@@ -11,11 +11,11 @@
11
11
  ) %>
12
12
  </div>
13
13
  <div class="columns mediumlarge-6 large-5">
14
- <%= form.areas_select :area_id,
14
+ <%= form.areas_select :with_area,
15
15
  areas_for_select(current_organization),
16
16
  legend_title: t("decidim.shared.participatory_space_filters.filters.areas"),
17
17
  label: "",
18
- selected: filter.area_id,
18
+ selected: filter.with_area,
19
19
  include_blank: t("decidim.shared.participatory_space_filters.filters.select_an_area") %>
20
20
  </div>
21
21
  <% end %>
@@ -1,6 +1,7 @@
1
1
  <section class="section" id="<%= block_id %>">
2
2
  <%= render :title_filter_order %>
3
3
  <%= render :participatory_space_filters %>
4
+ <p class="loading"><%= t("loading", scope: "decidim.participatory_processes.participatory_processes.index") %></p>
4
5
  <div class="row small-up-1 medium-up-2 large-up-3 card-grid">
5
6
  <%= cell "decidim/participatory_processes/filtered_participatory_processes", filtered_relation, default_filter: default_date_filter %>
6
7
  </div>
@@ -23,7 +23,7 @@ module Decidim
23
23
  end
24
24
 
25
25
  def filtered_relation
26
- @filtered_relation ||= search.results
26
+ @filtered_relation ||= search.result
27
27
  end
28
28
 
29
29
  def default_date_filter
@@ -36,20 +36,15 @@ module Decidim
36
36
 
37
37
  private
38
38
 
39
- def search_klass
40
- Decidim::ParticipatoryProcesses::ParticipatoryProcessSearch
39
+ def search_collection
40
+ base_relation
41
41
  end
42
42
 
43
43
  def default_filter_params
44
44
  {
45
- scope_id: nil,
46
- area_id: nil
47
- }
48
- end
49
-
50
- def default_search_params
51
- {
52
- base_relation: base_relation
45
+ with_scope: nil,
46
+ with_area: nil,
47
+ with_type: nil
53
48
  }
54
49
  end
55
50
 
@@ -25,22 +25,15 @@ module Decidim
25
25
  # date_filter: "active"
26
26
  # )
27
27
  class ProcessFiltersCell < Decidim::ParticipatoryProcesses::ProcessFiltersCell
28
- def filter_link(filter)
28
+ def filter_link(date_filter, type_filter = nil)
29
29
  Decidim::ParticipatoryProcesses::Engine
30
30
  .routes
31
31
  .url_helpers
32
- .participatory_process_group_path(
33
- model,
34
- filter: {
35
- scope_id: get_filter(:scope_id),
36
- area_id: get_filter(:area_id),
37
- date: filter
38
- }
39
- )
32
+ .participatory_process_group_path(model, **filter_params(date_filter, type_filter))
40
33
  end
41
34
 
42
35
  def current_filter
43
- get_filter(:date, default_date_filter)
36
+ get_filter(:with_date, default_date_filter)
44
37
  end
45
38
 
46
39
  def base_relation
@@ -53,21 +46,25 @@ module Decidim
53
46
  def process_count_by_filter
54
47
  @process_count_by_filter ||= begin
55
48
  counts = ALL_FILTERS.without("all").each_with_object({}) do |filter_name, collection_by_filter|
56
- collection_by_filter.update(filter_name => filtered_processes(filter_name).results.count)
49
+ collection_by_filter.update(filter_name => filtered_processes(filter_name).count)
57
50
  end
58
51
  counts.update("all" => counts.values.sum)
59
52
  end
60
53
  end
61
54
 
62
- def filtered_processes(date_filter)
63
- Decidim::ParticipatoryProcesses::ParticipatoryProcessSearch.new(
64
- base_relation: base_relation,
65
- date: date_filter,
66
- scope_id: get_filter(:scope_id),
67
- area_id: get_filter(:area_id),
55
+ def filtered_processes(date_filter, filter_with_type: true)
56
+ query = base_relation.ransack(
57
+ {
58
+ with_date: date_filter,
59
+ with_scope: get_filter(:with_scope),
60
+ with_area: get_filter(:with_area),
61
+ with_type: filter_with_type ? get_filter(:with_type) : nil
62
+ },
68
63
  current_user: current_user,
69
64
  organization: current_organization
70
- )
65
+ ).result
66
+
67
+ query.published.visible_for(current_user)
71
68
  end
72
69
 
73
70
  def default_date_filter
@@ -1,4 +1,4 @@
1
- <section class="wrapper-home home-section">
1
+ <section id="highlighted_processes" class="wrapper-home home-section">
2
2
  <div class="row" id="highlighted-processes">
3
3
  <h3 class="section-heading"><%= t("active_processes", scope: i18n_scope) %></h3>
4
4
  <div class="row collapse">
@@ -22,7 +22,7 @@
22
22
  </div>
23
23
  </div>
24
24
  <div class="column large-6 card--process__column">
25
- <div class="card--full__image" style="background-image:url(<%= process.attached_uploader(:hero_image).path %>)">
25
+ <div class="card--full__image" style="background-image:url('<%= process.attached_uploader(:hero_image).path %>')">
26
26
  <div class="card__content row collapse">
27
27
  <div class="large-6 large-offset-6 columns">
28
28
  <%= link_to decidim_participatory_processes.participatory_process_path(process), class: "button expanded button--sc" do %>
@@ -51,7 +51,7 @@ module Decidim
51
51
  OrganizationPublishedParticipatoryProcesses.new(current_organization, current_user) |
52
52
  HighlightedParticipatoryProcesses.new |
53
53
  FilteredParticipatoryProcesses.new("active")
54
- ).query.includes([:organization]).limit(highlighted_processes_max_results)
54
+ ).query.with_attached_hero_image.includes([:organization, :hero_image_attachment]).limit(highlighted_processes_max_results)
55
55
  end
56
56
  end
57
57
 
@@ -17,26 +17,30 @@ module Decidim
17
17
  # cell(
18
18
  # "decidim/participatory_processes/filtered_participatory_processes",
19
19
  # group.participatory_processes.published,
20
- # date_filter: "active"
20
+ # default_filter: "active"
21
21
  # )
22
22
  class FilteredParticipatoryProcessesCell < Decidim::ViewModel
23
23
  include Decidim::FilterResource
24
24
  include Decidim::CardHelper
25
25
 
26
26
  def elements
27
- @elements ||= search.results
27
+ @elements ||= search.result
28
28
  end
29
29
 
30
30
  private
31
31
 
32
- def search_klass
33
- Decidim::ParticipatoryProcesses::ParticipatoryProcessSearch
32
+ def search_collection
33
+ base_relation.published.visible_for(current_user).includes(:area)
34
34
  end
35
35
 
36
- def default_search_params
36
+ def base_relation
37
+ model
38
+ end
39
+
40
+ def default_filter_params
37
41
  {
38
- base_relation: model,
39
- date: default_date_filter
42
+ with_date: default_date_filter,
43
+ with_type: nil
40
44
  }
41
45
  end
42
46
 
@@ -1,13 +1,17 @@
1
- <div class="row collapse order-by">
2
- <h3 class="order-by__text section-heading">
3
- <%= title %>
4
- <%= render :filter_tabs %>
5
- </h3>
6
- </div>
7
- <% if process_count_by_filter["active"] == 0 && process_count_by_filter["upcoming"] == 0 %>
8
1
  <div class="row column">
9
- <div class="callout warning mb-sm">
10
- <p><%= t("decidim.participatory_processes.participatory_processes.filters.explanations.no_active_nor_upcoming_callout") %></p>
2
+ <div class="flex--sbe">
3
+ <h3 class="section-heading collapse">
4
+ <%= title %>
5
+ <%= render :filter_tabs %>
6
+ </h3>
7
+ <%= render :type_filter if participatory_process_types_for_select.present? %>
11
8
  </div>
9
+ <hr class="reset mt-s mb-s">
12
10
  </div>
11
+ <% if process_count_by_filter["active"] == 0 && process_count_by_filter["upcoming"] == 0 %>
12
+ <div class="row column">
13
+ <div class="callout warning mb-sm">
14
+ <p><%= t("decidim.participatory_processes.participatory_processes.filters.explanations.no_active_nor_upcoming_callout") %></p>
15
+ </div>
16
+ </div>
13
17
  <% end %>
@@ -0,0 +1,17 @@
1
+ <div id="process-type-filter" class="inline-filters">
2
+ <div id="inline-filter-sort" class="dropdown-pane" data-position="bottom" data-alignment="right" data-dropdown data-auto-focus="true">
3
+ <ul class="list-reset">
4
+ <% participatory_process_types_for_select.each do |title, id| %>
5
+ <li>
6
+ <%= link_to filter_link(current_filter, id), remote: true do %>
7
+ <%= title %>
8
+ <% end %>
9
+ </li>
10
+ <% end %>
11
+ </ul>
12
+ </div>
13
+ <label>
14
+ <span><%= filter_type_label %></span>
15
+ <button id="button-text" data-toggle="inline-filter-sort"><%= current_type_filter_name %></button>
16
+ </label>
17
+ </div>
@@ -5,42 +5,57 @@ module Decidim
5
5
  class ProcessFiltersCell < Decidim::ViewModel
6
6
  ALL_FILTERS = %w(active upcoming past all).freeze
7
7
 
8
- def filter_link(filter)
8
+ def filter_link(date_filter, type_filter = nil)
9
9
  Decidim::ParticipatoryProcesses::Engine
10
10
  .routes
11
11
  .url_helpers
12
- .participatory_processes_path(
13
- filter: {
14
- scope_id: get_filter(:scope_id),
15
- area_id: get_filter(:area_id),
16
- date: filter
17
- }
18
- )
12
+ .participatory_processes_path(**filter_params(date_filter, type_filter))
19
13
  end
20
14
 
21
15
  def current_filter
22
- get_filter(:date, model[:default_filter])
16
+ get_filter(:with_date, model[:default_filter])
17
+ end
18
+
19
+ def current_type_filter_name
20
+ participatory_process_types_for_select.find { |_, id| id == get_filter(:with_type) }&.first ||
21
+ I18n.t("all_types", scope: "decidim.participatory_processes.participatory_processes.filters")
23
22
  end
24
23
 
25
24
  def get_filter(filter_name, default = nil)
26
25
  params&.dig(:filter, filter_name) || default
27
26
  end
28
27
 
29
- def filtered_processes(date_filter)
30
- ParticipatoryProcessSearch.new(
31
- date: date_filter,
32
- scope_id: get_filter(:scope_id),
33
- area_id: get_filter(:area_id),
28
+ def filter_params(date_filter, type_filter)
29
+ {
30
+ filter: {
31
+ with_date: date_filter,
32
+ with_scope: get_filter(:with_scope),
33
+ with_area: get_filter(:with_area),
34
+ with_type: type_filter || get_filter(:with_type)
35
+ }
36
+ }
37
+ end
38
+
39
+ def filtered_processes(date_filter, filter_with_type: true)
40
+ query = ParticipatoryProcess.ransack(
41
+ {
42
+ with_date: date_filter,
43
+ with_scope: get_filter(:with_scope),
44
+ with_area: get_filter(:with_area),
45
+ with_type: filter_with_type ? get_filter(:with_type) : nil
46
+ },
34
47
  current_user: current_user,
35
48
  organization: current_organization
36
- )
49
+ ).result
50
+
51
+ query.published.visible_for(current_user)
37
52
  end
38
53
 
39
54
  def process_count_by_filter
40
55
  return @process_count_by_filter if @process_count_by_filter
41
56
 
42
57
  @process_count_by_filter = %w(active upcoming past).inject({}) do |collection_by_filter, filter_name|
43
- filtered_processes = filtered_processes(filter_name).results
58
+ filtered_processes = filtered_processes(filter_name)
44
59
  processes = filtered_processes.groupless
45
60
  groups = Decidim::ParticipatoryProcessGroup.where(id: filtered_processes.grouped.group_ids)
46
61
  collection_by_filter.merge(filter_name => processes.count + groups.count)
@@ -67,6 +82,10 @@ module Decidim
67
82
  I18n.t(current_filter, scope: "decidim.participatory_processes.participatory_processes.filters.counters", count: process_count_by_filter[current_filter])
68
83
  end
69
84
 
85
+ def filter_type_label
86
+ I18n.t("filter_by", scope: "decidim.participatory_processes.participatory_processes.filters")
87
+ end
88
+
70
89
  def filter_name(filter)
71
90
  I18n.t(filter, scope: "decidim.participatory_processes.participatory_processes.filters.names")
72
91
  end
@@ -86,6 +105,21 @@ module Decidim
86
105
 
87
106
  "no_active_nor_upcoming"
88
107
  end
108
+
109
+ def participatory_process_types
110
+ @participatory_process_types ||= Decidim::ParticipatoryProcessType.joins(:processes).where(
111
+ decidim_participatory_processes: { id: filtered_processes(current_filter, filter_with_type: false) }
112
+ ).distinct
113
+ end
114
+
115
+ def participatory_process_types_for_select
116
+ return if participatory_process_types.blank?
117
+
118
+ [[I18n.t("all_types", scope: "decidim.participatory_processes.participatory_processes.filters"), ""]] +
119
+ participatory_process_types.map do |type|
120
+ [translated_attribute(type.title), type.id.to_s]
121
+ end
122
+ end
89
123
  end
90
124
  end
91
125
  end
@@ -1 +1 @@
1
- <div aria-hidden="true" class="card__image-top" style="background-image:url(<%= resource_image_path %>)"></div>
1
+ <div aria-hidden="true" class="card__image-top" style="background-image:url('<%= resource_image_path %>')"></div>
@@ -1 +1 @@
1
- <div aria-hidden="true" class="card__image-top" style="background-image:url(<%= resource_image_path %>)"></div>
1
+ <div aria-hidden="true" class="card__image-top" style="background-image:url('<%= resource_image_path %>')"></div>
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command that sets a step in a participatory process as active (and
7
7
  # unsets a previous active step)
8
- class ActivateParticipatoryProcessStep < Rectify::Command
8
+ class ActivateParticipatoryProcessStep < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # step - A ParticipatoryProcessStep that will be activated
@@ -5,14 +5,15 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when copying a new participatory
7
7
  # process in the system.
8
- class CopyParticipatoryProcess < Rectify::Command
8
+ class CopyParticipatoryProcess < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # form - A form object with the params.
12
12
  # participatory_process - A participatory_process we want to duplicate
13
- def initialize(form, participatory_process)
13
+ def initialize(form, participatory_process, current_user)
14
14
  @form = form
15
15
  @participatory_process = participatory_process
16
+ @current_user = current_user
16
17
  end
17
18
 
18
19
  # Executes the command. Broadcasts these events:
@@ -24,12 +25,14 @@ module Decidim
24
25
  def call
25
26
  return broadcast(:invalid) if form.invalid?
26
27
 
27
- ParticipatoryProcess.transaction do
28
- copy_participatory_process
29
- copy_participatory_process_attachments
30
- copy_participatory_process_steps if @form.copy_steps?
31
- copy_participatory_process_categories if @form.copy_categories?
32
- copy_participatory_process_components if @form.copy_components?
28
+ Decidim.traceability.perform_action!("duplicate", @participatory_process, @current_user) do
29
+ ParticipatoryProcess.transaction do
30
+ copy_participatory_process
31
+ copy_participatory_process_attachments
32
+ copy_participatory_process_steps if @form.copy_steps?
33
+ copy_participatory_process_categories if @form.copy_categories?
34
+ copy_participatory_process_components if @form.copy_components?
35
+ end
33
36
  end
34
37
 
35
38
  broadcast(:ok, @copied_process)
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when creating a new participatory
7
7
  # process in the system.
8
- class CreateParticipatoryProcess < Rectify::Command
8
+ class CreateParticipatoryProcess < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # form - A form object with the params.
@@ -89,6 +89,7 @@ module Decidim
89
89
  start_date: form.start_date,
90
90
  end_date: form.end_date,
91
91
  participatory_process_group: form.participatory_process_group,
92
+ participatory_process_type: form.participatory_process_type,
92
93
  show_metrics: form.show_metrics,
93
94
  show_statistics: form.show_statistics,
94
95
  announcement: form.announcement
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when creating a new participatory
7
7
  # process group in the system.
8
- class CreateParticipatoryProcessGroup < Rectify::Command
8
+ class CreateParticipatoryProcessGroup < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # form - A form object with the params.
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when creating a new participatory
7
7
  # process in the system.
8
- class CreateParticipatoryProcessStep < Rectify::Command
8
+ class CreateParticipatoryProcessStep < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # form - A form object with the params.
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ParticipatoryProcesses
5
+ module Admin
6
+ # A command with all the business logic when creating a new participatory
7
+ # process type in the system.
8
+ class CreateParticipatoryProcessType < Decidim::Command
9
+ # Public: Initializes the command.
10
+ #
11
+ # form - A form object with the params.
12
+ def initialize(form)
13
+ @form = form
14
+ end
15
+
16
+ # Executes the command. Broadcasts these events:
17
+ #
18
+ # - :ok when everything is valid.
19
+ # - :invalid if the form wasn't valid and we couldn't proceed.
20
+ #
21
+ # Returns nothing.
22
+ def call
23
+ return broadcast(:invalid) if form.invalid?
24
+
25
+ create_participatory_process_type!
26
+
27
+ broadcast(:ok)
28
+ end
29
+
30
+ private
31
+
32
+ attr_reader :form
33
+
34
+ def create_participatory_process_type!
35
+ transaction do
36
+ Decidim.traceability.create!(
37
+ Decidim::ParticipatoryProcessType,
38
+ form.current_user,
39
+ organization: form.current_organization,
40
+ title: form.title
41
+ )
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when destroying a participatory
7
7
  # process admin in the system.
8
- class DestroyParticipatoryProcessAdmin < Rectify::Command
8
+ class DestroyParticipatoryProcessAdmin < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # role - the ParticipatoryProcessUserRole to destroy
@@ -4,7 +4,7 @@ module Decidim
4
4
  module ParticipatoryProcesses
5
5
  module Admin
6
6
  # A command with all the business logic when deleting a ParticipatoryProcessGroup.
7
- class DestroyParticipatoryProcessGroup < Rectify::Command
7
+ class DestroyParticipatoryProcessGroup < Decidim::Command
8
8
  # Public: Initializes the command.
9
9
  #
10
10
  # participatory_process_group - the ParticipatoryProcessGroup to delete.
@@ -4,7 +4,7 @@ module Decidim
4
4
  module ParticipatoryProcesses
5
5
  module Admin
6
6
  # A command that sets all steps in a participatory process as inactive
7
- class DestroyParticipatoryProcessStep < Rectify::Command
7
+ class DestroyParticipatoryProcessStep < Decidim::Command
8
8
  # Public: Initializes the command.
9
9
  #
10
10
  # step - A ParticipatoryProcessStep that will be deactivated
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ParticipatoryProcesses
5
+ module Admin
6
+ # A command with all the business logic when destroying a participatory
7
+ # process type in the system.
8
+ class DestroyParticipatoryProcessType < Decidim::Command
9
+ # Public: Initializes the command.
10
+ #
11
+ # participatory_process_type - A participatory_process_type object to
12
+ # destroy
13
+ # current_user - the user performing the action
14
+ def initialize(participatory_process_type, current_user)
15
+ @participatory_process_type = participatory_process_type
16
+ @current_user = current_user
17
+ end
18
+
19
+ # Executes the command. Broadcasts these events:
20
+ #
21
+ # - :ok when everything is valid.
22
+ # - :invalid if the form wasn't valid and we couldn't proceed.
23
+ #
24
+ # Returns nothing.
25
+ def call
26
+ destroy_participatory_process_type!
27
+
28
+ broadcast(:ok)
29
+ end
30
+
31
+ private
32
+
33
+ attr_reader :current_user
34
+
35
+ def destroy_participatory_process_type!
36
+ transaction do
37
+ Decidim.traceability.perform_action!(
38
+ "delete",
39
+ @participatory_process_type,
40
+ current_user
41
+ ) do
42
+ @participatory_process_type.destroy!
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # A command with all the business logic when copying a new participatory
7
7
  # process in the system.
8
- class ImportParticipatoryProcess < Rectify::Command
8
+ class ImportParticipatoryProcess < Decidim::Command
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # form - A form object with the params.
@@ -38,11 +38,14 @@ module Decidim
38
38
  def import_participatory_process
39
39
  importer = Decidim::ParticipatoryProcesses::ParticipatoryProcessImporter.new(form.current_organization, form.current_user)
40
40
  participatory_processes.each do |original_process|
41
- @imported_process = importer.import(original_process, form.current_user, title: form.title, slug: form.slug)
42
- importer.import_participatory_process_steps(original_process["participatory_process_steps"]) if form.import_steps?
43
- importer.import_categories(original_process["participatory_process_categories"]) if form.import_categories?
44
- importer.import_folders_and_attachments(original_process["attachments"]) if form.import_attachments?
45
- importer.import_components(original_process["components"]) if form.import_components?
41
+ Decidim.traceability.perform_action!("import", Decidim::ParticipatoryProcess, form.current_user) do
42
+ @imported_process = importer.import(original_process, form.current_user, title: form.title, slug: form.slug)
43
+ importer.import_participatory_process_steps(original_process["participatory_process_steps"]) if form.import_steps?
44
+ importer.import_categories(original_process["participatory_process_categories"]) if form.import_categories?
45
+ importer.import_folders_and_attachments(original_process["attachments"]) if form.import_attachments?
46
+ importer.import_components(original_process["components"]) if form.import_components?
47
+ @imported_process
48
+ end
46
49
  end
47
50
  end
48
51
 
@@ -4,7 +4,7 @@ module Decidim
4
4
  module ParticipatoryProcesses
5
5
  module Admin
6
6
  # A command to notify users when a role is assigned for a participatory process
7
- class NotifyRoleAssignedToParticipatoryProcess < Rectify::Command
7
+ class NotifyRoleAssignedToParticipatoryProcess < Decidim::Command
8
8
  def send_notification(user)
9
9
  Decidim::EventsManager.publish(
10
10
  event: "decidim.events.participatory_process.role_assigned",
@@ -4,7 +4,7 @@ module Decidim
4
4
  module ParticipatoryProcesses
5
5
  module Admin
6
6
  # A command that sets a participatory process as published.
7
- class PublishParticipatoryProcess < Rectify::Command
7
+ class PublishParticipatoryProcess < Decidim::Command
8
8
  # Public: Initializes the command.
9
9
  #
10
10
  # process - A ParticipatoryProcess that will be published