decidim-core 0.29.5 → 0.30.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 (595) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/activity/show.erb +6 -6
  3. data/app/cells/decidim/address/show.erb +3 -3
  4. data/app/cells/decidim/amendable/amend_button_card/show.erb +6 -4
  5. data/app/cells/decidim/amendable/amend_button_card_cell.rb +8 -0
  6. data/app/cells/decidim/amendable/amendments/show.erb +1 -1
  7. data/app/cells/decidim/amendable/promote_button_card/show.erb +2 -0
  8. data/app/cells/decidim/author/flag.erb +6 -0
  9. data/app/cells/decidim/author/flag_user.erb +14 -0
  10. data/app/cells/decidim/author/show.erb +4 -2
  11. data/app/cells/decidim/author_cell.rb +1 -1
  12. data/app/cells/decidim/card_l/extra_data.erb +1 -0
  13. data/app/cells/decidim/card_metadata_cell.rb +9 -16
  14. data/app/cells/decidim/comments_button_cell.rb +14 -2
  15. data/app/cells/decidim/content_blocks/highlighted_elements_cell.rb +2 -0
  16. data/app/cells/decidim/content_blocks/highlighted_elements_with_cell_for_list_cell.rb +1 -1
  17. data/app/cells/decidim/content_blocks/participatory_space_extra_data/extra_data.erb +2 -2
  18. data/app/cells/decidim/content_blocks/participatory_space_main_data/title.erb +2 -11
  19. data/app/cells/decidim/endorsement_block/show.erb +0 -1
  20. data/app/cells/decidim/endorsement_block_cell.rb +6 -0
  21. data/app/cells/decidim/endorsement_buttons/button_content.erb +1 -1
  22. data/app/cells/decidim/endorsement_buttons/select_identity_button.erb +1 -1
  23. data/app/cells/decidim/endorsement_buttons/show.erb +7 -7
  24. data/app/cells/decidim/endorsement_buttons/verification_modal.erb +4 -2
  25. data/app/cells/decidim/endorsers_list/empty.erb +3 -0
  26. data/app/cells/decidim/endorsers_list/full.erb +17 -5
  27. data/app/cells/decidim/endorsers_list/show.erb +19 -10
  28. data/app/cells/decidim/endorsers_list_cell.rb +19 -6
  29. data/app/cells/decidim/flag_modal/flag_user.erb +34 -0
  30. data/app/cells/decidim/flag_modal/show.erb +52 -0
  31. data/app/cells/decidim/flag_modal_cell.rb +56 -0
  32. data/app/cells/decidim/follow_button/show.erb +1 -2
  33. data/app/cells/decidim/follow_button_cell.rb +5 -0
  34. data/app/cells/decidim/footer_topics/show.erb +2 -2
  35. data/app/cells/decidim/group_admins/show.erb +1 -3
  36. data/app/cells/decidim/group_members/show.erb +2 -6
  37. data/app/cells/decidim/images_panel/show.erb +2 -5
  38. data/app/cells/decidim/map/show.erb +3 -0
  39. data/app/cells/decidim/map/template.erb +14 -0
  40. data/app/cells/decidim/map_cell.rb +39 -0
  41. data/app/cells/decidim/notification_actions/buttons_cell.rb +1 -1
  42. data/app/cells/decidim/onboarding_action_message/show.erb +15 -0
  43. data/app/cells/decidim/onboarding_action_message_cell.rb +81 -0
  44. data/app/cells/decidim/participatory_space_dropdown_metadata/metadata.erb +4 -4
  45. data/app/cells/decidim/participatory_space_dropdown_metadata/show.erb +3 -5
  46. data/app/cells/decidim/participatory_space_private_user/show.erb +23 -0
  47. data/app/cells/decidim/participatory_space_private_user_cell.rb +21 -0
  48. data/app/cells/decidim/profile_actions/show.erb +1 -1
  49. data/app/cells/decidim/profile_sidebar/show.erb +167 -0
  50. data/app/cells/decidim/profile_sidebar_cell.rb +68 -0
  51. data/app/cells/decidim/progress_bar/show.erb +2 -2
  52. data/app/cells/decidim/report_button/already_reported_modal.erb +2 -2
  53. data/app/cells/decidim/report_button/flag_modal.erb +36 -24
  54. data/app/cells/decidim/report_button_cell.rb +9 -2
  55. data/app/cells/decidim/resource_history/show.erb +20 -0
  56. data/app/cells/decidim/resource_history_cell.rb +66 -0
  57. data/app/cells/decidim/resource_types_filter/show.erb +1 -1
  58. data/app/cells/decidim/resource_types_filter_cell.rb +6 -6
  59. data/app/cells/decidim/share_button_cell.rb +0 -4
  60. data/app/cells/decidim/share_widget/modal.erb +26 -0
  61. data/app/cells/decidim/share_widget/show.erb +2 -0
  62. data/app/cells/decidim/share_widget_cell.rb +20 -0
  63. data/app/cells/decidim/tags/show.erb +7 -4
  64. data/app/cells/decidim/tags_cell.rb +11 -72
  65. data/app/cells/decidim/upload_modal/files.erb +4 -4
  66. data/app/cells/decidim/upload_modal_cell.rb +3 -5
  67. data/app/cells/decidim/user_activity/show.erb +1 -1
  68. data/app/commands/decidim/amendable/accept.rb +1 -2
  69. data/app/commands/decidim/amendable/create_draft.rb +2 -2
  70. data/app/commands/decidim/create_ephemeral_user.rb +52 -0
  71. data/app/commands/decidim/create_omniauth_registration.rb +21 -17
  72. data/app/commands/decidim/create_report.rb +8 -11
  73. data/app/commands/decidim/create_user_group.rb +6 -2
  74. data/app/commands/decidim/destroy_ephemeral_user.rb +47 -0
  75. data/app/commands/decidim/invite_user.rb +1 -1
  76. data/app/commands/decidim/search.rb +0 -14
  77. data/app/commands/decidim/update_account.rb +11 -3
  78. data/app/commands/decidim/update_notifications_settings.rb +1 -0
  79. data/app/commands/decidim/update_resources_taxonomies.rb +67 -0
  80. data/app/commands/decidim/update_user_group.rb +7 -1
  81. data/app/constraints/decidim/current_component.rb +1 -1
  82. data/app/controllers/concerns/decidim/ajax_permission_handler.rb +21 -0
  83. data/app/controllers/concerns/decidim/devise_authentication_methods.rb +3 -6
  84. data/app/controllers/concerns/decidim/devise_controllers.rb +2 -0
  85. data/app/controllers/concerns/decidim/disable_redirection_to_external_host.rb +1 -1
  86. data/app/controllers/concerns/decidim/ephemeral_session_checker.rb +87 -0
  87. data/app/controllers/concerns/decidim/filter_resource.rb +4 -2
  88. data/app/controllers/concerns/decidim/has_members_page.rb +25 -0
  89. data/app/controllers/concerns/decidim/locale_switcher.rb +2 -2
  90. data/app/controllers/concerns/decidim/needs_password_change.rb +0 -1
  91. data/app/controllers/concerns/decidim/needs_permission.rb +2 -1
  92. data/app/controllers/concerns/decidim/needs_tos_accepted.rb +4 -5
  93. data/app/controllers/concerns/decidim/onboarding_action_methods.rb +52 -0
  94. data/app/controllers/concerns/decidim/participatory_space_context.rb +1 -4
  95. data/app/controllers/decidim/amendments_controller.rb +3 -3
  96. data/app/controllers/decidim/application_controller.rb +9 -0
  97. data/app/controllers/decidim/authorization_modals_controller.rb +8 -2
  98. data/app/controllers/decidim/components/base_controller.rb +3 -7
  99. data/app/controllers/decidim/devise/confirmations_controller.rb +4 -0
  100. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +8 -1
  101. data/app/controllers/decidim/devise/registrations_controller.rb +1 -1
  102. data/app/controllers/decidim/devise/sessions_controller.rb +2 -0
  103. data/app/controllers/decidim/download_your_data_controller.rb +33 -2
  104. data/app/controllers/decidim/editor_images_controller.rb +1 -11
  105. data/app/controllers/decidim/follows_controller.rb +1 -1
  106. data/app/controllers/decidim/geolocation_controller.rb +19 -0
  107. data/app/controllers/decidim/homepage_controller.rb +0 -1
  108. data/app/controllers/decidim/open_data_controller.rb +33 -8
  109. data/app/controllers/decidim/profiles_controller.rb +2 -2
  110. data/app/controllers/decidim/reports_controller.rb +2 -7
  111. data/app/controllers/decidim/user_activities_controller.rb +1 -1
  112. data/app/controllers/decidim/user_conversations_controller.rb +1 -11
  113. data/app/events/decidim/soft_delete_resource_event.rb +15 -0
  114. data/app/forms/decidim/account_form.rb +2 -5
  115. data/app/forms/decidim/amendable/form.rb +4 -2
  116. data/app/forms/decidim/ephemeral_user_form.rb +22 -0
  117. data/app/forms/decidim/notifications_settings_form.rb +1 -0
  118. data/app/forms/decidim/omniauth_registration_form.rb +15 -2
  119. data/app/forms/decidim/registration_form.rb +1 -1
  120. data/app/helpers/concerns/decidim/flash_helper_extensions.rb +17 -2
  121. data/app/helpers/decidim/action_authorization_helper.rb +75 -14
  122. data/app/helpers/decidim/amendments_helper.rb +1 -11
  123. data/app/helpers/decidim/application_helper.rb +6 -2
  124. data/app/helpers/decidim/breadcrumb_helper.rb +6 -0
  125. data/app/helpers/decidim/cache_helper.rb +1 -1
  126. data/app/helpers/decidim/check_boxes_tree_helper.rb +25 -53
  127. data/app/helpers/decidim/decidim_form_helper.rb +0 -44
  128. data/app/helpers/decidim/endorsable_helper.rb +0 -10
  129. data/app/helpers/decidim/filters_helper.rb +0 -25
  130. data/app/helpers/decidim/layout_helper.rb +6 -6
  131. data/app/helpers/decidim/menu_helper.rb +2 -2
  132. data/app/helpers/decidim/messaging/conversation_helper.rb +2 -3
  133. data/app/helpers/decidim/meta_tags_helper.rb +32 -23
  134. data/app/helpers/decidim/modal_helper.rb +23 -0
  135. data/app/helpers/decidim/omniauth_helper.rb +5 -5
  136. data/app/helpers/decidim/onboarding_action_helper.rb +13 -0
  137. data/app/helpers/decidim/orders_helper.rb +1 -2
  138. data/app/helpers/decidim/paginate_helper.rb +1 -1
  139. data/app/helpers/decidim/participatory_space_helpers.rb +1 -1
  140. data/app/helpers/decidim/passwords_helper.rb +2 -2
  141. data/app/helpers/decidim/taxonomies_helper.rb +40 -0
  142. data/app/helpers/decidim/tooltip_helper.rb +1 -4
  143. data/app/jobs/decidim/download_your_data_export_job.rb +2 -19
  144. data/app/jobs/decidim/event_publisher_job.rb +18 -9
  145. data/app/jobs/decidim/export_job.rb +5 -1
  146. data/app/jobs/decidim/export_participatory_space_job.rb +4 -1
  147. data/app/jobs/decidim/open_data_job.rb +4 -4
  148. data/app/mailers/decidim/export_mailer.rb +7 -12
  149. data/app/mailers/decidim/notifications_digest_mailer.rb +1 -7
  150. data/app/mailers/decidim/reported_mailer.rb +2 -18
  151. data/app/models/decidim/action_log.rb +20 -1
  152. data/app/models/decidim/category.rb +4 -0
  153. data/app/models/decidim/component.rb +25 -3
  154. data/app/models/decidim/metric.rb +2 -1
  155. data/app/models/decidim/moderation.rb +16 -0
  156. data/app/models/decidim/newsletter.rb +12 -8
  157. data/app/models/decidim/organization.rb +7 -3
  158. data/app/models/decidim/participatory_space_private_user.rb +20 -0
  159. data/app/models/decidim/private_export.rb +24 -0
  160. data/app/models/decidim/push_notification_message.rb +1 -1
  161. data/app/models/decidim/report.rb +1 -1
  162. data/app/models/decidim/scope.rb +4 -0
  163. data/app/models/decidim/share_token.rb +36 -10
  164. data/app/models/decidim/taxonomization.rb +23 -0
  165. data/app/models/decidim/taxonomy.rb +139 -0
  166. data/app/models/decidim/taxonomy_filter.rb +130 -0
  167. data/app/models/decidim/taxonomy_filter_item.rb +33 -0
  168. data/app/models/decidim/user.rb +13 -23
  169. data/app/models/decidim/user_base_entity.rb +12 -4
  170. data/app/models/decidim/user_moderation.rb +9 -0
  171. data/app/models/decidim/user_report.rb +4 -0
  172. data/app/packs/entrypoints/decidim_core.js +1 -0
  173. data/app/packs/entrypoints/decidim_geocoding.js +2 -0
  174. data/app/packs/images/decidim/brands/facebook.svg +10 -0
  175. data/app/packs/images/decidim/brands/google.svg +7 -1
  176. data/app/packs/images/decidim/brands/twitter-x.svg +3 -0
  177. data/app/packs/images/decidim/default-avatar.svg +1 -1
  178. data/app/packs/src/decidim/callout.js +8 -13
  179. data/app/packs/src/decidim/check_boxes_tree.js +0 -1
  180. data/app/packs/src/decidim/clipboard.js +18 -9
  181. data/app/packs/src/decidim/datepicker/datepicker_functions.js +3 -3
  182. data/app/packs/src/decidim/datepicker/generate_datepicker.js +0 -2
  183. data/app/packs/src/decidim/datepicker/generate_timepicker.js +0 -2
  184. data/app/packs/src/decidim/decidim_application.js +1 -0
  185. data/app/packs/src/decidim/direct_uploads/upload_field.js +4 -3
  186. data/app/packs/src/decidim/direct_uploads/upload_modal.js +9 -8
  187. data/app/packs/src/decidim/editor/common/suggestion.js +1 -11
  188. data/app/packs/src/decidim/geocoding/reverse_geocoding.js +60 -0
  189. data/app/packs/src/decidim/index.js +9 -5
  190. data/app/packs/src/decidim/input_character_counter.js +1 -1
  191. data/app/packs/src/decidim/map/provider/here.js +1 -1
  192. data/app/packs/src/decidim/onboarding_pending_action.js +24 -0
  193. data/app/packs/src/decidim/sticky_footer.js +29 -0
  194. data/app/packs/src/decidim/sticky_header.js +6 -31
  195. data/app/packs/src/decidim/user_registrations.js +13 -0
  196. data/app/packs/src/decidim/vendor/leaflet-tilelayer-here.js +212 -0
  197. data/app/packs/stylesheets/decidim/_accordion.scss +30 -0
  198. data/app/packs/stylesheets/decidim/_activity.scss +4 -4
  199. data/app/packs/stylesheets/decidim/_buttons.scss +19 -0
  200. data/app/packs/stylesheets/decidim/_cards.scss +0 -4
  201. data/app/packs/stylesheets/decidim/_content_blocks.scss +0 -4
  202. data/app/packs/stylesheets/decidim/_dropdown.scss +1 -1
  203. data/app/packs/stylesheets/decidim/_endorsers_list.scss +26 -20
  204. data/app/packs/stylesheets/decidim/_filters.scss +1 -1
  205. data/app/packs/stylesheets/decidim/_forms.scss +2 -2
  206. data/app/packs/stylesheets/decidim/_header.scss +39 -70
  207. data/app/packs/stylesheets/decidim/_layout.scss +34 -4
  208. data/app/packs/stylesheets/decidim/_login.scss +53 -6
  209. data/app/packs/stylesheets/decidim/_modal.scss +47 -1
  210. data/app/packs/stylesheets/decidim/_modal_tos_refuse.scss +4 -0
  211. data/app/packs/stylesheets/decidim/_modal_update.scss +1 -5
  212. data/app/packs/stylesheets/decidim/_participatory_spaces.scss +46 -0
  213. data/app/packs/stylesheets/decidim/_profile.scss +1 -1
  214. data/app/packs/stylesheets/decidim/_success_image.scss +64 -0
  215. data/app/packs/stylesheets/decidim/_tribute.scss +36 -0
  216. data/app/packs/stylesheets/decidim/application.scss +1 -1
  217. data/app/packs/stylesheets/decidim/geocoding_addons.scss +5 -0
  218. data/app/packs/stylesheets/decidim/map.scss +7 -10
  219. data/app/packs/stylesheets/decidim/resource_history.scss +31 -0
  220. data/app/permissions/decidim/default_permissions.rb +0 -2
  221. data/app/permissions/decidim/permissions.rb +9 -15
  222. data/app/presenters/decidim/admin_log/base_user_presenter.rb +67 -0
  223. data/app/presenters/decidim/admin_log/component_presenter.rb +32 -3
  224. data/app/presenters/decidim/admin_log/moderation_presenter.rb +30 -3
  225. data/app/presenters/decidim/admin_log/share_token_presenter.rb +39 -0
  226. data/app/presenters/decidim/admin_log/taxonomy_filter_presenter.rb +57 -0
  227. data/app/presenters/decidim/admin_log/taxonomy_presenter.rb +48 -0
  228. data/app/presenters/decidim/admin_log/user_group_presenter.rb +6 -6
  229. data/app/presenters/decidim/admin_log/user_presenter.rb +4 -18
  230. data/app/presenters/decidim/log/user_presenter.rb +0 -1
  231. data/app/presenters/decidim/log/value_types/date_presenter.rb +1 -0
  232. data/app/presenters/decidim/log/value_types/taxonomy_presenter.rb +29 -0
  233. data/app/presenters/decidim/notification_to_mailer_presenter.rb +3 -7
  234. data/app/presenters/decidim/participatory_space_private_user_presenter.rb +50 -0
  235. data/app/presenters/decidim/taxonomy_filter_presenter.rb +19 -0
  236. data/app/presenters/decidim/taxonomy_presenter.rb +14 -0
  237. data/app/presenters/decidim/user_presenter.rb +1 -1
  238. data/app/queries/decidim/last_activity.rb +0 -25
  239. data/app/queries/decidim/metrics/blocked_users_metric_manage.rb +2 -2
  240. data/app/queries/decidim/metrics/users_metric_manage.rb +2 -2
  241. data/app/queries/decidim/public_activities.rb +1 -12
  242. data/app/queries/decidim/stats_users_count.rb +2 -2
  243. data/app/resolvers/decidim/meta_image_url_resolver.rb +128 -0
  244. data/app/serializers/decidim/exporters/open_data_blocked_user_serializer.rb +25 -0
  245. data/app/serializers/decidim/exporters/open_data_metric_serializer.rb +22 -0
  246. data/app/serializers/decidim/exporters/open_data_moderation_serializer.rb +30 -0
  247. data/app/serializers/decidim/exporters/open_data_taxonomy_serializer.rb +30 -0
  248. data/app/serializers/decidim/exporters/open_data_user_group_serializer.rb +38 -0
  249. data/app/serializers/decidim/exporters/open_data_user_serializer.rb +39 -0
  250. data/app/serializers/decidim/exporters/participatory_space_serializer.rb +104 -0
  251. data/app/serializers/decidim/exporters/serializer.rb +25 -0
  252. data/app/serializers/decidim/schema_org_breadcrumb_list_serializer.rb +52 -0
  253. data/app/services/decidim/action_authorizer.rb +32 -3
  254. data/app/services/decidim/base_diff_renderer.rb +1 -3
  255. data/app/services/decidim/download_your_data_exporter.rb +58 -24
  256. data/app/services/decidim/onboarding_manager.rb +272 -0
  257. data/app/services/decidim/open_data_exporter.rb +139 -13
  258. data/app/services/decidim/static_map_generator.rb +1 -1
  259. data/app/services/decidim/traceability.rb +13 -0
  260. data/app/uploaders/decidim/application_uploader.rb +1 -1
  261. data/app/validators/etiquette_validator.rb +9 -2
  262. data/app/validators/passthru_validator.rb +1 -1
  263. data/app/validators/translated_etiquette_validator.rb +32 -0
  264. data/app/views/decidim/account/_password_fields.html.erb +2 -2
  265. data/app/views/decidim/application/_accordion_section.html.erb +14 -0
  266. data/app/views/decidim/application/_collection.html.erb +30 -18
  267. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +5 -1
  268. data/app/views/decidim/devise/omniauth_registrations/new_tos_fields.html.erb +29 -0
  269. data/app/views/decidim/devise/registrations/new.html.erb +10 -22
  270. data/app/views/decidim/devise/sessions/new.html.erb +24 -29
  271. data/app/views/decidim/devise/shared/_omniauth_buttons.html.erb +2 -4
  272. data/app/views/decidim/devise/shared/_tos_fields.html.erb +16 -0
  273. data/app/views/decidim/download_your_data/_export.html.erb +15 -0
  274. data/app/views/decidim/download_your_data/show.html.erb +51 -5
  275. data/app/views/decidim/endorsements/update_buttons_and_counters.js.erb +16 -19
  276. data/app/views/decidim/errors/internal_server_error.html.erb +1 -1
  277. data/app/views/decidim/errors/not_found.html.erb +1 -1
  278. data/app/views/decidim/export_mailer/download_your_data_export.html.erb +2 -2
  279. data/app/views/decidim/export_mailer/export.html.erb +5 -1
  280. data/app/views/decidim/last_activities/index.html.erb +1 -1
  281. data/app/views/decidim/messaging/conversations/_reply_form.html.erb +2 -1
  282. data/app/views/decidim/messaging/conversations/_start.html.erb +1 -1
  283. data/app/views/decidim/newsletters/unsubscribe.html.erb +4 -16
  284. data/app/views/decidim/notifications_settings/show.html.erb +22 -0
  285. data/app/views/decidim/open_data/_how_to_open_accordion_section.html.erb +15 -0
  286. data/app/views/decidim/open_data/index.html.erb +108 -0
  287. data/app/views/decidim/pages/show.html.erb +2 -1
  288. data/app/views/decidim/participatory_space_private_users/_participatory_space_private_user.html.erb +1 -0
  289. data/app/views/decidim/reported_mailer/hide.html.erb +9 -0
  290. data/app/views/decidim/reported_mailer/report.html.erb +1 -1
  291. data/app/views/decidim/searches/_count.html.erb +1 -1
  292. data/app/views/decidim/searches/_filters.html.erb +39 -76
  293. data/app/views/decidim/shared/_component_announcement.html.erb +1 -1
  294. data/app/views/decidim/shared/_confirm_modal.html.erb +5 -3
  295. data/app/views/decidim/shared/_filters.html.erb +4 -6
  296. data/app/views/decidim/shared/_login_modal.html.erb +26 -20
  297. data/app/views/decidim/shared/_orders.html.erb +2 -2
  298. data/app/views/decidim/shared/_resource_actions.html.erb +21 -0
  299. data/app/views/decidim/shared/_results_per_page.html.erb +1 -1
  300. data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -2
  301. data/app/views/decidim/shared/filters/_collection.html.erb +1 -1
  302. data/app/views/decidim/shared/filters/_dropdown_label.html.erb +7 -4
  303. data/app/views/kaminari/decidim/_page.html.erb +1 -1
  304. data/app/views/kaminari/decidim/_paginator.html.erb +1 -1
  305. data/app/views/layouts/decidim/_application.html.erb +0 -1
  306. data/app/views/layouts/decidim/_logo.html.erb +2 -2
  307. data/app/views/layouts/decidim/_logo_mobile.html.erb +1 -1
  308. data/app/views/layouts/decidim/_meta_tags_config.html.erb +6 -11
  309. data/app/views/layouts/decidim/_schema_org_breadcrumb_list.html.erb +3 -0
  310. data/app/views/layouts/decidim/_wrapper.html.erb +15 -9
  311. data/app/views/layouts/decidim/footer/_main.html.erb +1 -1
  312. data/app/views/layouts/decidim/footer/_main_intro.html.erb +1 -1
  313. data/app/views/layouts/decidim/footer/_main_legal.html.erb +1 -1
  314. data/app/views/layouts/decidim/footer/_main_links.html.erb +1 -1
  315. data/app/views/layouts/decidim/footer/_mini.html.erb +2 -2
  316. data/app/views/layouts/decidim/header/_close_ephemeral_session.html.erb +25 -0
  317. data/app/views/layouts/decidim/header/_main.html.erb +14 -10
  318. data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +0 -6
  319. data/app/views/layouts/decidim/header/_main_links_dropdown.html.erb +0 -2
  320. data/app/views/layouts/decidim/header/_main_links_mobile_account.html.erb +1 -1
  321. data/app/views/layouts/decidim/header/_menu_breadcrumb_items.html.erb +2 -0
  322. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_desktop.html.erb +11 -5
  323. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +5 -5
  324. data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +1 -1
  325. data/app/views/layouts/decidim/shared/_layout_item.html.erb +1 -1
  326. data/config/assets.rb +2 -1
  327. data/config/locales/ar.yml +38 -74
  328. data/config/locales/bg-BG.yml +2 -2
  329. data/config/locales/bg.yml +38 -74
  330. data/config/locales/bs-BA.yml +0 -2
  331. data/config/locales/ca.yml +374 -130
  332. data/config/locales/cs.yml +379 -116
  333. data/config/locales/de.yml +370 -132
  334. data/config/locales/el.yml +26 -58
  335. data/config/locales/en.yml +354 -110
  336. data/config/locales/eo.yml +0 -4
  337. data/config/locales/es-MX.yml +368 -127
  338. data/config/locales/es-PY.yml +373 -132
  339. data/config/locales/es.yml +374 -130
  340. data/config/locales/eu.yml +461 -215
  341. data/config/locales/fi-plain.yml +367 -130
  342. data/config/locales/fi.yml +372 -132
  343. data/config/locales/fr-CA.yml +180 -125
  344. data/config/locales/fr-LU.yml +3 -3
  345. data/config/locales/fr.yml +180 -122
  346. data/config/locales/ga-IE.yml +4 -25
  347. data/config/locales/gl.yml +23 -58
  348. data/config/locales/hu.yml +35 -62
  349. data/config/locales/id-ID.yml +24 -57
  350. data/config/locales/is-IS.yml +6 -25
  351. data/config/locales/it.yml +39 -218
  352. data/config/locales/ja.yml +235 -140
  353. data/config/locales/lb-LU.yml +2 -2
  354. data/config/locales/lb.yml +31 -76
  355. data/config/locales/lt.yml +29 -64
  356. data/config/locales/lv.yml +24 -58
  357. data/config/locales/nl.yml +26 -75
  358. data/config/locales/no.yml +26 -70
  359. data/config/locales/pl.yml +35 -72
  360. data/config/locales/pt-BR.yml +44 -63
  361. data/config/locales/pt.yml +26 -70
  362. data/config/locales/ro-RO.yml +118 -183
  363. data/config/locales/ru.yml +16 -43
  364. data/config/locales/sk-SK.yml +3 -3
  365. data/config/locales/sk.yml +27 -72
  366. data/config/locales/sl.yml +0 -4
  367. data/config/locales/sr-CS.yml +0 -2
  368. data/config/locales/sv.yml +141 -133
  369. data/config/locales/tr-TR.yml +32 -75
  370. data/config/locales/uk.yml +8 -29
  371. data/config/locales/zh-CN.yml +24 -68
  372. data/config/locales/zh-TW.yml +28 -62
  373. data/config/routes.rb +4 -10
  374. data/db/migrate/20171212103803_create_unique_nicknames.rb +1 -1
  375. data/db/migrate/20180221101934_fix_nickname_index.rb +1 -1
  376. data/db/migrate/20180706104107_add_nickname_to_managed_users.rb +1 -1
  377. data/db/migrate/20181001124950_move_users_groups_to_users_table.rb +1 -1
  378. data/db/migrate/20181025082245_add_timestamps_to_components.rb +2 -0
  379. data/db/migrate/20190412131728_fix_user_names.rb +1 -1
  380. data/db/migrate/20240628111905_add_visible_to_components.rb +7 -0
  381. data/db/migrate/20240704115429_create_decidim_taxonomies.rb +23 -0
  382. data/db/migrate/20240717093514_add_registered_only_to_decidim_share_tokens.rb +7 -0
  383. data/db/migrate/20240722215500_change_object_changes_on_versions.rb +39 -0
  384. data/db/migrate/20240806065417_create_decidim_taxonomy_filters.rb +23 -0
  385. data/db/migrate/20240822161348_add_deleted_at_to_decidim_components.rb +8 -0
  386. data/db/migrate/20240906162524_add_part_of_to_taxonomies.rb +26 -0
  387. data/db/migrate/20241001135825_add_role_to_participatory_space_private_users.rb +7 -0
  388. data/db/migrate/20241001140408_add_published_to_participatory_space_private_users.rb +7 -0
  389. data/db/migrate/20241022002600_create_private_exports.rb +18 -0
  390. data/db/migrate/20241028114430_add_component_counter_to_taxonomy_filters.rb +7 -0
  391. data/db/migrate/20241111104357_add_names_and_space_boolean_to_taxonomy_filters.rb +9 -0
  392. data/db/migrate/20241127093708_add_taxonomy_to_metrics.rb +7 -0
  393. data/db/migrate/20241204121445_add_participatory_space_manifests_from_taxonomy_filters.rb +9 -0
  394. data/decidim-core.gemspec +14 -17
  395. data/lib/decidim/action_authorization.rb +3 -2
  396. data/lib/decidim/amendable.rb +1 -1
  397. data/lib/decidim/api/input_filters/category_input_filter.rb +5 -3
  398. data/lib/decidim/api/input_filters/component_input_filter.rb +33 -20
  399. data/lib/decidim/api/input_filters/user_entity_input_filter.rb +53 -44
  400. data/lib/decidim/api/input_sorts/component_input_sort.rb +15 -13
  401. data/lib/decidim/api/input_sorts/user_entity_input_sort.rb +4 -4
  402. data/lib/decidim/api/interfaces/author_interface.rb +3 -2
  403. data/lib/decidim/api/interfaces/coauthorable_interface.rb +5 -5
  404. data/lib/decidim/api/interfaces/endorsable_interface.rb +2 -2
  405. data/lib/decidim/api/interfaces/participatory_space_interface.rb +5 -10
  406. data/lib/decidim/api/interfaces/taxonomizable_interface.rb +13 -0
  407. data/lib/decidim/api/types/amendment_type.rb +5 -7
  408. data/lib/decidim/api/types/area_api_type.rb +3 -3
  409. data/lib/decidim/api/types/attachment_type.rb +3 -3
  410. data/lib/decidim/api/types/category_type.rb +2 -2
  411. data/lib/decidim/api/types/decidim_type.rb +5 -1
  412. data/lib/decidim/api/types/fingerprint_type.rb +1 -1
  413. data/lib/decidim/api/types/localized_string_type.rb +1 -1
  414. data/lib/decidim/api/types/metric_history_type.rb +2 -0
  415. data/lib/decidim/api/types/metric_type.rb +1 -1
  416. data/lib/decidim/api/types/organization_type.rb +5 -0
  417. data/lib/decidim/api/types/participatory_space_link_type.rb +2 -2
  418. data/lib/decidim/api/types/participatory_space_manifest_type.rb +1 -1
  419. data/lib/decidim/api/types/quantifiable_translated_field_type.rb +1 -1
  420. data/lib/decidim/api/types/scope_api_type.rb +2 -3
  421. data/lib/decidim/api/types/session_type.rb +1 -2
  422. data/lib/decidim/api/types/taxonomy_type.rb +15 -0
  423. data/lib/decidim/api/types/trace_version_type.rb +2 -2
  424. data/lib/decidim/api/types/translated_field_type.rb +3 -5
  425. data/lib/decidim/api/types/user_group_type.rb +7 -20
  426. data/lib/decidim/api/types/user_type.rb +7 -20
  427. data/lib/decidim/asset_router/storage.rb +6 -11
  428. data/lib/decidim/assets/tailwind/tailwind.config.js.erb +3 -3
  429. data/lib/decidim/attachment_attributes.rb +1 -1
  430. data/lib/decidim/attribute_encryptor.rb +1 -1
  431. data/lib/decidim/attribute_object/nested_validator.rb +1 -1
  432. data/lib/decidim/attributes/integer_with_units.rb +27 -0
  433. data/lib/decidim/attributes/time_with_zone.rb +1 -5
  434. data/lib/decidim/attributes.rb +2 -0
  435. data/lib/decidim/authorization_form_builder.rb +0 -7
  436. data/lib/decidim/coauthorable.rb +1 -1
  437. data/lib/decidim/command.rb +3 -3
  438. data/lib/decidim/commands/destroy_resource.rb +5 -1
  439. data/lib/decidim/commands/resource_handler.rb +2 -2
  440. data/lib/decidim/commands/restore_resource.rb +45 -0
  441. data/lib/decidim/commands/soft_delete_resource.rb +63 -0
  442. data/lib/decidim/component_manifest.rb +7 -0
  443. data/lib/decidim/content_parsers/blob_parser.rb +8 -10
  444. data/lib/decidim/content_parsers/user_parser.rb +1 -1
  445. data/lib/decidim/core/api.rb +2 -0
  446. data/lib/decidim/core/engine.rb +21 -7
  447. data/lib/decidim/core/menu.rb +0 -5
  448. data/lib/decidim/core/seeds.rb +42 -2
  449. data/lib/decidim/core/test/factories.rb +107 -4
  450. data/lib/decidim/core/test/shared_examples/admin_resource_gallery_examples.rb +85 -0
  451. data/lib/decidim/core/test/shared_examples/announcements_examples.rb +0 -4
  452. data/lib/decidim/core/test/shared_examples/comments_examples.rb +393 -38
  453. data/lib/decidim/core/test/shared_examples/components_controller_hide_shared_examples.rb +11 -0
  454. data/lib/decidim/core/test/shared_examples/components_controller_reorder_shared_examples.rb +21 -0
  455. data/lib/decidim/core/test/shared_examples/download_open_data_shared_context.rb +36 -0
  456. data/lib/decidim/core/test/shared_examples/download_open_data_shared_examples.rb +45 -0
  457. data/lib/decidim/core/test/shared_examples/download_your_data_shared_examples.rb +17 -0
  458. data/lib/decidim/core/test/shared_examples/etiquette_validator_examples.rb +25 -0
  459. data/lib/decidim/core/test/shared_examples/follows_examples.rb +43 -0
  460. data/lib/decidim/core/test/shared_examples/has_taxonomies.rb +94 -0
  461. data/lib/decidim/core/test/shared_examples/manage_share_tokens_examples.rb +237 -0
  462. data/lib/decidim/core/test/shared_examples/map_examples.rb +2 -0
  463. data/lib/decidim/core/test/shared_examples/open_data_exporter_examples.rb +102 -0
  464. data/lib/decidim/core/test/shared_examples/participatory_space_members_page_examples.rb +46 -0
  465. data/lib/decidim/core/test/shared_examples/participatory_space_search_examples.rb +98 -0
  466. data/lib/decidim/core/test/shared_examples/permissions.rb +7 -7
  467. data/lib/decidim/core/test/shared_examples/preview_with_share_token_examples.rb +94 -0
  468. data/lib/decidim/core/test/shared_examples/reports_examples.rb +15 -53
  469. data/lib/decidim/core/test/shared_examples/resource_endorsed_event_examples.rb +2 -2
  470. data/lib/decidim/core/test/shared_examples/resource_search_examples.rb +75 -69
  471. data/lib/decidim/core/test/shared_examples/searchable_resources_shared_context.rb +1 -1
  472. data/lib/decidim/core/test/shared_examples/simple_event.rb +33 -19
  473. data/lib/decidim/core/test/shared_examples/social_share_examples.rb +7 -14
  474. data/lib/decidim/core/test/shared_examples/softdeleteable_components_examples.rb +173 -0
  475. data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +54 -8
  476. data/lib/decidim/core/test/shared_examples/taxonomizable_interface_examples.rb +20 -0
  477. data/lib/decidim/core/test/shared_examples/taxonomizable_resource_examples.rb +37 -0
  478. data/lib/decidim/core/test/shared_examples/taxonomy_settings.rb +49 -0
  479. data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +1 -1
  480. data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +0 -26
  481. data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +2 -28
  482. data/lib/decidim/core/test/shared_examples/with_endorsable_permissions_examples.rb +1 -1
  483. data/lib/decidim/core/test.rb +9 -5
  484. data/lib/decidim/core/version.rb +1 -1
  485. data/lib/decidim/core.rb +58 -0
  486. data/lib/decidim/download_your_data_serializers/download_your_data_identity_serializer.rb +0 -4
  487. data/lib/decidim/download_your_data_serializers/download_your_data_participatory_space_private_user_serializer.rb +3 -1
  488. data/lib/decidim/download_your_data_serializers/download_your_data_report_serializer.rb +2 -1
  489. data/lib/decidim/download_your_data_serializers/download_your_data_user_serializer.rb +6 -7
  490. data/lib/decidim/download_your_data_serializers.rb +19 -0
  491. data/lib/decidim/exporters/csv.rb +6 -0
  492. data/lib/decidim/exporters/export_manifest.rb +14 -0
  493. data/lib/decidim/exporters/pdf.rb +26 -22
  494. data/lib/decidim/filter_form_builder.rb +12 -15
  495. data/lib/decidim/form_builder.rb +6 -143
  496. data/lib/decidim/has_category.rb +5 -1
  497. data/lib/decidim/has_private_users.rb +4 -0
  498. data/lib/decidim/has_taxonomy_settings.rb +47 -0
  499. data/lib/decidim/has_upload_validations.rb +1 -1
  500. data/lib/decidim/legacy_form_builder.rb +118 -0
  501. data/lib/decidim/maintenance/import_models/application_record.rb +93 -0
  502. data/lib/decidim/maintenance/import_models/area.rb +82 -0
  503. data/lib/decidim/maintenance/import_models/area_type.rb +12 -0
  504. data/lib/decidim/maintenance/import_models/assembly_type.rb +49 -0
  505. data/lib/decidim/maintenance/import_models/categorization.rb +14 -0
  506. data/lib/decidim/maintenance/import_models/category.rb +107 -0
  507. data/lib/decidim/maintenance/import_models/participatory_process_type.rb +21 -0
  508. data/lib/decidim/maintenance/import_models/scope.rb +163 -0
  509. data/lib/decidim/maintenance/import_models.rb +19 -0
  510. data/lib/decidim/maintenance/taxonomy_importer.rb +132 -0
  511. data/lib/decidim/maintenance/taxonomy_plan.rb +78 -0
  512. data/lib/decidim/maintenance.rb +12 -0
  513. data/lib/decidim/map/autocomplete.rb +52 -8
  514. data/lib/decidim/map/dynamic_map.rb +1 -1
  515. data/lib/decidim/map/provider/dynamic_map/here.rb +40 -1
  516. data/lib/decidim/map/provider/geocoding/here.rb +9 -3
  517. data/lib/decidim/map/provider/static_map/here.rb +0 -34
  518. data/lib/decidim/map.rb +3 -6
  519. data/lib/decidim/moderation_tools.rb +16 -19
  520. data/lib/decidim/newsletter_encryptor.rb +1 -1
  521. data/lib/decidim/nicknamizable.rb +9 -6
  522. data/lib/decidim/paddable.rb +1 -1
  523. data/lib/decidim/participable.rb +10 -10
  524. data/lib/decidim/participatory_space_user.rb +10 -0
  525. data/lib/decidim/private_download_helper.rb +15 -0
  526. data/lib/decidim/record_encryptor.rb +51 -46
  527. data/lib/decidim/reportable.rb +2 -6
  528. data/lib/decidim/resourceable.rb +16 -0
  529. data/lib/decidim/seeds.rb +18 -20
  530. data/lib/decidim/settings_manifest.rb +34 -1
  531. data/lib/decidim/soft_deletable.rb +17 -0
  532. data/lib/decidim/taxonomizable.rb +72 -0
  533. data/lib/decidim/translatable_attributes.rb +1 -5
  534. data/lib/decidim/view_model.rb +0 -1
  535. data/lib/tasks/decidim_download_your_data_tasks.rake +2 -4
  536. data/lib/tasks/decidim_procfile.rake +6 -0
  537. data/lib/tasks/decidim_tasks.rake +1 -0
  538. data/lib/tasks/decidim_taxonomies.rake +155 -0
  539. data/lib/tasks/upgrade/{decidim_fix_categorization.rake → clean.rake} +25 -18
  540. data/lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake +1 -1
  541. data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +20 -23
  542. data/lib/tasks/upgrade/migrations.rake +91 -0
  543. metadata +201 -113
  544. data/app/cells/decidim/amendable/amenders_list/show.erb +0 -0
  545. data/app/cells/decidim/content_blocks/base/content.erb +0 -0
  546. data/app/cells/decidim/endorsers_list/full_endorsers_list.erb +0 -3
  547. data/app/cells/decidim/endorsers_list_button/content.erb +0 -1
  548. data/app/cells/decidim/endorsers_list_button_cell.rb +0 -15
  549. data/app/cells/decidim/report_user_button/already_reported_modal.erb +0 -11
  550. data/app/cells/decidim/report_user_button/flag_modal.erb +0 -47
  551. data/app/cells/decidim/report_user_button/show.erb +0 -2
  552. data/app/cells/decidim/report_user_button_cell.rb +0 -59
  553. data/app/cells/decidim/scopes_picker/scope_picker_prompt.erb +0 -3
  554. data/app/cells/decidim/scopes_picker/scope_picker_values.erb +0 -5
  555. data/app/cells/decidim/scopes_picker/show.erb +0 -14
  556. data/app/cells/decidim/scopes_picker_cell.rb +0 -92
  557. data/app/commands/decidim/update_user_interests.rb +0 -41
  558. data/app/controllers/decidim/scopes_controller.rb +0 -84
  559. data/app/controllers/decidim/user_interests_controller.rb +0 -30
  560. data/app/forms/decidim/user_interest_scope_form.rb +0 -25
  561. data/app/forms/decidim/user_interests_form.rb +0 -17
  562. data/app/helpers/decidim/categories_helper.rb +0 -26
  563. data/app/helpers/decidim/scopes_helper.rb +0 -105
  564. data/app/jobs/decidim/hide_child_resources_job.rb +0 -24
  565. data/app/packs/images/decidim/vendor/leaflet/layers-2x.png +0 -0
  566. data/app/packs/images/decidim/vendor/leaflet/layers.png +0 -0
  567. data/app/packs/images/decidim/vendor/leaflet/marker-icon-2x.png +0 -0
  568. data/app/packs/images/decidim/vendor/leaflet/marker-icon.png +0 -0
  569. data/app/packs/images/decidim/vendor/leaflet/marker-shadow.png +0 -0
  570. data/app/packs/src/decidim/dropdown_menu.js +0 -18
  571. data/app/packs/stylesheets/decidim/_hashtags.scss +0 -5
  572. data/app/packs/stylesheets/decidim/legacy/MarkerCluster.Default.scss +0 -67
  573. data/app/packs/stylesheets/decidim/legacy/MarkerCluster.scss +0 -18
  574. data/app/packs/stylesheets/decidim/legacy/leaflet.scss +0 -705
  575. data/app/validators/scope_belongs_to_component_validator.rb +0 -16
  576. data/app/views/decidim/account/_user_groups.html.erb +0 -0
  577. data/app/views/decidim/reported_mailer/hidden_automatically.html.erb +0 -25
  578. data/app/views/decidim/reported_mailer/hidden_manually.html.erb +0 -25
  579. data/app/views/decidim/scopes/_scopes_picker_input.html.erb +0 -19
  580. data/app/views/decidim/scopes/picker.html.erb +0 -53
  581. data/app/views/decidim/shared/_comments.html.erb +0 -0
  582. data/app/views/decidim/shared/_share_modal.html.erb +0 -26
  583. data/app/views/decidim/shared/_tags.html.erb +0 -1
  584. data/app/views/decidim/user_interests/_areas.html.erb +0 -14
  585. data/app/views/decidim/user_interests/_scopes.html.erb +0 -22
  586. data/app/views/decidim/user_interests/show.html.erb +0 -22
  587. data/config/initializers/foundation_rails_helper.rb +0 -4
  588. data/config/locales/ca-IT.yml +0 -2146
  589. data/lib/decidim/core/test/shared_examples/has_category.rb +0 -38
  590. data/lib/decidim/core/test/shared_examples/has_scope.rb +0 -11
  591. data/lib/decidim/core/test/shared_examples/manage_component_share_tokens.rb +0 -83
  592. data/lib/decidim/core/test/shared_examples/preview_component_with_share_token_examples.rb +0 -49
  593. data/lib/decidim/core/test/shared_examples/scope_helper_examples.rb +0 -93
  594. data/lib/decidim/seven_zip_wrapper.rb +0 -29
  595. data/lib/tasks/upgrade/clean_hidden_resources.rake +0 -33
@@ -26,6 +26,8 @@ module Decidim
26
26
  include NeedsPasswordChange
27
27
  include LinkedResourceReference
28
28
  include ActiveStorage::SetCurrent
29
+ include OnboardingActionMethods
30
+ include EphemeralSessionChecker
29
31
 
30
32
  helper Decidim::MetaTagsHelper
31
33
  helper Decidim::DecidimFormHelper
@@ -42,6 +44,7 @@ module Decidim
42
44
  helper Decidim::TwitterSearchHelper
43
45
  helper Decidim::SocialShareButtonHelper
44
46
  helper Decidim::FiltersHelper
47
+ helper Decidim::OnboardingActionHelper
45
48
 
46
49
  register_permissions(::Decidim::ApplicationController,
47
50
  ::Decidim::Admin::Permissions,
@@ -57,6 +60,12 @@ module Decidim
57
60
 
58
61
  skip_before_action :disable_http_caching, unless: :user_signed_in?
59
62
 
63
+ def store_share_token
64
+ session[:share_token] = params[:share_token] if params.has_key?(:share_token)
65
+
66
+ session[:share_token].presence
67
+ end
68
+
60
69
  private
61
70
 
62
71
  # This overrides Devise's method for extracting the path from the URL. We
@@ -5,10 +5,12 @@ module Decidim
5
5
  helper_method :authorizations, :authorize_action_path
6
6
  layout false
7
7
 
8
- def show; end
8
+ def show
9
+ store_onboarding_cookie_data!(current_user)
10
+ end
9
11
 
10
12
  def authorize_action_path(handler_name)
11
- authorizations.status_for(handler_name).current_path(redirect_url: URI(request.referer).path)
13
+ authorizations.status_for(handler_name).current_path(redirect_url:)
12
14
  end
13
15
 
14
16
  private
@@ -31,5 +33,9 @@ module Decidim
31
33
  def authorizations
32
34
  @authorizations ||= action_authorized_to(authorization_action, resource:)
33
35
  end
36
+
37
+ def redirect_url
38
+ pending_onboarding_action?(current_user) ? decidim_verifications.onboarding_pending_authorizations_path : URI(request.referer).path
39
+ end
34
40
  end
35
41
  end
@@ -19,7 +19,7 @@ module Decidim
19
19
  helper Decidim::TranslationsHelper
20
20
  helper Decidim::IconHelper
21
21
  helper Decidim::ResourceHelper
22
- helper Decidim::ScopesHelper
22
+ helper Decidim::TaxonomiesHelper
23
23
  helper Decidim::ActionAuthorizationHelper
24
24
  helper Decidim::AttachmentsHelper
25
25
  helper Decidim::SanitizeHelper
@@ -30,7 +30,7 @@ module Decidim
30
30
  :current_manifest
31
31
 
32
32
  before_action do
33
- enforce_permission_to :read, :component, component: current_component, share_token:
33
+ enforce_permission_to :read, :component, component: current_component
34
34
  end
35
35
 
36
36
  before_action :redirect_unless_feature_private
@@ -49,10 +49,6 @@ module Decidim
49
49
  @current_manifest ||= current_component.manifest
50
50
  end
51
51
 
52
- def share_token
53
- params[:share_token]
54
- end
55
-
56
52
  def permission_scope
57
53
  :public
58
54
  end
@@ -73,7 +69,7 @@ module Decidim
73
69
  def set_component_breadcrumb_item
74
70
  context_breadcrumb_items << {
75
71
  label: current_component.name,
76
- url: root_path,
72
+ url: Decidim::EngineRouter.main_proxy(current_component).root_path,
77
73
  active: false,
78
74
  resource: current_component
79
75
  }
@@ -5,6 +5,7 @@ module Decidim
5
5
  # Custom Devise ConfirmationsController to avoid namespace problems.
6
6
  class ConfirmationsController < ::Devise::ConfirmationsController
7
7
  include Decidim::DeviseControllers
8
+ include Decidim::OnboardingActionMethods
8
9
 
9
10
  helper_method :new_user_group_session_path
10
11
 
@@ -33,6 +34,9 @@ module Decidim
33
34
 
34
35
  sign_in(resource)
35
36
 
37
+ store_onboarding_cookie_data!(resource)
38
+ return decidim_verifications.onboarding_pending_authorizations_path if pending_onboarding_action?(resource)
39
+
36
40
  super
37
41
  end
38
42
  end
@@ -7,6 +7,7 @@ module Decidim
7
7
  include FormFactory
8
8
  include Decidim::DeviseControllers
9
9
  include Decidim::DeviseAuthenticationMethods
10
+ include NeedsTosAccepted
10
11
 
11
12
  def new
12
13
  @form = form(OmniauthRegistrationForm).from_params(params[:user])
@@ -36,6 +37,12 @@ module Decidim
36
37
  render :new
37
38
  end
38
39
 
40
+ on(:add_tos_errors) do
41
+ set_flash_message :alert, :add_tos_errors if @form.valid_tos?
42
+ session[:verified_email] = verified_email
43
+ render :new_tos_fields
44
+ end
45
+
39
46
  on(:error) do |user|
40
47
  if user.errors[:email]
41
48
  set_flash_message :alert, :failure, kind: @form.provider.capitalize, reason: t("decidim.devise.omniauth_registrations.create.email_already_exists")
@@ -75,7 +82,7 @@ module Decidim
75
82
  end
76
83
 
77
84
  def verified_email
78
- @verified_email ||= oauth_data.dig(:info, :email)
85
+ @verified_email ||= oauth_data.dig(:info, :email).presence || session[:verified_email]
79
86
  end
80
87
 
81
88
  def oauth_hash
@@ -57,7 +57,7 @@ module Decidim
57
57
 
58
58
  # Called before resource.save
59
59
  def build_resource(hash = nil)
60
- super(hash)
60
+ super
61
61
  resource.organization = current_organization
62
62
  end
63
63
 
@@ -24,6 +24,8 @@ module Decidim
24
24
  validator = PasswordValidator.new({ attributes: :password })
25
25
  user.update!(password_updated_at: nil) unless validator.validate_each(user, :password, sign_in_params[:password])
26
26
  end
27
+
28
+ store_onboarding_cookie_data!(user)
27
29
  end
28
30
  end
29
31
 
@@ -6,11 +6,29 @@ module Decidim
6
6
  # The controller to handle the user's download_my_data page.
7
7
  class DownloadYourDataController < Decidim::ApplicationController
8
8
  include Decidim::UserProfile
9
+ include Decidim::Paginable
9
10
 
11
+ helper_method :help_definitions
12
+
13
+ # i18n-tasks-use t('decidim.download_your_data.show.answers')
14
+ # i18n-tasks-use t('decidim.download_your_data.show.assemblies')
15
+ # i18n-tasks-use t('decidim.download_your_data.show.debate_comments')
16
+ # i18n-tasks-use t('decidim.download_your_data.show.debates')
17
+ # i18n-tasks-use t('decidim.download_your_data.show.initiatives')
18
+ # i18n-tasks-use t('decidim.download_your_data.show.meeting_comments')
19
+ # i18n-tasks-use t('decidim.download_your_data.show.meetings')
20
+ # i18n-tasks-use t('decidim.download_your_data.show.participatory_processes')
21
+ # i18n-tasks-use t('decidim.download_your_data.show.projects')
22
+ # i18n-tasks-use t('decidim.download_your_data.show.proposal_comments')
23
+ # i18n-tasks-use t('decidim.download_your_data.show.proposals')
24
+ # i18n-tasks-use t('decidim.download_your_data.show.result_comments')
25
+ # i18n-tasks-use t('decidim.download_your_data.show.results')
26
+ # i18n-tasks-use t('decidim.download_your_data.show.survey_user_answers')
10
27
  def show
11
28
  enforce_permission_to(:show, :user, current_user:)
12
29
 
13
30
  @account = form(AccountForm).from_model(current_user)
31
+ @exports = paginate(current_user.private_exports)
14
32
  end
15
33
 
16
34
  def export
@@ -25,12 +43,25 @@ module Decidim
25
43
  def download_file
26
44
  enforce_permission_to(:download, :user, current_user:)
27
45
 
28
- if current_user.download_your_data_file.attached?
29
- redirect_to Rails.application.routes.url_helpers.rails_blob_url(current_user.download_your_data_file.blob, only_path: true)
46
+ if private_export.expired?
47
+ flash[:error] = t("decidim.account.download_your_data_export.export_expired")
48
+ redirect_to download_your_data_path
49
+ elsif private_export.file.attached?
50
+ redirect_to Rails.application.routes.url_helpers.rails_blob_url(private_export.file.blob, only_path: true)
30
51
  else
31
52
  flash[:error] = t("decidim.account.download_your_data_export.file_no_exists")
32
53
  redirect_to download_your_data_path
33
54
  end
34
55
  end
56
+
57
+ private
58
+
59
+ def private_export
60
+ @private_export ||= current_user.private_exports.find(params[:uuid])
61
+ end
62
+
63
+ def help_definitions
64
+ @help_definitions ||= Decidim::DownloadYourDataSerializers.help_definitions_for(current_user)
65
+ end
35
66
  end
36
67
  end
@@ -3,9 +3,7 @@
3
3
  module Decidim
4
4
  class EditorImagesController < Decidim::ApplicationController
5
5
  include FormFactory
6
-
7
- # overwrite original rescue_from to ensure we print messages from ajax methods (update)
8
- rescue_from Decidim::ActionForbidden, with: :ajax_user_has_no_permission
6
+ include AjaxPermissionHandler
9
7
 
10
8
  def create
11
9
  enforce_permission_to :create, :editor_image
@@ -25,14 +23,6 @@ module Decidim
25
23
 
26
24
  private
27
25
 
28
- # Rescue ajax calls and print the update.js view which prints the info on the message ajax form
29
- # Only if the request is AJAX, otherwise behave as Decidim standards
30
- def ajax_user_has_no_permission
31
- return user_has_no_permission unless request.xhr?
32
-
33
- render json: { message: I18n.t("actions.unauthorized", scope: "decidim.core") }, status: :unprocessable_entity
34
- end
35
-
36
26
  def form_values
37
27
  {
38
28
  file: params[:image],
@@ -47,7 +47,7 @@ module Decidim
47
47
  end
48
48
 
49
49
  def button_cell_mobile
50
- @button_cell_mobile ||= cell("decidim/follow_button", resource, **button_options.merge(mobile: true))
50
+ @button_cell_mobile ||= cell("decidim/follow_button", resource, **button_options, mobile: true)
51
51
  end
52
52
 
53
53
  def button_cell
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ class GeolocationController < Decidim::ApplicationController
5
+ include Decidim::AjaxPermissionHandler
6
+
7
+ def locate
8
+ enforce_permission_to :locate, :geolocation
9
+
10
+ unless Decidim::Map.configured?
11
+ return render(json: { message: I18n.t("not_configured", scope: "decidim.application.geocoding"), found: false }, status: :unprocessable_entity)
12
+ end
13
+
14
+ geocoder = Decidim::Map.utility(:geocoding, organization: current_organization)
15
+ address = geocoder.address([params[:latitude], params[:longitude]])
16
+ render json: { address:, found: address.present? }
17
+ end
18
+ end
19
+ end
@@ -3,7 +3,6 @@
3
3
  module Decidim
4
4
  class HomepageController < Decidim::ApplicationController
5
5
  skip_before_action :store_current_location
6
-
7
6
  def show; end
8
7
  end
9
8
  end
@@ -2,24 +2,49 @@
2
2
 
3
3
  module Decidim
4
4
  class OpenDataController < Decidim::ApplicationController
5
+ helper_method :open_data_component_manifests, :open_data_participatory_space_manifests, :open_data_core_manifests
6
+
7
+ def index; end
8
+
5
9
  def download
6
- if uploader.attached?
7
- redirect_to uploader.path
10
+ resource = params[:resource] || nil
11
+
12
+ if open_data_file_for_resource(resource)
13
+ file = open_data_file_for_resource(resource)
14
+ send_data file.download, filename: file.blob.filename.to_s, type: file.blob.content_type
8
15
  else
9
- schedule_open_data_generation
16
+ schedule_open_data_generation(resource)
10
17
  flash[:alert] = t("decidim.open_data.not_available_yet")
11
- redirect_back fallback_location: root_path
18
+ redirect_back fallback_location: open_data_path
12
19
  end
13
20
  end
14
21
 
15
22
  private
16
23
 
17
- def uploader
18
- @uploader ||= Decidim::ApplicationUploader.new(current_organization, :open_data_file)
24
+ def open_data_core_manifests
25
+ @open_data_core_manifests ||= Decidim.open_data_manifests.select(&:include_in_open_data)
26
+ end
27
+
28
+ def open_data_component_manifests
29
+ @open_data_component_manifests ||= Decidim.component_manifests
30
+ .flat_map(&:export_manifests)
31
+ .select(&:include_in_open_data?)
32
+ end
33
+
34
+ def open_data_participatory_space_manifests
35
+ @open_data_participatory_space_manifests ||= Decidim.participatory_space_manifests
36
+ .flat_map(&:export_manifests)
37
+ .select(&:include_in_open_data?)
38
+ end
39
+
40
+ def open_data_file_for_resource(resource)
41
+ current_organization.open_data_files.all.find do |file|
42
+ file.blob.filename == current_organization.open_data_file_path(resource)
43
+ end
19
44
  end
20
45
 
21
- def schedule_open_data_generation
22
- OpenDataJob.perform_later(current_organization)
46
+ def schedule_open_data_generation(resource = nil)
47
+ OpenDataJob.perform_later(current_organization, resource)
23
48
  end
24
49
  end
25
50
  end
@@ -24,7 +24,7 @@ module Decidim
24
24
  def show
25
25
  return redirect_to profile_members_path if profile_holder.is_a?(Decidim::UserGroup)
26
26
 
27
- redirect_to profile_activity_path(nickname: params[:nickname].downcase)
27
+ redirect_to profile_activity_path(nickname: params[:nickname])
28
28
  end
29
29
 
30
30
  def tooltip
@@ -116,7 +116,7 @@ module Decidim
116
116
  def profile_holder
117
117
  return if params[:nickname].blank?
118
118
 
119
- @profile_holder ||= Decidim::UserBaseEntity.find_by("nickname = ? AND decidim_organization_id = ?", params[:nickname].downcase, current_organization.id)
119
+ @profile_holder ||= Decidim::UserBaseEntity.find_by("LOWER(nickname) = ? AND decidim_organization_id = ?", params[:nickname].downcase, current_organization.id)
120
120
  end
121
121
  end
122
122
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Decidim
4
4
  # Exposes the report resource so users can report a reportable.
5
- # Unless the reportable is marked as hideable, the resource notice will change accordingly.
6
5
  class ReportsController < Decidim::ApplicationController
7
6
  include FormFactory
8
7
  include NeedsPermission
@@ -16,12 +15,8 @@ module Decidim
16
15
 
17
16
  CreateReport.call(@form, reportable) do
18
17
  on(:ok) do
19
- flash[:notice] = if hideable?
20
- I18n.t("decidim.reports.hide.success")
21
- else
22
- I18n.t("decidim.reports.create.success")
23
- end
24
- redirect_to reportable.reload.reported_content_url
18
+ flash[:notice] = I18n.t("decidim.reports.create.success")
19
+ redirect_back fallback_location: root_path
25
20
  end
26
21
 
27
22
  on(:invalid) do
@@ -22,7 +22,7 @@ module Decidim
22
22
  def user
23
23
  return unless params[:nickname]
24
24
 
25
- @user ||= current_organization.users.find_by("nickname = ?", params[:nickname].downcase)
25
+ @user ||= current_organization.users.find_by("LOWER(nickname) = ?", params[:nickname].downcase)
26
26
  end
27
27
 
28
28
  def activities
@@ -11,6 +11,7 @@ module Decidim
11
11
  include FormFactory
12
12
  include Messaging::ConversationHelper
13
13
  include HasProfileBreadcrumb
14
+ include AjaxPermissionHandler
14
15
 
15
16
  before_action :authenticate_user!
16
17
  before_action :ensure_profile_manager
@@ -18,9 +19,6 @@ module Decidim
18
19
  helper Decidim::ResourceHelper
19
20
  helper_method :user, :conversations, :conversation
20
21
 
21
- # overwrite original rescue_from to ensure we print messages from ajax methods (update)
22
- rescue_from Decidim::ActionForbidden, with: :ajax_user_has_no_permission
23
-
24
22
  def index
25
23
  enforce_permission_to :list, :conversation, interlocutor: user
26
24
  end
@@ -94,14 +92,6 @@ module Decidim
94
92
 
95
93
  private
96
94
 
97
- # Rescue ajax calls and print the update.js view which prints the info on the message ajax form
98
- # Only if the request is AJAX, otherwise behave as Decidim standards
99
- def ajax_user_has_no_permission
100
- return user_has_no_permission unless request.xhr?
101
-
102
- render_unprocessable_entity I18n.t("actions.unauthorized", scope: "decidim.core")
103
- end
104
-
105
95
  def render_unprocessable_entity(message)
106
96
  render action: :update, locals: { error: message }, status: :unprocessable_entity
107
97
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ class SoftDeleteResourceEvent < Decidim::Events::SimpleEvent
5
+ i18n_attributes :resource_type, :resource_title
6
+
7
+ def resource_type
8
+ resource.model_name.human
9
+ end
10
+
11
+ def resource_title
12
+ translated_attribute resource.title
13
+ end
14
+ end
15
+ end
@@ -21,10 +21,7 @@ module Decidim
21
21
 
22
22
  validates :name, presence: true, format: { with: Decidim::User::REGEXP_NAME }
23
23
  validates :email, presence: true, "valid_email_2/email": { disposable: true }
24
- validates :nickname,
25
- presence: true,
26
- format: { with: Decidim::User::REGEXP_NICKNAME, message: :format },
27
- length: { maximum: Decidim::User.nickname_max_length }
24
+ validates :nickname, presence: true, format: { with: Decidim::User::REGEXP_NICKNAME }
28
25
 
29
26
  validates :nickname, length: { maximum: Decidim::User.nickname_max_length, allow_blank: true }
30
27
  validates :password, password: { name: :name, email: :email, username: :nickname }, if: -> { password.present? }
@@ -69,7 +66,7 @@ module Decidim
69
66
 
70
67
  def unique_nickname
71
68
  return true if Decidim::UserBaseEntity.where(
72
- "decidim_organization_id = ? AND nickname = ? ",
69
+ "decidim_organization_id = ? AND LOWER(nickname) = ? ",
73
70
  context.current_organization.id,
74
71
  nickname.downcase
75
72
  ).where.not(id: context.current_user.id).empty?
@@ -94,7 +94,8 @@ module Decidim
94
94
  .from_model(@i18n_amendable)
95
95
  .with_context(
96
96
  current_component: @i18n_amendable.component,
97
- current_participatory_space: @i18n_amendable.participatory_space
97
+ current_participatory_space: @i18n_amendable.participatory_space,
98
+ current_organization: @i18n_amendable.organization
98
99
  )
99
100
  end
100
101
 
@@ -114,7 +115,8 @@ module Decidim
114
115
  def form_context
115
116
  context.to_h.merge(
116
117
  current_component: amendable.component,
117
- current_participatory_space: amendable.participatory_space
118
+ current_participatory_space: amendable.participatory_space,
119
+ current_organization: amendable.organization
118
120
  )
119
121
  end
120
122
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # The form object of ephemeral users.
5
+ class EphemeralUserForm < Form
6
+ mimic :user
7
+
8
+ attribute :locale
9
+ attribute :name
10
+ attribute :nickname
11
+ attribute :organization
12
+ attribute :verified, Boolean, default: false
13
+
14
+ def name
15
+ super || I18n.t("decidim.ephemeral_user", locale:)
16
+ end
17
+
18
+ def nickname
19
+ super || User.nicknamize(name)
20
+ end
21
+ end
22
+ end
@@ -7,6 +7,7 @@ module Decidim
7
7
  mimic :user
8
8
 
9
9
  attribute :email_on_moderations, Boolean
10
+ attribute :email_on_assigned_proposals, Boolean
10
11
  attribute :newsletter_notifications, Boolean
11
12
  attribute :notifications_from_followed, Boolean
12
13
  attribute :notifications_from_own_activity, Boolean
@@ -11,6 +11,7 @@ module Decidim
11
11
  attribute :provider, String
12
12
  attribute :uid, String
13
13
  attribute :tos_agreement, Boolean
14
+ attribute :newsletter, Boolean
14
15
  attribute :oauth_signature, String
15
16
  attribute :avatar_url, String
16
17
  attribute :raw_data, Hash
@@ -21,11 +22,23 @@ module Decidim
21
22
  validates :uid, presence: true
22
23
 
23
24
  def self.create_signature(provider, uid)
24
- Digest::MD5.hexdigest("#{provider}-#{uid}-#{Rails.application.secrets.secret_key_base}")
25
+ Digest::MD5.hexdigest("#{provider}-#{uid}-#{Rails.application.secret_key_base}")
25
26
  end
26
27
 
27
28
  def normalized_nickname
28
- UserBaseEntity.nicknamize(nickname || name, current_organization.id)
29
+ UserBaseEntity.nicknamize(nickname || name, organization: current_organization)
30
+ end
31
+
32
+ def newsletter_at
33
+ return nil unless newsletter?
34
+
35
+ Time.current
36
+ end
37
+
38
+ def valid_tos?
39
+ return if tos_agreement.nil?
40
+
41
+ errors.add :tos_agreement, :accepted
29
42
  end
30
43
  end
31
44
  end
@@ -37,7 +37,7 @@ module Decidim
37
37
  end
38
38
 
39
39
  def generate_nickname(name, organization)
40
- Decidim::UserBaseEntity.nicknamize(name, organization.id)
40
+ Decidim::UserBaseEntity.nicknamize(name, organization:)
41
41
  end
42
42
 
43
43
  def valid_users
@@ -7,6 +7,17 @@ module Decidim
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
10
+ DEFAULT_KEY_MATCHING = {
11
+ alert: :alert,
12
+ notice: :success,
13
+ info: :info,
14
+ secondary: :secondary,
15
+ success: :success,
16
+ error: :alert,
17
+ warning: :warning,
18
+ primary: :primary
19
+ }.freeze
20
+
10
21
  # Displays the flash messages found in ActionDispatch's +flash+ hash using
11
22
  # FoundationRailsHelper's +callout+ component.
12
23
  #
@@ -20,7 +31,7 @@ module Decidim
20
31
  #
21
32
  # @return [String] the HTML with all the flash messages
22
33
  def display_flash_messages(closable: true, key_matching: {})
23
- key_matching = FoundationRailsHelper::FlashHelper::DEFAULT_KEY_MATCHING.merge(key_matching)
34
+ key_matching = DEFAULT_KEY_MATCHING.merge(key_matching)
24
35
  key_matching.default = :primary
25
36
 
26
37
  capture do
@@ -106,13 +117,17 @@ module Decidim
106
117
  end
107
118
 
108
119
  def message(value)
109
- return content_tag(:div, value, class: "flash__message flex items-center") unless value.is_a?(Hash)
120
+ return content_tag(:div, value, class: "flash__message") unless value.is_a?(Hash)
110
121
 
111
122
  content_tag(:div, class: "flash__message") do
112
123
  concat value[:title]
113
124
  concat content_tag(:span, value[:body], class: "flash__message-body")
114
125
  end
115
126
  end
127
+
128
+ def ignored_key?(key)
129
+ [:timedout].include?(key)
130
+ end
116
131
  end
117
132
  end
118
133
  end