decidim-initiatives 0.27.5 → 0.28.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (238) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -3
  3. data/app/cells/decidim/initiatives/content_blocks/highlighted_initiatives_cell.rb +17 -18
  4. data/app/cells/decidim/initiatives/initiative_cell.rb +6 -1
  5. data/app/cells/decidim/initiatives/initiative_dropdown_metadata_cell.rb +19 -0
  6. data/app/cells/decidim/initiatives/initiative_g_cell.rb +31 -0
  7. data/app/cells/decidim/initiatives/initiative_metadata_g_cell.rb +62 -0
  8. data/app/cells/decidim/initiatives/initiative_s_cell.rb +15 -0
  9. data/app/cells/decidim/initiatives_votes/vote/show.erb +25 -19
  10. data/app/cells/decidim/initiatives_votes/vote_cell.rb +3 -1
  11. data/app/commands/decidim/initiatives/admin/accept_initiative.rb +40 -0
  12. data/app/commands/decidim/initiatives/admin/create_initiative_type.rb +1 -1
  13. data/app/commands/decidim/initiatives/admin/create_initiative_type_scope.rb +1 -1
  14. data/app/commands/decidim/initiatives/admin/discard_initiative.rb +40 -0
  15. data/app/commands/decidim/initiatives/admin/publish_initiative.rb +1 -1
  16. data/app/commands/decidim/initiatives/admin/reject_initiative.rb +40 -0
  17. data/app/commands/decidim/initiatives/admin/send_initiative_to_technical_validation.rb +2 -2
  18. data/app/commands/decidim/initiatives/admin/unpublish_initiative.rb +1 -1
  19. data/app/commands/decidim/initiatives/admin/update_initiative.rb +1 -1
  20. data/app/commands/decidim/initiatives/admin/update_initiative_answer.rb +1 -1
  21. data/app/commands/decidim/initiatives/admin/update_initiative_type.rb +1 -1
  22. data/app/commands/decidim/initiatives/admin/update_initiative_type_scope.rb +1 -1
  23. data/app/commands/decidim/initiatives/admin/update_initiatives_settings.rb +1 -1
  24. data/app/commands/decidim/initiatives/attachment_methods.rb +2 -24
  25. data/app/commands/decidim/initiatives/create_initiative.rb +19 -14
  26. data/app/commands/decidim/initiatives/send_initiative_to_technical_validation.rb +2 -2
  27. data/app/commands/decidim/initiatives/spawn_committee_request.rb +1 -1
  28. data/app/commands/decidim/initiatives/unvote_initiative.rb +1 -1
  29. data/app/commands/decidim/initiatives/update_initiative.rb +9 -2
  30. data/app/commands/decidim/initiatives/validate_mobile_phone.rb +2 -2
  31. data/app/commands/decidim/initiatives/vote_initiative.rb +5 -5
  32. data/app/constraints/decidim/initiatives/current_initiative.rb +1 -1
  33. data/app/controllers/concerns/decidim/initiatives/admin/filterable.rb +2 -2
  34. data/app/controllers/concerns/decidim/initiatives/needs_initiative.rb +1 -1
  35. data/app/controllers/decidim/initiatives/admin/answers_controller.rb +3 -0
  36. data/app/controllers/decidim/initiatives/admin/committee_requests_controller.rb +2 -0
  37. data/app/controllers/decidim/initiatives/admin/components_controller.rb +3 -0
  38. data/app/controllers/decidim/initiatives/admin/initiative_attachments_controller.rb +2 -0
  39. data/app/controllers/decidim/initiatives/admin/initiatives_controller.rb +17 -6
  40. data/app/controllers/decidim/initiatives/admin/initiatives_permissions_controller.rb +3 -0
  41. data/app/controllers/decidim/initiatives/admin/initiatives_settings_controller.rb +2 -0
  42. data/app/controllers/decidim/initiatives/admin/initiatives_type_scopes_controller.rb +30 -0
  43. data/app/controllers/decidim/initiatives/admin/initiatives_types_controller.rb +14 -0
  44. data/app/controllers/decidim/initiatives/admin/initiatives_types_permissions_controller.rb +21 -0
  45. data/app/controllers/decidim/initiatives/admin/moderations/reports_controller.rb +2 -2
  46. data/app/controllers/decidim/initiatives/admin/moderations_controller.rb +4 -2
  47. data/app/controllers/decidim/initiatives/application_controller.rb +0 -1
  48. data/app/controllers/decidim/initiatives/authorization_create_modals_controller.rb +25 -0
  49. data/app/controllers/decidim/initiatives/authorization_sign_modals_controller.rb +2 -2
  50. data/app/controllers/decidim/initiatives/committee_requests_controller.rb +0 -2
  51. data/app/controllers/decidim/initiatives/create_initiative_controller.rb +62 -115
  52. data/app/controllers/decidim/initiatives/initiative_signatures_controller.rb +113 -81
  53. data/app/controllers/decidim/initiatives/initiative_types_controller.rb +7 -0
  54. data/app/controllers/decidim/initiatives/initiatives_controller.rb +37 -17
  55. data/app/controllers/decidim/initiatives/versions_controller.rb +0 -1
  56. data/app/events/decidim/initiatives/admin/initiative_sent_to_technical_validation_event.rb +1 -1
  57. data/app/events/decidim/initiatives/admin/support_threshold_reached_event.rb +1 -1
  58. data/app/events/decidim/initiatives/approve_membership_request_event.rb +12 -12
  59. data/app/events/decidim/initiatives/create_initiative_event.rb +6 -6
  60. data/app/events/decidim/initiatives/endorse_initiative_event.rb +1 -1
  61. data/app/events/decidim/initiatives/extend_initiative_event.rb +1 -1
  62. data/app/events/decidim/initiatives/initiative_sent_to_technical_validation_event.rb +1 -1
  63. data/app/events/decidim/initiatives/milestone_completed_event.rb +1 -1
  64. data/app/events/decidim/initiatives/revoke_membership_request_event.rb +12 -12
  65. data/app/events/decidim/initiatives/spawn_committee_request_event.rb +12 -12
  66. data/app/forms/decidim/initiatives/admin/initiative_form.rb +1 -1
  67. data/app/forms/decidim/initiatives/initiative_form.rb +22 -31
  68. data/app/forms/decidim/initiatives/previous_form.rb +4 -0
  69. data/app/forms/decidim/initiatives/vote_form.rb +11 -11
  70. data/app/helpers/decidim/initiatives/admin/initiatives_helper.rb +1 -1
  71. data/app/helpers/decidim/initiatives/application_helper.rb +4 -61
  72. data/app/helpers/decidim/initiatives/initiative_helper.rb +48 -5
  73. data/app/helpers/decidim/initiatives/initiatives_helper.rb +33 -12
  74. data/app/jobs/decidim/initiatives/export_initiatives_job.rb +1 -1
  75. data/app/models/decidim/initiative.rb +16 -14
  76. data/app/models/decidim/initiatives_vote.rb +1 -1
  77. data/app/packs/entrypoints/decidim_initiatives.js +3 -0
  78. data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_initiatives.svg +42 -1
  79. data/app/packs/src/decidim/initiatives/application.js +0 -1
  80. data/app/packs/src/decidim/initiatives/scoped_type.js +1 -1
  81. data/app/packs/stylesheets/decidim/initiatives/initiatives-votes.scss +21 -21
  82. data/app/packs/stylesheets/decidim/initiatives/print-initiative.scss +47 -35
  83. data/app/packs/stylesheets/initiatives.scss +171 -0
  84. data/app/permissions/decidim/initiatives/permissions.rb +3 -3
  85. data/app/presenters/decidim/initiatives/admin_log/initiative_presenter.rb +2 -2
  86. data/app/presenters/decidim/initiatives/admin_log/initiatives_settings_presenter.rb +2 -2
  87. data/app/presenters/decidim/initiatives/admin_log/initiatives_type_presenter.rb +2 -2
  88. data/app/queries/decidim/initiatives/organization_prioritized_initiatives.rb +1 -1
  89. data/app/queries/decidim/initiatives/similar_initiatives.rb +2 -2
  90. data/app/queries/decidim/initiatives/support_period_finished_initiatives.rb +1 -1
  91. data/app/queries/decidim/initiatives/user_authorizations.rb +1 -1
  92. data/app/services/decidim/initiatives/pdf_signature_example.rb +44 -52
  93. data/app/views/decidim/initiatives/_modal.html.erb +15 -0
  94. data/app/views/decidim/initiatives/admin/answers/_info_initiative.html.erb +21 -19
  95. data/app/views/decidim/initiatives/admin/answers/edit.html.erb +41 -27
  96. data/app/views/decidim/initiatives/admin/committee_requests/index.html.erb +41 -48
  97. data/app/views/decidim/initiatives/admin/exports/_dropdown.html.erb +8 -7
  98. data/app/views/decidim/initiatives/admin/initiatives/_form.html.erb +111 -95
  99. data/app/views/decidim/initiatives/admin/initiatives/_initiative_attachments.erb +7 -7
  100. data/app/views/decidim/initiatives/admin/initiatives/_signatures.html.erb +87 -0
  101. data/app/views/decidim/initiatives/admin/initiatives/edit.html.erb +72 -60
  102. data/app/views/decidim/initiatives/admin/initiatives/export_pdf_signatures.html.erb +8 -0
  103. data/app/views/decidim/initiatives/admin/initiatives/export_pdf_signatures.pdf.erb +5 -78
  104. data/app/views/decidim/initiatives/admin/initiatives/index.html.erb +76 -75
  105. data/app/views/decidim/initiatives/admin/initiatives_settings/_form.html.erb +7 -8
  106. data/app/views/decidim/initiatives/admin/initiatives_settings/edit.html.erb +17 -5
  107. data/app/views/decidim/initiatives/admin/initiatives_type_scopes/_form.html.erb +11 -6
  108. data/app/views/decidim/initiatives/admin/initiatives_type_scopes/edit.html.erb +16 -22
  109. data/app/views/decidim/initiatives/admin/initiatives_type_scopes/new.html.erb +17 -15
  110. data/app/views/decidim/initiatives/admin/initiatives_types/_form.html.erb +93 -76
  111. data/app/views/decidim/initiatives/admin/initiatives_types/_initiative_type_scopes.html.erb +35 -33
  112. data/app/views/decidim/initiatives/admin/initiatives_types/edit.html.erb +16 -12
  113. data/app/views/decidim/initiatives/admin/initiatives_types/index.html.erb +39 -48
  114. data/app/views/decidim/initiatives/admin/initiatives_types/new.html.erb +16 -9
  115. data/app/views/decidim/initiatives/committee_requests/new.html.erb +21 -19
  116. data/app/views/decidim/initiatives/create_initiative/_share_committee_link.html.erb +15 -20
  117. data/app/views/decidim/initiatives/create_initiative/fill_data.html.erb +62 -100
  118. data/app/views/decidim/initiatives/create_initiative/finish.html.erb +24 -28
  119. data/app/views/decidim/initiatives/create_initiative/promotal_committee.html.erb +15 -17
  120. data/app/views/decidim/initiatives/create_initiative/select_initiative_type.html.erb +32 -46
  121. data/app/views/decidim/initiatives/initiative_signatures/_wizard_steps.html.erb +15 -19
  122. data/app/views/decidim/initiatives/initiative_signatures/fill_personal_data.html.erb +25 -36
  123. data/app/views/decidim/initiatives/initiative_signatures/finish.html.erb +5 -16
  124. data/app/views/decidim/initiatives/initiative_signatures/sms_code.html.erb +8 -19
  125. data/app/views/decidim/initiatives/initiative_signatures/sms_phone_number.html.erb +8 -20
  126. data/app/views/decidim/initiatives/initiatives/_committee_members.html.erb +48 -66
  127. data/app/views/decidim/initiatives/initiatives/_form.html.erb +49 -95
  128. data/app/views/decidim/initiatives/initiatives/_initiative_badge.html.erb +3 -5
  129. data/app/views/decidim/initiatives/initiatives/_initiative_hero.html.erb +13 -0
  130. data/app/views/decidim/initiatives/initiatives/_initiatives.html.erb +6 -15
  131. data/app/views/decidim/initiatives/initiatives/_interactions.html.erb +1 -1
  132. data/app/views/decidim/initiatives/initiatives/_new_initiative_button.html.erb +28 -0
  133. data/app/views/decidim/initiatives/initiatives/_progress_bar.html.erb +2 -6
  134. data/app/views/decidim/initiatives/initiatives/_result.html.erb +15 -21
  135. data/app/views/decidim/initiatives/initiatives/_send_to_technical_validation.html.erb +3 -3
  136. data/app/views/decidim/initiatives/initiatives/_tags_type.html.erb +1 -0
  137. data/app/views/decidim/initiatives/initiatives/_vote_button.html.erb +9 -9
  138. data/app/views/decidim/initiatives/initiatives/_vote_cabin.html.erb +7 -7
  139. data/app/views/decidim/initiatives/initiatives/edit.html.erb +63 -68
  140. data/app/views/decidim/initiatives/initiatives/index.html.erb +17 -18
  141. data/app/views/decidim/initiatives/initiatives/index.js.erb +0 -5
  142. data/app/views/decidim/initiatives/initiatives/print.html.erb +123 -120
  143. data/app/views/decidim/initiatives/initiatives/show.html.erb +188 -70
  144. data/app/views/decidim/initiatives/initiatives_mailer/notify_creation.html.erb +2 -2
  145. data/app/views/decidim/initiatives/initiatives_type_scopes/search.html.erb +2 -1
  146. data/app/views/decidim/initiatives/versions/show.html.erb +14 -5
  147. data/app/views/layouts/decidim/_initiative_creation_header.html.erb +17 -28
  148. data/app/views/layouts/decidim/_initiative_header.html.erb +3 -23
  149. data/app/views/layouts/decidim/_initiative_header_steps.html.erb +4 -12
  150. data/app/views/layouts/decidim/_initiative_signature_creation_header.html.erb +5 -26
  151. data/app/views/layouts/decidim/admin/initiative.html.erb +12 -13
  152. data/app/views/layouts/decidim/admin/initiatives.html.erb +40 -11
  153. data/app/views/layouts/decidim/initiative.html.erb +16 -11
  154. data/app/views/layouts/decidim/initiative_creation.html.erb +7 -18
  155. data/app/views/layouts/decidim/initiative_head.html.erb +15 -0
  156. data/app/views/layouts/decidim/initiative_signature_creation.html.erb +3 -11
  157. data/config/assets.rb +0 -1
  158. data/config/initializers/wicked_pdf.rb +1 -1
  159. data/config/locales/ar.yml +1 -93
  160. data/config/locales/ca.yml +65 -104
  161. data/config/locales/cs.yml +70 -109
  162. data/config/locales/de.yml +72 -111
  163. data/config/locales/el.yml +1 -98
  164. data/config/locales/en.yml +69 -108
  165. data/config/locales/es-MX.yml +65 -104
  166. data/config/locales/es-PY.yml +65 -104
  167. data/config/locales/es.yml +65 -104
  168. data/config/locales/eu.yml +66 -105
  169. data/config/locales/fi-plain.yml +67 -106
  170. data/config/locales/fi.yml +67 -106
  171. data/config/locales/fr-CA.yml +69 -108
  172. data/config/locales/fr.yml +67 -106
  173. data/config/locales/ga-IE.yml +0 -35
  174. data/config/locales/gl.yml +1 -89
  175. data/config/locales/hu.yml +25 -105
  176. data/config/locales/id-ID.yml +1 -89
  177. data/config/locales/is-IS.yml +1 -60
  178. data/config/locales/it.yml +6 -111
  179. data/config/locales/ja.yml +62 -106
  180. data/config/locales/lb.yml +6 -86
  181. data/config/locales/lt.yml +52 -103
  182. data/config/locales/lv.yml +1 -99
  183. data/config/locales/nl.yml +6 -104
  184. data/config/locales/no.yml +6 -114
  185. data/config/locales/pl.yml +6 -119
  186. data/config/locales/pt-BR.yml +21 -119
  187. data/config/locales/pt.yml +6 -111
  188. data/config/locales/ro-RO.yml +13 -108
  189. data/config/locales/ru.yml +1 -68
  190. data/config/locales/sk.yml +1 -85
  191. data/config/locales/sl.yml +3 -5
  192. data/config/locales/sv.yml +16 -107
  193. data/config/locales/tr-TR.yml +9 -110
  194. data/config/locales/uk.yml +1 -68
  195. data/config/locales/zh-CN.yml +6 -102
  196. data/config/locales/zh-TW.yml +31 -95
  197. data/db/migrate/20171017091734_add_scopes_for_all_initiative_types.rb +1 -1
  198. data/db/migrate/20171017095143_update_initiative_scoped_type.rb +1 -1
  199. data/db/migrate/20191002082220_move_signature_type_to_initative_type.rb +1 -1
  200. data/lib/decidim/api/initiative_committee_member_type.rb +2 -2
  201. data/lib/decidim/initiatives/admin_engine.rb +13 -93
  202. data/lib/decidim/initiatives/content_blocks/registry_manager.rb +22 -0
  203. data/lib/decidim/initiatives/engine.rb +45 -23
  204. data/lib/decidim/initiatives/menu.rb +150 -0
  205. data/lib/decidim/initiatives/participatory_space.rb +6 -91
  206. data/lib/decidim/initiatives/query_extensions.rb +5 -5
  207. data/lib/decidim/initiatives/seeds.rb +95 -0
  208. data/lib/decidim/initiatives/test/factories.rb +25 -7
  209. data/lib/decidim/initiatives/version.rb +1 -1
  210. data/lib/decidim/initiatives.rb +1 -1
  211. data/lib/tasks/decidim_initiatives.rake +2 -2
  212. data/lib/tasks/initiatives/upgrade/decidim_initiatives_upgrade_tasks.rake +1 -1
  213. metadata +47 -76
  214. data/app/cells/decidim/initiatives/content_blocks/highlighted_initiatives/show.erb +0 -28
  215. data/app/cells/decidim/initiatives/initiative_m/author.erb +0 -10
  216. data/app/cells/decidim/initiatives/initiative_m/footer.erb +0 -28
  217. data/app/cells/decidim/initiatives/initiative_m/tags.erb +0 -9
  218. data/app/cells/decidim/initiatives/initiative_m_cell.rb +0 -77
  219. data/app/controllers/decidim/initiatives/widgets_controller.rb +0 -30
  220. data/app/packs/stylesheets/decidim/initiatives/admin.scss +0 -33
  221. data/app/packs/stylesheets/decidim/initiatives/initiatives.scss +0 -64
  222. data/app/packs/stylesheets/decidim/initiatives/popularity_item.scss +0 -76
  223. data/app/packs/stylesheets/decidim/initiatives/statistics.scss +0 -15
  224. data/app/views/decidim/initiatives/create_initiative/_finish_help.html.erb +0 -2
  225. data/app/views/decidim/initiatives/create_initiative/previous_form.html.erb +0 -40
  226. data/app/views/decidim/initiatives/create_initiative/show_similar_initiatives.html.erb +0 -23
  227. data/app/views/decidim/initiatives/initiatives/_author.html.erb +0 -35
  228. data/app/views/decidim/initiatives/initiatives/_count.html.erb +0 -1
  229. data/app/views/decidim/initiatives/initiatives/_filters.html.erb +0 -33
  230. data/app/views/decidim/initiatives/initiatives/_filters_small_view.html.erb +0 -18
  231. data/app/views/decidim/initiatives/initiatives/_index_header.html.erb +0 -44
  232. data/app/views/decidim/initiatives/initiatives/_tags.html.erb +0 -7
  233. data/app/views/decidim/initiatives/versions/index.html.erb +0 -8
  234. data/config/environment.rb +0 -3
  235. data/db/seeds/city.jpeg +0 -0
  236. data/db/seeds/city2.jpeg +0 -0
  237. data/lib/decidim/initiatives/initiatives_filter_form_builder.rb +0 -56
  238. data/lib/gem_overrides/origami/date.rb +0 -47
@@ -1,11 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "decidim/components/namer"
4
+
3
5
  module Decidim
4
6
  module Initiatives
5
7
  # A command with all the business logic that creates a new initiative.
6
8
  class CreateInitiative < Decidim::Command
7
9
  include CurrentLocale
8
10
  include ::Decidim::MultipleAttachmentsMethods
11
+ include ::Decidim::GalleryMethods
9
12
 
10
13
  # Public: Initializes the command.
11
14
  #
@@ -19,7 +22,7 @@ module Decidim
19
22
  # Executes the command. Broadcasts these events:
20
23
  #
21
24
  # - :ok when everything is valid.
22
- # - :invalid if the form wasn't valid and we couldn't proceed.
25
+ # - :invalid if the form was not valid and we could not proceed.
23
26
  #
24
27
  # Returns nothing.
25
28
  def call
@@ -30,6 +33,11 @@ module Decidim
30
33
  return broadcast(:invalid) if attachments_invalid?
31
34
  end
32
35
 
36
+ if process_gallery?
37
+ build_gallery
38
+ return broadcast(:invalid) if gallery_invalid?
39
+ end
40
+
33
41
  initiative = create_initiative
34
42
 
35
43
  if initiative.persisted?
@@ -50,8 +58,10 @@ module Decidim
50
58
 
51
59
  initiative.transaction do
52
60
  initiative.save!
61
+
53
62
  @attached_to = initiative
54
63
  create_attachments if process_attachments?
64
+ create_gallery if process_gallery?
55
65
 
56
66
  create_components_for(initiative)
57
67
  send_notification(initiative)
@@ -68,21 +78,16 @@ module Decidim
68
78
  title: { current_locale => form.title },
69
79
  description: { current_locale => form.description },
70
80
  author: current_user,
81
+ scoped_type:,
82
+ signature_type: form.type.signature_type,
71
83
  decidim_user_group_id: form.decidim_user_group_id,
72
- scoped_type: scoped_type,
73
- area: area,
74
- signature_type: form.signature_type,
75
- signature_end_date: signature_end_date,
76
- state: "created",
77
- hashtag: form.hashtag
84
+ decidim_area_id: form.area_id,
85
+ state: "created"
78
86
  )
79
87
  end
80
88
 
81
89
  def scoped_type
82
- InitiativesTypeScope.find_by(
83
- type: form.initiative_type,
84
- scope: form.scope
85
- )
90
+ InitiativesTypeScope.order(:id).find_by(type: form.type)
86
91
  end
87
92
 
88
93
  def signature_end_date
@@ -112,7 +117,7 @@ module Decidim
112
117
 
113
118
  def initialize_pages(component)
114
119
  Decidim::Pages::CreatePage.call(component) do
115
- on(:invalid) { raise "Can't create page" }
120
+ on(:invalid) { raise "Cannot create page" }
116
121
  end
117
122
  end
118
123
 
@@ -130,7 +135,7 @@ module Decidim
130
135
  .from_params(followable_gid: initiative.to_signed_global_id.to_s)
131
136
  .with_context(
132
137
  current_organization: initiative.organization,
133
- current_user: current_user
138
+ current_user:
134
139
  )
135
140
 
136
141
  Decidim::CreateFollow.new(form, current_user).call
@@ -141,7 +146,7 @@ module Decidim
141
146
  .from_params(initiative_id: initiative.id, user_id: initiative.decidim_author_id, state: "accepted")
142
147
  .with_context(
143
148
  current_organization: initiative.organization,
144
- current_user: current_user
149
+ current_user:
145
150
  )
146
151
 
147
152
  Decidim::Initiatives::SpawnCommitteeRequest.new(form, current_user).call
@@ -17,7 +17,7 @@ module Decidim
17
17
  # Executes the command. Broadcasts these events:
18
18
  #
19
19
  # - :ok when everything is valid.
20
- # - :invalid if the form wasn't valid and we couldn't proceed.
20
+ # - :invalid if the form was not valid and we could not proceed.
21
21
  #
22
22
  # Returns nothing.
23
23
  def call
@@ -46,7 +46,7 @@ module Decidim
46
46
  event: "decidim.events.initiatives.initiative_sent_to_technical_validation",
47
47
  event_class: Decidim::Initiatives::InitiativeSentToTechnicalValidationEvent,
48
48
  resource: initiative,
49
- affected_users: affected_users,
49
+ affected_users:,
50
50
  force_send: true
51
51
  }
52
52
 
@@ -17,7 +17,7 @@ module Decidim
17
17
  # Executes the command. Broadcasts these events:
18
18
  #
19
19
  # - :ok when everything is valid.
20
- # - :invalid if the form wasn't valid and we couldn't proceed.
20
+ # - :invalid if the form was not valid and we could not proceed.
21
21
  #
22
22
  # Returns nothing.
23
23
  def call
@@ -16,7 +16,7 @@ module Decidim
16
16
  # Executes the command. Broadcasts these events:
17
17
  #
18
18
  # - :ok when everything is valid, together with the initiative.
19
- # - :invalid if the form wasn't valid and we couldn't proceed.
19
+ # - :invalid if the form was not valid and we could not proceed.
20
20
  #
21
21
  # Returns nothing.
22
22
  def call
@@ -23,7 +23,7 @@ module Decidim
23
23
  # Executes the command. Broadcasts these events:
24
24
  #
25
25
  # - :ok when everything is valid.
26
- # - :invalid if the form wasn't valid and we couldn't proceed.
26
+ # - :invalid if the form was not valid and we could not proceed.
27
27
  #
28
28
  # Returns nothing.
29
29
  def call
@@ -34,6 +34,11 @@ module Decidim
34
34
  return broadcast(:invalid) if attachments_invalid?
35
35
  end
36
36
 
37
+ if process_gallery?
38
+ build_gallery
39
+ return broadcast(:invalid) if gallery_invalid?
40
+ end
41
+
37
42
  @initiative = Decidim.traceability.update!(
38
43
  initiative,
39
44
  current_user,
@@ -43,6 +48,7 @@ module Decidim
43
48
  photo_cleanup!
44
49
  document_cleanup!
45
50
  create_attachments if process_attachments?
51
+ create_gallery if process_gallery?
46
52
 
47
53
  broadcast(:ok, initiative)
48
54
  rescue ActiveRecord::RecordInvalid
@@ -57,7 +63,8 @@ module Decidim
57
63
  attrs = {
58
64
  title: { current_locale => form.title },
59
65
  description: { current_locale => form.description },
60
- hashtag: form.hashtag
66
+ hashtag: form.hashtag,
67
+ decidim_user_group_id: form.decidim_user_group_id
61
68
  }
62
69
 
63
70
  if form.signature_type_updatable?
@@ -18,9 +18,9 @@ module Decidim
18
18
  #
19
19
  # - :ok when everything is valid. Returns the verification metadata of
20
20
  # the form.
21
- # - :invalid if the user doesn't have an authorization for sms in ok
21
+ # - :invalid if the user does not have an authorization for sms in ok
22
22
  # status or the phone number associated with its
23
- # authorization doesn't match the form number.
23
+ # authorization does not match the form number.
24
24
  def call
25
25
  return broadcast(:invalid) unless authorized? && phone_match?
26
26
 
@@ -14,7 +14,7 @@ module Decidim
14
14
  # Executes the command. Broadcasts these events:
15
15
  #
16
16
  # - :ok when everything is valid, together with the proposal vote.
17
- # - :invalid if the form wasn't valid and we couldn't proceed.
17
+ # - :invalid if the form was not valid and we could not proceed.
18
18
  #
19
19
  # Returns nothing.
20
20
  def call
@@ -48,9 +48,9 @@ module Decidim
48
48
  initiative.votes.create!(
49
49
  author: form.signer,
50
50
  encrypted_metadata: form.encrypted_metadata,
51
- timestamp: timestamp,
51
+ timestamp:,
52
52
  hash_id: form.hash_id,
53
- scope: scope
53
+ scope:
54
54
  )
55
55
  end
56
56
  end
@@ -88,13 +88,13 @@ module Decidim
88
88
  affected_users: [initiative.author],
89
89
  followers: initiative.followers - [initiative.author],
90
90
  extra: {
91
- percentage: percentage
91
+ percentage:
92
92
  }
93
93
  )
94
94
  end
95
95
 
96
96
  def notify_support_threshold_reached(before, after)
97
- # Don't need to notify if threshold has already been reached
97
+ # Do not need to notify if threshold has already been reached
98
98
  return if before == after || after != 100
99
99
 
100
100
  Decidim::EventsManager.publish(
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Decidim
4
4
  module Initiatives
5
- # This class infers the current initiative we're scoped to by
5
+ # This class infers the current initiative we are scoped to by
6
6
  # looking at the request parameters and the organization in the request
7
7
  # environment, and injects it into the environment.
8
8
  class CurrentInitiative
@@ -38,11 +38,11 @@ module Decidim
38
38
  end
39
39
 
40
40
  def translated_type_id_eq(id)
41
- translated_attribute(Decidim::InitiativesType.find_by(id: id).title[I18n.locale.to_s])
41
+ translated_attribute(Decidim::InitiativesType.find_by(id:).title[I18n.locale.to_s])
42
42
  end
43
43
 
44
44
  def translated_decidim_area_id_eq(id)
45
- translated_attribute(Decidim::Area.find_by(id: id).name[I18n.locale.to_s])
45
+ translated_attribute(Decidim::Area.find_by(id:).name[I18n.locale.to_s])
46
46
  end
47
47
  end
48
48
  end
@@ -4,7 +4,7 @@ require "active_support/concern"
4
4
 
5
5
  module Decidim
6
6
  module Initiatives
7
- # This module, when injected into a controller, ensures there's an
7
+ # This module, when injected into a controller, ensures there is an
8
8
  # initiative available and deducts it from the context.
9
9
  module NeedsInitiative
10
10
  extend ActiveSupport::Concern
@@ -6,6 +6,9 @@ module Decidim
6
6
  # Controller used to manage the initiatives answers
7
7
  class AnswersController < Decidim::Initiatives::Admin::ApplicationController
8
8
  include Decidim::Initiatives::NeedsInitiative
9
+ include Decidim::Admin::ParticipatorySpaceAdminBreadcrumb
10
+
11
+ add_breadcrumb_item_from_menu :admin_initiative_actions_menu
9
12
 
10
13
  helper Decidim::Initiatives::InitiativeHelper
11
14
  layout "decidim/admin/initiatives"
@@ -7,6 +7,8 @@ module Decidim
7
7
  class CommitteeRequestsController < Decidim::Initiatives::Admin::ApplicationController
8
8
  include InitiativeAdmin
9
9
 
10
+ add_breadcrumb_item_from_menu :admin_initiative_actions_menu
11
+
10
12
  # GET /admin/initiatives/:initiative_id/committee_requests
11
13
  def index
12
14
  enforce_permission_to :index, :initiative_committee_member
@@ -9,6 +9,9 @@ module Decidim
9
9
  layout "decidim/admin/initiative"
10
10
 
11
11
  include NeedsInitiative
12
+ include Decidim::Admin::ParticipatorySpaceAdminBreadcrumb
13
+
14
+ add_breadcrumb_item_from_menu :admin_initiative_menu
12
15
  end
13
16
  end
14
17
  end
@@ -8,6 +8,8 @@ module Decidim
8
8
  include InitiativeAdmin
9
9
  include Decidim::Admin::Concerns::HasAttachments
10
10
 
11
+ add_breadcrumb_item_from_menu :admin_initiative_menu
12
+
11
13
  def after_destroy_path
12
14
  initiative_attachments_path(current_initiative)
13
15
  end
@@ -11,6 +11,7 @@ module Decidim
11
11
  include Decidim::Initiatives::SingleInitiativeType
12
12
  include Decidim::Initiatives::TypeSelectorOptions
13
13
  include Decidim::Initiatives::Admin::Filterable
14
+ include Decidim::Admin::ParticipatorySpaceAdminBreadcrumb
14
15
 
15
16
  helper ::Decidim::Admin::ResourcePermissionsHelper
16
17
  helper Decidim::Initiatives::InitiativeHelper
@@ -83,22 +84,31 @@ module Decidim
83
84
  # DELETE /admin/initiatives/:id/discard
84
85
  def discard
85
86
  enforce_permission_to :discard, :initiative, initiative: current_initiative
86
- current_initiative.discarded!
87
- redirect_to decidim_admin_initiatives.edit_initiative_path(current_initiative)
87
+ DiscardInitiative.call(current_initiative, current_user) do
88
+ on(:ok) do
89
+ redirect_to decidim_admin_initiatives.edit_initiative_path(current_initiative)
90
+ end
91
+ end
88
92
  end
89
93
 
90
94
  # POST /admin/initiatives/:id/accept
91
95
  def accept
92
96
  enforce_permission_to :accept, :initiative, initiative: current_initiative
93
- current_initiative.accepted!
94
- redirect_to decidim_admin_initiatives.edit_initiative_path(current_initiative)
97
+ AcceptInitiative.call(current_initiative, current_user) do
98
+ on(:ok) do
99
+ redirect_to decidim_admin_initiatives.edit_initiative_path(current_initiative)
100
+ end
101
+ end
95
102
  end
96
103
 
97
104
  # DELETE /admin/initiatives/:id/reject
98
105
  def reject
99
106
  enforce_permission_to :reject, :initiative, initiative: current_initiative
100
- current_initiative.rejected!
101
- redirect_to decidim_admin_initiatives.edit_initiative_path(current_initiative)
107
+ RejectInitiative.call(current_initiative, current_user) do
108
+ on(:ok) do
109
+ redirect_to decidim_admin_initiatives.edit_initiative_path(current_initiative)
110
+ end
111
+ end
102
112
  end
103
113
 
104
114
  # GET /admin/initiatives/:id/send_to_technical_validation
@@ -167,6 +177,7 @@ module Decidim
167
177
  format.pdf do
168
178
  send_data(output, filename: "votes_#{current_initiative.id}.pdf", type: "application/pdf")
169
179
  end
180
+ format.html
170
181
  end
171
182
  end
172
183
 
@@ -7,6 +7,9 @@ module Decidim
7
7
  # permissions in the admin panel.
8
8
  class InitiativesPermissionsController < Decidim::Admin::ResourcePermissionsController
9
9
  include Decidim::Initiatives::NeedsInitiative
10
+ include Decidim::Admin::ParticipatorySpaceAdminBreadcrumb
11
+
12
+ add_breadcrumb_item_from_menu :admin_initiative_actions_menu
10
13
 
11
14
  layout "decidim/admin/initiatives"
12
15
 
@@ -8,6 +8,8 @@ module Decidim
8
8
  class InitiativesSettingsController < Decidim::Initiatives::Admin::ApplicationController
9
9
  layout "decidim/admin/initiatives"
10
10
 
11
+ add_breadcrumb_item_from_menu :admin_initiatives_menu
12
+
11
13
  # GET /admin/initiatives_settings/edit
12
14
  def edit
13
15
  enforce_permission_to :update, :initiatives_settings, initiatives_settings: current_initiatives_settings
@@ -5,6 +5,11 @@ module Decidim
5
5
  module Admin
6
6
  # Controller used to manage the available initiative type scopes
7
7
  class InitiativesTypeScopesController < Decidim::Initiatives::Admin::ApplicationController
8
+ include Decidim::TranslatableAttributes
9
+
10
+ before_action :set_controller_breadcrumb
11
+ add_breadcrumb_item_from_menu :admin_initiatives_menu
12
+
8
13
  helper_method :current_initiative_type_scope
9
14
 
10
15
  # GET /admin/initiatives_types/:initiatives_type_id/initiatives_type_scopes/new
@@ -68,10 +73,35 @@ module Decidim
68
73
 
69
74
  private
70
75
 
76
+ def set_controller_breadcrumb
77
+ controller_breadcrumb_items.append(
78
+ {
79
+ label: translated_attribute(current_initiative_type.title),
80
+ url: edit_initiatives_type_path(current_initiative_type),
81
+ active: false
82
+ },
83
+ {
84
+ label: t("initiative_type_scopes", scope: "decidim.admin.menu"),
85
+ active: true
86
+ }
87
+ )
88
+
89
+ if params[:id].present?
90
+ controller_breadcrumb_items << {
91
+ label: translated_attribute(current_initiative_type_scope.scope_name),
92
+ active: true
93
+ }
94
+ end
95
+ end
96
+
71
97
  def current_initiative_type_scope
72
98
  @current_initiative_type_scope ||= InitiativesTypeScope.joins(:type).where(decidim_initiatives_types: { organization: current_organization }).find(params[:id])
73
99
  end
74
100
 
101
+ def current_initiative_type
102
+ @current_initiative_type ||= InitiativesType.find(params[:initiatives_type_id])
103
+ end
104
+
75
105
  def initiative_type_scope_form
76
106
  form(Decidim::Initiatives::Admin::InitiativeTypeScopeForm)
77
107
  end
@@ -6,6 +6,11 @@ module Decidim
6
6
  # Controller used to manage the available initiative types for the current
7
7
  # organization.
8
8
  class InitiativesTypesController < Decidim::Initiatives::Admin::ApplicationController
9
+ include Decidim::TranslatableAttributes
10
+ before_action :set_controller_breadcrumb, except: [:index, :new, :create]
11
+
12
+ add_breadcrumb_item_from_menu :admin_initiatives_menu
13
+
9
14
  helper ::Decidim::Admin::ResourcePermissionsHelper
10
15
  helper_method :current_initiative_type
11
16
 
@@ -83,6 +88,15 @@ module Decidim
83
88
 
84
89
  private
85
90
 
91
+ def set_controller_breadcrumb
92
+ controller_breadcrumb_items <<
93
+ {
94
+ label: translated_attribute(current_initiative_type.title),
95
+ url: edit_initiatives_type_path(current_initiative_type),
96
+ active: true
97
+ }
98
+ end
99
+
86
100
  def current_initiative_type
87
101
  @current_initiative_type ||= InitiativesType.where(organization: current_organization).find(params[:id])
88
102
  end
@@ -6,6 +6,11 @@ module Decidim
6
6
  # Controller that allows managing initiatives types
7
7
  # permissions in the admin panel.
8
8
  class InitiativesTypesPermissionsController < Decidim::Admin::ResourcePermissionsController
9
+ include Decidim::TranslatableAttributes
10
+
11
+ before_action :set_controller_breadcrumb
12
+ add_breadcrumb_item_from_menu :admin_initiatives_menu
13
+
9
14
  layout "decidim/admin/initiatives"
10
15
 
11
16
  register_permissions(::Decidim::Initiatives::Admin::InitiativesTypesPermissionsController,
@@ -15,6 +20,22 @@ module Decidim
15
20
  def permission_class_chain
16
21
  ::Decidim.permissions_registry.chain_for(::Decidim::Initiatives::Admin::InitiativesTypesPermissionsController)
17
22
  end
23
+
24
+ private
25
+
26
+ def set_controller_breadcrumb
27
+ controller_breadcrumb_items.append(
28
+ {
29
+ label: translated_attribute(resource.title),
30
+ url: edit_initiatives_type_path(resource),
31
+ active: false
32
+ },
33
+ {
34
+ label: t("permissions", scope: "decidim.admin.actions"),
35
+ active: true
36
+ }
37
+ )
38
+ end
18
39
  end
19
40
  end
20
41
  end
@@ -4,12 +4,12 @@ module Decidim
4
4
  module Initiatives
5
5
  module Admin
6
6
  module Moderations
7
- # This controller allows admins to manage moderation reports in an conference.
7
+ # This controller allows admins to manage moderation reports in an initiative.
8
8
  class ReportsController < Decidim::Admin::Moderations::ReportsController
9
9
  include InitiativeAdmin
10
10
 
11
11
  def permissions_context
12
- super.merge(current_participatory_space: current_participatory_space)
12
+ super.merge(current_participatory_space:)
13
13
  end
14
14
  end
15
15
  end
@@ -3,12 +3,14 @@
3
3
  module Decidim
4
4
  module Initiatives
5
5
  module Admin
6
- # This controller allows admins to manage moderations in an conference.
6
+ # This controller allows admins to manage moderations in an initiative.
7
7
  class ModerationsController < Decidim::Admin::ModerationsController
8
8
  include InitiativeAdmin
9
9
 
10
+ add_breadcrumb_item_from_menu :admin_initiative_menu
11
+
10
12
  def permissions_context
11
- super.merge(current_participatory_space: current_participatory_space)
13
+ super.merge(current_participatory_space:)
12
14
  end
13
15
  end
14
16
  end
@@ -5,7 +5,6 @@ module Decidim
5
5
  # The main admin application controller for initiatives
6
6
  class ApplicationController < Decidim::ApplicationController
7
7
  include NeedsPermission
8
-
9
8
  register_permissions(::Decidim::Initiatives::ApplicationController,
10
9
  ::Decidim::Initiatives::Permissions,
11
10
  ::Decidim::Admin::Permissions,
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Initiatives
5
+ class AuthorizationCreateModalsController < Decidim::Initiatives::ApplicationController
6
+ helper_method :authorizations, :authorize_action_path
7
+ layout false
8
+
9
+ def show
10
+ @initiative_type = Decidim::InitiativesType.find_by(id: params[:slug], organization: current_organization)
11
+ render template: "decidim/authorization_modals/show"
12
+ end
13
+
14
+ def authorize_action_path(handler_name)
15
+ authorizations.status_for(handler_name).current_path(redirect_url: URI(request.referer).path)
16
+ end
17
+
18
+ private
19
+
20
+ def authorizations
21
+ @authorizations ||= action_authorized_to("create", permissions_holder: @initiative_type)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -12,12 +12,12 @@ module Decidim
12
12
  render template: "decidim/authorization_modals/show"
13
13
  end
14
14
 
15
- private
16
-
17
15
  def authorize_action_path(handler_name)
18
16
  authorizations.status_for(handler_name).current_path(redirect_url: URI(request.referer).path)
19
17
  end
20
18
 
19
+ private
20
+
21
21
  def authorizations
22
22
  @authorizations ||= action_authorized_to("vote", resource: current_initiative, permissions_holder: current_initiative.type)
23
23
  end
@@ -9,8 +9,6 @@ module Decidim
9
9
  helper InitiativeHelper
10
10
  helper Decidim::ActionAuthorizationHelper
11
11
 
12
- layout "layouts/decidim/application"
13
-
14
12
  # GET /initiatives/:initiative_id/committee_requests/new
15
13
  def new
16
14
  enforce_permission_to :request_membership, :initiative, initiative: current_initiative