decidim-core 0.29.6 → 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 (607) 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 +2 -6
  11. data/app/cells/decidim/author_cell.rb +1 -11
  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/avatar.erb +2 -0
  49. data/app/cells/decidim/profile/badge.erb +3 -3
  50. data/app/cells/decidim/profile/details.erb +1 -2
  51. data/app/cells/decidim/profile_actions/show.erb +1 -1
  52. data/app/cells/decidim/profile_sidebar/show.erb +167 -0
  53. data/app/cells/decidim/profile_sidebar_cell.rb +68 -0
  54. data/app/cells/decidim/progress_bar/show.erb +2 -2
  55. data/app/cells/decidim/report_button/already_reported_modal.erb +2 -2
  56. data/app/cells/decidim/report_button/flag_modal.erb +36 -24
  57. data/app/cells/decidim/report_button_cell.rb +9 -2
  58. data/app/cells/decidim/resource_history/show.erb +20 -0
  59. data/app/cells/decidim/resource_history_cell.rb +66 -0
  60. data/app/cells/decidim/resource_types_filter/show.erb +1 -1
  61. data/app/cells/decidim/resource_types_filter_cell.rb +6 -6
  62. data/app/cells/decidim/share_button_cell.rb +0 -4
  63. data/app/cells/decidim/share_widget/modal.erb +26 -0
  64. data/app/cells/decidim/share_widget/show.erb +2 -0
  65. data/app/cells/decidim/share_widget_cell.rb +20 -0
  66. data/app/cells/decidim/tags/show.erb +7 -4
  67. data/app/cells/decidim/tags_cell.rb +11 -72
  68. data/app/cells/decidim/upload_modal/files.erb +4 -4
  69. data/app/cells/decidim/upload_modal_cell.rb +3 -5
  70. data/app/cells/decidim/user_activity/show.erb +1 -1
  71. data/app/cells/decidim/user_activity_cell.rb +1 -6
  72. data/app/commands/decidim/amendable/accept.rb +1 -2
  73. data/app/commands/decidim/amendable/create_draft.rb +2 -2
  74. data/app/commands/decidim/create_ephemeral_user.rb +52 -0
  75. data/app/commands/decidim/create_omniauth_registration.rb +21 -17
  76. data/app/commands/decidim/create_report.rb +8 -11
  77. data/app/commands/decidim/create_user_group.rb +6 -2
  78. data/app/commands/decidim/destroy_ephemeral_user.rb +47 -0
  79. data/app/commands/decidim/invite_user.rb +1 -1
  80. data/app/commands/decidim/search.rb +0 -14
  81. data/app/commands/decidim/update_account.rb +11 -3
  82. data/app/commands/decidim/update_notifications_settings.rb +1 -0
  83. data/app/commands/decidim/update_resources_taxonomies.rb +67 -0
  84. data/app/commands/decidim/update_user_group.rb +7 -1
  85. data/app/constraints/decidim/current_component.rb +1 -1
  86. data/app/controllers/concerns/decidim/ajax_permission_handler.rb +21 -0
  87. data/app/controllers/concerns/decidim/devise_authentication_methods.rb +3 -6
  88. data/app/controllers/concerns/decidim/devise_controllers.rb +2 -0
  89. data/app/controllers/concerns/decidim/disable_redirection_to_external_host.rb +1 -1
  90. data/app/controllers/concerns/decidim/ephemeral_session_checker.rb +87 -0
  91. data/app/controllers/concerns/decidim/filter_resource.rb +4 -2
  92. data/app/controllers/concerns/decidim/has_members_page.rb +25 -0
  93. data/app/controllers/concerns/decidim/locale_switcher.rb +2 -2
  94. data/app/controllers/concerns/decidim/needs_password_change.rb +0 -1
  95. data/app/controllers/concerns/decidim/needs_permission.rb +2 -1
  96. data/app/controllers/concerns/decidim/needs_tos_accepted.rb +4 -5
  97. data/app/controllers/concerns/decidim/onboarding_action_methods.rb +52 -0
  98. data/app/controllers/concerns/decidim/participatory_space_context.rb +1 -4
  99. data/app/controllers/decidim/amendments_controller.rb +3 -3
  100. data/app/controllers/decidim/application_controller.rb +9 -0
  101. data/app/controllers/decidim/authorization_modals_controller.rb +8 -2
  102. data/app/controllers/decidim/components/base_controller.rb +3 -7
  103. data/app/controllers/decidim/devise/confirmations_controller.rb +4 -0
  104. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +8 -1
  105. data/app/controllers/decidim/devise/registrations_controller.rb +1 -1
  106. data/app/controllers/decidim/devise/sessions_controller.rb +2 -0
  107. data/app/controllers/decidim/download_your_data_controller.rb +33 -2
  108. data/app/controllers/decidim/editor_images_controller.rb +1 -11
  109. data/app/controllers/decidim/follows_controller.rb +1 -1
  110. data/app/controllers/decidim/geolocation_controller.rb +19 -0
  111. data/app/controllers/decidim/homepage_controller.rb +0 -1
  112. data/app/controllers/decidim/open_data_controller.rb +33 -8
  113. data/app/controllers/decidim/profiles_controller.rb +2 -2
  114. data/app/controllers/decidim/reports_controller.rb +2 -7
  115. data/app/controllers/decidim/user_activities_controller.rb +1 -1
  116. data/app/controllers/decidim/user_conversations_controller.rb +1 -11
  117. data/app/events/decidim/soft_delete_resource_event.rb +15 -0
  118. data/app/forms/decidim/account_form.rb +2 -5
  119. data/app/forms/decidim/amendable/form.rb +4 -2
  120. data/app/forms/decidim/ephemeral_user_form.rb +22 -0
  121. data/app/forms/decidim/notifications_settings_form.rb +1 -0
  122. data/app/forms/decidim/omniauth_registration_form.rb +15 -2
  123. data/app/forms/decidim/registration_form.rb +1 -1
  124. data/app/forms/decidim/user_group_form.rb +0 -2
  125. data/app/helpers/concerns/decidim/flash_helper_extensions.rb +17 -2
  126. data/app/helpers/decidim/action_authorization_helper.rb +75 -14
  127. data/app/helpers/decidim/amendments_helper.rb +1 -11
  128. data/app/helpers/decidim/application_helper.rb +6 -2
  129. data/app/helpers/decidim/breadcrumb_helper.rb +6 -0
  130. data/app/helpers/decidim/cache_helper.rb +1 -1
  131. data/app/helpers/decidim/check_boxes_tree_helper.rb +25 -53
  132. data/app/helpers/decidim/decidim_form_helper.rb +0 -44
  133. data/app/helpers/decidim/endorsable_helper.rb +0 -10
  134. data/app/helpers/decidim/filters_helper.rb +0 -25
  135. data/app/helpers/decidim/layout_helper.rb +6 -6
  136. data/app/helpers/decidim/map_helper.rb +1 -1
  137. data/app/helpers/decidim/menu_helper.rb +2 -2
  138. data/app/helpers/decidim/messaging/conversation_helper.rb +2 -3
  139. data/app/helpers/decidim/meta_tags_helper.rb +32 -23
  140. data/app/helpers/decidim/modal_helper.rb +23 -0
  141. data/app/helpers/decidim/omniauth_helper.rb +5 -5
  142. data/app/helpers/decidim/onboarding_action_helper.rb +13 -0
  143. data/app/helpers/decidim/orders_helper.rb +1 -2
  144. data/app/helpers/decidim/paginate_helper.rb +1 -1
  145. data/app/helpers/decidim/participatory_space_helpers.rb +1 -1
  146. data/app/helpers/decidim/passwords_helper.rb +2 -2
  147. data/app/helpers/decidim/taxonomies_helper.rb +40 -0
  148. data/app/helpers/decidim/tooltip_helper.rb +1 -4
  149. data/app/jobs/decidim/download_your_data_export_job.rb +2 -19
  150. data/app/jobs/decidim/event_publisher_job.rb +18 -9
  151. data/app/jobs/decidim/export_job.rb +5 -1
  152. data/app/jobs/decidim/export_participatory_space_job.rb +4 -1
  153. data/app/jobs/decidim/open_data_job.rb +4 -4
  154. data/app/mailers/decidim/export_mailer.rb +7 -12
  155. data/app/mailers/decidim/notifications_digest_mailer.rb +1 -7
  156. data/app/mailers/decidim/reported_mailer.rb +2 -18
  157. data/app/models/decidim/action_log.rb +20 -1
  158. data/app/models/decidim/category.rb +4 -0
  159. data/app/models/decidim/component.rb +25 -3
  160. data/app/models/decidim/metric.rb +2 -1
  161. data/app/models/decidim/moderation.rb +16 -0
  162. data/app/models/decidim/newsletter.rb +12 -8
  163. data/app/models/decidim/organization.rb +7 -3
  164. data/app/models/decidim/participatory_space_private_user.rb +20 -0
  165. data/app/models/decidim/private_export.rb +24 -0
  166. data/app/models/decidim/push_notification_message.rb +1 -1
  167. data/app/models/decidim/report.rb +1 -1
  168. data/app/models/decidim/scope.rb +4 -0
  169. data/app/models/decidim/share_token.rb +36 -10
  170. data/app/models/decidim/taxonomization.rb +23 -0
  171. data/app/models/decidim/taxonomy.rb +139 -0
  172. data/app/models/decidim/taxonomy_filter.rb +130 -0
  173. data/app/models/decidim/taxonomy_filter_item.rb +33 -0
  174. data/app/models/decidim/user.rb +13 -23
  175. data/app/models/decidim/user_base_entity.rb +12 -4
  176. data/app/models/decidim/user_moderation.rb +9 -0
  177. data/app/models/decidim/user_report.rb +4 -0
  178. data/app/packs/entrypoints/decidim_core.js +1 -0
  179. data/app/packs/entrypoints/decidim_geocoding.js +2 -0
  180. data/app/packs/images/decidim/brands/facebook.svg +10 -0
  181. data/app/packs/images/decidim/brands/google.svg +7 -1
  182. data/app/packs/images/decidim/brands/twitter-x.svg +3 -0
  183. data/app/packs/images/decidim/default-avatar.svg +1 -1
  184. data/app/packs/src/decidim/callout.js +8 -13
  185. data/app/packs/src/decidim/check_boxes_tree.js +0 -1
  186. data/app/packs/src/decidim/clipboard.js +18 -9
  187. data/app/packs/src/decidim/datepicker/datepicker_functions.js +3 -3
  188. data/app/packs/src/decidim/datepicker/generate_datepicker.js +0 -2
  189. data/app/packs/src/decidim/datepicker/generate_timepicker.js +0 -2
  190. data/app/packs/src/decidim/decidim_application.js +1 -0
  191. data/app/packs/src/decidim/direct_uploads/upload_field.js +4 -3
  192. data/app/packs/src/decidim/direct_uploads/upload_modal.js +9 -8
  193. data/app/packs/src/decidim/editor/common/suggestion.js +1 -11
  194. data/app/packs/src/decidim/form_filter.js +0 -6
  195. data/app/packs/src/decidim/geocoding/reverse_geocoding.js +60 -0
  196. data/app/packs/src/decidim/index.js +9 -5
  197. data/app/packs/src/decidim/input_character_counter.js +1 -1
  198. data/app/packs/src/decidim/map/provider/here.js +1 -1
  199. data/app/packs/src/decidim/onboarding_pending_action.js +24 -0
  200. data/app/packs/src/decidim/sticky_footer.js +29 -0
  201. data/app/packs/src/decidim/sticky_header.js +6 -31
  202. data/app/packs/src/decidim/user_registrations.js +13 -0
  203. data/app/packs/src/decidim/vendor/leaflet-tilelayer-here.js +212 -0
  204. data/app/packs/stylesheets/decidim/_accordion.scss +30 -0
  205. data/app/packs/stylesheets/decidim/_activity.scss +4 -4
  206. data/app/packs/stylesheets/decidim/_author.scss +0 -8
  207. data/app/packs/stylesheets/decidim/_buttons.scss +19 -0
  208. data/app/packs/stylesheets/decidim/_cards.scss +1 -9
  209. data/app/packs/stylesheets/decidim/_content_blocks.scss +0 -4
  210. data/app/packs/stylesheets/decidim/_dropdown.scss +1 -1
  211. data/app/packs/stylesheets/decidim/_endorsers_list.scss +26 -20
  212. data/app/packs/stylesheets/decidim/_filters.scss +1 -1
  213. data/app/packs/stylesheets/decidim/_forms.scss +2 -2
  214. data/app/packs/stylesheets/decidim/_header.scss +39 -70
  215. data/app/packs/stylesheets/decidim/_layout.scss +34 -4
  216. data/app/packs/stylesheets/decidim/_login.scss +53 -6
  217. data/app/packs/stylesheets/decidim/_modal.scss +47 -1
  218. data/app/packs/stylesheets/decidim/_modal_tos_refuse.scss +4 -0
  219. data/app/packs/stylesheets/decidim/_modal_update.scss +1 -5
  220. data/app/packs/stylesheets/decidim/_participatory_spaces.scss +46 -0
  221. data/app/packs/stylesheets/decidim/_profile.scss +7 -7
  222. data/app/packs/stylesheets/decidim/_success_image.scss +64 -0
  223. data/app/packs/stylesheets/decidim/_tribute.scss +36 -0
  224. data/app/packs/stylesheets/decidim/application.scss +1 -1
  225. data/app/packs/stylesheets/decidim/editor.scss +1 -3
  226. data/app/packs/stylesheets/decidim/geocoding_addons.scss +5 -0
  227. data/app/packs/stylesheets/decidim/map.scss +7 -10
  228. data/app/packs/stylesheets/decidim/resource_history.scss +31 -0
  229. data/app/permissions/decidim/default_permissions.rb +0 -2
  230. data/app/permissions/decidim/permissions.rb +9 -15
  231. data/app/presenters/decidim/admin_log/base_user_presenter.rb +67 -0
  232. data/app/presenters/decidim/admin_log/component_presenter.rb +32 -3
  233. data/app/presenters/decidim/admin_log/moderation_presenter.rb +30 -3
  234. data/app/presenters/decidim/admin_log/share_token_presenter.rb +39 -0
  235. data/app/presenters/decidim/admin_log/taxonomy_filter_presenter.rb +57 -0
  236. data/app/presenters/decidim/admin_log/taxonomy_presenter.rb +48 -0
  237. data/app/presenters/decidim/admin_log/user_group_presenter.rb +6 -6
  238. data/app/presenters/decidim/admin_log/user_presenter.rb +4 -18
  239. data/app/presenters/decidim/log/user_presenter.rb +0 -1
  240. data/app/presenters/decidim/log/value_types/date_presenter.rb +1 -0
  241. data/app/presenters/decidim/log/value_types/taxonomy_presenter.rb +29 -0
  242. data/app/presenters/decidim/notification_to_mailer_presenter.rb +3 -7
  243. data/app/presenters/decidim/participatory_space_private_user_presenter.rb +50 -0
  244. data/app/presenters/decidim/taxonomy_filter_presenter.rb +19 -0
  245. data/app/presenters/decidim/taxonomy_presenter.rb +14 -0
  246. data/app/presenters/decidim/user_presenter.rb +1 -1
  247. data/app/queries/decidim/last_activity.rb +0 -25
  248. data/app/queries/decidim/metrics/blocked_users_metric_manage.rb +2 -2
  249. data/app/queries/decidim/metrics/users_metric_manage.rb +2 -2
  250. data/app/queries/decidim/public_activities.rb +1 -12
  251. data/app/queries/decidim/stats_users_count.rb +2 -2
  252. data/app/resolvers/decidim/meta_image_url_resolver.rb +128 -0
  253. data/app/serializers/decidim/exporters/open_data_blocked_user_serializer.rb +25 -0
  254. data/app/serializers/decidim/exporters/open_data_metric_serializer.rb +22 -0
  255. data/app/serializers/decidim/exporters/open_data_moderation_serializer.rb +30 -0
  256. data/app/serializers/decidim/exporters/open_data_taxonomy_serializer.rb +30 -0
  257. data/app/serializers/decidim/exporters/open_data_user_group_serializer.rb +38 -0
  258. data/app/serializers/decidim/exporters/open_data_user_serializer.rb +39 -0
  259. data/app/serializers/decidim/exporters/participatory_space_serializer.rb +104 -0
  260. data/app/serializers/decidim/exporters/serializer.rb +25 -0
  261. data/app/serializers/decidim/schema_org_breadcrumb_list_serializer.rb +52 -0
  262. data/app/services/decidim/action_authorizer.rb +32 -3
  263. data/app/services/decidim/base_diff_renderer.rb +1 -3
  264. data/app/services/decidim/download_your_data_exporter.rb +58 -24
  265. data/app/services/decidim/onboarding_manager.rb +272 -0
  266. data/app/services/decidim/open_data_exporter.rb +139 -13
  267. data/app/services/decidim/static_map_generator.rb +1 -1
  268. data/app/services/decidim/traceability.rb +13 -0
  269. data/app/uploaders/decidim/application_uploader.rb +1 -1
  270. data/app/validators/etiquette_validator.rb +9 -2
  271. data/app/validators/passthru_validator.rb +1 -1
  272. data/app/validators/password_validator.rb +1 -3
  273. data/app/validators/translated_etiquette_validator.rb +32 -0
  274. data/app/views/decidim/account/_password_fields.html.erb +2 -2
  275. data/app/views/decidim/application/_accordion_section.html.erb +14 -0
  276. data/app/views/decidim/application/_collection.html.erb +30 -18
  277. data/app/views/decidim/application/_document.html.erb +2 -2
  278. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +5 -1
  279. data/app/views/decidim/devise/omniauth_registrations/new_tos_fields.html.erb +29 -0
  280. data/app/views/decidim/devise/registrations/new.html.erb +10 -22
  281. data/app/views/decidim/devise/sessions/new.html.erb +24 -29
  282. data/app/views/decidim/devise/shared/_omniauth_buttons.html.erb +2 -4
  283. data/app/views/decidim/devise/shared/_tos_fields.html.erb +16 -0
  284. data/app/views/decidim/download_your_data/_export.html.erb +15 -0
  285. data/app/views/decidim/download_your_data/show.html.erb +51 -5
  286. data/app/views/decidim/endorsements/update_buttons_and_counters.js.erb +16 -19
  287. data/app/views/decidim/errors/internal_server_error.html.erb +1 -1
  288. data/app/views/decidim/errors/not_found.html.erb +1 -1
  289. data/app/views/decidim/export_mailer/download_your_data_export.html.erb +2 -2
  290. data/app/views/decidim/export_mailer/export.html.erb +5 -1
  291. data/app/views/decidim/last_activities/index.html.erb +1 -1
  292. data/app/views/decidim/messaging/conversations/_reply_form.html.erb +2 -1
  293. data/app/views/decidim/messaging/conversations/_start.html.erb +1 -1
  294. data/app/views/decidim/newsletters/unsubscribe.html.erb +4 -16
  295. data/app/views/decidim/notifications_settings/show.html.erb +22 -0
  296. data/app/views/decidim/open_data/_how_to_open_accordion_section.html.erb +15 -0
  297. data/app/views/decidim/open_data/index.html.erb +108 -0
  298. data/app/views/decidim/pages/show.html.erb +2 -1
  299. data/app/views/decidim/participatory_space_private_users/_participatory_space_private_user.html.erb +1 -0
  300. data/app/views/decidim/reported_mailer/hide.html.erb +9 -0
  301. data/app/views/decidim/reported_mailer/report.html.erb +1 -1
  302. data/app/views/decidim/searches/_count.html.erb +1 -1
  303. data/app/views/decidim/searches/_filters.html.erb +39 -76
  304. data/app/views/decidim/shared/_component_announcement.html.erb +1 -1
  305. data/app/views/decidim/shared/_confirm_modal.html.erb +5 -3
  306. data/app/views/decidim/shared/_filters.html.erb +5 -7
  307. data/app/views/decidim/shared/_login_modal.html.erb +26 -20
  308. data/app/views/decidim/shared/_orders.html.erb +2 -2
  309. data/app/views/decidim/shared/_resource_actions.html.erb +21 -0
  310. data/app/views/decidim/shared/_results_per_page.html.erb +1 -1
  311. data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -2
  312. data/app/views/decidim/shared/filters/_collection.html.erb +1 -1
  313. data/app/views/decidim/shared/filters/_dropdown_label.html.erb +7 -4
  314. data/app/views/kaminari/decidim/_page.html.erb +1 -1
  315. data/app/views/kaminari/decidim/_paginator.html.erb +1 -1
  316. data/app/views/layouts/decidim/_application.html.erb +1 -2
  317. data/app/views/layouts/decidim/_logo.html.erb +2 -2
  318. data/app/views/layouts/decidim/_logo_mobile.html.erb +1 -1
  319. data/app/views/layouts/decidim/_meta_tags_config.html.erb +6 -11
  320. data/app/views/layouts/decidim/_schema_org_breadcrumb_list.html.erb +3 -0
  321. data/app/views/layouts/decidim/_wrapper.html.erb +15 -9
  322. data/app/views/layouts/decidim/footer/_main.html.erb +1 -1
  323. data/app/views/layouts/decidim/footer/_main_intro.html.erb +1 -1
  324. data/app/views/layouts/decidim/footer/_main_legal.html.erb +1 -1
  325. data/app/views/layouts/decidim/footer/_main_links.html.erb +1 -1
  326. data/app/views/layouts/decidim/footer/_mini.html.erb +2 -2
  327. data/app/views/layouts/decidim/header/_close_ephemeral_session.html.erb +25 -0
  328. data/app/views/layouts/decidim/header/_main.html.erb +14 -10
  329. data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +0 -6
  330. data/app/views/layouts/decidim/header/_main_links_dropdown.html.erb +0 -2
  331. data/app/views/layouts/decidim/header/_main_links_mobile_account.html.erb +1 -1
  332. data/app/views/layouts/decidim/header/_menu_breadcrumb_items.html.erb +2 -0
  333. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_desktop.html.erb +11 -5
  334. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +5 -5
  335. data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +1 -1
  336. data/app/views/layouts/decidim/shared/_layout_item.html.erb +1 -1
  337. data/config/assets.rb +2 -1
  338. data/config/locales/ar.yml +38 -74
  339. data/config/locales/bg-BG.yml +2 -2
  340. data/config/locales/bg.yml +38 -74
  341. data/config/locales/bs-BA.yml +0 -2
  342. data/config/locales/ca.yml +382 -138
  343. data/config/locales/cs.yml +379 -121
  344. data/config/locales/de.yml +370 -133
  345. data/config/locales/el.yml +26 -58
  346. data/config/locales/en.yml +354 -110
  347. data/config/locales/eo.yml +0 -4
  348. data/config/locales/es-MX.yml +368 -127
  349. data/config/locales/es-PY.yml +373 -132
  350. data/config/locales/es.yml +374 -130
  351. data/config/locales/eu.yml +491 -245
  352. data/config/locales/fi-plain.yml +367 -130
  353. data/config/locales/fi.yml +372 -132
  354. data/config/locales/fr-CA.yml +180 -125
  355. data/config/locales/fr-LU.yml +3 -3
  356. data/config/locales/fr.yml +180 -122
  357. data/config/locales/ga-IE.yml +4 -25
  358. data/config/locales/gl.yml +23 -58
  359. data/config/locales/hu.yml +35 -62
  360. data/config/locales/id-ID.yml +24 -57
  361. data/config/locales/is-IS.yml +6 -25
  362. data/config/locales/it.yml +39 -218
  363. data/config/locales/ja.yml +235 -141
  364. data/config/locales/lb-LU.yml +2 -2
  365. data/config/locales/lb.yml +31 -76
  366. data/config/locales/lt.yml +29 -64
  367. data/config/locales/lv.yml +24 -58
  368. data/config/locales/nl.yml +26 -75
  369. data/config/locales/no.yml +26 -70
  370. data/config/locales/pl.yml +35 -72
  371. data/config/locales/pt-BR.yml +44 -63
  372. data/config/locales/pt.yml +26 -70
  373. data/config/locales/ro-RO.yml +118 -183
  374. data/config/locales/ru.yml +16 -43
  375. data/config/locales/sk-SK.yml +3 -3
  376. data/config/locales/sk.yml +27 -72
  377. data/config/locales/sl.yml +0 -4
  378. data/config/locales/sr-CS.yml +0 -2
  379. data/config/locales/sv.yml +141 -133
  380. data/config/locales/tr-TR.yml +32 -75
  381. data/config/locales/uk.yml +8 -29
  382. data/config/locales/zh-CN.yml +24 -68
  383. data/config/locales/zh-TW.yml +28 -62
  384. data/config/routes.rb +4 -10
  385. data/db/migrate/20171212103803_create_unique_nicknames.rb +1 -1
  386. data/db/migrate/20180221101934_fix_nickname_index.rb +1 -1
  387. data/db/migrate/20180706104107_add_nickname_to_managed_users.rb +1 -1
  388. data/db/migrate/20181001124950_move_users_groups_to_users_table.rb +1 -1
  389. data/db/migrate/20181025082245_add_timestamps_to_components.rb +2 -0
  390. data/db/migrate/20190412131728_fix_user_names.rb +1 -1
  391. data/db/migrate/20240628111905_add_visible_to_components.rb +7 -0
  392. data/db/migrate/20240704115429_create_decidim_taxonomies.rb +23 -0
  393. data/db/migrate/20240717093514_add_registered_only_to_decidim_share_tokens.rb +7 -0
  394. data/db/migrate/20240722215500_change_object_changes_on_versions.rb +39 -0
  395. data/db/migrate/20240806065417_create_decidim_taxonomy_filters.rb +23 -0
  396. data/db/migrate/20240822161348_add_deleted_at_to_decidim_components.rb +8 -0
  397. data/db/migrate/20240906162524_add_part_of_to_taxonomies.rb +26 -0
  398. data/db/migrate/20241001135825_add_role_to_participatory_space_private_users.rb +7 -0
  399. data/db/migrate/20241001140408_add_published_to_participatory_space_private_users.rb +7 -0
  400. data/db/migrate/20241022002600_create_private_exports.rb +18 -0
  401. data/db/migrate/20241028114430_add_component_counter_to_taxonomy_filters.rb +7 -0
  402. data/db/migrate/20241111104357_add_names_and_space_boolean_to_taxonomy_filters.rb +9 -0
  403. data/db/migrate/20241127093708_add_taxonomy_to_metrics.rb +7 -0
  404. data/db/migrate/20241204121445_add_participatory_space_manifests_from_taxonomy_filters.rb +9 -0
  405. data/decidim-core.gemspec +14 -17
  406. data/lib/decidim/action_authorization.rb +3 -2
  407. data/lib/decidim/amendable.rb +1 -1
  408. data/lib/decidim/api/input_filters/category_input_filter.rb +5 -3
  409. data/lib/decidim/api/input_filters/component_input_filter.rb +33 -20
  410. data/lib/decidim/api/input_filters/user_entity_input_filter.rb +53 -44
  411. data/lib/decidim/api/input_sorts/component_input_sort.rb +15 -13
  412. data/lib/decidim/api/input_sorts/user_entity_input_sort.rb +4 -4
  413. data/lib/decidim/api/interfaces/author_interface.rb +3 -2
  414. data/lib/decidim/api/interfaces/coauthorable_interface.rb +5 -5
  415. data/lib/decidim/api/interfaces/endorsable_interface.rb +2 -2
  416. data/lib/decidim/api/interfaces/participatory_space_interface.rb +5 -10
  417. data/lib/decidim/api/interfaces/taxonomizable_interface.rb +13 -0
  418. data/lib/decidim/api/types/amendment_type.rb +5 -7
  419. data/lib/decidim/api/types/area_api_type.rb +3 -3
  420. data/lib/decidim/api/types/attachment_type.rb +3 -3
  421. data/lib/decidim/api/types/category_type.rb +2 -2
  422. data/lib/decidim/api/types/decidim_type.rb +5 -1
  423. data/lib/decidim/api/types/fingerprint_type.rb +1 -1
  424. data/lib/decidim/api/types/localized_string_type.rb +1 -1
  425. data/lib/decidim/api/types/metric_history_type.rb +2 -0
  426. data/lib/decidim/api/types/metric_type.rb +1 -1
  427. data/lib/decidim/api/types/organization_type.rb +5 -0
  428. data/lib/decidim/api/types/participatory_space_link_type.rb +2 -2
  429. data/lib/decidim/api/types/participatory_space_manifest_type.rb +1 -1
  430. data/lib/decidim/api/types/quantifiable_translated_field_type.rb +1 -1
  431. data/lib/decidim/api/types/scope_api_type.rb +2 -3
  432. data/lib/decidim/api/types/session_type.rb +1 -2
  433. data/lib/decidim/api/types/taxonomy_type.rb +15 -0
  434. data/lib/decidim/api/types/trace_version_type.rb +2 -2
  435. data/lib/decidim/api/types/translated_field_type.rb +3 -5
  436. data/lib/decidim/api/types/user_group_type.rb +7 -20
  437. data/lib/decidim/api/types/user_type.rb +7 -20
  438. data/lib/decidim/asset_router/storage.rb +10 -15
  439. data/lib/decidim/assets/tailwind/tailwind.config.js.erb +3 -3
  440. data/lib/decidim/attachment_attributes.rb +1 -1
  441. data/lib/decidim/attribute_encryptor.rb +1 -1
  442. data/lib/decidim/attribute_object/nested_validator.rb +1 -1
  443. data/lib/decidim/attributes/integer_with_units.rb +27 -0
  444. data/lib/decidim/attributes/time_with_zone.rb +1 -5
  445. data/lib/decidim/attributes.rb +2 -0
  446. data/lib/decidim/authorization_form_builder.rb +0 -7
  447. data/lib/decidim/coauthorable.rb +1 -1
  448. data/lib/decidim/command.rb +3 -3
  449. data/lib/decidim/commands/destroy_resource.rb +5 -1
  450. data/lib/decidim/commands/resource_handler.rb +2 -2
  451. data/lib/decidim/commands/restore_resource.rb +45 -0
  452. data/lib/decidim/commands/soft_delete_resource.rb +63 -0
  453. data/lib/decidim/component_manifest.rb +7 -0
  454. data/lib/decidim/content_parsers/blob_parser.rb +8 -10
  455. data/lib/decidim/content_parsers/user_parser.rb +1 -1
  456. data/lib/decidim/core/api.rb +2 -0
  457. data/lib/decidim/core/engine.rb +21 -7
  458. data/lib/decidim/core/menu.rb +0 -5
  459. data/lib/decidim/core/seeds.rb +42 -2
  460. data/lib/decidim/core/test/factories.rb +107 -4
  461. data/lib/decidim/core/test/shared_examples/admin_resource_gallery_examples.rb +85 -0
  462. data/lib/decidim/core/test/shared_examples/announcements_examples.rb +0 -4
  463. data/lib/decidim/core/test/shared_examples/comments_examples.rb +393 -38
  464. data/lib/decidim/core/test/shared_examples/components_controller_hide_shared_examples.rb +11 -0
  465. data/lib/decidim/core/test/shared_examples/components_controller_reorder_shared_examples.rb +21 -0
  466. data/lib/decidim/core/test/shared_examples/download_open_data_shared_context.rb +36 -0
  467. data/lib/decidim/core/test/shared_examples/download_open_data_shared_examples.rb +45 -0
  468. data/lib/decidim/core/test/shared_examples/download_your_data_shared_examples.rb +17 -0
  469. data/lib/decidim/core/test/shared_examples/etiquette_validator_examples.rb +25 -0
  470. data/lib/decidim/core/test/shared_examples/follows_examples.rb +43 -0
  471. data/lib/decidim/core/test/shared_examples/has_taxonomies.rb +94 -0
  472. data/lib/decidim/core/test/shared_examples/manage_share_tokens_examples.rb +237 -0
  473. data/lib/decidim/core/test/shared_examples/map_examples.rb +2 -0
  474. data/lib/decidim/core/test/shared_examples/open_data_exporter_examples.rb +102 -0
  475. data/lib/decidim/core/test/shared_examples/participatory_space_members_page_examples.rb +46 -0
  476. data/lib/decidim/core/test/shared_examples/participatory_space_search_examples.rb +98 -0
  477. data/lib/decidim/core/test/shared_examples/permissions.rb +7 -7
  478. data/lib/decidim/core/test/shared_examples/preview_with_share_token_examples.rb +94 -0
  479. data/lib/decidim/core/test/shared_examples/reports_examples.rb +15 -53
  480. data/lib/decidim/core/test/shared_examples/resource_endorsed_event_examples.rb +2 -2
  481. data/lib/decidim/core/test/shared_examples/resource_search_examples.rb +75 -69
  482. data/lib/decidim/core/test/shared_examples/searchable_resources_shared_context.rb +1 -1
  483. data/lib/decidim/core/test/shared_examples/simple_event.rb +33 -19
  484. data/lib/decidim/core/test/shared_examples/social_share_examples.rb +7 -14
  485. data/lib/decidim/core/test/shared_examples/softdeleteable_components_examples.rb +173 -0
  486. data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +54 -8
  487. data/lib/decidim/core/test/shared_examples/taxonomizable_interface_examples.rb +20 -0
  488. data/lib/decidim/core/test/shared_examples/taxonomizable_resource_examples.rb +37 -0
  489. data/lib/decidim/core/test/shared_examples/taxonomy_settings.rb +49 -0
  490. data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +1 -1
  491. data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +0 -26
  492. data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +2 -28
  493. data/lib/decidim/core/test/shared_examples/with_endorsable_permissions_examples.rb +1 -1
  494. data/lib/decidim/core/test.rb +9 -5
  495. data/lib/decidim/core/version.rb +1 -1
  496. data/lib/decidim/core.rb +58 -0
  497. data/lib/decidim/download_your_data_serializers/download_your_data_identity_serializer.rb +0 -4
  498. data/lib/decidim/download_your_data_serializers/download_your_data_participatory_space_private_user_serializer.rb +3 -1
  499. data/lib/decidim/download_your_data_serializers/download_your_data_report_serializer.rb +2 -1
  500. data/lib/decidim/download_your_data_serializers/download_your_data_user_serializer.rb +6 -7
  501. data/lib/decidim/download_your_data_serializers.rb +19 -0
  502. data/lib/decidim/exporters/csv.rb +6 -0
  503. data/lib/decidim/exporters/export_manifest.rb +14 -0
  504. data/lib/decidim/exporters/pdf.rb +26 -22
  505. data/lib/decidim/filter_form_builder.rb +12 -15
  506. data/lib/decidim/form_builder.rb +7 -144
  507. data/lib/decidim/has_category.rb +5 -1
  508. data/lib/decidim/has_private_users.rb +4 -0
  509. data/lib/decidim/has_taxonomy_settings.rb +47 -0
  510. data/lib/decidim/has_upload_validations.rb +1 -1
  511. data/lib/decidim/legacy_form_builder.rb +118 -0
  512. data/lib/decidim/maintenance/import_models/application_record.rb +93 -0
  513. data/lib/decidim/maintenance/import_models/area.rb +82 -0
  514. data/lib/decidim/maintenance/import_models/area_type.rb +12 -0
  515. data/lib/decidim/maintenance/import_models/assembly_type.rb +49 -0
  516. data/lib/decidim/maintenance/import_models/categorization.rb +14 -0
  517. data/lib/decidim/maintenance/import_models/category.rb +107 -0
  518. data/lib/decidim/maintenance/import_models/participatory_process_type.rb +21 -0
  519. data/lib/decidim/maintenance/import_models/scope.rb +163 -0
  520. data/lib/decidim/maintenance/import_models.rb +19 -0
  521. data/lib/decidim/maintenance/taxonomy_importer.rb +132 -0
  522. data/lib/decidim/maintenance/taxonomy_plan.rb +78 -0
  523. data/lib/decidim/maintenance.rb +12 -0
  524. data/lib/decidim/map/autocomplete.rb +52 -8
  525. data/lib/decidim/map/dynamic_map.rb +1 -1
  526. data/lib/decidim/map/provider/dynamic_map/here.rb +40 -1
  527. data/lib/decidim/map/provider/geocoding/here.rb +9 -3
  528. data/lib/decidim/map/provider/static_map/here.rb +0 -34
  529. data/lib/decidim/map.rb +3 -6
  530. data/lib/decidim/moderation_tools.rb +16 -19
  531. data/lib/decidim/newsletter_encryptor.rb +1 -1
  532. data/lib/decidim/nicknamizable.rb +9 -6
  533. data/lib/decidim/paddable.rb +1 -1
  534. data/lib/decidim/participable.rb +10 -10
  535. data/lib/decidim/participatory_space_user.rb +10 -0
  536. data/lib/decidim/private_download_helper.rb +15 -0
  537. data/lib/decidim/record_encryptor.rb +51 -46
  538. data/lib/decidim/reportable.rb +2 -6
  539. data/lib/decidim/resourceable.rb +16 -0
  540. data/lib/decidim/seeds.rb +18 -20
  541. data/lib/decidim/settings_manifest.rb +34 -1
  542. data/lib/decidim/soft_deletable.rb +17 -0
  543. data/lib/decidim/taxonomizable.rb +72 -0
  544. data/lib/decidim/translatable_attributes.rb +1 -5
  545. data/lib/decidim/view_model.rb +0 -1
  546. data/lib/tasks/decidim_download_your_data_tasks.rake +2 -4
  547. data/lib/tasks/decidim_procfile.rake +6 -0
  548. data/lib/tasks/decidim_tasks.rake +1 -0
  549. data/lib/tasks/decidim_taxonomies.rake +155 -0
  550. data/lib/tasks/upgrade/{decidim_fix_categorization.rake → clean.rake} +25 -18
  551. data/lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake +1 -1
  552. data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +20 -23
  553. data/lib/tasks/upgrade/migrations.rake +91 -0
  554. metadata +201 -114
  555. data/app/cells/decidim/amendable/amenders_list/show.erb +0 -0
  556. data/app/cells/decidim/author/badge.erb +0 -6
  557. data/app/cells/decidim/content_blocks/base/content.erb +0 -0
  558. data/app/cells/decidim/endorsers_list/full_endorsers_list.erb +0 -3
  559. data/app/cells/decidim/endorsers_list_button/content.erb +0 -1
  560. data/app/cells/decidim/endorsers_list_button_cell.rb +0 -15
  561. data/app/cells/decidim/report_user_button/already_reported_modal.erb +0 -11
  562. data/app/cells/decidim/report_user_button/flag_modal.erb +0 -47
  563. data/app/cells/decidim/report_user_button/show.erb +0 -2
  564. data/app/cells/decidim/report_user_button_cell.rb +0 -59
  565. data/app/cells/decidim/scopes_picker/scope_picker_prompt.erb +0 -3
  566. data/app/cells/decidim/scopes_picker/scope_picker_values.erb +0 -5
  567. data/app/cells/decidim/scopes_picker/show.erb +0 -14
  568. data/app/cells/decidim/scopes_picker_cell.rb +0 -92
  569. data/app/commands/decidim/update_user_interests.rb +0 -41
  570. data/app/controllers/decidim/scopes_controller.rb +0 -84
  571. data/app/controllers/decidim/user_interests_controller.rb +0 -30
  572. data/app/forms/decidim/user_interest_scope_form.rb +0 -25
  573. data/app/forms/decidim/user_interests_form.rb +0 -17
  574. data/app/helpers/decidim/categories_helper.rb +0 -26
  575. data/app/helpers/decidim/scopes_helper.rb +0 -105
  576. data/app/jobs/decidim/hide_child_resources_job.rb +0 -24
  577. data/app/packs/images/decidim/vendor/leaflet/layers-2x.png +0 -0
  578. data/app/packs/images/decidim/vendor/leaflet/layers.png +0 -0
  579. data/app/packs/images/decidim/vendor/leaflet/marker-icon-2x.png +0 -0
  580. data/app/packs/images/decidim/vendor/leaflet/marker-icon.png +0 -0
  581. data/app/packs/images/decidim/vendor/leaflet/marker-shadow.png +0 -0
  582. data/app/packs/src/decidim/dropdown_menu.js +0 -18
  583. data/app/packs/stylesheets/decidim/_hashtags.scss +0 -5
  584. data/app/packs/stylesheets/decidim/legacy/MarkerCluster.Default.scss +0 -67
  585. data/app/packs/stylesheets/decidim/legacy/MarkerCluster.scss +0 -18
  586. data/app/packs/stylesheets/decidim/legacy/leaflet.scss +0 -705
  587. data/app/validators/scope_belongs_to_component_validator.rb +0 -16
  588. data/app/views/decidim/account/_user_groups.html.erb +0 -0
  589. data/app/views/decidim/reported_mailer/hidden_automatically.html.erb +0 -25
  590. data/app/views/decidim/reported_mailer/hidden_manually.html.erb +0 -25
  591. data/app/views/decidim/scopes/_scopes_picker_input.html.erb +0 -19
  592. data/app/views/decidim/scopes/picker.html.erb +0 -53
  593. data/app/views/decidim/shared/_comments.html.erb +0 -0
  594. data/app/views/decidim/shared/_share_modal.html.erb +0 -26
  595. data/app/views/decidim/shared/_tags.html.erb +0 -1
  596. data/app/views/decidim/user_interests/_areas.html.erb +0 -14
  597. data/app/views/decidim/user_interests/_scopes.html.erb +0 -22
  598. data/app/views/decidim/user_interests/show.html.erb +0 -22
  599. data/config/initializers/foundation_rails_helper.rb +0 -4
  600. data/config/locales/ca-IT.yml +0 -2146
  601. data/lib/decidim/core/test/shared_examples/has_category.rb +0 -38
  602. data/lib/decidim/core/test/shared_examples/has_scope.rb +0 -11
  603. data/lib/decidim/core/test/shared_examples/manage_component_share_tokens.rb +0 -83
  604. data/lib/decidim/core/test/shared_examples/preview_component_with_share_token_examples.rb +0 -49
  605. data/lib/decidim/core/test/shared_examples/scope_helper_examples.rb +0 -93
  606. data/lib/decidim/seven_zip_wrapper.rb +0 -29
  607. data/lib/tasks/upgrade/clean_hidden_resources.rake +0 -33
@@ -16,12 +16,10 @@ module Decidim
16
16
  attribute :phone
17
17
 
18
18
  validates :name, presence: true
19
- validates :name, format: { with: Decidim::UserBaseEntity::REGEXP_NAME }
20
19
  validates :email, presence: true, "valid_email_2/email": { disposable: true }
21
20
  validates :nickname, presence: true
22
21
 
23
22
  validates :nickname, length: { maximum: Decidim::User.nickname_max_length, allow_blank: true }
24
- validates :nickname, format: { with: Decidim::UserBaseEntity::REGEXP_NICKNAME }
25
23
  validates :avatar, passthru: { to: Decidim::UserGroup }
26
24
 
27
25
  validate :unique_document_number
@@ -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
@@ -57,26 +57,35 @@ module Decidim
57
57
  url = arguments[0]
58
58
  html_options = arguments[1]
59
59
  else
60
- body = content_tag :span, arguments[0]
60
+ body = arguments[0]
61
61
  url = arguments[1]
62
62
  html_options = arguments[2]
63
63
  end
64
64
 
65
- html_options ||= {}
65
+ html_options = (html_options || {}).with_indifferent_access
66
66
  resource = html_options.delete(:resource)
67
67
  permissions_holder = html_options.delete(:permissions_holder)
68
+ authorization_status = get_authorization_status(action, resource, permissions_holder)
69
+ redirect_path = valid_redirect(url, tag:, method: html_options[:method])
70
+ onboarding_options = onboarding_data_attributes(authorization_status, action, resource, permissions_holder, redirect_path)
68
71
 
69
- if !current_user
70
- html_options = clean_authorized_to_data_open(html_options)
71
-
72
+ if sign_in_required?(authorization_status)
73
+ html_options = clean_authorized_to_data_open(html_options.merge(onboarding_options))
72
74
  html_options["data-dialog-open"] = "loginModal"
73
- url = "#"
74
- elsif action && !action_authorized_to(action, resource:, permissions_holder:).ok?
75
- html_options = clean_authorized_to_data_open(html_options)
76
75
 
77
- html_options["data-dialog-open"] = "authorizationModal"
78
- html_options["data-dialog-remote-url"] = modal_path(action, resource)
79
76
  url = "#"
77
+ elsif authorization_status&.ok? == false
78
+ html_options = clean_authorized_to_data_open(html_options.merge(onboarding_options))
79
+ if pending_steps?(authorization_status)
80
+ tag = "link"
81
+ html_options["method"] = "post"
82
+ html_options.delete(:remote)
83
+ url = decidim_verifications.renew_onboarding_data_authorizations_path
84
+ else
85
+ html_options["data-dialog-open"] = "authorizationModal"
86
+ html_options["data-dialog-remote-url"] = modal_path(action, resource, html_options)
87
+ url = "#"
88
+ end
80
89
  end
81
90
 
82
91
  html_options["onclick"] = "event.preventDefault();" if url == ""
@@ -84,25 +93,33 @@ module Decidim
84
93
  if block
85
94
  send("#{tag}_to", url, html_options, &body)
86
95
  else
87
- send("#{tag}_to", body, url, html_options)
96
+ send("#{tag}_to", content_tag(:span, body), url, html_options)
88
97
  end
89
98
  end
90
99
  # rubocop: enable Metrics/PerceivedComplexity
91
100
 
92
- def modal_path(action, resource)
101
+ def modal_path(action, resource, opts = {})
102
+ if (default_path = opts.delete(:authorizations_modal_path)).present?
103
+ return default_path
104
+ end
105
+
93
106
  resource_params = if resource
94
107
  { resource_name: resource.resource_manifest.name, resource_id: resource.id }
95
108
  else
96
109
  {}
97
110
  end
98
- if current_component.present?
99
- decidim.authorization_modal_path(authorization_action: action, component_id: current_component&.id, **resource_params)
111
+
112
+ component = try(:current_component)
113
+ if component.present?
114
+ decidim.authorization_modal_path(authorization_action: action, component_id: component&.id, **resource_params)
100
115
  else
101
116
  decidim.free_resource_authorization_modal_path(authorization_action: action, **resource_params)
102
117
  end
103
118
  end
104
119
 
105
120
  def clean_authorized_to_data_open(html_options)
121
+ return {} if html_options.blank?
122
+
106
123
  html_options.delete(:"data-dialog-open")
107
124
  html_options.delete(:"data-dialog-remote-url")
108
125
 
@@ -115,9 +132,53 @@ module Decidim
115
132
  html_options[key].delete("open_url")
116
133
  html_options[key].delete(:"open-url")
117
134
  html_options[key].delete("open-url")
135
+ html_options[key].delete(:"dialog-open")
136
+ html_options[key].delete(:"dialog-remote-url")
118
137
  end
119
138
 
120
139
  html_options
121
140
  end
141
+
142
+ def get_authorization_status(action, resource, permissions_holder)
143
+ return if action.blank?
144
+
145
+ permissions_holder ||= resource.blank? ? try(:current_component) : nil
146
+ return if permissions_holder.blank? && resource.try(:component).blank?
147
+
148
+ action_authorized_to(action, resource:, permissions_holder:)
149
+ end
150
+
151
+ def pending_steps?(authorization_status)
152
+ authorization_status.pending_authorizations_count.positive? && authorization_status.global_code != :unauthorized
153
+ end
154
+
155
+ def onboarding_data_attributes(authorization_status, action, resource, permissions_holder, redirect_path = nil)
156
+ return {} if action.blank?
157
+ return {} unless pending_steps?(authorization_status)
158
+
159
+ permissions_holder ||= try(:current_component) if resource.blank?
160
+ return {} if [resource, permissions_holder].all?(&:blank?)
161
+
162
+ {
163
+ "data-onboarding-model" => resource&.to_gid,
164
+ "data-onboarding-permissions-holder" => permissions_holder&.to_gid,
165
+ "data-onboarding-action" => action,
166
+ "data-onboarding-redirect-path" => redirect_path
167
+ }.compact
168
+ end
169
+
170
+ def valid_redirect(path, opts = {})
171
+ return if opts[:tag]&.to_sym == :button
172
+ return if path == "#"
173
+ return if opts[:method].present? && opts[:method].to_s != "get"
174
+
175
+ path
176
+ end
177
+
178
+ def sign_in_required?(authorization_status)
179
+ return if current_user.present?
180
+
181
+ !authorization_status&.ephemeral?
182
+ end
122
183
  end
123
184
  end
@@ -16,15 +16,6 @@ module Decidim
16
16
  cell("decidim/amendable/announcement", emendation)
17
17
  end
18
18
 
19
- # Returns Html action button card to AMEND an amendable resource
20
- def amend_button_for(amendable)
21
- return unless amendments_enabled? && amendable.amendable?
22
- return unless current_component.current_settings.amendment_creation_enabled
23
- return unless can_participate_in_private_space?
24
-
25
- cell("decidim/amendable/amend_button_card", amendable)
26
- end
27
-
28
19
  # Checks if the user can participate in a participatory space
29
20
  # based on its settings related with Decidim::HasPrivateUsers.
30
21
  def can_participate_in_private_space?
@@ -70,9 +61,8 @@ module Decidim
70
61
  # Checks if the user can accept and reject the emendation
71
62
  def allowed_to_accept_and_reject?(emendation)
72
63
  return unless emendation.amendment.evaluating?
73
- return current_user.admin? if emendation.amendable.respond_to?(:official?) && emendation.amendable.official?
74
64
 
75
- emendation.amendable.created_by?(current_user)
65
+ emendation.amendable.created_by?(current_user) || current_user.admin?
76
66
  end
77
67
 
78
68
  # Checks if the user can promote the emendation
@@ -4,11 +4,15 @@ module Decidim
4
4
  # Main module to add application-wide helpers.
5
5
  module ApplicationHelper
6
6
  include Decidim::OmniauthHelper
7
- include Decidim::ScopesHelper
7
+ include Decidim::DecidimFormHelper
8
8
  include Decidim::ContextualHelpHelper
9
9
  include Decidim::AmendmentsHelper
10
10
  include Decidim::CacheHelper
11
11
 
12
+ def layout_item_classes
13
+ "layout-item"
14
+ end
15
+
12
16
  # Truncates a given text respecting its HTML tags.
13
17
  #
14
18
  # text - The String text to be truncated.
@@ -99,7 +103,7 @@ module Decidim
99
103
  # Renders the cell contents.
100
104
  def cell(name, model, options = {}, &)
101
105
  options = { context: { view_context: self, current_user: } }.deep_merge(options)
102
- super(name, model, options, &)
106
+ super
103
107
  end
104
108
 
105
109
  def prevent_timeout_seconds
@@ -56,5 +56,11 @@ module Decidim
56
56
  active: active_item.active?
57
57
  }
58
58
  end
59
+
60
+ def render_schema_org_breadcrumb_list(breadcrumb_items)
61
+ exporter_options = { breadcrumb_items:, base_url: request.base_url, organization_name: current_organization_name }
62
+ exported_breadcrumb_list = Decidim::Exporters::JSON.new([exporter_options], Decidim::SchemaOrgBreadcrumbListSerializer).export.read
63
+ JSON.pretty_generate(JSON.parse(exported_breadcrumb_list).first)
64
+ end
59
65
  end
60
66
  end
@@ -8,7 +8,7 @@ module Decidim
8
8
  def cache(name = {}, options = {}, &)
9
9
  name = Array(name) + [current_locale]
10
10
 
11
- super(name, options, &)
11
+ super
12
12
  end
13
13
  end
14
14
  end
@@ -9,6 +9,7 @@ module Decidim
9
9
  # used in filters that uses checkboxes trees
10
10
  def check_boxes_tree_options(value, label, **options)
11
11
  parent_id = options.delete(:parent_id) || ""
12
+ object = options.delete(:object)
12
13
  checkbox_options = {
13
14
  value:,
14
15
  label:,
@@ -16,10 +17,16 @@ module Decidim
16
17
  include_hidden: false,
17
18
  label_options: {
18
19
  "data-children-checkbox": parent_id,
19
- value:
20
+ value:,
21
+ for: "#{options[:namespace]}_#{options[:id]}"
20
22
  }
21
23
  }
22
24
  options.merge!(checkbox_options)
25
+ # as taxonomies work with a nested array of values, we need to manually check if the value is checked
26
+ matches = options[:id]&.match(/^with_any_taxonomies_([0-9]+)__taxonomy-([0-9_]+)/)
27
+ if matches.present? && object.respond_to?(:with_any_taxonomies) && object.with_any_taxonomies&.dig(matches[1]).is_a?(Array)
28
+ options[:checked] = object.with_any_taxonomies[matches[1]].include?(value.to_s)
29
+ end
23
30
 
24
31
  if options.delete(:is_root_check_box) == true
25
32
  options[:label_options].merge!("data-global-checkbox": "")
@@ -37,10 +44,14 @@ module Decidim
37
44
  end
38
45
 
39
46
  # struct for leafs of checkboxes trees
40
- TreePoint = Struct.new(:value, :label) do
47
+ TreePoint = Struct.new(:value, :label, :root) do
41
48
  def tree_node?
42
49
  is_a?(TreeNode)
43
50
  end
51
+
52
+ def root?
53
+ root.present? || value.blank?
54
+ end
44
55
  end
45
56
 
46
57
  # Overwrite this method in your component helper to define
@@ -49,52 +60,29 @@ module Decidim
49
60
  raise StandardError, "Not implemented"
50
61
  end
51
62
 
52
- def filter_categories_values
53
- sorted_main_categories = current_participatory_space.categories.first_class.includes(:subcategories).sort_by do |category|
54
- [category.weight, decidim_escape_translated(category.name)]
55
- end
56
-
57
- categories_values = sorted_main_categories.flat_map do |category|
58
- sorted_descendant_categories = category.descendants.includes(:subcategories).sort_by do |subcategory|
59
- [subcategory.weight, decidim_escape_translated(subcategory.name)]
60
- end
61
-
62
- subcategories = sorted_descendant_categories.flat_map do |subcategory|
63
- TreePoint.new(subcategory.id.to_s, decidim_escape_translated(subcategory.name))
64
- end
65
-
66
- TreeNode.new(
67
- TreePoint.new(category.id.to_s, decidim_escape_translated(category.name)),
68
- subcategories
69
- )
70
- end
71
-
63
+ def filter_taxonomy_values_for(taxonomy_filter)
64
+ taxonomies = filter_taxonomy_values_children(taxonomy_filter.taxonomies)
72
65
  TreeNode.new(
73
- TreePoint.new("", t("decidim.core.application_helper.filter_category_values.all")),
74
- categories_values
66
+ TreePoint.new(taxonomy_filter.root_taxonomy_id, t("decidim.core.application_helper.filter_taxonomy_values.all"), true),
67
+ taxonomies
75
68
  )
76
69
  end
77
70
 
78
- def resource_filter_scope_values(resource)
79
- if resource.is_a?(Scope)
80
- filter_scopes_values_from([resource], current_participatory_space)
81
- else
82
- filter_scopes_values
71
+ def filter_taxonomy_values_children(children)
72
+ children.map do |id, hash|
73
+ TreeNode.new(
74
+ TreePoint.new(id, decidim_escape_translated(hash[:taxonomy].name).html_safe),
75
+ filter_taxonomy_values_children(hash[:children])
76
+ )
83
77
  end
84
78
  end
85
79
 
86
- def filter_scopes_values
87
- return filter_scopes_values_from_parent(current_component.scope) if current_component.scope.present?
88
-
89
- main_scopes = current_participatory_space.scopes.top_level
90
- .includes(:scope_type, :children)
91
- filter_scopes_values_from(main_scopes, current_participatory_space)
92
- end
93
-
80
+ # pending initiatives removal
94
81
  def filter_global_scopes_values
95
82
  filter_scopes_values_from(current_organization.scopes.top_level)
96
83
  end
97
84
 
85
+ # pending initiatives removal
98
86
  def filter_areas_values
99
87
  areas_or_types = areas_for_select(current_organization)
100
88
 
@@ -135,22 +123,6 @@ module Decidim
135
123
 
136
124
  private
137
125
 
138
- def filter_scopes_values_from_parent(scope)
139
- scopes_values = []
140
- scope.children.each do |child|
141
- unless child.children
142
- scopes_values << TreePoint.new(child.id.to_s, translated_attribute(child.name, current_participatory_space.organization))
143
- next
144
- end
145
- scopes_values << TreeNode.new(
146
- TreePoint.new(child.id.to_s, translated_attribute(child.name, current_participatory_space.organization)),
147
- scope_children_to_tree(child, current_participatory_space)
148
- )
149
- end
150
-
151
- filter_tree_from(scopes_values)
152
- end
153
-
154
126
  def filter_scopes_values_from(scopes, participatory_space = nil)
155
127
  scopes_values = scopes.compact.flat_map do |scope|
156
128
  TreeNode.new(
@@ -62,35 +62,6 @@ module Decidim
62
62
  end
63
63
  end
64
64
 
65
- # A custom helper to include a scope picker field without requiring a form
66
- # object
67
- #
68
- # name - The input name
69
- # value - The input value as a scope id
70
- # options - The set of options to send to the field
71
- # :id - The id to generate for the element (optional)
72
- #
73
- # Returns a scopes picker tag to be included in an html template.
74
- def scopes_picker_field_tag(name, value, id: nil)
75
- picker_options = {
76
- id: id || sanitize_to_id(name),
77
- class: "picker-single",
78
- name:
79
- }
80
-
81
- prompt_params = yield(nil)
82
- selected_scopes = value ? Decidim::Scope.where(id: value) : []
83
- scopes = selected_scopes.map { |scope| [scope, yield(scope)] }
84
-
85
- template = ""
86
- template += render("decidim/scopes/scopes_picker_input",
87
- picker_options:,
88
- prompt_params:,
89
- scopes:,
90
- values_on_top: true)
91
- template.html_safe
92
- end
93
-
94
65
  # A custom helper to include a translated field without requiring a form object.
95
66
  #
96
67
  # type - The type of the translated input field.
@@ -220,20 +191,5 @@ module Decidim
220
191
 
221
192
  organization.area_types
222
193
  end
223
-
224
- def ordered_scopes_descendants(root = nil)
225
- root = try(:current_participatory_space)&.scope if root == false
226
- if root.present?
227
- root.descendants
228
- else
229
- current_organization.scopes
230
- end.sort { |a, b| a.part_of.reverse <=> b.part_of.reverse }
231
- end
232
-
233
- def ordered_scopes_descendants_for_select(root = nil)
234
- ordered_scopes_descendants(root).map do |scope|
235
- [" #{"&nbsp;" * 4 * (scope.part_of.count - 1)} #{translated_attribute(scope.name)}".html_safe, scope&.id]
236
- end
237
- end
238
194
  end
239
195
  end
@@ -3,16 +3,6 @@
3
3
  module Decidim
4
4
  # A Helper for views with Endorsable resources.
5
5
  module EndorsableHelper
6
- # Invokes the decidim/endorsement_buttons cell.
7
- def endorsement_buttons_cell(resource)
8
- cell("decidim/endorsement_block", resource)
9
- end
10
-
11
- # Invokes the decidim/endorsers_list cell.
12
- def endorsers_list_cell(resource)
13
- cell("decidim/endorsers_list", resource)
14
- end
15
-
16
6
  #
17
7
  # Public: Checks if the given resource has been endorsed by all identities of the user.
18
8
  #
@@ -32,31 +32,6 @@ module Decidim
32
32
  end
33
33
  end
34
34
 
35
- def filter_search_label(label, id)
36
- I18n.t("decidim.searches.filters.resource", label:, collection: filter_for_resource(id))
37
- end
38
-
39
- def filter_for_resource(skip_to_id)
40
- case skip_to_id
41
- when "proposals"
42
- I18n.t("decidim/proposals/proposal.other", scope: "activerecord.models")
43
- when "meetings"
44
- I18n.t("decidim/meetings/meeting.other", scope: "activerecord.models")
45
- when "debates"
46
- I18n.t("decidim/debates/debate.other", scope: "activerecord.models")
47
- when "sortitions"
48
- I18n.t("decidim/sortitions/sortition.other", scope: "activerecord.models")
49
- when "surveys"
50
- I18n.t("decidim/surveys/survey.other", scope: "activerecord.models")
51
- when "projects"
52
- I18n.t("decidim/budgets/project.other", scope: "activerecord.models")
53
- when "initiatives"
54
- I18n.t("decidim/initiative.other", scope: "activerecord.models")
55
- else
56
- ""
57
- end
58
- end
59
-
60
35
  private
61
36
 
62
37
  # Creates a unique namespace for a filter form to prevent duplicate IDs in
@@ -60,12 +60,6 @@ module Decidim
60
60
  html_properties = options.with_indifferent_access.transform_keys(&:dasherize).slice("width", "height", "aria-label", "role", "aria-hidden", "class", "style")
61
61
  html_properties = default_html_properties.merge(html_properties)
62
62
 
63
- if name == "wechat-line"
64
- html_properties = html_properties.merge({ "aria-label" => I18n.t("decidim.author.comments.other") }).except("aria-hidden")
65
- elsif name == "heart-line"
66
- html_properties = html_properties.merge({ "aria-label" => I18n.t("decidim.author.endorsements.other") }).except("aria-hidden")
67
- end
68
-
69
63
  href = Decidim.cors_enabled ? "" : asset_pack_path("media/images/remixicon.symbol.svg")
70
64
 
71
65
  content_tag :svg, html_properties do
@@ -160,6 +154,12 @@ module Decidim
160
154
  "#{request.base_url}#{"?#{params.to_query}" unless params.empty?}"
161
155
  end
162
156
 
157
+ def root_url
158
+ return onboarding_manager.root_path if current_user&.ephemeral?
159
+
160
+ decidim.root_url(host: current_organization.host)
161
+ end
162
+
163
163
  private
164
164
 
165
165
  def each_decidim_engine
@@ -81,7 +81,7 @@ module Decidim
81
81
 
82
82
  help = content_tag(:div, class: "map__skip-container") do
83
83
  sr_content = content_tag(:p, t("screen_reader_explanation", scope: "decidim.map.dynamic"), class: "sr-only")
84
- link = link_to(t("skip_button", scope: "decidim.map.dynamic"), "##{bottom_id}", class: "map__skip", "data-skip-to-content": true)
84
+ link = link_to(t("skip_button", scope: "decidim.map.dynamic"), "##{bottom_id}", class: "map__skip")
85
85
 
86
86
  sr_content + link
87
87
  end
@@ -39,7 +39,7 @@ module Decidim
39
39
  @breadcrumb_root_menu ||= ::Decidim::BreadcrumbRootMenuPresenter.new(
40
40
  :menu,
41
41
  self,
42
- container_options: { class: "menu-bar__dropdown-menu" }
42
+ container_options: { class: "menu-bar__main-dropdown__menu" }
43
43
  )
44
44
  end
45
45
 
@@ -47,7 +47,7 @@ module Decidim
47
47
  @mobile_breadcrumb_root_menu ||= ::Decidim::BreadcrumbRootMenuPresenter.new(
48
48
  :mobile_menu,
49
49
  self,
50
- container_options: { class: "menu-bar__main-dropdown__top-menu" }
50
+ container_options: { class: "menu-bar__main-dropdown__menu" }
51
51
  )
52
52
  end
53
53
 
@@ -29,10 +29,9 @@ module Decidim
29
29
  # Generates a visualization of users for listing conversations threads
30
30
  #
31
31
  def username_list(users, shorten: false)
32
- content_tags = []
33
32
  first_users = shorten ? users.first(3) : users
34
- first_users.each do |u|
35
- content_tags.push(u.deleted? ? t("decidim.profile.deleted") : u.name)
33
+ content_tags = first_users.map do |u|
34
+ u.deleted? ? t("decidim.profile.deleted") : u.name
36
35
  end
37
36
 
38
37
  return content_tags.join(", ") unless shorten