decidim-participatory_processes 0.20.1 → 0.23.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/decidim/participatory_processes/admin/participatory_processes.js.es6 +6 -0
  3. data/app/cells/decidim/participatory_processes/content_blocks/highlighted_processes/_all_processes.erb +4 -1
  4. data/app/cells/decidim/participatory_processes/content_blocks/highlighted_processes/show.erb +5 -9
  5. data/app/cells/decidim/participatory_processes/content_blocks/highlighted_processes/single_process.erb +10 -5
  6. data/app/cells/decidim/participatory_processes/content_blocks/highlighted_processes_cell.rb +1 -1
  7. data/app/cells/decidim/participatory_processes/process_filters/show.erb +2 -2
  8. data/app/cells/decidim/participatory_processes/process_group_m/footer.erb +4 -5
  9. data/app/cells/decidim/participatory_processes/process_m/data.erb +1 -1
  10. data/app/cells/decidim/participatory_processes/process_m/footer.erb +5 -6
  11. data/app/cells/decidim/participatory_processes/process_m/tags.erb +2 -2
  12. data/app/cells/decidim/participatory_processes/process_m_cell.rb +21 -0
  13. data/app/cells/decidim/participatory_processes/statistic/show.erb +9 -0
  14. data/app/cells/decidim/participatory_processes/statistic_cell.rb +20 -0
  15. data/app/cells/decidim/participatory_processes/statistics/show.erb +17 -0
  16. data/app/cells/decidim/participatory_processes/statistics_cell.rb +18 -0
  17. data/app/commands/decidim/participatory_processes/admin/create_participatory_process.rb +13 -3
  18. data/app/commands/decidim/participatory_processes/admin/create_participatory_process_admin.rb +2 -1
  19. data/app/commands/decidim/participatory_processes/admin/create_participatory_process_group.rb +3 -3
  20. data/app/commands/decidim/participatory_processes/admin/notify_role_assigned_to_participatory_process.rb +22 -0
  21. data/app/commands/decidim/participatory_processes/admin/update_participatory_process.rb +26 -10
  22. data/app/commands/decidim/participatory_processes/admin/update_participatory_process_admin.rb +3 -1
  23. data/app/controllers/concerns/decidim/participatory_processes/admin/filterable.rb +27 -0
  24. data/app/controllers/decidim/participatory_processes/admin/participatory_process_exports_controller.rb +4 -0
  25. data/app/controllers/decidim/participatory_processes/admin/participatory_process_user_roles_controller.rb +2 -1
  26. data/app/controllers/decidim/participatory_processes/admin/participatory_processes_controller.rb +6 -16
  27. data/app/controllers/decidim/participatory_processes/participatory_processes_controller.rb +27 -4
  28. data/app/controllers/decidim/participatory_processes/{participatory_process_widgets_controller.rb → widgets_controller.rb} +2 -2
  29. data/app/events/decidim/participatory_process_role_assigned_event.rb +28 -0
  30. data/app/forms/decidim/participatory_processes/admin/participatory_process_form.rb +18 -6
  31. data/app/forms/decidim/participatory_processes/admin/participatory_process_group_form.rb +4 -1
  32. data/app/forms/decidim/participatory_processes/admin/participatory_process_import_form.rb +3 -0
  33. data/app/forms/decidim/participatory_processes/admin/participatory_process_user_role_form.rb +8 -2
  34. data/app/functions/decidim/participatory_processes/participatory_process_finder.rb +10 -0
  35. data/app/functions/decidim/participatory_processes/participatory_process_list.rb +11 -0
  36. data/app/helpers/decidim/participatory_processes/admin/participatory_process_helper.rb +23 -0
  37. data/app/helpers/decidim/participatory_processes/participatory_process_helper.rb +11 -0
  38. data/app/models/decidim/participatory_process.rb +25 -2
  39. data/app/models/decidim/participatory_process_group.rb +5 -0
  40. data/app/models/decidim/participatory_process_step.rb +3 -0
  41. data/app/models/decidim/participatory_process_user_role.rb +32 -0
  42. data/app/permissions/decidim/participatory_processes/permissions.rb +9 -0
  43. data/app/presenters/decidim/participatory_processes/participatory_process_metric_charts_presenter.rb +2 -2
  44. data/app/presenters/decidim/participatory_processes/participatory_process_stats_presenter.rb +32 -22
  45. data/app/queries/decidim/participatory_processes/stats_followers_count.rb +46 -0
  46. data/app/queries/decidim/participatory_processes/stats_participants_count.rb +100 -0
  47. data/app/serializers/decidim/participatory_processes/participatory_process_importer.rb +8 -4
  48. data/app/serializers/decidim/participatory_processes/participatory_process_serializer.rb +1 -0
  49. data/app/types/decidim/participatory_processes/participatory_process_group_type.rb +20 -0
  50. data/app/types/decidim/participatory_processes/participatory_process_input_filter.rb +13 -0
  51. data/app/types/decidim/participatory_processes/participatory_process_input_sort.rb +15 -0
  52. data/app/types/decidim/participatory_processes/participatory_process_step_type.rb +7 -4
  53. data/app/types/decidim/participatory_processes/participatory_process_type.rb +8 -4
  54. data/app/views/decidim/participatory_process_steps/_participatory_process_step.html.erb +1 -1
  55. data/app/views/decidim/participatory_processes/admin/participatory_processes/_form.html.erb +31 -0
  56. data/app/views/decidim/participatory_processes/admin/participatory_processes/index.html.erb +18 -15
  57. data/app/views/decidim/participatory_processes/participatory_process_groups/show.html.erb +3 -2
  58. data/app/views/decidim/participatory_processes/participatory_process_steps/index.html.erb +8 -3
  59. data/app/views/decidim/participatory_processes/participatory_processes/_metrics.html.erb +2 -2
  60. data/app/views/decidim/participatory_processes/participatory_processes/_promoted_process.html.erb +13 -6
  61. data/app/views/decidim/participatory_processes/participatory_processes/_statistics.html.erb +0 -10
  62. data/app/views/decidim/participatory_processes/participatory_processes/{statistics.html.erb → all_metrics.html.erb} +0 -0
  63. data/app/views/decidim/participatory_processes/participatory_processes/show.html.erb +39 -13
  64. data/app/views/layouts/decidim/_process_header.html.erb +1 -1
  65. data/app/views/layouts/decidim/_process_header_steps.html.erb +1 -1
  66. data/app/views/layouts/decidim/_process_navigation.html.erb +1 -1
  67. data/app/views/layouts/decidim/admin/participatory_process.html.erb +2 -2
  68. data/app/views/layouts/decidim/participatory_process.html.erb +1 -0
  69. data/config/locales/am-ET.yml +1 -0
  70. data/config/locales/ar.yml +9 -4
  71. data/config/locales/bg-BG.yml +19 -0
  72. data/config/locales/bg.yml +19 -0
  73. data/config/locales/ca.yml +37 -6
  74. data/config/locales/cs.yml +44 -13
  75. data/config/locales/da-DK.yml +1 -0
  76. data/config/locales/da.yml +1 -0
  77. data/config/locales/de.yml +55 -4
  78. data/config/locales/el.yml +453 -0
  79. data/config/locales/en.yml +37 -6
  80. data/config/locales/eo.yml +1 -0
  81. data/config/locales/es-MX.yml +35 -4
  82. data/config/locales/es-PY.yml +35 -4
  83. data/config/locales/es.yml +36 -5
  84. data/config/locales/et-EE.yml +1 -0
  85. data/config/locales/et.yml +1 -0
  86. data/config/locales/eu.yml +6 -4
  87. data/config/locales/fi-plain.yml +35 -4
  88. data/config/locales/fi.yml +106 -75
  89. data/config/locales/fr-CA.yml +456 -0
  90. data/config/locales/fr.yml +35 -4
  91. data/config/locales/ga-IE.yml +1 -0
  92. data/config/locales/gl.yml +6 -4
  93. data/config/locales/hr-HR.yml +1 -0
  94. data/config/locales/hr.yml +1 -0
  95. data/config/locales/hu.yml +14 -4
  96. data/config/locales/id-ID.yml +6 -4
  97. data/config/locales/is-IS.yml +4 -0
  98. data/config/locales/is.yml +215 -0
  99. data/config/locales/it.yml +36 -8
  100. data/config/locales/ja-JP.yml +445 -0
  101. data/config/locales/ja.yml +445 -0
  102. data/config/locales/ko-KR.yml +1 -0
  103. data/config/locales/ko.yml +1 -0
  104. data/config/locales/lt-LT.yml +1 -0
  105. data/config/locales/lt.yml +1 -0
  106. data/config/locales/lv.yml +445 -0
  107. data/config/locales/mt-MT.yml +1 -0
  108. data/config/locales/mt.yml +1 -0
  109. data/config/locales/nl.yml +32 -4
  110. data/config/locales/no.yml +154 -136
  111. data/config/locales/om-ET.yml +1 -0
  112. data/config/locales/pl.yml +203 -152
  113. data/config/locales/pt-BR.yml +7 -5
  114. data/config/locales/pt.yml +175 -124
  115. data/config/locales/ro-RO.yml +461 -0
  116. data/config/locales/ru.yml +5 -3
  117. data/config/locales/sk-SK.yml +451 -0
  118. data/config/locales/sk.yml +451 -0
  119. data/config/locales/sl.yml +9 -0
  120. data/config/locales/so-SO.yml +1 -0
  121. data/config/locales/sr-CS.yml +33 -0
  122. data/config/locales/sv.yml +155 -111
  123. data/config/locales/ti-ER.yml +1 -0
  124. data/config/locales/tr-TR.yml +6 -4
  125. data/config/locales/uk.yml +5 -3
  126. data/config/locales/vi-VN.yml +1 -0
  127. data/config/locales/vi.yml +1 -0
  128. data/config/locales/zh-CN.yml +445 -0
  129. data/config/locales/zh-TW.yml +1 -0
  130. data/db/migrate/20200114142253_add_scope_type_to_participatory_processes.rb +7 -0
  131. data/db/migrate/20200204154917_add_show_metrics_to_participatory_processes.rb +7 -0
  132. data/db/migrate/20200320105908_index_foreign_keys_in_decidim_attachments.rb +7 -0
  133. data/db/migrate/20200320105924_index_foreign_keys_in_decidim_participatory_process_user_roles.rb +7 -0
  134. data/db/migrate/20200320105925_index_foreign_keys_in_decidim_participatory_processes.rb +8 -0
  135. data/db/migrate/20201006072346_fix_attachments_titles.rb +38 -0
  136. data/db/seeds/city.jpeg +0 -0
  137. data/db/seeds/city2.jpeg +0 -0
  138. data/lib/decidim/participatory_processes/admin_engine.rb +1 -0
  139. data/lib/decidim/participatory_processes/engine.rb +22 -5
  140. data/lib/decidim/participatory_processes/participatory_space.rb +22 -12
  141. data/lib/decidim/participatory_processes/query_extensions.rb +40 -0
  142. data/lib/decidim/participatory_processes/test/factories.rb +23 -3
  143. data/lib/decidim/participatory_processes/version.rb +1 -1
  144. metadata +70 -13
  145. data/app/views/decidim/participatory_processes/participatory_process_widgets/show.html.erb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e51dd87a6714362621127c05f6e897001e7d80e22f20c7275a8698664159e6e
4
- data.tar.gz: 620305f1c0192fa325840d638a85bfea843c475d1752d720e76309cd7a712e70
3
+ metadata.gz: 9f9aa34c9ab49f537f782aab1b1356aecb97dcdd24f6d64b8294cd39fc2026e1
4
+ data.tar.gz: a5a21938dc11bf4653eda31fed0e2bc4e9368426eac58ad2e2ea1edbc15ea500
5
5
  SHA512:
6
- metadata.gz: 5206e778fc1a08899d6585eda85c66fedff736ef8cb37a1b869486bad53c8afcfe72d6a93127c56a8bac49d7d7e212c5ba11b6ae47bc9bd46a6889b4d8528adf
7
- data.tar.gz: ee14a93572445a8560bc7055fded2f46c3a001ffaf382bed0fc1260051c8152dadcd25c644b335ecfa3e157b6b16a9c4eca9e9bc13d0ab67a33fce87b387b3a2
6
+ metadata.gz: 6004a1300bf0b1eeffa24d1784e46995b779ab8ed13d9baf9f10a5c3bed360496081ffe7bea38abdb53a9b2e72b7fd96bc03ce1bd8e5f5d8552aa9d768b12bf5
7
+ data.tar.gz: 634120e6c78846eb7904503f56c846fb40cd135cc260ad2c92255f6483275bf406875dc423b98e4edd22ec94efba7b8a24e37d74e52a23f71631826be2eb7393
@@ -2,11 +2,17 @@ $(() => {
2
2
  ((exports) => {
3
3
  const $participatoryProcessScopeEnabled = $("#participatory_process_scopes_enabled");
4
4
  const $participatoryProcessScopeId = $("#participatory_process_scope_id");
5
+ const $participatoryProcessScopeTypeId = $("#participatory_process_scope_type_max_depth_id");
5
6
 
6
7
  if ($(".edit_participatory_process, .new_participatory_process").length > 0) {
7
8
  $participatoryProcessScopeEnabled.on("change", (event) => {
8
9
  const checked = event.target.checked;
9
10
  exports.theDataPicker.enabled($participatoryProcessScopeId, checked);
11
+ if (checked === true) {
12
+ $participatoryProcessScopeTypeId.removeAttr("disabled");
13
+ } else {
14
+ $participatoryProcessScopeTypeId.attr("disabled", true)
15
+ }
10
16
  })
11
17
  exports.theDataPicker.enabled($participatoryProcessScopeId, $participatoryProcessScopeEnabled.prop("checked"));
12
18
  }
@@ -1,6 +1,9 @@
1
1
  <div class="row" id="see-all-processes">
2
2
  <div class="columns small-centered small-12
3
3
  smallmedium-8 medium-6 large-4">
4
- <%= link_to t("see_all_processes", scope: i18n_scope), decidim_participatory_processes.participatory_processes_path, class: "button expanded hollow button--sc home-section__cta" %>
4
+ <%= link_to t("see_all_processes", scope: i18n_scope),
5
+ decidim_participatory_processes.participatory_processes_path,
6
+ class: "button expanded hollow button--sc home-section__cta",
7
+ title: t("processes_button_title", scope: i18n_scope) %>
5
8
  </div>
6
9
  </div>
@@ -6,15 +6,11 @@
6
6
  large-up-4 card-grid">
7
7
  <% highlighted_processes.each do |process| %>
8
8
  <div class="column">
9
- <article class="card card--process card--mini">
10
- <%= link_to decidim_participatory_processes.participatory_process_path(process), class: "card__link" do %>
11
- <div class="card__image-top"
12
- style="background-image:url(<%= process.hero_image.url %>)"></div>
13
- <% end %>
9
+ <%= link_to decidim_participatory_processes.participatory_process_path(process), class: "card card--process card--mini" do %>
10
+ <div aria-hidden="true" class="card__image-top"
11
+ style="background-image:url(<%= process.hero_image.url %>)"></div>
14
12
  <div class="card__content">
15
- <%= link_to decidim_participatory_processes.participatory_process_path(process), class: "card__link" do %>
16
- <h4 class="card__title"><%= translated_attribute process.title %></h4>
17
- <% end %>
13
+ <span class="card__title card__link"><%= translated_attribute process.title %></span>
18
14
  <% if process.active_step %>
19
15
  <span class="card--process__small">
20
16
  <%= t("active_step", scope: i18n_scope) %>
@@ -22,7 +18,7 @@
22
18
  </span>
23
19
  <% end %>
24
20
  </div>
25
- </article>
21
+ <% end %>
26
22
  </div>
27
23
  <% end %>
28
24
  </div>
@@ -1,17 +1,21 @@
1
1
  <% process = highlighted_processes.first %>
2
+ <% title_id = "process_title" %>
2
3
  <section class="wrapper-home home-section">
3
4
  <div class="row" id="highlighted-processes">
4
5
  <h3 class="section-heading"><%= t("active_processes", scope: i18n_scope) %></h3>
5
6
  <div class="row collapse">
6
- <article class="card card--full card--process">
7
+ <div class="card card--full card--process">
7
8
  <div class="row collapse card--process__row">
8
9
  <div class="column large-6 card--process__column">
9
10
  <div class="card__content">
10
11
  <%= link_to decidim_participatory_processes.participatory_process_path(process), class: "card__link" do %>
11
- <h2 class="card__title"><%= translated_attribute process.title %></h2>
12
+ <h2 class="card__title" id="<%= title_id %>"><%= decidim_html_escape(translated_attribute(process.title)) %></h2>
12
13
  <% end %>
13
14
  <%= decidim_sanitize translated_attribute(process.short_description) %>
14
- <%= link_to t("more_information", scope: i18n_scope), decidim_participatory_processes.participatory_process_path(process), class: "button secondary small hollow" %>
15
+ <%= link_to decidim_participatory_processes.participatory_process_path(process), class: "button small hollow" do %>
16
+ <span class="show-for-sr"><%= decidim_html_escape(translated_attribute(process.title)) %></span>
17
+ <%= t("more_information", scope: i18n_scope) %>
18
+ <% end %>
15
19
  </div>
16
20
  </div>
17
21
  <div class="column large-6 card--process__column">
@@ -19,7 +23,8 @@
19
23
  <div class="card__content row collapse">
20
24
  <div class="large-6 large-offset-6 columns">
21
25
  <%= link_to decidim_participatory_processes.participatory_process_path(process), class: "button expanded button--sc" do %>
22
- <%= t("participate", scope: i18n_scope) %>
26
+ <span class="show-for-sr"><%= t("participate_in", resource_name: translated_attribute(process.title), scope: i18n_scope) %></span>
27
+ <span aria-hidden="true"><%= t("participate", scope: i18n_scope) %></span>
23
28
  <% if process.active_step %>
24
29
  <span class="button__info">
25
30
  <%= t("active_step", scope: i18n_scope) %>
@@ -32,7 +37,7 @@
32
37
  </div>
33
38
  </div>
34
39
  </div>
35
- </article>
40
+ </div>
36
41
  </div>
37
42
  </div>
38
43
  <%= render "_all_processes" %>
@@ -29,7 +29,7 @@ module Decidim
29
29
  OrganizationPublishedParticipatoryProcesses.new(current_organization, current_user) |
30
30
  HighlightedParticipatoryProcesses.new |
31
31
  FilteredParticipatoryProcesses.new("active")
32
- ).query.limit(max_results)
32
+ ).query.includes([:organization]).limit(max_results)
33
33
  end
34
34
 
35
35
  def i18n_scope
@@ -1,8 +1,8 @@
1
1
  <div class="row collapse order-by">
2
- <h2 class="order-by__text section-heading">
2
+ <h3 class="order-by__text section-heading">
3
3
  <%= title %>
4
4
  <%= render :filter_tabs %>
5
- </h2>
5
+ </h3>
6
6
  </div>
7
7
  <% if process_count_by_filter["active"] == 0 && process_count_by_filter["upcoming"] == 0 %>
8
8
  <div class="row column">
@@ -1,9 +1,8 @@
1
1
  <div class="card__footer card__footer--spaces">
2
2
  <div class="card__support">
3
- <%= link_to(
4
- t("layouts.decidim.participatory_process_groups.participatory_process_group.browse"),
5
- resource_path,
6
- class: "card__button button button--sc secondary light small"
7
- ) %>
3
+ <%= link_to(resource_path, class: "card__button button button--sc small") do %>
4
+ <span class="show-for-sr"><%= t("browse_resource", resource_name: title, scope: "layouts.decidim.participatory_process_groups.participatory_process_group") %></span>
5
+ <%= t("layouts.decidim.participatory_process_groups.participatory_process_group.browse") %>
6
+ <% end %>
8
7
  </div>
9
8
  </div>
@@ -1,7 +1,7 @@
1
1
  <div class="card__icondata">
2
2
  <ul class="card-data">
3
3
  <li class="card-data__item">
4
- <%= icon "datetime", class: "icon--big" %>
4
+ <%= icon "datetime", class: "icon--big", role: "img", aria_label: t("decidim.participatory_processes.show.dates") %>
5
5
  </li>
6
6
  <li class="card-data__item">
7
7
  <div class="card-data__item--centerblock">
@@ -2,14 +2,13 @@
2
2
  <div class="card__support">
3
3
  <% if has_step? %>
4
4
  <div class="card__support__data--left">
5
- <div class="text-uppercase"><%= t("layouts.decidim.participatory_processes.participatory_process.active_step") %></div>
5
+ <div><%= t("layouts.decidim.participatory_processes.participatory_process.active_step") %></div>
6
6
  <div class="text-ellipsis"><strong><%= step_title %></strong></div>
7
7
  </div>
8
8
  <% end %>
9
- <%= link_to(
10
- t(model.cta_button_text_key, scope: "layouts.decidim.participatory_processes.participatory_process"),
11
- resource_path,
12
- class: "card__button button button--sc secondary light small"
13
- ) %>
9
+ <%= link_to(step_cta_path, class: "card__button button button--sc small") do %>
10
+ <span class="show-for-sr"><%= step_cta_text %></span>
11
+ <%= step_cta_text %>
12
+ <% end %>
14
13
  </div>
15
14
  </div>
@@ -1,7 +1,7 @@
1
1
  <% if model.hashtag.present? %>
2
2
  <%= link_to(
3
- "##{model.hashtag}",
4
- "https://twitter.com/hashtag/#{model.hashtag}",
3
+ "##{decidim_html_escape(model.hashtag)}",
4
+ "https://twitter.com/hashtag/#{decidim_html_escape(model.hashtag)}",
5
5
  class: "card__text--category",
6
6
  target: "_blank"
7
7
  ) %>
@@ -5,6 +5,9 @@ module Decidim
5
5
  # This cell renders the Medium (:m) process card
6
6
  # for an given instance of a Process
7
7
  class ProcessMCell < Decidim::CardMCell
8
+ include Decidim::SanitizeHelper
9
+ include Decidim::TranslationsHelper
10
+
8
11
  private
9
12
 
10
13
  def has_image?
@@ -37,6 +40,24 @@ module Decidim
37
40
  model.hero_image.url
38
41
  end
39
42
 
43
+ def step_cta_text
44
+ if translated_in_current_locale?(model.active_step&.cta_text)
45
+ translated_attribute(model.active_step.cta_text)
46
+ else
47
+ t(model.cta_button_text_key_accessible, resource_name: title, scope: "layouts.decidim.participatory_processes.participatory_process")
48
+ end
49
+ end
50
+
51
+ def step_cta_path
52
+ if model.active_step&.cta_path.present?
53
+ path, params = resource_path.split("?")
54
+
55
+ "#{path}/#{model.active_step.cta_path}" + (params.present? ? "?#{params}" : "")
56
+ else
57
+ resource_path
58
+ end
59
+ end
60
+
40
61
  def step_title
41
62
  translated_attribute model.active_step.title
42
63
  end
@@ -0,0 +1,9 @@
1
+ <div class="process-stats__data">
2
+ <span class="process-stats__number">
3
+ <%= stat_number %>
4
+ </span>
5
+
6
+ <h4 class="process-stats__title">
7
+ <%= stat_title %>
8
+ </h4>
9
+ </div>
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ParticipatoryProcesses
5
+ # This cell renders a Statistic of a ParticipatoryProcesses
6
+ class StatisticCell < Decidim::ViewModel
7
+ include ActionView::Helpers::NumberHelper
8
+
9
+ private
10
+
11
+ def stat_number
12
+ number_with_delimiter(model[:stat_number])
13
+ end
14
+
15
+ def stat_title
16
+ t(model[:stat_title], scope: "decidim.participatory_processes.statistics")
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ <section class="row statistics" id="participatory_process-statistics">
2
+ <div class="columns large-8">
3
+ <div class="row column">
4
+ <h3 class="section-heading">
5
+ <%= stats_heading %>
6
+ </h3>
7
+
8
+ <div class="process-stats">
9
+ <% if model.present? %>
10
+ <%= cell("decidim/participatory_processes/statistic", collection: model) %>
11
+ <% else %>
12
+ <span class="muted"><%= no_stats %></span>
13
+ <% end %>
14
+ </div>
15
+ </div>
16
+ </div>
17
+ </section>
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ParticipatoryProcesses
5
+ # This cell renders the Statistics of a ParticipatoryProcesses
6
+ class StatisticsCell < Decidim::ViewModel
7
+ private
8
+
9
+ def stats_heading
10
+ t("statistics.headline", scope: "decidim.participatory_processes")
11
+ end
12
+
13
+ def no_stats
14
+ t("statistics.no_stats", scope: "decidim.participatory_processes")
15
+ end
16
+ end
17
+ end
18
+ end
@@ -22,10 +22,11 @@ module Decidim
22
22
  def call
23
23
  return broadcast(:invalid) if form.invalid?
24
24
 
25
- process = create_participatory_process
25
+ create_participatory_process
26
26
 
27
27
  if process.persisted?
28
28
  add_admins_as_followers(process)
29
+ link_related_processes
29
30
  broadcast(:ok, process)
30
31
  else
31
32
  form.errors.add(:hero_image, process.errors[:hero_image]) if process.errors.include? :hero_image
@@ -36,10 +37,10 @@ module Decidim
36
37
 
37
38
  private
38
39
 
39
- attr_reader :form
40
+ attr_reader :form, :process
40
41
 
41
42
  def create_participatory_process
42
- process = ParticipatoryProcess.new(
43
+ @process = ParticipatoryProcess.new(
43
44
  organization: form.current_organization,
44
45
  title: form.title,
45
46
  subtitle: form.subtitle,
@@ -52,6 +53,7 @@ module Decidim
52
53
  promoted: form.promoted,
53
54
  scopes_enabled: form.scopes_enabled,
54
55
  scope: form.scope,
56
+ scope_type_max_depth: form.scope_type_max_depth,
55
57
  private_space: form.private_space,
56
58
  developer_group: form.developer_group,
57
59
  local_area: form.local_area,
@@ -105,6 +107,14 @@ module Decidim
105
107
  Decidim::CreateFollow.new(form, admin).call
106
108
  end
107
109
  end
110
+
111
+ def related_processes
112
+ @related_processes ||= Decidim::ParticipatoryProcess.where(id: form.related_process_ids)
113
+ end
114
+
115
+ def link_related_processes
116
+ process.link_participatory_space_resources(related_processes, "related_processes")
117
+ end
108
118
  end
109
119
  end
110
120
  end
@@ -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 admin in the system.
8
- class CreateParticipatoryProcessAdmin < Rectify::Command
8
+ class CreateParticipatoryProcessAdmin < NotifyRoleAssignedToParticipatoryProcess
9
9
  # Public: Initializes the command.
10
10
  #
11
11
  # form - A form object with the params.
@@ -61,6 +61,7 @@ module Decidim
61
61
  role_params,
62
62
  extra_info
63
63
  )
64
+ send_notification user
64
65
  end
65
66
 
66
67
  def existing_role
@@ -45,11 +45,11 @@ module Decidim
45
45
  form.current_user
46
46
  ) do
47
47
  ParticipatoryProcessGroup.create(
48
+ organization: form.current_organization,
48
49
  name: form.name,
49
50
  description: form.description,
50
- hero_image: form.hero_image,
51
- participatory_processes: participatory_processes,
52
- organization: form.current_organization
51
+ hero_image: form.hero_image, # Keep after organization
52
+ participatory_processes: participatory_processes
53
53
  )
54
54
  end
55
55
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ParticipatoryProcesses
5
+ module Admin
6
+ # A command to notify users when a role is assigned for a participatory process
7
+ class NotifyRoleAssignedToParticipatoryProcess < Rectify::Command
8
+ def send_notification(user)
9
+ Decidim::EventsManager.publish(
10
+ event: "decidim.events.participatory_process.role_assigned",
11
+ event_class: Decidim::ParticipatoryProcessRoleAssignedEvent,
12
+ resource: form.current_participatory_space,
13
+ affected_users: [user],
14
+ extra: {
15
+ role: form.role
16
+ }
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -41,13 +41,14 @@ module Decidim
41
41
 
42
42
  def update_participatory_process
43
43
  @participatory_process.assign_attributes(attributes)
44
- if @participatory_process.valid?
45
- @participatory_process.save!
44
+ return unless @participatory_process.valid?
45
+
46
+ @participatory_process.save!
46
47
 
47
- Decidim.traceability.perform_action!(:update, @participatory_process, form.current_user) do
48
- @participatory_process
49
- end
48
+ Decidim.traceability.perform_action!(:update, @participatory_process, form.current_user) do
49
+ @participatory_process
50
50
  end
51
+ link_related_processes
51
52
  end
52
53
 
53
54
  def attributes
@@ -56,15 +57,12 @@ module Decidim
56
57
  subtitle: form.subtitle,
57
58
  slug: form.slug,
58
59
  hashtag: form.hashtag,
59
- hero_image: form.hero_image,
60
- remove_hero_image: form.remove_hero_image,
61
- banner_image: form.banner_image,
62
- remove_banner_image: form.remove_banner_image,
63
60
  promoted: form.promoted,
64
61
  description: form.description,
65
62
  short_description: form.short_description,
66
63
  scopes_enabled: form.scopes_enabled,
67
64
  scope: form.scope,
65
+ scope_type_max_depth: form.scope_type_max_depth,
68
66
  private_space: form.private_space,
69
67
  developer_group: form.developer_group,
70
68
  local_area: form.local_area,
@@ -76,9 +74,27 @@ module Decidim
76
74
  start_date: form.start_date,
77
75
  end_date: form.end_date,
78
76
  participatory_process_group: form.participatory_process_group,
77
+ show_metrics: form.show_metrics,
79
78
  show_statistics: form.show_statistics,
80
79
  announcement: form.announcement
81
- }
80
+ }.merge(uploader_attributes)
81
+ end
82
+
83
+ def uploader_attributes
84
+ {
85
+ hero_image: form.hero_image,
86
+ remove_hero_image: form.remove_hero_image,
87
+ banner_image: form.banner_image,
88
+ remove_banner_image: form.remove_banner_image
89
+ }.delete_if { |_k, val| val.is_a?(Decidim::ApplicationUploader) }
90
+ end
91
+
92
+ def related_processes
93
+ @related_processes ||= Decidim::ParticipatoryProcess.where(id: form.related_process_ids)
94
+ end
95
+
96
+ def link_related_processes
97
+ @participatory_process.link_participatory_space_resources(related_processes, "related_processes")
82
98
  end
83
99
  end
84
100
  end