decidim-core 0.18.1 → 0.19.0

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 (275) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/decidim_core_manifest.js +3 -0
  3. data/app/assets/javascripts/decidim/social_share.js +2 -0
  4. data/app/assets/stylesheets/decidim/extras/_social_share.css.scss +36 -0
  5. data/app/assets/stylesheets/decidim/modules/_input-gallery.scss +24 -0
  6. data/app/assets/stylesheets/decidim/modules/_navbar.scss +1 -1
  7. data/app/cells/decidim/activities_cell.rb +13 -8
  8. data/app/cells/decidim/activity_cell.rb +19 -5
  9. data/app/cells/decidim/address/details.erb +2 -2
  10. data/app/cells/decidim/amendable/amenders_list/show.erb +1 -1
  11. data/app/cells/decidim/amendable/amenders_list_cell.rb +5 -1
  12. data/app/cells/decidim/amendable/announcement_cell.rb +22 -9
  13. data/app/cells/decidim/amendable/wizard_step_form_cell.rb +121 -0
  14. data/app/cells/decidim/announcement_cell.rb +1 -0
  15. data/app/cells/decidim/author_cell.rb +7 -0
  16. data/app/cells/decidim/card_m_cell.rb +3 -1
  17. data/app/cells/decidim/coauthorships_cell.rb +3 -1
  18. data/app/cells/decidim/collapsible_authors_cell.rb +1 -0
  19. data/app/cells/decidim/collapsible_list_cell.rb +1 -0
  20. data/app/cells/decidim/content_blocks/highlighted_content_banner_cell.rb +1 -0
  21. data/app/cells/decidim/content_blocks/last_activity_cell.rb +3 -2
  22. data/app/cells/decidim/content_blocks/metrics_cell.rb +1 -0
  23. data/app/cells/decidim/content_blocks/stats_cell.rb +1 -0
  24. data/app/cells/decidim/content_blocks/sub_hero_cell.rb +1 -0
  25. data/app/cells/decidim/diff_cell.rb +1 -1
  26. data/app/cells/decidim/fingerprint/show.erb +1 -1
  27. data/app/cells/decidim/follow_button_cell.rb +3 -0
  28. data/app/cells/decidim/members_cell.rb +1 -0
  29. data/app/cells/decidim/notifications/show.erb +1 -1
  30. data/app/cells/decidim/profile_cell.rb +1 -0
  31. data/app/cells/decidim/profile_sidebar_cell.rb +4 -0
  32. data/app/cells/decidim/search_results_cell.rb +1 -0
  33. data/app/cells/decidim/search_results_section/show.erb +1 -1
  34. data/app/cells/decidim/tos_page_cell.rb +1 -0
  35. data/app/cells/decidim/user_group_pending_invitations_list_cell.rb +1 -0
  36. data/app/cells/decidim/user_group_pending_requests_list_cell.rb +1 -0
  37. data/app/cells/decidim/wizard_step_form/wizard_aside.erb +14 -0
  38. data/app/cells/decidim/wizard_step_form/wizard_header.erb +18 -0
  39. data/app/cells/decidim/wizard_step_form_cell.rb +112 -0
  40. data/app/commands/decidim/amendable/accept.rb +1 -1
  41. data/app/commands/decidim/amendable/create_draft.rb +70 -0
  42. data/app/commands/decidim/amendable/destroy_draft.rb +40 -0
  43. data/app/commands/decidim/amendable/promote.rb +13 -11
  44. data/app/commands/decidim/amendable/publish_draft.rb +76 -0
  45. data/app/commands/decidim/amendable/update_draft.rb +54 -0
  46. data/app/commands/decidim/amendable/withdraw.rb +31 -15
  47. data/app/commands/decidim/create_follow.rb +1 -0
  48. data/app/commands/decidim/create_omniauth_registration.rb +22 -4
  49. data/app/commands/decidim/create_registration.rb +5 -0
  50. data/app/commands/decidim/delete_follow.rb +1 -0
  51. data/app/commands/decidim/search.rb +1 -0
  52. data/app/controllers/concerns/decidim/action_authorization.rb +2 -0
  53. data/app/controllers/concerns/decidim/amendments_controller.rb +148 -28
  54. data/app/controllers/concerns/decidim/devise_controllers.rb +3 -2
  55. data/app/controllers/concerns/decidim/force_authentication.rb +38 -0
  56. data/app/controllers/concerns/decidim/impersonate_users.rb +1 -0
  57. data/app/controllers/concerns/decidim/locale_switcher.rb +44 -17
  58. data/app/controllers/concerns/decidim/needs_tos_accepted.rb +8 -0
  59. data/app/controllers/concerns/decidim/orderable.rb +36 -0
  60. data/app/controllers/concerns/decidim/participatory_space_context.rb +2 -0
  61. data/app/controllers/concerns/decidim/safe_redirect.rb +24 -0
  62. data/app/controllers/decidim/application_controller.rb +19 -2
  63. data/app/controllers/decidim/devise/confirmations_controller.rb +6 -0
  64. data/app/controllers/decidim/devise/invitations_controller.rb +8 -4
  65. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +4 -1
  66. data/app/controllers/decidim/errors_controller.rb +3 -0
  67. data/app/controllers/decidim/follows_controller.rb +2 -2
  68. data/app/controllers/decidim/messaging/conversations_controller.rb +2 -2
  69. data/app/controllers/decidim/profiles_controller.rb +4 -1
  70. data/app/controllers/decidim/scopes_controller.rb +16 -4
  71. data/app/events/decidim/amendable/amendment_base_event.rb +4 -0
  72. data/app/forms/decidim/account_form.rb +1 -1
  73. data/app/forms/decidim/amendable/create_form.rb +3 -19
  74. data/app/forms/decidim/amendable/edit_form.rb +22 -0
  75. data/app/forms/decidim/amendable/form.rb +42 -20
  76. data/app/forms/decidim/amendable/promote_form.rb +4 -7
  77. data/app/forms/decidim/amendable/publish_form.rb +21 -0
  78. data/app/forms/decidim/amendable/reject_form.rb +1 -1
  79. data/app/forms/decidim/amendable/review_form.rb +9 -4
  80. data/app/forms/decidim/invite_user_form.rb +1 -0
  81. data/app/forms/decidim/notifications_settings_form.rb +1 -0
  82. data/app/forms/decidim/registration_form.rb +4 -3
  83. data/app/forms/decidim/user_group_form.rb +1 -0
  84. data/app/forms/decidim/user_interests_form.rb +1 -0
  85. data/app/helpers/decidim/amendments_helper.rb +33 -19
  86. data/app/helpers/decidim/cells_helper.rb +2 -0
  87. data/app/helpers/decidim/layout_helper.rb +1 -0
  88. data/app/helpers/decidim/map_helper.rb +1 -1
  89. data/app/helpers/decidim/meta_tags_helper.rb +1 -0
  90. data/app/helpers/decidim/resource_reference_helper.rb +1 -0
  91. data/app/jobs/decidim/event_publisher_job.rb +60 -0
  92. data/app/jobs/decidim/metric_job.rb +1 -0
  93. data/app/models/decidim/action_log.rb +12 -0
  94. data/app/models/decidim/amendment.rb +31 -2
  95. data/app/models/decidim/attachment.rb +2 -0
  96. data/app/models/decidim/authorization.rb +1 -0
  97. data/app/models/decidim/category.rb +1 -0
  98. data/app/models/decidim/component.rb +7 -0
  99. data/app/models/decidim/content_block.rb +1 -0
  100. data/app/models/decidim/follow.rb +3 -0
  101. data/app/models/decidim/identity.rb +1 -0
  102. data/app/models/decidim/impersonation_log.rb +2 -0
  103. data/app/models/decidim/newsletter.rb +1 -0
  104. data/app/models/decidim/participatory_process_user_role.rb +1 -0
  105. data/app/models/decidim/participatory_space_private_user.rb +1 -0
  106. data/app/models/decidim/permission_action.rb +2 -0
  107. data/app/models/decidim/report.rb +1 -0
  108. data/app/models/decidim/scope.rb +1 -0
  109. data/app/models/decidim/searchable_resource.rb +1 -1
  110. data/app/models/decidim/static_page.rb +1 -0
  111. data/app/models/decidim/user.rb +2 -0
  112. data/app/permissions/decidim/permissions.rb +18 -14
  113. data/app/permissions/decidim/user_manager_permissions.rb +9 -2
  114. data/app/presenters/decidim/admin_log/organization_presenter.rb +1 -0
  115. data/app/presenters/decidim/admin_log/participatory_space_private_user_presenter.rb +1 -1
  116. data/app/presenters/decidim/admin_log/user_presenter.rb +1 -1
  117. data/app/presenters/decidim/hashtag_presenter.rb +1 -1
  118. data/app/presenters/decidim/log/base_presenter.rb +1 -0
  119. data/app/presenters/decidim/log/diff_presenter.rb +1 -1
  120. data/app/presenters/decidim/log/value_types/area_presenter.rb +1 -0
  121. data/app/presenters/decidim/log/value_types/area_type_presenter.rb +1 -0
  122. data/app/presenters/decidim/log/value_types/currency_presenter.rb +1 -0
  123. data/app/presenters/decidim/log/value_types/date_presenter.rb +1 -0
  124. data/app/presenters/decidim/log/value_types/locale_presenter.rb +1 -0
  125. data/app/presenters/decidim/log/value_types/percentage_presenter.rb +1 -0
  126. data/app/presenters/decidim/log/value_types/scope_presenter.rb +1 -0
  127. data/app/presenters/decidim/log/value_types/scope_type_presenter.rb +1 -0
  128. data/app/presenters/decidim/metric_charts_presenter.rb +1 -0
  129. data/app/presenters/decidim/metric_object_presenter.rb +4 -0
  130. data/app/queries/decidim/metric_manage.rb +3 -0
  131. data/app/queries/decidim/metric_measure.rb +1 -0
  132. data/app/queries/decidim/metrics/followers_metric_manage.rb +3 -0
  133. data/app/queries/decidim/metrics/participants_metric_manage.rb +4 -0
  134. data/app/queries/decidim/similar_emendations.rb +56 -0
  135. data/app/resolvers/decidim/core/metric_resolver.rb +1 -0
  136. data/app/services/decidim/action_authorizer.rb +1 -0
  137. data/app/services/decidim/action_logger.rb +1 -0
  138. data/app/services/decidim/activity_search.rb +1 -0
  139. data/app/services/decidim/email_notification_generator.rb +4 -0
  140. data/app/services/decidim/notification_generator.rb +2 -0
  141. data/app/services/decidim/notification_generator_for_recipient.rb +0 -1
  142. data/app/services/decidim/resource_search.rb +1 -1
  143. data/app/services/decidim/traceability.rb +1 -0
  144. data/app/uploaders/decidim/application_uploader.rb +1 -0
  145. data/app/uploaders/decidim/attachment_uploader.rb +16 -0
  146. data/app/uploaders/decidim/avatar_uploader.rb +0 -2
  147. data/app/uploaders/decidim/data_portability_uploader.rb +1 -0
  148. data/app/uploaders/decidim/homepage_image_uploader.rb +0 -2
  149. data/app/uploaders/decidim/image_uploader.rb +15 -1
  150. data/app/uploaders/decidim/oauth_application_logo_uploader.rb +0 -1
  151. data/app/uploaders/decidim/official_image_footer_uploader.rb +0 -1
  152. data/app/uploaders/decidim/official_image_header_uploader.rb +0 -1
  153. data/app/uploaders/decidim/open_data_uploader.rb +1 -0
  154. data/app/validators/etiquette_validator.rb +5 -0
  155. data/app/views/decidim/account/delete.html.erb +2 -2
  156. data/app/views/decidim/account/show.html.erb +1 -1
  157. data/app/views/decidim/amendments/_edit_form_fields.html.erb +16 -13
  158. data/app/views/decidim/amendments/_similar_emendation.html.erb +24 -0
  159. data/app/views/decidim/amendments/compare_draft.html.erb +21 -0
  160. data/app/views/decidim/amendments/edit_draft.html.erb +31 -0
  161. data/app/views/decidim/amendments/new.html.erb +5 -17
  162. data/app/views/decidim/amendments/preview_draft.html.erb +32 -0
  163. data/app/views/decidim/amendments/review.html.erb +5 -3
  164. data/app/views/decidim/application/_document.html.erb +1 -1
  165. data/app/views/decidim/application/_photos.html.erb +1 -1
  166. data/app/views/decidim/data_portability/show.html.erb +1 -1
  167. data/app/views/decidim/devise/invitations/edit.html.erb +2 -2
  168. data/app/views/decidim/devise/sessions/new.html.erb +1 -1
  169. data/app/views/decidim/doorkeeper/authorizations/new.html.erb +3 -3
  170. data/app/views/decidim/export_mailer/data_portability_export.html.erb +1 -1
  171. data/app/views/decidim/searches/index.js.erb +6 -0
  172. data/app/views/decidim/shared/_address_details.html.erb +2 -2
  173. data/app/views/decidim/shared/_embed_modal.html.erb +1 -1
  174. data/app/views/decidim/shared/_share_modal.html.erb +7 -4
  175. data/app/views/layouts/decidim/_application.html.erb +0 -1
  176. data/app/views/layouts/decidim/_head.html.erb +13 -12
  177. data/app/views/layouts/decidim/_logo.html.erb +1 -1
  178. data/app/views/layouts/decidim/_social_media_links.html.erb +5 -5
  179. data/app/views/layouts/decidim/_user_menu.html.erb +1 -1
  180. data/app/views/layouts/decidim/_wrapper.html.erb +2 -2
  181. data/app/views/layouts/decidim/mailer.html.erb +2 -2
  182. data/config/locales/ar.yml +27 -17
  183. data/config/locales/ca.yml +79 -15
  184. data/config/locales/cs.yml +73 -14
  185. data/config/locales/de.yml +62 -12
  186. data/config/locales/en.yml +80 -16
  187. data/config/locales/eo-UY.yml +16 -0
  188. data/config/locales/es-MX.yml +73 -11
  189. data/config/locales/es-PY.yml +73 -11
  190. data/config/locales/es.yml +79 -15
  191. data/config/locales/eu.yml +6 -13
  192. data/config/locales/fi-plain.yml +75 -11
  193. data/config/locales/fi.yml +80 -16
  194. data/config/locales/fr.yml +70 -16
  195. data/config/locales/gl.yml +6 -13
  196. data/config/locales/hu.yml +80 -17
  197. data/config/locales/id-ID.yml +6 -12
  198. data/config/locales/it.yml +56 -14
  199. data/config/locales/nl.yml +76 -12
  200. data/config/locales/no.yml +11 -2
  201. data/config/locales/pl.yml +6 -15
  202. data/config/locales/pt-BR.yml +6 -13
  203. data/config/locales/pt.yml +6 -13
  204. data/config/locales/ru.yml +7 -2
  205. data/config/locales/sv.yml +34 -18
  206. data/config/locales/tr-TR.yml +15 -12
  207. data/config/locales/uk.yml +7 -2
  208. data/config/routes.rb +7 -0
  209. data/db/migrate/20180226140756_add_version_to_action_logs.rb +1 -0
  210. data/db/migrate/20180305132906_rename_features_to_components.rb +1 -0
  211. data/db/migrate/20190412131728_fix_user_names.rb +1 -1
  212. data/db/migrate/20190610093742_add_force_users_to_authenticate_before_access_organization.rb +10 -0
  213. data/db/migrate/20190618075906_add_confidential_to_doorkeeper_application.rb +13 -0
  214. data/db/migrate/{20190925091507_add_uniq_index_to_decidim_metrics.rb → 20190829092826_add_uniq_index_to_decidim_metrics.rb} +0 -0
  215. data/lib/decidim/amendable.rb +87 -13
  216. data/lib/decidim/attributes/localized_date.rb +5 -0
  217. data/lib/decidim/attributes/time_with_zone.rb +5 -0
  218. data/lib/decidim/authorable.rb +3 -0
  219. data/lib/decidim/authorization_form_builder.rb +2 -2
  220. data/lib/decidim/component_manifest.rb +2 -0
  221. data/lib/decidim/content_parsers.rb +2 -0
  222. data/lib/decidim/content_parsers/hashtag_parser.rb +1 -1
  223. data/lib/decidim/content_parsers/link_parser.rb +10 -0
  224. data/lib/decidim/content_parsers/newline_parser.rb +20 -0
  225. data/lib/decidim/content_parsers/user_parser.rb +1 -1
  226. data/lib/decidim/content_processor.rb +2 -0
  227. data/lib/decidim/content_renderers.rb +1 -0
  228. data/lib/decidim/content_renderers/hashtag_renderer.rb +1 -1
  229. data/lib/decidim/content_renderers/link_renderer.rb +24 -0
  230. data/lib/decidim/content_renderers/user_renderer.rb +2 -2
  231. data/lib/decidim/core.rb +11 -0
  232. data/lib/decidim/core/engine.rb +2 -28
  233. data/lib/decidim/core/test.rb +4 -1
  234. data/lib/decidim/core/test/factories.rb +35 -8
  235. data/lib/decidim/core/test/shared_examples/amendable/create_amendment_draft_examples.rb +50 -0
  236. data/lib/decidim/core/test/shared_examples/amendable/destroy_amendment_draft_examples.rb +39 -0
  237. data/lib/decidim/core/test/shared_examples/amendable/promote_amendment_examples.rb +27 -3
  238. data/lib/decidim/core/test/shared_examples/amendable/{create_amendment_examples.rb → publish_amendment_draft_examples.rb} +26 -17
  239. data/lib/decidim/core/test/shared_examples/amendable/update_amendment_draft_examples.rb +42 -0
  240. data/lib/decidim/core/test/shared_examples/amendable/withdraw_amendment_examples.rb +19 -11
  241. data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +1 -1
  242. data/lib/decidim/core/test/shared_examples/has_attachments.rb +1 -1
  243. data/lib/decidim/core/test/shared_examples/simple_event.rb +4 -0
  244. data/lib/decidim/core/version.rb +1 -1
  245. data/lib/decidim/data_portability_file_zipper.rb +3 -0
  246. data/lib/decidim/events/author_event.rb +1 -0
  247. data/lib/decidim/events/base_event.rb +12 -22
  248. data/lib/decidim/events/coauthor_event.rb +1 -0
  249. data/lib/decidim/events/simple_event.rb +3 -0
  250. data/lib/decidim/exporters/csv.rb +1 -0
  251. data/lib/decidim/fingerprintable.rb +1 -0
  252. data/lib/decidim/followable.rb +8 -0
  253. data/lib/decidim/form_builder.rb +24 -3
  254. data/lib/decidim/gamification.rb +4 -0
  255. data/lib/decidim/gamification/badge_status.rb +1 -0
  256. data/lib/decidim/has_category.rb +2 -0
  257. data/lib/decidim/has_component.rb +2 -7
  258. data/lib/decidim/has_private_users.rb +8 -1
  259. data/lib/decidim/has_settings.rb +12 -8
  260. data/lib/decidim/hashtaggable.rb +4 -0
  261. data/lib/decidim/metric_operation_manifest.rb +1 -0
  262. data/lib/decidim/nicknamizable.rb +1 -0
  263. data/lib/decidim/participable.rb +1 -0
  264. data/lib/decidim/participatory_space_resourceable.rb +1 -0
  265. data/lib/decidim/randomable.rb +20 -0
  266. data/lib/decidim/search_resource_fields_mapper.rb +2 -0
  267. data/lib/decidim/searchable.rb +2 -0
  268. data/lib/decidim/settings_manifest.rb +10 -1
  269. data/lib/decidim/stats_registry.rb +1 -0
  270. data/lib/decidim/view_model.rb +1 -1
  271. data/lib/tasks/decidim_data_portability_tasks.rake +1 -0
  272. data/lib/tasks/decidim_metrics_tasks.rake +2 -0
  273. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.no.js +12 -12
  274. metadata +140 -82
  275. data/app/commands/decidim/amendable/create.rb +0 -80
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e969541fbe08a3dc578b73a0b5c1c3926dcdc9f16c8fa9e3b7b8a8a37101d505
4
- data.tar.gz: 35e028a57a0d827008ef7045afb10269dd684f1643242ae1ae22deb0ff78e259
3
+ metadata.gz: aab7a2ae23c1348701c0e16ba32310cb9eb321255202fb5c24ea3f3a2d2b2685
4
+ data.tar.gz: d4e03e251ac0918d8ff0d891700aa3576e8a580739809c6ecd50d0f7816d90f6
5
5
  SHA512:
6
- metadata.gz: 6f5ee9f5d4edba935fa625b43786bd984a04c1e6798a4aedbbb18442afcc9061782c24bf1d3fa779e8015e559909ffc3ff9ee9fb4bc646bbfa45ed8e76ce27de
7
- data.tar.gz: e56a0fbd127732e8f41c7ec62e7aa1ce83d31703ab99e4799366327f1c93e7f26328b3c2ee9e912f9645ea57f0c25cde391c9d8f3467d835b0b0ff051d635903
6
+ metadata.gz: e8fb7afc6566dedbd3884b5deb0d32c98baab6c1c7a1be1fcddabfb657167b47912967e68e558e6f7c9edc40133be57ccbd8c3668b5e95d19e89e7bb47ac2788
7
+ data.tar.gz: cbb63221866026d46fae8a8a22d355469cb14cdb2460886fbfd54a292f253ed04777d23123f75cfadbf384bf1c28a889303e7d8e679ad485637374d04a091a03
@@ -12,3 +12,6 @@
12
12
  // = link decidim/widget.js
13
13
  // = link decidim/impersonation.js
14
14
  // = link decidim/floating_help.js
15
+ // = link decidim/extras/_social_share.css
16
+ // = link decidim/social_share.js
17
+ // = link decidim/represent_user_group.js
@@ -0,0 +1,2 @@
1
+ // = require social-share-button
2
+ // = require_self
@@ -0,0 +1,36 @@
1
+ /*
2
+ *= require social-share-button
3
+ */
4
+
5
+ $size: 45px;
6
+
7
+ .share-link:hover{
8
+ text-decoration: underline;
9
+ cursor: pointer;
10
+ }
11
+
12
+ .social-share-button{
13
+ display: inline-block;
14
+ vertical-align: top;
15
+
16
+ .ssb-icon{
17
+ margin-right: 5px;
18
+ background-size: $size $size;
19
+ height: $size;
20
+ width: $size;
21
+ }
22
+ }
23
+
24
+ a.ssb-icon.ssb-whatsapp_app{
25
+ display: none;
26
+ }
27
+
28
+ @media (hover: none) and (pointer: coarse){
29
+ a.ssb-icon.ssb-whatsapp_app{
30
+ display: inline-block;
31
+ }
32
+
33
+ a.ssb-icon.ssb-whatsapp_web{
34
+ display: none;
35
+ }
36
+ }
@@ -0,0 +1,24 @@
1
+ .gallery__container{
2
+ width: 100%;
3
+
4
+ .thumbnail{
5
+ max-height: 100px;
6
+ }
7
+
8
+ .gallery__item{
9
+ display: inline-block;
10
+ border: none;
11
+ margin-right: .5rem;
12
+ padding: 0;
13
+
14
+ .close-button{
15
+ right: 2px;
16
+ top: 2px;
17
+ width: 2rem;
18
+ height: 2rem;
19
+ background: rgba(var(--primary-rgb), .8);
20
+ color: $white;
21
+ border-radius: 50%;
22
+ }
23
+ }
24
+ }
@@ -117,7 +117,7 @@ $navbar-active-shadow-medium: inset 0 4px 0 0 var(--primary);
117
117
  }
118
118
 
119
119
  .is-dropdown-submenu{
120
- z-index: 2;
120
+ z-index: 701;
121
121
  text-align: left;
122
122
  padding: 0;
123
123
  background-color: $white;
@@ -13,13 +13,6 @@ module Decidim
13
13
  def show
14
14
  return if activities.blank?
15
15
 
16
- activities.map do |activity|
17
- activity.organization_lazy
18
- activity.resource_lazy
19
- activity.participatory_space_lazy
20
- activity.component_lazy
21
- end
22
-
23
16
  render
24
17
  end
25
18
 
@@ -34,7 +27,19 @@ module Decidim
34
27
  end
35
28
 
36
29
  def activities
37
- model
30
+ @activities ||= last_activities.select do |activity|
31
+ activity.visible_for?(current_user)
32
+ end
33
+ end
34
+
35
+ def last_activities
36
+ @last_activities ||= model.map do |activity|
37
+ activity.organization_lazy
38
+ activity.resource_lazy
39
+ activity.participatory_space_lazy
40
+ activity.component_lazy
41
+ activity
42
+ end
38
43
  end
39
44
  end
40
45
  end
@@ -13,6 +13,7 @@ module Decidim
13
13
 
14
14
  def show
15
15
  return unless renderable?
16
+
16
17
  render
17
18
  end
18
19
 
@@ -72,10 +73,18 @@ module Decidim
72
73
  I18n.l(model.created_at, format: :short)
73
74
  end
74
75
 
76
+ def user
77
+ return resource.normalized_author if resource.respond_to?(:normalized_author)
78
+ return resource.author if resource.respond_to?(:author)
79
+
80
+ model.user_lazy if resource.respond_to?(:user)
81
+ end
82
+
75
83
  private
76
84
 
77
85
  def published?
78
86
  return true unless resource.respond_to?(:published?)
87
+
79
88
  resource.published?
80
89
  end
81
90
 
@@ -87,13 +96,18 @@ module Decidim
87
96
  model.organization_lazy
88
97
  end
89
98
 
90
- def user
91
- model.user_lazy
92
- end
93
-
94
99
  def author
95
100
  return unless show_author? && user.is_a?(UserBaseEntity)
96
- cell "decidim/author", UserPresenter.new(user)
101
+
102
+ presenter = if user.is_a?(Decidim::User)
103
+ UserPresenter.new(user)
104
+ elsif user.is_a?(Decidim::UserGroup)
105
+ UserGroupPresenter.new(user)
106
+ end
107
+
108
+ return unless presenter
109
+
110
+ cell "decidim/author", presenter
97
111
  end
98
112
 
99
113
  def participatory_space
@@ -1,7 +1,7 @@
1
1
  <% if model.respond_to? :location %>
2
- <strong><%= translated_attribute model.location %></strong><br />
2
+ <strong><%= translated_attribute model.location %></strong><br>
3
3
  <% end %>
4
- <span><%= model.address %></span><br />
4
+ <span><%= model.address %></span><br>
5
5
  <% if model.respond_to? :location_hints %>
6
6
  <span><%= translated_attribute model.location_hints %></span>
7
7
  <% end %>
@@ -1,4 +1,4 @@
1
- <div class="card extra">
1
+ <div class="card extra amender-list">
2
2
  <div class="definition-data__item">
3
3
  <span class="definition-data__title">
4
4
  <%= t("amended_by", scope: "decidim.amendments.amendable") %>
@@ -17,9 +17,13 @@ module Decidim::Amendable
17
17
  model
18
18
  end
19
19
 
20
+ def visible_amendments
21
+ amendable.visible_amendments_for(current_user).where.not(state: "draft")
22
+ end
23
+
20
24
  # Returns a UserPresenter array
21
25
  def amenders
22
- @amenders ||= amendable.amendments.map { |amendment| present(amendment.amender) }.uniq
26
+ @amenders ||= visible_amendments.map { |amendment| present(amendment.amender) }.uniq
23
27
  end
24
28
 
25
29
  def options
@@ -13,22 +13,35 @@ module Decidim::Amendable
13
13
 
14
14
  def announcement
15
15
  {
16
- announcement: emendation_message,
16
+ announcement: emendation_message + promoted_message,
17
17
  callout_class: state_classes
18
18
  }
19
19
  end
20
20
 
21
21
  def emendation_message
22
- t(model.emendation_state,
22
+ message(model.state, amendable_type, proposal_link, announcement_date)
23
+ end
24
+
25
+ def promoted_message
26
+ return "" unless model.amendment.promoted?
27
+
28
+ proposal = model.linked_promoted_resource
29
+ text = message(:promoted, amendable_type)
30
+ %(<br><strong>#{proposal_link(proposal, text)}</strong>)
31
+ end
32
+
33
+ def message(state, type, link = nil, date = nil)
34
+ t(state,
23
35
  scope: "decidim.amendments.emendation.announcement",
24
- amendable_type: amendable_type,
25
- amendable_link: amendable_link,
26
- announcement_date: announcement_date)
36
+ amendable_type: type,
37
+ proposal_link: link,
38
+ date: date)
27
39
  end
28
40
 
29
- def amendable_link
30
- link_to resource_locator(model.amendable).path do
31
- %(<strong>#{present(model.amendable).title}</strong>)
41
+ def proposal_link(resource = model.amendable, text = nil)
42
+ text ||= %(<strong>#{present(model.amendable).title}</strong>)
43
+ link_to resource_locator(resource).path do
44
+ text
32
45
  end
33
46
  end
34
47
 
@@ -41,7 +54,7 @@ module Decidim::Amendable
41
54
  end
42
55
 
43
56
  def state_classes
44
- case model.emendation_state
57
+ case model.state
45
58
  when "accepted"
46
59
  "success"
47
60
  when "rejected"
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Amendable
5
+ # This cell functions as an intermediary cell that computes and passes the
6
+ # necessary information, as a Hash, to Decidim::WizardStepFormCell.
7
+ class WizardStepFormCell < Decidim::ViewModel
8
+ def show
9
+ cell("decidim/wizard_step_form", options_for_view)
10
+ end
11
+
12
+ private
13
+
14
+ # Returns the current step as Integer.
15
+ def current_step
16
+ @current_step ||= case params[:action].to_sym
17
+ when :new, :create
18
+ 1
19
+ when :compare_draft
20
+ 2
21
+ when :edit_draft, :update_draft, :destroy_draft
22
+ 3
23
+ when :preview_draft, :publish_draft
24
+ 4
25
+ end
26
+ end
27
+
28
+ # Returns the translation for a given step.
29
+ def i18n_step(step_number)
30
+ t("decidim.amendments.wizard_step_form.steps.#{step_number}")
31
+ end
32
+
33
+ # Returns the name of the view we want to render, as Symbol.
34
+ def view
35
+ options[:view]
36
+ end
37
+
38
+ # Returns a Hash with all the data that will be needed in Decidim::WizardStepFormCell.
39
+ def options_for_view
40
+ common_options.merge(
41
+ send("#{view}_options")
42
+ )
43
+ end
44
+
45
+ # A Hash of data that is used in both :wizard_header and :wizard_aside views.
46
+ def common_options
47
+ {
48
+ view: view,
49
+ current_step: current_step,
50
+ total_steps: 4,
51
+ steps: {
52
+ "1": i18n_step(1),
53
+ "2": i18n_step(2),
54
+ "3": i18n_step(3),
55
+ "4": i18n_step(4)
56
+ }
57
+ }
58
+ end
59
+
60
+ # A Hash of data needed for the :wizard_aside view.
61
+ def wizard_aside_options
62
+ {
63
+ wizard_aside_back_url: wizard_aside_back_url
64
+ }
65
+ end
66
+
67
+ # A Hash of data needed for the :wizard_header view.
68
+ def wizard_header_options
69
+ {
70
+ wizard_header_title: wizard_header_title,
71
+ wizard_header_similar_resources_count: options[:similar_resources_count],
72
+ wizard_header_help_text: wizard_header_help_text
73
+ }
74
+ end
75
+
76
+ def amendable
77
+ @amendable ||= model
78
+ end
79
+
80
+ def amendment
81
+ @amendment ||= amendable.amendment
82
+ end
83
+
84
+ # Returns the link we want the back button to point to.
85
+ def wizard_aside_back_url
86
+ case current_step
87
+ when 1
88
+ Decidim::ResourceLocatorPresenter.new(amendable).path
89
+ when 3
90
+ Decidim::Core::Engine.routes.url_helpers.compare_draft_amend_path(amendment)
91
+ when 4
92
+ Decidim::Core::Engine.routes.url_helpers.edit_draft_amend_path(amendment)
93
+ end
94
+ end
95
+
96
+ # Returns the translation of the header title.
97
+ def wizard_header_title
98
+ key = case current_step
99
+ when 1
100
+ :new
101
+ when 2
102
+ :compare_draft
103
+ when 3
104
+ :edit_draft
105
+ when 4
106
+ :preview_draft
107
+ end
108
+
109
+ t("decidim.amendments.#{key}.title")
110
+ end
111
+
112
+ # Returns a Hash that will be passed to a Decidim::AnnouncementCell.
113
+ def wizard_header_help_text
114
+ attribute = amendable.component.settings.amendments_wizard_help_text
115
+ {
116
+ announcement: translated_attribute(attribute).presence
117
+ }
118
+ end
119
+ end
120
+ end
121
+ end
@@ -16,6 +16,7 @@ module Decidim
16
16
 
17
17
  def show
18
18
  return unless announcement.presence
19
+
19
20
  render :show
20
21
  end
21
22
 
@@ -49,6 +49,8 @@ module Decidim
49
49
  end
50
50
 
51
51
  def withdraw_path
52
+ return decidim.withdraw_amend_path(from_context.amendment) if from_context.emendation?
53
+
52
54
  from_context_path + "/withdraw"
53
55
  end
54
56
 
@@ -57,6 +59,7 @@ module Decidim
57
59
  return unless from_context
58
60
  return unless proposals_controller? || collaborative_drafts_controller?
59
61
  return unless show_action?
62
+
60
63
  true
61
64
  end
62
65
 
@@ -72,6 +75,7 @@ module Decidim
72
75
 
73
76
  def commentable?
74
77
  return unless posts_controller?
78
+
75
79
  true
76
80
  end
77
81
 
@@ -82,6 +86,7 @@ module Decidim
82
86
  def actionable?
83
87
  return false if options[:has_actions] == false
84
88
  return true if user_author? && posts_controller?
89
+
85
90
  true if withdrawable? || flagable?
86
91
  end
87
92
 
@@ -90,6 +95,8 @@ module Decidim
90
95
  end
91
96
 
92
97
  def profile_path?
98
+ return false if options[:skip_profile_link] == true
99
+
93
100
  profile_path.present?
94
101
  end
95
102
 
@@ -40,6 +40,7 @@ module Decidim
40
40
 
41
41
  def has_label?
42
42
  return true if model.respond_to?("emendation?") && model.emendation?
43
+
43
44
  context[:label].presence
44
45
  end
45
46
 
@@ -90,6 +91,7 @@ module Decidim
90
91
  classes = [base_card_class]
91
92
  classes = classes.concat(["card--stack"]).join(" ") if has_children?
92
93
  return classes unless has_state?
94
+
93
95
  classes.concat(state_classes).join(" ")
94
96
  end
95
97
 
@@ -141,7 +143,7 @@ module Decidim
141
143
  end
142
144
 
143
145
  def render_space?
144
- context[:show_space].presence && model.respond_to?(:participatory_space)
146
+ context[:show_space].presence && model.respond_to?(:participatory_space) && model.participatory_space.present?
145
147
  end
146
148
 
147
149
  def render_top?