decidim-initiatives 0.30.1 → 0.31.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +46 -9
  3. data/app/cells/decidim/initiatives/content_blocks/highlighted_initiatives_settings_form/show.erb +7 -2
  4. data/app/cells/decidim/initiatives/initiative_g_cell.rb +5 -1
  5. data/app/commands/decidim/initiatives/admin/publish_initiative.rb +1 -5
  6. data/app/commands/decidim/initiatives/admin/update_initiative.rb +1 -2
  7. data/app/commands/decidim/initiatives/create_initiative.rb +0 -1
  8. data/app/commands/decidim/initiatives/update_initiative.rb +1 -3
  9. data/app/commands/decidim/initiatives/vote_initiative.rb +1 -11
  10. data/app/controllers/concerns/decidim/initiatives/has_signature_workflow.rb +36 -0
  11. data/app/controllers/concerns/decidim/initiatives/needs_initiative.rb +1 -12
  12. data/app/controllers/decidim/initiatives/admin/initiatives_controller.rb +2 -2
  13. data/app/controllers/decidim/initiatives/admin/initiatives_settings_controller.rb +1 -1
  14. data/app/controllers/decidim/initiatives/admin/initiatives_type_scopes_controller.rb +2 -2
  15. data/app/controllers/decidim/initiatives/admin/initiatives_types_controller.rb +2 -2
  16. data/app/controllers/decidim/initiatives/committee_requests_controller.rb +10 -2
  17. data/app/controllers/decidim/initiatives/create_initiative_controller.rb +84 -18
  18. data/app/controllers/decidim/initiatives/initiative_signatures_controller.rb +133 -42
  19. data/app/controllers/decidim/initiatives/initiative_votes_controller.rb +3 -2
  20. data/app/controllers/decidim/initiatives/initiatives_controller.rb +21 -2
  21. data/app/forms/decidim/initiatives/admin/initiative_form.rb +0 -1
  22. data/app/forms/decidim/initiatives/initiative_form.rb +0 -3
  23. data/app/helpers/decidim/initiatives/application_helper.rb +2 -0
  24. data/app/helpers/decidim/initiatives/initiatives_helper.rb +0 -1
  25. data/app/models/decidim/initiative.rb +7 -31
  26. data/app/models/decidim/initiatives_committee_member.rb +1 -1
  27. data/app/models/decidim/initiatives_type.rb +5 -2
  28. data/app/models/decidim/initiatives_vote.rb +2 -2
  29. data/app/packs/entrypoints/decidim_initiatives.js +1 -1
  30. data/app/packs/entrypoints/decidim_initiatives_admin.scss +1 -1
  31. data/app/packs/src/decidim/initiatives/admin/initiatives_types.js +2 -11
  32. data/app/packs/src/decidim/initiatives/admin/invite_users.js +1 -1
  33. data/app/packs/src/decidim/initiatives/application.js +1 -1
  34. data/app/packs/src/decidim/initiatives/check_code.js +114 -0
  35. data/app/packs/src/decidim/initiatives/initiative_creation_wizard.js +16 -0
  36. data/app/packs/src/decidim/initiatives/scoped_type.js +1 -1
  37. data/app/packs/stylesheets/initiatives.scss +16 -2
  38. data/app/permissions/decidim/initiatives/admin/permissions.rb +4 -7
  39. data/app/permissions/decidim/initiatives/permissions.rb +26 -16
  40. data/app/presenters/decidim/initiative_presenter.rb +12 -6
  41. data/app/presenters/decidim/initiatives/admin_log/initiative_presenter.rb +1 -2
  42. data/app/queries/decidim/initiatives/initiatives_stats_followers_count.rb +14 -0
  43. data/app/queries/decidim/initiatives/initiatives_stats_participants_count.rb +14 -0
  44. data/app/serializers/decidim/initiatives/open_data_initiative_serializer.rb +0 -1
  45. data/app/services/decidim/initiatives/data_encryptor.rb +1 -1
  46. data/app/services/decidim/initiatives/legacy_signature_handler.rb +25 -0
  47. data/app/services/decidim/initiatives/progress_notifier.rb +1 -7
  48. data/app/services/decidim/initiatives/signature_handler.rb +248 -0
  49. data/app/services/decidim/initiatives/status_change_notifier.rb +1 -7
  50. data/app/views/decidim/initiatives/admin/committee_requests/index.html.erb +29 -11
  51. data/app/views/decidim/initiatives/admin/exports/_dropdown.html.erb +17 -20
  52. data/app/views/decidim/initiatives/admin/initiatives/_form.html.erb +7 -13
  53. data/app/views/decidim/initiatives/admin/initiatives/_initiative_attachments.erb +2 -2
  54. data/app/views/decidim/initiatives/admin/initiatives/index.html.erb +76 -47
  55. data/app/views/decidim/initiatives/admin/initiatives_types/_form.html.erb +13 -21
  56. data/app/views/decidim/initiatives/admin/initiatives_types/_initiative_type_scopes.html.erb +28 -12
  57. data/app/views/decidim/initiatives/admin/initiatives_types/index.html.erb +33 -15
  58. data/app/views/decidim/initiatives/create_initiative/_committee_member.html.erb +27 -0
  59. data/app/views/decidim/initiatives/create_initiative/_return_to_initiatives_button.html.erb +3 -0
  60. data/app/views/decidim/initiatives/create_initiative/_send_to_technical_validation_button.html.erb +10 -0
  61. data/app/views/decidim/initiatives/create_initiative/_share_committee_link.html.erb +5 -1
  62. data/app/views/decidim/initiatives/create_initiative/fill_data.html.erb +7 -11
  63. data/app/views/decidim/initiatives/create_initiative/finish.html.erb +16 -13
  64. data/app/views/decidim/initiatives/create_initiative/promotal_committee.html.erb +33 -6
  65. data/app/views/decidim/initiatives/create_initiative/select_initiative_type.html.erb +40 -26
  66. data/app/views/decidim/initiatives/initiative_signatures/_sms_code_form.html.erb +22 -0
  67. data/app/views/decidim/initiatives/initiative_signatures/_sms_phone_number_form.html.erb +13 -0
  68. data/app/views/decidim/initiatives/initiative_signatures/fill_personal_data.html.erb +23 -22
  69. data/app/views/decidim/initiatives/initiative_signatures/finish.html.erb +17 -5
  70. data/app/views/decidim/initiatives/initiative_signatures/sms_code.html.erb +6 -8
  71. data/app/views/decidim/initiatives/initiative_signatures/sms_phone_number.html.erb +3 -8
  72. data/app/views/decidim/initiatives/initiative_signatures/update_buttons_and_counters.js.erb +3 -14
  73. data/app/views/decidim/initiatives/initiative_votes/update_buttons_and_counters.js.erb +3 -14
  74. data/app/views/decidim/initiatives/initiatives/_committee_members.html.erb +1 -1
  75. data/app/views/decidim/initiatives/initiatives/_form.html.erb +1 -3
  76. data/app/views/decidim/initiatives/initiatives/_new_initiative_button.html.erb +10 -3
  77. data/app/views/decidim/initiatives/initiatives/_pending_initiatives.html.erb +5 -0
  78. data/app/views/decidim/initiatives/initiatives/index.html.erb +8 -0
  79. data/app/views/decidim/initiatives/initiatives/show.html.erb +2 -2
  80. data/app/views/layouts/decidim/_initiative_signature_creation_header.html.erb +20 -2
  81. data/app/views/layouts/decidim/admin/_manage_initiatives.html.erb +1 -1
  82. data/app/views/layouts/decidim/initiative_signature_creation.html.erb +3 -1
  83. data/config/assets.rb +2 -2
  84. data/config/locales/ar.yml +0 -45
  85. data/config/locales/bg.yml +0 -54
  86. data/config/locales/ca-IT.yml +99 -51
  87. data/config/locales/ca.yml +99 -51
  88. data/config/locales/cs.yml +93 -54
  89. data/config/locales/de.yml +100 -52
  90. data/config/locales/el.yml +0 -45
  91. data/config/locales/en.yml +99 -51
  92. data/config/locales/es-MX.yml +99 -51
  93. data/config/locales/es-PY.yml +99 -51
  94. data/config/locales/es.yml +99 -51
  95. data/config/locales/eu.yml +120 -72
  96. data/config/locales/fi-plain.yml +99 -51
  97. data/config/locales/fi.yml +99 -51
  98. data/config/locales/fr-CA.yml +44 -51
  99. data/config/locales/fr.yml +44 -51
  100. data/config/locales/ga-IE.yml +0 -17
  101. data/config/locales/gl.yml +0 -41
  102. data/config/locales/hu.yml +0 -54
  103. data/config/locales/id-ID.yml +0 -40
  104. data/config/locales/is-IS.yml +0 -22
  105. data/config/locales/it.yml +0 -53
  106. data/config/locales/ja.yml +98 -49
  107. data/config/locales/lb.yml +0 -50
  108. data/config/locales/lt.yml +0 -56
  109. data/config/locales/lv.yml +0 -46
  110. data/config/locales/nl.yml +0 -47
  111. data/config/locales/no.yml +0 -53
  112. data/config/locales/pl.yml +0 -56
  113. data/config/locales/pt-BR.yml +0 -53
  114. data/config/locales/pt.yml +0 -53
  115. data/config/locales/ro-RO.yml +92 -50
  116. data/config/locales/ru.yml +0 -25
  117. data/config/locales/sk.yml +0 -43
  118. data/config/locales/sl.yml +0 -1
  119. data/config/locales/sv.yml +10 -53
  120. data/config/locales/tr-TR.yml +0 -53
  121. data/config/locales/uk.yml +0 -25
  122. data/config/locales/zh-CN.yml +0 -45
  123. data/config/locales/zh-TW.yml +0 -53
  124. data/db/migrate/20250605104500_remove_hashtag_column_initiatives.rb +7 -0
  125. data/lib/decidim/api/initiative_api_type.rb +3 -0
  126. data/lib/decidim/api/initiative_type.rb +23 -4
  127. data/lib/decidim/exporters/initiative_votes_pdf.rb +1 -1
  128. data/lib/decidim/initiatives/default_signature_authorizer.rb +17 -0
  129. data/lib/decidim/initiatives/engine.rb +17 -14
  130. data/lib/decidim/initiatives/menu.rb +1 -1
  131. data/lib/decidim/initiatives/participatory_space.rb +15 -1
  132. data/lib/decidim/initiatives/seeds.rb +1 -2
  133. data/lib/decidim/initiatives/signature_workflow_manifest.rb +176 -0
  134. data/lib/decidim/initiatives/signatures.rb +12 -0
  135. data/lib/decidim/initiatives/test/factories.rb +7 -7
  136. data/lib/decidim/initiatives/test/initiatives_signatures_test_helpers.rb +19 -0
  137. data/lib/decidim/initiatives/validatable_authorizations.rb +83 -0
  138. data/lib/decidim/initiatives/version.rb +1 -1
  139. data/lib/decidim/initiatives.rb +23 -12
  140. metadata +33 -21
  141. data/app/events/decidim/initiatives/endorse_initiative_event.rb +0 -13
  142. data/app/forms/decidim/initiatives/vote_form.rb +0 -208
  143. data/app/packs/src/decidim/initiatives/identity_selector_dialog.js +0 -14
  144. data/app/services/decidim/initiatives/pdf_signature_example.rb +0 -110
  145. data/app/views/decidim/initiatives/initiative_signatures/_wizard_steps.html.erb +0 -15
  146. data/app/views/decidim/initiatives/initiatives/_interactions.html.erb +0 -10
  147. data/app/views/layouts/decidim/_initiative_header.html.erb +0 -27
@@ -1,5 +1,5 @@
1
1
  <div class="form__wrapper">
2
- <div class="card" data-component="accordion" id="accordion-title">
2
+ <div class="card" data-controller="accordion" id="accordion-title">
3
3
  <div class="card-divider">
4
4
  <button class="card-divider-button" data-open="true" data-controls="panel-title" type="button">
5
5
  <%= icon "arrow-right-s-line" %>
@@ -26,7 +26,7 @@
26
26
  </div>
27
27
  </div>
28
28
 
29
- <div class="card" data-component="accordion" id="accordion-options">
29
+ <div class="card" data-controller="accordion" id="accordion-options">
30
30
  <div class="card-divider">
31
31
  <button class="card-divider-button" data-open="true" data-controls="panel-options" type="button">
32
32
  <%= icon "arrow-right-s-line" %>
@@ -78,43 +78,35 @@
78
78
  <div class="row column">
79
79
  <%= form.check_box :comments_enabled %>
80
80
  </div>
81
-
82
- <div class="row column">
83
- <%= form.check_box :collect_user_extra_fields %>
84
- </div>
85
-
86
- <div class="row column">
87
- <%= form.translated :editor, :extra_fields_legal_information, aria: { label: :extra_fields_legal_information } %>
88
- </div>
89
81
  </div>
90
82
  </div>
91
83
 
92
- <div class="card" data-component="accordion" id="accordion-authorizations">
84
+ <div class="card" data-controller="accordion" id="accordion-signature-workflow">
93
85
  <div class="card-divider">
94
- <button class="card-divider-button" data-open="true" data-controls="panel-authorizations" type="button">
86
+ <button class="card-divider-button" data-open="true" data-controls="panel-signature-workflow" type="button">
95
87
  <%= icon "arrow-right-s-line" %>
96
- <h2 class="card-title" id="authorizations">
97
- <%= t("initiatives_types.form.authorizations", scope: "decidim.initiatives.admin") %>
88
+ <h2 class="card-title" id="signature-workflow">
89
+ <%= t("initiatives_types.form.signature_workflow_settings", scope: "decidim.initiatives.admin") %>
98
90
  </h2>
99
91
  </button>
100
92
  </div>
101
93
 
102
- <div id="panel-authorizations" class="card-section">
94
+ <div id="panel-signature-workflow" class="card-section">
103
95
  <div class="row column">
104
96
  <%=
105
97
  form.select(
106
98
  :document_number_authorization_handler,
107
- current_organization.available_authorizations.map { |name| [t("#{name}.name", scope: "decidim.authorization_handlers"), name] },
99
+ Decidim::Initiatives::Signatures.workflows.map do |workflow|
100
+ [t("#{workflow.name}.name", scope: "decidim.initiatives.signatures.workflows"), workflow.name]
101
+ end,
108
102
  include_blank: true
109
103
  )
110
104
  %>
111
105
  </div>
112
106
 
113
- <% if current_organization.available_authorizations.include? "sms" %>
114
- <div class="row column">
115
- <%= form.check_box :validate_sms_code_on_votes %>
116
- </div>
117
- <% end %>
107
+ <div class="row column">
108
+ <%= form.translated :editor, :extra_fields_legal_information, aria: { label: :extra_fields_legal_information } %>
109
+ </div>
118
110
  </div>
119
111
  </div>
120
112
 
@@ -1,7 +1,7 @@
1
- <div class="card" data-component="accordion" id="accordion-<%= t("initiatives_types.initiative_type_scopes.title", scope: "decidim.initiatives.admin") %>">
1
+ <div class="card" data-controller="accordion" id="accordion-initiative_type_scope">
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title gap-2" id="<%= t("initiatives_types.initiative_type_scopes.title", scope: "decidim.initiatives.admin") %>">
4
- <button class="card-divider-button" data-open="true" data-controls="panel-<%= t("initiatives_types.initiative_type_scopes.title", scope: "decidim.initiatives.admin") %>" type="button">
4
+ <button class="card-divider-button" data-open="true" data-controls="panel-initiative_type_scope" type="button">
5
5
  <%= icon "arrow-right-s-line" %>
6
6
  <span>
7
7
  <%= t("initiatives_types.initiative_type_scopes.title", scope: "decidim.initiatives.admin") %>
@@ -12,8 +12,8 @@
12
12
  class: "button button__sm button__secondary flex-none" if allowed_to? :create, :initiative_type_scope %>
13
13
  </h2>
14
14
  </div>
15
- <div id="panel-<%= t("initiatives_types.initiative_type_scopes.title", scope: "decidim.initiatives.admin") %>" class="card-section">
16
- <div class="table-scroll">
15
+ <div id="panel-initiative_type_scope" class="card-section">
16
+ <div class="table-stacked">
17
17
  <table class="table-list">
18
18
  <thead>
19
19
  <tr>
@@ -21,19 +21,35 @@
21
21
  <th class="text-right">
22
22
  <%= t("models.initiatives_type_scope.fields.supports_required", scope: "decidim.admin") %>
23
23
  </th>
24
- <th></th>
24
+ <th><%= t("models.initiatives_type_scope.fields.actions", scope: "decidim.admin") %></th>
25
25
  </tr>
26
26
  </thead>
27
27
  <tbody>
28
28
  <% initiative_type.scopes.each do |s| %>
29
29
  <tr>
30
- <td><%= translated_attribute(s.scope_name) %></td>
31
- <td class="text-right"><%= s.supports_required %></td>
32
- <td class="table-list__actions">
33
- <%= icon_link_to "pencil-line",
34
- decidim_admin_initiatives.edit_initiatives_type_initiatives_type_scope_path(initiative_type, s),
35
- t("actions.configure", scope: "decidim.admin"),
36
- class: "action-icon--new" if allowed_to? :edit, :initiative_type_scope, initiative_type_scope: s %>
30
+ <td data-label="<%= t("models.initiatives_type_scope.fields.scope", scope: "decidim.admin") %>">
31
+ <%= translated_attribute(s.scope_name) %>
32
+ </td>
33
+ <td class="text-right" data-label="<%= t("models.initiatives_type_scope.fields.supports_required", scope: "decidim.admin") %>">
34
+ <%= s.supports_required %>
35
+ </td>
36
+ <td class="table-list__actions" data-label="<%= t("models.initiatives_type_scope.fields.actions", scope: "decidim.admin") %>">
37
+ <% if allowed_to? :edit, :initiative_type_scope, initiative_type_scope: s %>
38
+ <button type="button" data-controller="dropdown" data-target="actions-initiative-type-scope-<%= s.id %>" aria-label="<%= t("decidim.admin.actions.actions_label", resource: s.scope_name) %>">
39
+ <%= icon "more-fill", class: "text-secondary" %>
40
+ </button>
41
+
42
+ <div class="inline-block relative">
43
+ <ul id="actions-initiative-type-scope-<%= s.id %>" class="dropdown dropdown__action" aria-hidden="true">
44
+ <li class="dropdown__item">
45
+ <%= link_to decidim_admin_initiatives.edit_initiatives_type_initiatives_type_scope_path(initiative_type, s), class: "dropdown__button" do %>
46
+ <%= icon "pencil-line" %>
47
+ <%= t("actions.configure", scope: "decidim.admin") %>
48
+ <% end %>
49
+ </li>
50
+ </ul>
51
+ </div>
52
+ <% end %>
37
53
  </td>
38
54
  </tr>
39
55
  <% end %>
@@ -9,7 +9,7 @@
9
9
  class: "button button__sm button__secondary" if allowed_to? :create, :initiative_type %>
10
10
  </h1>
11
11
  </div>
12
- <div class="table-scroll">
12
+ <div class="table-stacked">
13
13
  <table class="table-list">
14
14
  <thead>
15
15
  <tr>
@@ -21,27 +21,45 @@
21
21
  <tbody>
22
22
  <% @initiatives_types.each do |initiative_type| %>
23
23
  <tr>
24
- <td>
24
+ <td data-label="<%= t("models.initiatives_types.fields.title", scope: "decidim.admin") %>">
25
25
  <% if allowed_to? :update, :initiative_type, initiative_type: initiative_type %>
26
26
  <%= link_to translated_attribute(initiative_type.title), edit_initiatives_type_path(initiative_type) %>
27
27
  <% else %>
28
28
  <%= translated_attribute initiative_type.title %></td>
29
29
  <% end %>
30
- <td><%= l initiative_type.created_at, format: :short %></td>
31
- <td class="table-list__actions">
32
- <% if allowed_to? :update, :initiative_type, initiative_type: initiative_type %>
33
- <%= icon_link_to "pencil-line", edit_initiatives_type_path(initiative_type), t("actions.configure", scope: "decidim.admin"), class: "action-icon--edit" %>
34
- <% else %>
35
- <span class="action-space icon"></span>
36
- <% end %>
30
+ <td data-label="<%= t("models.initiatives_types.fields.created_at", scope: "decidim.admin") %>"><%= l initiative_type.created_at, format: :short %></td>
31
+ <td class="table-list__actions" data-label="<%= t("initiatives_type.actions.title", scope: "decidim.resources") %>">
32
+ <button type="button" data-controller="dropdown" data-target="actions-initiative-type-<%= initiative_type.id %>" aria-label="<%= t("decidim.admin.actions.actions_label", resource: initiative_type.title) %>">
33
+ <%= icon "more-fill", class: "text-secondary" %>
34
+ </button>
37
35
 
38
- <%= free_resource_permissions_link(initiative_type) %>
36
+ <div class="inline-block relative">
37
+ <ul id="actions-initiative-type-<%= initiative_type.id %>" class="dropdown dropdown__action" aria-hidden="true">
38
+ <% if allowed_to? :update, :initiative_type, initiative_type: initiative_type %>
39
+ <li class="dropdown__item">
40
+ <%= link_to edit_initiatives_type_path(initiative_type), class: "dropdown__button" do %>
41
+ <%= icon "pencil-line" %>
42
+ <%= t("actions.configure", scope: "decidim.admin") %>
43
+ <% end %>
44
+ </li>
45
+ <% end %>
39
46
 
40
- <% if allowed_to? :destroy, :initiative_type, initiative_type: initiative_type %>
41
- <%= icon_link_to "delete-bin-line", initiative_type, t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
42
- <% else %>
43
- <span class="action-space icon"></span>
44
- <% end %>
47
+ <li class="dropdown__item">
48
+ <%= free_resource_permissions_link(initiative_type) %>
49
+ </li>
50
+
51
+ <% if allowed_to? :destroy, :initiative_type, initiative_type: initiative_type %>
52
+ <hr>
53
+
54
+ <li class="dropdown__item">
55
+ <%= link_to initiative_type, method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") }, class: "dropdown__button" do %>
56
+ <%= icon "delete-bin-line" %>
57
+ <%= t("actions.destroy", scope: "decidim.admin") %>
58
+ <% end %>
59
+ </li>
60
+ <% end %>
61
+ </ul>
62
+ </div>
45
63
  </td>
46
64
  </tr>
47
65
  <% end %>
@@ -0,0 +1,27 @@
1
+ <div class="flex items-center justify-between my-1">
2
+ <%= cell "decidim/author", request.user.presenter, layout: :compact %>
3
+
4
+ <div>
5
+ <% if allowed_to? :approve, :initiative_committee_member, initiative: current_initiative, request: request %>
6
+ <%= link_to(
7
+ approve_initiative_committee_request_path(current_initiative, request),
8
+ data: { confirm: t(".confirm_approve") },
9
+ class: "button button__xs button__transparent-secondary"
10
+ ) do %>
11
+ <span><%= t(".approve") %></span>
12
+ <%= icon "check-line" %>
13
+ <% end %>
14
+ <% end %>
15
+ <% if allowed_to? :revoke, :initiative_committee_member, initiative: current_initiative, request: request %>
16
+ <%= link_to(
17
+ revoke_initiative_committee_request_path(current_initiative, request),
18
+ method: :delete,
19
+ data: { confirm: t(".confirm_revoke") },
20
+ class: "button button__xs button__transparent-secondary"
21
+ ) do %>
22
+ <span><%= t(".revoke") %></span>
23
+ <%= icon "forbid-line" %>
24
+ <% end %>
25
+ <% end %>
26
+ </div>
27
+ </div>
@@ -0,0 +1,3 @@
1
+ <p class="block mt-4 text-with-links">
2
+ <%= t(".return_initiatives_html", initiatives_path: initiatives_path) %>
3
+ </p>
@@ -0,0 +1,10 @@
1
+ <% if current_initiative.enough_committee_members? %>
2
+ <%= link_to t(".button"),
3
+ decidim_initiatives.send_to_technical_validation_initiative_path(current_initiative),
4
+ class: "button button__sm md:button__lg button__secondary",
5
+ data: { confirm: t(".confirm") } %>
6
+ <% else %>
7
+ <%= button_tag t(".button"),
8
+ class: "button button__sm md:button__lg button__secondary",
9
+ disabled: true %>
10
+ <% end %>
@@ -2,12 +2,16 @@
2
2
  <span class="help-text mb-2">
3
3
  <%= t ".invite_to_committee_help" %>
4
4
  </span>
5
+ <span class="help-text mb-2">
6
+ <%= t ".invite_to_committee_help_2", committee_size: current_initiative.minimum_committee_members %>
7
+ <%= link_to t(".more_information"), decidim.page_path("initiatives"), target: "_blank" %>
8
+ </span>
5
9
  <div class="initiative__form__committee">
6
10
  <span>
7
11
  <%= decidim_initiatives.new_initiative_committee_request_url(current_initiative) %>
8
12
  </span>
9
13
  <div class="ml-auto fill-secondary inline-block">
10
- <button type="button" class="button button__sm button__text-secondary" data-clipboard-copy="#urlShareLink-committee">
14
+ <button type="button" class="button button__sm button__text-secondary" data-controller="clipboard-copy" data-clipboard-copy="#urlShareLink-committee">
11
15
  <%= render_committee_tooltip %>
12
16
  <span class="sr-only"><%= t("decidim.shared.share_modal.copy_share_link") %></span>
13
17
  </button>
@@ -13,11 +13,9 @@
13
13
 
14
14
  <%= f.hidden_field :type_id %>
15
15
 
16
- <%= f.text_field :title, autofocus: true, value: translated_attribute(f.object.title) %>
16
+ <%= f.text_field :title, value: translated_attribute(f.object.title), data: { controller: "character-counter" } %>
17
17
 
18
- <%= text_editor_for(f, :description, lines: 8, toolbar: :content, value: translated_attribute(f.object.description)) %>
19
-
20
- <%= f.text_field :hashtag %>
18
+ <%= text_editor_for(f, :description, lines: 20, toolbar: :content, value: translated_attribute(f.object.description)) %>
21
19
 
22
20
  <% signature_type_options = signature_type_options(f.object) %>
23
21
  <% if signature_type_options.length == 1 %>
@@ -40,10 +38,6 @@
40
38
  <%= f.areas_select :area_id, areas_for_select(current_organization), prompt: t(".select_area") %>
41
39
  <% end %>
42
40
 
43
- <% if Decidim::UserGroups::ManageableUserGroups.for(current_user).verified.any? %>
44
- <%= f.select :decidim_user_group_id, Decidim::UserGroups::ManageableUserGroups.for(current_user).verified.map { |g| [g.name, g.id] }, include_blank: current_user.name %>
45
- <% end %>
46
-
47
41
  <% if initiative_type.attachments_enabled? %>
48
42
  <%= f.attachment :documents,
49
43
  multiple: true,
@@ -66,9 +60,11 @@
66
60
  <% end %>
67
61
 
68
62
  <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
69
- <%= link_to :back, class: "button button__sm md:button__lg button__text-secondary" do %>
70
- <%= icon "arrow-left-line", class: "fill-current" %>
71
- <%= t(".back") %>
63
+ <% if current_initiative %>
64
+ <%= link_to discard_initiative_path(current_initiative), class: "button button__sm md:button__lg button__text-secondary", method: :delete, data: { confirm: t(".confirm_discard") } do %>
65
+ <%= icon "delete-bin-line", class: "fill-current" %>
66
+ <%= t(".discard") %>
67
+ <% end %>
72
68
  <% end %>
73
69
  <%= f.submit t(".continue"), class: "button button__sm md:button__lg button__secondary", data: { disable_with: true } %>
74
70
  </div>
@@ -6,28 +6,31 @@
6
6
  <% end %>
7
7
  <% end %>
8
8
 
9
+ <% is_validating = current_initiative.validating? %>
10
+
9
11
  <% announcement_body = capture do %>
10
- <%= t("callout_text", scope: "decidim.initiatives.create_initiative.finish") %>
11
- <%= link_to t(".more_information"), decidim.page_path("initiatives"), target: "_blank", class: "button button__sm button__text-secondary block text-left" %>
12
+ <% if is_validating %>
13
+ <%= t("callout_text_validating", scope: "decidim.initiatives.create_initiative.finish") %>
14
+ <% else %>
15
+ <%= t("callout_text_created", scope: "decidim.initiatives.create_initiative.finish") %>
16
+ <% end %>
12
17
  <% end %>
13
18
 
14
19
  <%= cell("decidim/announcement", { body: announcement_body }, callout_class: "secondary") %>
15
20
 
16
21
  <div class="form__wrapper">
17
- <p><%== t "publish_helper_text", scope: "decidim.initiatives.create_initiative.finish_help" %></p>
22
+ <p><%= t "publish_helper_text_html", scope: "decidim.initiatives.create_initiative.finish" %></p>
18
23
  </div>
19
24
 
20
25
  <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
21
- <%= link_to initiatives_path, class: "button button__sm md:button__lg button__text-secondary" do %>
22
- <%= icon "arrow-left-line" %>
23
- <span><%= t(".back_to_initiatives") %></span>
24
- <% end %>
25
-
26
- <%= link_to t(".edit_my_initiative"), edit_initiative_path(current_initiative), class: "button button__sm md:button__lg button__transparent-secondary md:ml-auto" %>
27
-
28
- <%= link_to t(".go_to_my_initiatives"), decidim_initiatives.initiatives_path(filter: { author: "myself", with_any_state: "" }), class: "button button__sm md:button__lg button__secondary" %>
26
+ <% if is_validating %>
27
+ <%= link_to t(".go_to_initiatives"), decidim_initiatives.initiatives_path, class: "button button__sm md:button__lg button__secondary" %>
28
+ <% else %>
29
+ <%= link_to fill_data_create_initiative_index_path, class: "button button__sm md:button__lg button__text-secondary" do %>
30
+ <%= icon "arrow-left-line", class: "fill-current" %>
31
+ <%= t("back", scope: "decidim.initiatives.create_initiative.previous_form") %>
32
+ <% end %>
29
33
 
30
- <% unless promotal_committee_required? %>
31
- <%= link_to t(".send_my_initiative"), decidim_initiatives.send_to_technical_validation_initiative_path(current_initiative), class: "button button__sm md:button__lg button__secondary", data: { confirm: t(".confirm") } %>
34
+ <%= render partial: "send_to_technical_validation_button" %>
32
35
  <% end %>
33
36
  </div>
@@ -1,19 +1,46 @@
1
1
  <% add_decidim_page_title(t("new", scope: "decidim.initiatives.create_initiative.select_initiative_type")) %>
2
2
  <% announcement_body = capture do %>
3
- <%= t ".individual_help_text", committee_size: current_initiative.minimum_committee_members %>
4
- <%= link_to t(".more_information"), decidim.page_path("initiatives"), target: "_blank", class: "button button__sm button__text-secondary block text-left" %>
3
+ <%= t ".individual_help_text" %>
5
4
  <% end %>
6
5
 
7
6
  <%= cell("decidim/announcement", { body: announcement_body }, callout_class: "secondary") %>
8
7
 
9
- <div class="form__wrapper">
10
- <%= render partial: "share_committee_link" %>
8
+ <h3 class="title-decorator text-2xl my-8"><%= t(".invite_link_title") %></h3>
9
+
10
+ <%= render partial: "share_committee_link" %>
11
+
12
+ <h3 class="title-decorator text-2xl mb-8 mt-10"><%= t(".promoters_committee_title") %></h3>
13
+
14
+ <div class="block">
15
+ <span class="help-text mb-4">
16
+ <%= t(".promoters_committee_help_html", committee_members_left: minimum_committee_members - promoters_committee_members.count,
17
+ committee_members_count: promoters_committee_members.count,
18
+ committee_size: minimum_committee_members) %>
19
+ </span>
20
+ </div>
21
+
22
+ <% if promoters_committee_members.count.positive? %>
23
+ <div class="block">
24
+ <% current_initiative.committee_members.each do |request| %>
25
+ <%= render partial: "committee_member", locals: { request: request } %>
26
+ <% end %>
27
+ </div>
28
+ <% end %>
29
+
30
+ <div class="block">
31
+ <span class="help-text mt-4 mb-8 font-semibold">
32
+ <%= t(".promoters_committee_help_2") %>
33
+ </span>
11
34
  </div>
12
35
 
13
36
  <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
14
- <%= link_to :back, class: "button button__sm md:button__lg button__text-secondary" do %>
37
+ <%= link_to fill_data_create_initiative_index_path, class: "button button__sm md:button__lg button__text-secondary" do %>
15
38
  <%= icon "arrow-left-line", class: "fill-current" %>
16
39
  <%= t("back", scope: "decidim.initiatives.create_initiative.previous_form") %>
17
40
  <% end %>
18
- <%= link_to t("continue", scope: "decidim.initiatives.create_initiative.previous_form"), finish_create_initiative_index_path, class: "button button__sm md:button__lg button__secondary" %>
41
+ <div>
42
+ <%= render partial: "send_to_technical_validation_button" %>
43
+ </div>
19
44
  </div>
45
+
46
+ <%= render partial: "return_to_initiatives_button" %>
@@ -1,46 +1,60 @@
1
1
  <% add_decidim_page_title(t("new", scope: "decidim.initiatives.create_initiative.select_initiative_type")) %>
2
2
  <% default_type = available_initiative_types.first %>
3
3
  <% announcement_body = capture do %>
4
- <%= t("select_initiative_type_help", scope: "decidim.initiatives.create_initiative.select_initiative_type") %>
4
+ <%= t("select_initiative_type_help_html", scope: "decidim.initiatives.create_initiative.select_initiative_type") %>
5
+ <br>
5
6
  <%= link_to t("more_information", scope: "decidim.initiatives.create_initiative.select_initiative_type"), decidim.page_path("initiatives"), target: "_blank", class: "button button__sm button__text-secondary block text-left" %>
6
7
  <% end %>
7
8
 
8
9
  <%= cell("decidim/announcement", { body: announcement_body }, callout_class: "secondary") %>
9
10
 
10
- <div class="initiatives__selection">
11
- <% initiative_types_each do |type| %>
12
- <% if allowed_to?(:create, :initiative, { initiative_type: type }) %>
13
- <%= decidim_form_for(@form, url: select_initiative_type_create_initiative_index_path, method: :put, html: { id: "new_initiative_#{type.id}", class: "form-defaults " }) do |f| %>
14
- <%= f.hidden_field :type_id, value: type.id, id: "initiative_type_id_#{type.id}" %>
15
- <button class="card__highlight w-full">
16
- <%= icon "lightbulb-flash-line", class: "verification__icon " %>
17
- <div class="initiatives__selection__text">
18
- <h2 class="h5 text-secondary"><%= translated_attribute(type.title) %></h2>
19
- <span><%= decidim_sanitize_admin(translated_attribute(type.description)) %></span>
20
- </div>
21
- <%= icon "arrow-right-s-line", class: "fill-secondary initiatives__selection__icon" %>
22
- </button>
23
- <% end %>
24
- <% else %>
25
- <div class="card__highlight card__highlight-authorized">
26
- <%= icon "lightbulb-flash-line", class: "verification__icon " %>
27
- <div class="initiatives__selection__text">
28
- <h2 class="h5 text-secondary"><%= translated_attribute(type.title) %></h2>
29
- <span><%= decidim_sanitize_admin(translated_attribute(type.description)) %></span>
30
- <%= action_authorized_link_to(
11
+ <h3 class="title-decorator text-2xl mt-8"><%= t(".subtitle") %></h3>
12
+
13
+ <div class="initiatives__selection" id="select-initiative-type">
14
+ <%= decidim_form_for(@form, url: select_initiative_type_create_initiative_index_path, method: :put, html: { id: "new_initiative_form", class: "form-defaults " }) do |f| %>
15
+ <% initiative_types_each do |type| %>
16
+ <% is_allowed = allowed_to?(:create, :initiative, { initiative_type: type }) %>
17
+
18
+ <%= render layout: "decidim/application/radio_accordion",
19
+ locals: {
20
+ panel_id: type.id,
21
+ title: translated_attribute(type.title),
22
+ input_radio_name: "initiative[type_id]",
23
+ input_radio_value: type.id,
24
+ show_more_text: t("show_more", scope: "decidim.initiatives.create_initiative.select_initiative_type"),
25
+ show_less_text: t("show_less", scope: "decidim.initiatives.create_initiative.select_initiative_type"),
26
+ disabled: !is_allowed
27
+ } do %>
28
+ <p>
29
+ <%= decidim_sanitize_admin(translated_attribute(type.description)) %>
30
+ </p>
31
+
32
+ <% if !is_allowed %>
33
+ <p>
34
+ <%= action_authorized_link_to(
31
35
  :create,
32
36
  fill_data_create_initiative_index_path(initiative: { type_id: type.id }),
33
37
  authorizations_modal_path: authorization_create_modal_initiative_path(type),
34
38
  permissions_holder: type,
35
- class: "button button__sm button__secondary",
39
+ class: "button button__sm button__transparent-secondary",
36
40
  "data-dialog-open": "not-authorized-modal",
37
41
  onclick: "event.preventDefault();"
38
42
  ) do %>
39
43
  <%= t("verification_required", scope: "decidim.initiatives.create_initiative.select_initiative_type") %>
40
- <% end %>
41
- </div>
42
- </div>
44
+ <% end %>
45
+ </p>
46
+ <% end %>
47
+
48
+ <p>
49
+ <%= link_to t("consult_existing_initiatives", scope: "decidim.initiatives.create_initiative.select_initiative_type"),
50
+ initiatives_path(filter: { with_any_type: type.id }), target: "_blank" %>
51
+ </p>
52
+ <% end %>
43
53
  <% end %>
54
+
55
+ <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between border-0">
56
+ <%= f.submit t(".continue"), class: "button button__sm md:button__lg button__secondary" %>
57
+ </div>
44
58
  <% end %>
45
59
  </div>
46
60
 
@@ -0,0 +1,22 @@
1
+ <div class="form__wrapper">
2
+ <label for="mobile_phone_verification_code">
3
+ <%= t("decidim.initiatives.initiative_signatures.sms_phone_number.your_confirmation_code") %>
4
+ <div class="flex gap-x-4" data-check-code>
5
+ <% (0..5).each do |i| %>
6
+ <input pattern="^[0-9]$" maxlength="1" size="1" type="tel" class="" name="mobile_phone[verification_code][<%= i %>]" data-verification-code="<%= i %>">
7
+ <% end %>
8
+ <%= form.hidden_field(:verification_code, data: { check_code_path: sms_code_initiative_signatures_path }) %>
9
+ </div>
10
+ </label>
11
+ <%= cell("decidim/announcement", t("decidim.initiatives.initiative_signatures.sms_phone_number.your_code_is_correct"), callout_class: "success code-correct-announcement hidden") %>
12
+ <%= cell("decidim/announcement", t("decidim.initiatives.initiative_signatures.sms_phone_number.your_code_is_incorrect"), callout_class: "warning code-incorrect-announcement hidden") %>
13
+
14
+ <button type="submit" class="button button__lg button__secondary hidden" disabled data-submit-verification-code>
15
+ <span><%= t("decidim.initiatives.initiative_signatures.sms_phone_number.continue") %></span>
16
+ <%= icon "arrow-right-line", class: "fill-current" %>
17
+ </button>
18
+ </div>
19
+
20
+ <div class="editor-content" data-resend-code>
21
+ <%= t("decidim.initiatives.initiative_signatures.sms_phone_number.resend_code_html", new_code_path: sms_phone_number_initiative_signatures_path) %>
22
+ </div>
@@ -0,0 +1,13 @@
1
+ <% disabled = local_assigns[:disabled] %>
2
+
3
+ <div class="text-left editor-content">
4
+ <p><%= t("decidim.initiatives.initiative_signatures.sms_phone_number.help_enter_your_number") %></p>
5
+ </div>
6
+
7
+ <div class="form__wrapper">
8
+ <%= sms_phone_number_form.text_field :mobile_phone_number, type: "tel", disabled: %>
9
+ <button class="button button__lg button__secondary" <%= disabled ? "disabled" : "" %>>
10
+ <span><%= t("decidim.initiatives.initiative_signatures.sms_phone_number.receive_code") %></span>
11
+ <%= icon "arrow-right-line", class: "fill-current" %>
12
+ </button>
13
+ </div>
@@ -1,32 +1,33 @@
1
- <%= cell("decidim/announcement", t("decidim.initiatives.initiative_signatures.fill_personal_data.help"), callout_class: "secondary") %>
1
+ <% custom_partial_path = lookup_context.exists?(@form.to_partial_path, [], true) && @form.to_partial_path %>
2
+ <% unless custom_partial_path %>
3
+ <%= cell("decidim/announcement", t("decidim.initiatives.initiative_signatures.fill_personal_data.help"), callout_class: "secondary") %>
4
+ <% end %>
2
5
 
3
- <%= decidim_form_for(@form, url: fill_personal_data_initiative_signatures_path, method: :put) do |f| %>
6
+ <%= decidim_form_for(@form, url: fill_personal_data_initiative_signatures_path, method: :put, builder: Decidim::AuthorizationFormBuilder) do |f| %>
4
7
  <%= form_required_explanation %>
5
- <div>
6
- <div class="form__wrapper">
7
- <%= f.text_field :name_and_surname, autofocus: true, required: true %>
8
- </div>
9
-
10
- <div class="form__wrapper">
11
- <%= f.text_field :document_number, required: true %>
12
- </div>
13
8
 
9
+ <% if custom_partial_path %>
10
+ <%= render partial: custom_partial_path, locals: { handler: @form, form: f } %>
11
+ <% else %>
14
12
  <div class="form__wrapper">
15
- <%= f.date_field :date_of_birth, min: 120.years.ago.to_date, max: 16.years.ago.to_date, value: 35.years.ago.to_date %>
13
+ <%= f.all_fields %>
16
14
  </div>
15
+ <% end %>
17
16
 
18
- <div class="form__wrapper">
19
- <%= f.text_field :postal_code, required: true %>
20
- </div>
21
-
22
- <div>
23
- <small>
24
- <%= strip_tags(translated_attribute(extra_data_legal_information)) %>
25
- </small>
26
- </div>
17
+ <div class="editor-content">
18
+ <small>
19
+ <%= decidim_sanitize_admin(translated_attribute(extra_data_legal_information)) %>
20
+ </small>
27
21
  </div>
28
22
 
29
- <div class="form__wrapper-block">
30
- <%= f.submit t(".continue"), class: "button button__sm md:button__lg button__secondary" %>
23
+ <% if current_user.ephemeral? && !current_user.tos_accepted? %>
24
+ <%= render partial: "/decidim/verifications/authorizations/tos_acceptance_field", locals: { form: f } %>
25
+ <% end %>
26
+
27
+ <div class="form__wrapper">
28
+ <button type="submit" class="button button__lg button__secondary">
29
+ <span><%= t(".continue") %></span>
30
+ <%= icon "arrow-right-line", class: "fill-current" %>
31
+ </button>
31
32
  </div>
32
33
  <% end %>
@@ -1,6 +1,18 @@
1
- <%= cell("decidim/announcement", t("decidim.initiatives.initiative_votes.create.success_html", title: translated_attribute(current_initiative.title)), callout_class: "secondary") %>
1
+ <div class="flex flex-col gap-4 items-center text-center my-12">
2
+ <%= success_animation %>
2
3
 
3
- <%= link_to initiative_path(current_initiative), class: "button button__sm md:button__lg button__text-secondary" do %>
4
- <%= icon "arrow-left-line" %>
5
- <%= t(".back_to_initiative") %>
6
- <% end %>
4
+ <h1 class="h1 inline-block">
5
+ <%= t("title", scope: "decidim.initiatives.initiative_signatures.finish") %>
6
+ </h1>
7
+
8
+ <p>
9
+ <%= t("decidim.initiatives.initiative_votes.create.success_html", title: translated_attribute(current_initiative.title)) %>
10
+ </p>
11
+ </div>
12
+
13
+ <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
14
+ <%= link_to initiative_path(current_initiative), class: "button button__sm md:button__lg button__secondary mr-auto !ml-0" do %>
15
+ <%= icon "arrow-left-line", class: "fill-current" %>
16
+ <%= t("back_to_initiative", scope: "decidim.initiatives.initiative_signatures.finish") %>
17
+ <% end %>
18
+ </div>