decidim-core 0.28.6 → 0.29.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 (739) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/cells/decidim/activities_cell.rb +0 -1
  4. data/app/cells/decidim/activity_cell.rb +7 -6
  5. data/app/cells/decidim/address/online.erb +2 -2
  6. data/app/cells/decidim/address_cell.rb +3 -9
  7. data/app/cells/decidim/amendable/amend_button_card_cell.rb +0 -2
  8. data/app/cells/decidim/amendable/amendments_cell.rb +0 -2
  9. data/app/cells/decidim/amendable/announcement_cell.rb +10 -14
  10. data/app/cells/decidim/amendable/emendation_actions_cell.rb +0 -2
  11. data/app/cells/decidim/amendable/promote_button_card_cell.rb +0 -2
  12. data/app/cells/decidim/amendable/wizard_step_form_cell.rb +6 -19
  13. data/app/cells/decidim/announcement/show.erb +1 -1
  14. data/app/cells/decidim/announcement_cell.rb +6 -2
  15. data/app/cells/decidim/attachments_file_tab/show.erb +3 -0
  16. data/app/cells/decidim/attachments_file_tab_cell.rb +11 -0
  17. data/app/cells/decidim/attachments_link_tab/show.erb +12 -0
  18. data/app/cells/decidim/attachments_link_tab_cell.rb +21 -0
  19. data/app/cells/decidim/author/flag.erb +2 -2
  20. data/app/cells/decidim/author/show.erb +4 -5
  21. data/app/cells/decidim/author_cell.rb +0 -28
  22. data/app/cells/decidim/authorization_modal_cell.rb +0 -3
  23. data/app/cells/decidim/badge_cell.rb +0 -4
  24. data/app/cells/decidim/badges_cell.rb +0 -2
  25. data/app/cells/decidim/button_cell.rb +0 -3
  26. data/app/cells/decidim/card_cell.rb +1 -5
  27. data/app/cells/decidim/card_g/show.erb +1 -1
  28. data/app/cells/decidim/card_g_cell.rb +4 -7
  29. data/app/cells/decidim/card_l/image.erb +2 -2
  30. data/app/cells/decidim/card_l/space.erb +1 -1
  31. data/app/cells/decidim/card_l_cell.rb +3 -8
  32. data/app/cells/decidim/card_metadata_cell.rb +1 -5
  33. data/app/cells/decidim/card_s/show.erb +3 -5
  34. data/app/cells/decidim/card_s_cell.rb +1 -4
  35. data/app/cells/decidim/coauthorships_cell.rb +0 -2
  36. data/app/cells/decidim/comments_button_cell.rb +0 -2
  37. data/app/cells/decidim/content_blocks/footer_sub_hero/show.erb +1 -1
  38. data/app/cells/decidim/content_blocks/footer_sub_hero_cell.rb +0 -3
  39. data/app/cells/decidim/content_blocks/hero/show.erb +1 -1
  40. data/app/cells/decidim/content_blocks/hero_cell.rb +1 -2
  41. data/app/cells/decidim/content_blocks/highlighted_content_banner/show.erb +1 -1
  42. data/app/cells/decidim/content_blocks/highlighted_content_banner_cell.rb +0 -2
  43. data/app/cells/decidim/content_blocks/how_to_participate/show.erb +1 -1
  44. data/app/cells/decidim/content_blocks/how_to_participate_cell.rb +0 -1
  45. data/app/cells/decidim/content_blocks/participatory_space_documents/content.erb +1 -1
  46. data/app/cells/decidim/content_blocks/participatory_space_documents_cell.rb +17 -1
  47. data/app/cells/decidim/content_blocks/participatory_space_hero_cell.rb +2 -4
  48. data/app/cells/decidim/content_blocks/participatory_space_last_activity_cell.rb +1 -3
  49. data/app/cells/decidim/content_blocks/stats/show.erb +1 -1
  50. data/app/cells/decidim/content_blocks/stats_cell.rb +1 -1
  51. data/app/cells/decidim/content_blocks/sub_hero_cell.rb +0 -3
  52. data/app/cells/decidim/date_range/show.erb +10 -10
  53. data/app/cells/decidim/date_range_cell.rb +0 -2
  54. data/app/cells/decidim/diff_cell.rb +0 -5
  55. data/app/cells/decidim/documents_panel/show.erb +4 -0
  56. data/app/cells/decidim/documents_panel_cell.rb +9 -1
  57. data/app/cells/decidim/endorsement_buttons_cell.rb +6 -14
  58. data/app/cells/decidim/flag_modal/flag_user.erb +3 -3
  59. data/app/cells/decidim/followers_cell.rb +0 -1
  60. data/app/cells/decidim/following_cell.rb +0 -1
  61. data/app/cells/decidim/footer_topics/show.erb +8 -0
  62. data/app/cells/decidim/footer_topics_cell.rb +39 -0
  63. data/app/cells/decidim/groups_cell.rb +0 -3
  64. data/app/cells/decidim/linked_resources_for_cell.rb +0 -3
  65. data/app/cells/decidim/members_cell.rb +0 -1
  66. data/app/cells/decidim/nav_links/show.erb +3 -3
  67. data/app/cells/decidim/navbar_admin_link_cell.rb +0 -2
  68. data/app/cells/decidim/newsletter_templates/base_cell.rb +0 -1
  69. data/app/cells/decidim/newsletter_templates/basic_only_text/show.erb +2 -2
  70. data/app/cells/decidim/newsletter_templates/image_text_cta/show.erb +2 -2
  71. data/app/cells/decidim/newsletter_templates/image_text_cta_cell.rb +1 -1
  72. data/app/cells/decidim/notification/show.erb +5 -0
  73. data/app/cells/decidim/notification_actions/base_cell.rb +13 -0
  74. data/app/cells/decidim/notification_actions/buttons/show.erb +5 -0
  75. data/app/cells/decidim/notification_actions/buttons_cell.rb +41 -0
  76. data/app/cells/decidim/notification_cell.rb +9 -3
  77. data/app/cells/decidim/notifications_cell.rb +0 -1
  78. data/app/cells/decidim/pad_iframe/show.erb +2 -2
  79. data/app/cells/decidim/pad_iframe_cell.rb +0 -1
  80. data/app/cells/decidim/participatory_space_dropdown_metadata/show.erb +3 -5
  81. data/app/cells/decidim/participatory_space_dropdown_metadata_cell.rb +1 -2
  82. data/app/cells/decidim/photo_cell.rb +1 -5
  83. data/app/cells/decidim/photos_list_cell.rb +0 -2
  84. data/app/cells/decidim/profile_cell.rb +0 -2
  85. data/app/cells/decidim/profile_sidebar/show.erb +20 -20
  86. data/app/cells/decidim/profile_sidebar_cell.rb +1 -10
  87. data/app/cells/decidim/progress_bar/show.erb +8 -6
  88. data/app/cells/decidim/public_participation/show.erb +1 -1
  89. data/app/cells/decidim/report_button/flag_modal.erb +1 -1
  90. data/app/cells/decidim/resource_types_filter/show.erb +12 -11
  91. data/app/cells/decidim/resource_types_filter_cell.rb +6 -8
  92. data/app/cells/decidim/scopes_picker/show.erb +1 -1
  93. data/app/cells/decidim/scopes_picker_cell.rb +0 -1
  94. data/app/cells/decidim/search_results_cell.rb +1 -1
  95. data/app/cells/decidim/statistic_cell.rb +0 -2
  96. data/app/cells/decidim/tab_panels/show.erb +1 -1
  97. data/app/cells/decidim/tab_panels_cell.rb +12 -2
  98. data/app/cells/decidim/tags_cell.rb +0 -2
  99. data/app/cells/decidim/tos_page_cell.rb +0 -3
  100. data/app/cells/decidim/translation_bar/show.erb +2 -2
  101. data/app/cells/decidim/translation_bar_cell.rb +1 -3
  102. data/app/cells/decidim/upload_modal/files.erb +1 -1
  103. data/app/cells/decidim/upload_modal_cell.rb +1 -3
  104. data/app/cells/decidim/user_activity/show.erb +1 -1
  105. data/app/cells/decidim/user_conversation/new.erb +1 -1
  106. data/app/cells/decidim/user_conversation/show.erb +1 -1
  107. data/app/cells/decidim/user_conversation_cell.rb +0 -1
  108. data/app/cells/decidim/user_conversations/show.erb +1 -1
  109. data/app/cells/decidim/user_conversations_cell.rb +0 -1
  110. data/app/cells/decidim/user_group_pending_invitations_list_cell.rb +0 -1
  111. data/app/cells/decidim/user_group_pending_requests_list_cell.rb +0 -1
  112. data/app/cells/decidim/user_timeline/show.erb +1 -1
  113. data/app/cells/decidim/version_cell.rb +3 -5
  114. data/app/cells/decidim/versions_list_cell.rb +1 -3
  115. data/app/cells/decidim/versions_list_item_cell.rb +2 -4
  116. data/app/cells/decidim/wizard_step_form/wizard_aside.erb +2 -2
  117. data/app/cells/decidim/wizard_step_form/wizard_header.erb +2 -3
  118. data/app/cells/decidim/wizard_step_form_cell.rb +0 -8
  119. data/app/commands/decidim/amendable/create_draft.rb +4 -4
  120. data/app/commands/decidim/amendable/promote.rb +3 -2
  121. data/app/commands/decidim/amendable/publish_draft.rb +3 -2
  122. data/app/commands/decidim/amendable/update_draft.rb +4 -3
  123. data/app/commands/decidim/amendable/withdraw.rb +1 -1
  124. data/app/commands/decidim/create_follow.rb +4 -4
  125. data/app/commands/decidim/create_omniauth_registration.rb +11 -23
  126. data/app/commands/decidim/create_report.rb +3 -3
  127. data/app/commands/decidim/create_user_report.rb +5 -5
  128. data/app/commands/decidim/delete_follow.rb +4 -4
  129. data/app/commands/decidim/demote_membership.rb +2 -2
  130. data/app/commands/decidim/destroy_account.rb +21 -22
  131. data/app/commands/decidim/endorse_resource.rb +1 -1
  132. data/app/commands/decidim/invite_user_to_group.rb +5 -4
  133. data/app/commands/decidim/search.rb +0 -14
  134. data/app/commands/decidim/update_account.rb +24 -22
  135. data/app/commands/decidim/update_notifications_settings.rb +13 -11
  136. data/app/commands/decidim/update_password.rb +7 -7
  137. data/app/commands/decidim/update_user_interests.rb +9 -7
  138. data/app/controllers/concerns/decidim/devise_authentication_methods.rb +1 -1
  139. data/app/controllers/concerns/decidim/devise_controllers.rb +2 -1
  140. data/app/controllers/concerns/decidim/filter_resource.rb +1 -1
  141. data/app/controllers/concerns/decidim/needs_rtl_direction.rb +23 -0
  142. data/app/controllers/concerns/decidim/paginable.rb +1 -1
  143. data/app/controllers/concerns/decidim/participatory_space_context.rb +1 -23
  144. data/app/controllers/concerns/decidim/payload_info.rb +2 -1
  145. data/app/controllers/concerns/decidim/registers_permissions.rb +4 -4
  146. data/app/controllers/concerns/decidim/use_organization_time_zone.rb +1 -1
  147. data/app/controllers/concerns/decidim/withdrawable.rb +1 -1
  148. data/app/controllers/decidim/account_controller.rb +2 -2
  149. data/app/controllers/{concerns/decidim → decidim}/amendments_controller.rb +3 -16
  150. data/app/controllers/decidim/application_controller.rb +1 -1
  151. data/app/controllers/decidim/components/base_controller.rb +1 -1
  152. data/app/controllers/decidim/devise/invitations_controller.rb +1 -1
  153. data/app/controllers/decidim/devise/passwords_controller.rb +2 -2
  154. data/app/controllers/decidim/doorkeeper/credentials_controller.rb +1 -1
  155. data/app/controllers/decidim/endorsements_controller.rb +1 -1
  156. data/app/controllers/decidim/favicon_controller.rb +1 -1
  157. data/app/controllers/decidim/follows_controller.rb +2 -2
  158. data/app/controllers/decidim/group_invites_controller.rb +36 -9
  159. data/app/controllers/decidim/links_controller.rb +1 -1
  160. data/app/controllers/decidim/newsletters_opt_in_controller.rb +1 -1
  161. data/app/controllers/decidim/notifications_settings_controller.rb +1 -1
  162. data/app/controllers/decidim/profiles_controller.rb +2 -6
  163. data/app/controllers/decidim/report_users_controller.rb +1 -1
  164. data/app/controllers/decidim/reports_controller.rb +2 -2
  165. data/app/controllers/decidim/user_activities_controller.rb +1 -1
  166. data/app/controllers/decidim/user_interests_controller.rb +1 -1
  167. data/app/events/decidim/change_nickname_event.rb +0 -1
  168. data/app/events/decidim/invited_to_group_event.rb +29 -0
  169. data/app/events/decidim/welcome_notification_event.rb +2 -4
  170. data/app/forms/decidim/account_form.rb +2 -5
  171. data/app/forms/decidim/form.rb +4 -0
  172. data/app/forms/decidim/omniauth_registration_form.rb +1 -1
  173. data/app/forms/decidim/upload_validation_form.rb +2 -2
  174. data/app/helpers/concerns/decidim/flash_helper_extensions.rb +1 -1
  175. data/app/helpers/decidim/amendments_helper.rb +4 -14
  176. data/app/helpers/decidim/application_helper.rb +8 -0
  177. data/app/helpers/decidim/authorization_form_helper.rb +2 -2
  178. data/app/helpers/decidim/breadcrumb_helper.rb +1 -1
  179. data/app/helpers/decidim/cells_helper.rb +1 -1
  180. data/app/helpers/decidim/check_boxes_tree_helper.rb +1 -1
  181. data/app/helpers/decidim/cta_button_helper.rb +1 -1
  182. data/app/helpers/decidim/datalist_select_helper.rb +1 -1
  183. data/app/helpers/decidim/decidim_form_helper.rb +3 -3
  184. data/app/helpers/decidim/filters_helper.rb +1 -1
  185. data/app/helpers/decidim/layout_helper.rb +1 -64
  186. data/app/helpers/decidim/localized_locales_helper.rb +1 -1
  187. data/app/helpers/decidim/map_helper.rb +1 -6
  188. data/app/helpers/decidim/menu_helper.rb +9 -1
  189. data/app/helpers/decidim/meta_tags_helper.rb +26 -23
  190. data/app/helpers/decidim/modal_helper.rb +1 -1
  191. data/app/helpers/decidim/orders_helper.rb +2 -3
  192. data/app/helpers/decidim/organization_helper.rb +55 -0
  193. data/app/helpers/decidim/paginate_helper.rb +5 -3
  194. data/app/helpers/decidim/participatory_space_helpers.rb +1 -1
  195. data/app/helpers/decidim/resource_helper.rb +0 -7
  196. data/app/helpers/decidim/sanitize_helper.rb +2 -11
  197. data/app/helpers/decidim/scopes_helper.rb +3 -4
  198. data/app/helpers/decidim/searches_helper.rb +1 -1
  199. data/app/helpers/decidim/short_link_helper.rb +2 -2
  200. data/app/helpers/decidim/translations_helper.rb +2 -2
  201. data/app/helpers/decidim/twitter_search_helper.rb +1 -1
  202. data/app/helpers/decidim/user_profile_helper.rb +0 -1
  203. data/app/jobs/decidim/email_notifications_digest_generator_job.rb +2 -2
  204. data/app/mailers/decidim/application_mailer.rb +6 -2
  205. data/app/mailers/decidim/block_user_mailer.rb +1 -1
  206. data/app/mailers/decidim/decidim_devise_mailer.rb +7 -1
  207. data/app/mailers/decidim/newsletter_mailer.rb +1 -4
  208. data/app/mailers/decidim/newsletters_opt_in_mailer.rb +2 -2
  209. data/app/mailers/decidim/notification_mailer.rb +0 -1
  210. data/app/mailers/decidim/notifications_digest_mailer.rb +0 -1
  211. data/app/mailers/decidim/reported_mailer.rb +6 -3
  212. data/app/mailers/decidim/user_report_mailer.rb +1 -1
  213. data/app/models/decidim/action_log.rb +2 -12
  214. data/app/models/decidim/area_type.rb +1 -1
  215. data/app/models/decidim/attachment.rb +28 -4
  216. data/app/models/decidim/authorization.rb +1 -1
  217. data/app/models/decidim/authorization_transfer.rb +1 -0
  218. data/app/models/decidim/component.rb +3 -6
  219. data/app/models/decidim/content_block.rb +3 -3
  220. data/app/models/decidim/messaging/message.rb +2 -2
  221. data/app/models/decidim/newsletter.rb +9 -9
  222. data/app/models/decidim/notification.rb +2 -2
  223. data/app/models/decidim/organization.rb +23 -2
  224. data/app/models/decidim/push_notification_message.rb +1 -1
  225. data/app/models/decidim/resource_link.rb +1 -1
  226. data/app/models/decidim/user.rb +18 -14
  227. data/app/models/decidim/user_base_entity.rb +0 -4
  228. data/app/models/decidim/user_group.rb +2 -2
  229. data/app/packs/src/decidim/a11y.js +61 -11
  230. data/app/packs/src/decidim/append_redirect_url_to_modals.js +14 -24
  231. data/app/packs/src/decidim/attachments/file_or_link_tabs.js +55 -0
  232. data/app/packs/src/decidim/attachments/index.js +1 -0
  233. data/app/packs/src/decidim/back_to_list.js +1 -1
  234. data/app/packs/src/decidim/check_boxes_tree.js +1 -1
  235. data/app/packs/src/decidim/data_consent/consent_manager.js +1 -1
  236. data/app/packs/src/decidim/data_consent/consent_manager.test.js +6 -6
  237. data/app/packs/src/decidim/data_consent/index.js +1 -1
  238. data/app/packs/src/decidim/datepicker/datepicker_functions.js +243 -0
  239. data/app/packs/src/decidim/datepicker/datepicker_listeners.js +78 -0
  240. data/app/packs/src/decidim/datepicker/form_datepicker.js +91 -0
  241. data/app/packs/src/decidim/datepicker/generate_datepicker.js +148 -0
  242. data/app/packs/src/decidim/datepicker/generate_timepicker.js +298 -0
  243. data/app/packs/src/decidim/datepicker/test/date.test.js +118 -0
  244. data/app/packs/src/decidim/datepicker/test/time.test.js +227 -0
  245. data/app/packs/src/decidim/direct_uploads/upload_field.js +8 -21
  246. data/app/packs/src/decidim/direct_uploads/upload_modal.js +0 -3
  247. data/app/packs/src/decidim/editor/extensions/indent/index.js +1 -1
  248. data/app/packs/src/decidim/editor/extensions/video_embed/index.js +4 -4
  249. data/app/packs/src/decidim/editor/test/extensions/decidim_kit.test.js +0 -15
  250. data/app/packs/src/decidim/editor/test/extensions/indent.test.js +1 -1
  251. data/app/packs/src/decidim/editor/test/fixtures/upload_templates.js +1 -1
  252. data/app/packs/src/decidim/editor/test/helpers.js +1 -14
  253. data/app/packs/src/decidim/editor/utilities/paste_transform.js +2 -2
  254. data/app/packs/src/decidim/external_domain_warning.js +2 -2
  255. data/app/packs/src/decidim/external_domain_warning.test.js +4 -4
  256. data/app/packs/src/decidim/form_filter.js +4 -4
  257. data/app/packs/src/decidim/impersonation.js +1 -1
  258. data/app/packs/src/decidim/index.js +11 -10
  259. data/app/packs/src/decidim/input_character_counter.js +2 -2
  260. data/app/packs/src/decidim/input_emoji.js +171 -72
  261. data/app/packs/src/decidim/input_hashtags.js +1 -1
  262. data/app/packs/src/decidim/input_mentions.js +1 -1
  263. data/app/packs/src/decidim/map/provider/here.js +1 -1
  264. data/app/packs/src/decidim/notifications_actions.js +40 -0
  265. data/app/packs/src/decidim/sticky_header.js +87 -0
  266. data/app/packs/src/decidim/sw/sw.js +8 -6
  267. data/app/packs/src/decidim/toggle.js +1 -1
  268. data/app/packs/src/decidim/tooltips.js +23 -43
  269. data/app/packs/src/decidim/vendor/leaflet-tilelayer-here.js +212 -0
  270. data/app/packs/stylesheets/decidim/_buttons.scss +1 -1
  271. data/app/packs/stylesheets/decidim/_datepicker.scss +193 -0
  272. data/app/packs/stylesheets/decidim/_dropdown.scss +45 -9
  273. data/app/packs/stylesheets/decidim/_emoji.scss +36 -0
  274. data/app/packs/stylesheets/decidim/_filters.scss +4 -2
  275. data/app/packs/stylesheets/decidim/_flash.scss +2 -2
  276. data/app/packs/stylesheets/decidim/_footer.scss +1 -3
  277. data/app/packs/stylesheets/decidim/_forms.scss +13 -5
  278. data/app/packs/stylesheets/decidim/_header.scss +70 -68
  279. data/app/packs/stylesheets/decidim/_home.scss +1 -1
  280. data/app/packs/stylesheets/decidim/_layout.scss +13 -0
  281. data/app/packs/stylesheets/decidim/_modal.scss +1 -1
  282. data/app/packs/stylesheets/decidim/_modal_update.scss +1 -5
  283. data/app/packs/stylesheets/decidim/_notifications.scss +4 -0
  284. data/app/packs/stylesheets/decidim/_profile.scss +1 -1
  285. data/app/packs/stylesheets/decidim/_progress-bar.scss +1 -1
  286. data/app/packs/stylesheets/decidim/_tabs_x.scss +5 -1
  287. data/app/packs/stylesheets/decidim/_tooltip.scss +10 -10
  288. data/app/packs/stylesheets/decidim/application.scss +4 -1
  289. data/app/packs/stylesheets/decidim/editor.scss +1 -1
  290. data/app/packs/stylesheets/decidim/legacy/conference-diploma.scss +1 -2
  291. data/app/packs/stylesheets/decidim/legacy/leaflet.scss +1 -1
  292. data/app/packs/stylesheets/decidim/vendor/_datepicker_light.scss +228 -0
  293. data/app/permissions/decidim/default_permissions.rb +2 -2
  294. data/app/presenters/decidim/admin_log/organization_presenter.rb +1 -1
  295. data/app/presenters/decidim/admin_log/static_page_presenter.rb +1 -1
  296. data/app/presenters/decidim/attachment_presenter.rb +1 -1
  297. data/app/presenters/decidim/authorization_transfer_presenter.rb +1 -1
  298. data/app/presenters/decidim/component_attachment_collection_presenter.rb +81 -0
  299. data/app/presenters/decidim/footer_menu_presenter.rb +1 -1
  300. data/app/presenters/decidim/home_stats_presenter.rb +1 -1
  301. data/app/presenters/decidim/log/user_presenter.rb +0 -1
  302. data/app/presenters/decidim/menu_item_presenter.rb +1 -1
  303. data/app/presenters/decidim/organization_presenter.rb +1 -1
  304. data/app/queries/decidim/last_activity.rb +5 -16
  305. data/app/queries/decidim/metric_measure.rb +1 -1
  306. data/app/queries/decidim/public_activities.rb +1 -1
  307. data/app/queries/decidim/user_groups/admin_memberships.rb +1 -1
  308. data/app/queries/decidim/user_groups/member_memberships.rb +1 -1
  309. data/app/services/decidim/action_logger.rb +3 -3
  310. data/app/services/decidim/base_diff_renderer.rb +2 -28
  311. data/app/services/decidim/download_your_data_exporter.rb +25 -36
  312. data/app/services/decidim/email_notification_generator.rb +5 -14
  313. data/app/services/decidim/log/diff_changeset_calculator.rb +2 -2
  314. data/app/services/decidim/notifications_digest_sending_decider.rb +1 -1
  315. data/app/services/decidim/open_data_exporter.rb +7 -8
  316. data/app/services/decidim/static_map_generator.rb +1 -1
  317. data/app/services/decidim/zip_stream/writer.rb +39 -0
  318. data/app/uploaders/decidim/organization_favicon_uploader.rb +1 -1
  319. data/app/uploaders/decidim/record_image_uploader.rb +2 -2
  320. data/app/validators/organization_present_validator.rb +1 -1
  321. data/app/validators/passthru_validator.rb +1 -1
  322. data/app/validators/uploader_image_dimensions_validator.rb +2 -2
  323. data/app/views/decidim/account/show.html.erb +1 -1
  324. data/app/views/decidim/amendments/_wizard_header.html.erb +1 -2
  325. data/app/views/decidim/application/_collection.html.erb +3 -1
  326. data/app/views/decidim/application/_component_documents.html.erb +4 -0
  327. data/app/views/decidim/application/_document.html.erb +23 -9
  328. data/app/views/decidim/block_user_mailer/notify.html.erb +2 -2
  329. data/app/views/decidim/devise/invitations/edit.html.erb +2 -2
  330. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +2 -2
  331. data/app/views/decidim/devise/registrations/new.html.erb +1 -1
  332. data/app/views/decidim/devise/shared/_login_boxes.html.erb +1 -1
  333. data/app/views/decidim/doorkeeper/authorizations/new.html.erb +1 -1
  334. data/app/views/decidim/endorsements/_identity.html.erb +1 -1
  335. data/app/views/decidim/gamification/badges/index.html.erb +1 -1
  336. data/app/views/decidim/last_activities/index.html.erb +1 -1
  337. data/app/views/decidim/manifests/show.json.erb +4 -4
  338. data/app/views/decidim/messaging/conversations/_add_conversation_users.html.erb +2 -2
  339. data/app/views/decidim/messaging/conversations/_error_modal.html.erb +5 -5
  340. data/app/views/decidim/newsletter_mailer/newsletter.html.erb +1 -1
  341. data/app/views/decidim/newsletters/show.html.erb +1 -1
  342. data/app/views/decidim/newsletters_opt_in_mailer/notify.html.erb +2 -2
  343. data/app/views/decidim/offline/show.html.erb +1 -1
  344. data/app/views/decidim/pages/_tabbed.html.erb +5 -5
  345. data/app/views/decidim/pages/index.html.erb +1 -2
  346. data/app/views/decidim/reported_mailer/hide.html.erb +1 -1
  347. data/app/views/decidim/reported_mailer/report.html.erb +5 -3
  348. data/app/views/decidim/scopes/picker.html.erb +5 -5
  349. data/app/views/decidim/searches/_count.html.erb +1 -1
  350. data/app/views/decidim/searches/_filters.html.erb +38 -40
  351. data/app/views/decidim/searches/_resources_filter_block.html.erb +6 -6
  352. data/app/views/decidim/shared/_extended_navigation_bar.html.erb +8 -8
  353. data/app/views/decidim/shared/_filters.html.erb +5 -5
  354. data/app/views/decidim/shared/_login_modal.html.erb +1 -1
  355. data/app/views/decidim/shared/_orders.html.erb +2 -3
  356. data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -1
  357. data/app/views/decidim/shared/filters/_collection.html.erb +1 -1
  358. data/app/views/decidim/user_interests/_areas.html.erb +2 -2
  359. data/app/views/decidim/user_report_mailer/notify.html.erb +2 -2
  360. data/app/views/decidim/user_update_mailer/notify.html.erb +1 -1
  361. data/app/views/decidim/widgets/_data_picker.html.erb +1 -1
  362. data/app/views/devise/mailer/invitation_instructions.html.erb +1 -1
  363. data/app/views/devise/mailer/invitation_instructions.text.erb +1 -1
  364. data/app/views/devise/mailer/invite_admin.html.erb +2 -2
  365. data/app/views/devise/mailer/invite_admin.text.erb +2 -2
  366. data/app/views/devise/mailer/invite_collaborator.html.erb +2 -2
  367. data/app/views/devise/mailer/invite_collaborator.text.erb +2 -2
  368. data/app/views/devise/mailer/invite_private_user.html.erb +2 -2
  369. data/app/views/devise/mailer/invite_private_user.text.erb +2 -2
  370. data/app/views/devise/mailer/organization_admin_invitation_instructions.html.erb +1 -1
  371. data/app/views/devise/mailer/organization_admin_invitation_instructions.text.erb +1 -1
  372. data/app/views/layouts/decidim/_application.html.erb +3 -6
  373. data/app/views/layouts/decidim/_data_consent_warning.html.erb +2 -2
  374. data/app/views/layouts/decidim/_decidim_javascript.html.erb +1 -1
  375. data/app/views/layouts/decidim/_head.html.erb +1 -1
  376. data/app/views/layouts/decidim/_head_extra.html.erb +2 -2
  377. data/app/views/layouts/decidim/_impersonation_warning.html.erb +1 -1
  378. data/app/views/layouts/decidim/_js_configuration.html.erb +7 -2
  379. data/app/views/layouts/decidim/_logo.html.erb +2 -2
  380. data/app/views/layouts/decidim/_logo_mobile.html.erb +11 -0
  381. data/app/views/layouts/decidim/_mailer_logo.html.erb +2 -2
  382. data/app/views/layouts/decidim/_meta_tags_config.html.erb +1 -1
  383. data/app/views/layouts/decidim/_wrapper.html.erb +16 -9
  384. data/app/views/layouts/decidim/footer/_main.html.erb +2 -3
  385. data/app/views/layouts/decidim/footer/_main_intro.html.erb +2 -2
  386. data/app/views/layouts/decidim/footer/_main_legal.html.erb +2 -3
  387. data/app/views/layouts/decidim/footer/_main_links.html.erb +13 -11
  388. data/app/views/layouts/decidim/footer/_main_social_media_links.html.erb +8 -8
  389. data/app/views/layouts/decidim/header/_main.html.erb +9 -22
  390. data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +4 -5
  391. data/app/views/layouts/decidim/header/_main_links_mobile_account.html.erb +11 -4
  392. data/app/views/layouts/decidim/header/_main_links_mobile_item_account.html.erb +24 -0
  393. data/app/views/layouts/decidim/header/_main_links_mobile_search.html.erb +0 -21
  394. data/app/views/layouts/decidim/header/_main_menu_mobile.html.erb +12 -0
  395. data/app/views/layouts/decidim/header/_menu_breadcrumb_desktop.html.erb +1 -1
  396. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_mobile.html.erb +17 -0
  397. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_top_left.html.erb +1 -1
  398. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +1 -1
  399. data/app/views/layouts/decidim/header/_menu_form_search_mobile.html.erb +16 -0
  400. data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +25 -0
  401. data/app/views/layouts/decidim/mailer.html.erb +2 -2
  402. data/app/views/layouts/decidim/shared/_layout_center.html.erb +1 -1
  403. data/app/views/layouts/decidim/shared/_layout_item.html.erb +0 -14
  404. data/app/views/layouts/decidim/shared/_layout_user_profile.html.erb +2 -2
  405. data/config/initializers/active_storage.rb +3 -0
  406. data/config/initializers/devise.rb +1 -1
  407. data/config/initializers/new_framework_defaults_7_0.rb +145 -0
  408. data/config/locales/ar.yml +15 -97
  409. data/config/locales/bg.yml +58 -68
  410. data/config/locales/ca.yml +85 -121
  411. data/config/locales/cs.yml +63 -114
  412. data/config/locales/de.yml +79 -115
  413. data/config/locales/el.yml +3 -46
  414. data/config/locales/en.yml +62 -98
  415. data/config/locales/eo.yml +0 -2
  416. data/config/locales/es-MX.yml +76 -112
  417. data/config/locales/es-PY.yml +80 -116
  418. data/config/locales/es.yml +86 -122
  419. data/config/locales/eu.yml +310 -357
  420. data/config/locales/fi-plain.yml +73 -101
  421. data/config/locales/fi.yml +135 -163
  422. data/config/locales/fr-CA.yml +65 -107
  423. data/config/locales/fr.yml +58 -100
  424. data/config/locales/ga-IE.yml +0 -22
  425. data/config/locales/gl.yml +3 -51
  426. data/config/locales/hu.yml +43 -69
  427. data/config/locales/id-ID.yml +3 -46
  428. data/config/locales/is-IS.yml +2 -31
  429. data/config/locales/it.yml +12 -107
  430. data/config/locales/ja.yml +86 -122
  431. data/config/locales/lb.yml +7 -57
  432. data/config/locales/lt.yml +4 -57
  433. data/config/locales/lv.yml +2 -47
  434. data/config/locales/nl.yml +6 -57
  435. data/config/locales/no.yml +0 -50
  436. data/config/locales/pl.yml +67 -64
  437. data/config/locales/pt-BR.yml +8 -263
  438. data/config/locales/pt.yml +0 -56
  439. data/config/locales/ro-RO.yml +253 -561
  440. data/config/locales/ru.yml +1 -48
  441. data/config/locales/sk.yml +7 -60
  442. data/config/locales/sl.yml +0 -12
  443. data/config/locales/sr-CS.yml +0 -2
  444. data/config/locales/sv.yml +169 -629
  445. data/config/locales/tr-TR.yml +12 -59
  446. data/config/locales/uk.yml +2 -30
  447. data/config/locales/zh-CN.yml +2 -49
  448. data/config/locales/zh-TW.yml +1 -61
  449. data/config/routes.rb +0 -2
  450. data/db/migrate/20170128112958_change_user_groups_verified_to_timestamp.rb +1 -1
  451. data/db/migrate/20181025082245_add_timestamps_to_components.rb +1 -5
  452. data/db/migrate/20240110150230_rename_external_domain_whitelist_to_external_domain_allowlist.rb +7 -0
  453. data/db/migrate/20240326104215_remove_show_in_footer_in_static_pages.rb +7 -0
  454. data/db/migrate/20240401192628_change_name_on_decidim_organizations.rb +31 -0
  455. data/db/seeds/avatars/001.jpg +0 -0
  456. data/db/seeds/avatars/002.jpg +0 -0
  457. data/db/seeds/avatars/003.jpg +0 -0
  458. data/db/seeds/avatars/004.jpg +0 -0
  459. data/db/seeds/avatars/005.jpg +0 -0
  460. data/db/seeds/avatars/006.jpg +0 -0
  461. data/db/seeds/avatars/007.jpg +0 -0
  462. data/db/seeds/avatars/008.jpg +0 -0
  463. data/db/seeds/avatars/009.jpg +0 -0
  464. data/db/seeds/avatars/010.jpg +0 -0
  465. data/db/seeds/avatars/011.jpg +0 -0
  466. data/db/seeds/avatars/012.jpg +0 -0
  467. data/db/seeds/avatars/013.jpg +0 -0
  468. data/db/seeds/avatars/014.jpg +0 -0
  469. data/db/seeds/avatars/015.jpg +0 -0
  470. data/db/seeds/avatars/016.jpg +0 -0
  471. data/db/seeds/avatars/017.jpg +0 -0
  472. data/db/seeds/avatars/018.jpg +0 -0
  473. data/db/seeds/avatars/019.jpg +0 -0
  474. data/db/seeds/avatars/020.jpg +0 -0
  475. data/db/seeds/avatars/021.jpg +0 -0
  476. data/db/seeds/avatars/022.jpg +0 -0
  477. data/db/seeds/avatars/023.jpg +0 -0
  478. data/db/seeds/avatars/024.jpg +0 -0
  479. data/db/seeds/avatars/025.jpg +0 -0
  480. data/db/seeds/avatars/026.jpg +0 -0
  481. data/db/seeds/avatars/027.jpg +0 -0
  482. data/db/seeds/avatars/028.jpg +0 -0
  483. data/db/seeds/avatars/029.jpg +0 -0
  484. data/db/seeds/avatars/030.jpg +0 -0
  485. data/db/seeds/avatars/031.jpg +0 -0
  486. data/db/seeds/avatars/032.jpg +0 -0
  487. data/db/seeds/avatars/033.jpg +0 -0
  488. data/db/seeds/avatars/034.jpg +0 -0
  489. data/db/seeds/avatars/035.jpg +0 -0
  490. data/db/seeds/avatars/036.jpg +0 -0
  491. data/db/seeds/avatars/037.jpg +0 -0
  492. data/db/seeds/avatars/038.jpg +0 -0
  493. data/db/seeds/avatars/039.jpg +0 -0
  494. data/db/seeds/avatars/040.jpg +0 -0
  495. data/db/seeds/avatars/041.jpg +0 -0
  496. data/db/seeds/avatars/042.jpg +0 -0
  497. data/db/seeds/avatars/043.jpg +0 -0
  498. data/db/seeds/avatars/044.jpg +0 -0
  499. data/db/seeds/avatars/045.jpg +0 -0
  500. data/db/seeds/avatars/046.jpg +0 -0
  501. data/db/seeds/avatars/047.jpg +0 -0
  502. data/db/seeds/avatars/048.jpg +0 -0
  503. data/db/seeds/avatars/049.jpg +0 -0
  504. data/db/seeds/avatars/050.jpg +0 -0
  505. data/db/seeds/avatars/051.jpg +0 -0
  506. data/db/seeds/avatars/052.jpg +0 -0
  507. data/db/seeds/avatars/053.jpg +0 -0
  508. data/db/seeds/avatars/054.jpg +0 -0
  509. data/db/seeds/avatars/055.jpg +0 -0
  510. data/db/seeds/avatars/056.jpg +0 -0
  511. data/db/seeds/avatars/057.jpg +0 -0
  512. data/db/seeds/avatars/058.jpg +0 -0
  513. data/db/seeds/avatars/059.jpg +0 -0
  514. data/db/seeds/avatars/060.jpg +0 -0
  515. data/db/seeds/avatars/061.jpg +0 -0
  516. data/db/seeds/avatars/062.jpg +0 -0
  517. data/db/seeds/avatars/063.jpg +0 -0
  518. data/db/seeds/avatars/064.jpg +0 -0
  519. data/db/seeds/avatars/065.jpg +0 -0
  520. data/db/seeds/avatars/066.jpg +0 -0
  521. data/db/seeds/avatars/067.jpg +0 -0
  522. data/db/seeds/avatars/068.jpg +0 -0
  523. data/db/seeds/avatars/069.jpg +0 -0
  524. data/db/seeds/avatars/070.jpg +0 -0
  525. data/db/seeds/avatars/071.jpg +0 -0
  526. data/db/seeds/avatars/072.jpg +0 -0
  527. data/db/seeds/avatars/073.jpg +0 -0
  528. data/db/seeds/avatars/074.jpg +0 -0
  529. data/db/seeds/avatars/075.jpg +0 -0
  530. data/db/seeds/avatars/076.jpg +0 -0
  531. data/db/seeds/avatars/077.jpg +0 -0
  532. data/db/seeds/avatars/078.jpg +0 -0
  533. data/db/seeds/avatars/079.jpg +0 -0
  534. data/db/seeds/avatars/080.jpg +0 -0
  535. data/db/seeds/avatars/081.jpg +0 -0
  536. data/db/seeds/avatars/082.jpg +0 -0
  537. data/db/seeds/avatars/083.jpg +0 -0
  538. data/db/seeds/avatars/084.jpg +0 -0
  539. data/db/seeds/avatars/085.jpg +0 -0
  540. data/db/seeds/avatars/086.jpg +0 -0
  541. data/db/seeds/avatars/087.jpg +0 -0
  542. data/db/seeds/avatars/088.jpg +0 -0
  543. data/db/seeds/avatars/089.jpg +0 -0
  544. data/db/seeds/avatars/090.jpg +0 -0
  545. data/db/seeds/avatars/091.jpg +0 -0
  546. data/db/seeds/avatars/092.jpg +0 -0
  547. data/db/seeds/avatars/093.jpg +0 -0
  548. data/db/seeds/avatars/094.jpg +0 -0
  549. data/db/seeds/avatars/095.jpg +0 -0
  550. data/db/seeds/avatars/096.jpg +0 -0
  551. data/db/seeds/avatars/097.jpg +0 -0
  552. data/db/seeds/avatars/098.jpg +0 -0
  553. data/db/seeds/avatars/099.jpg +0 -0
  554. data/db/seeds/avatars/100.jpg +0 -0
  555. data/db/seeds/avatars/CREDITS.md +114 -0
  556. data/db/seeds/avatars/README.md +25 -0
  557. data/decidim-core.gemspec +8 -9
  558. data/lib/decidim/acts_as_author.rb +1 -1
  559. data/lib/decidim/admin_filter.rb +44 -0
  560. data/lib/decidim/admin_filters_registry.rb +55 -0
  561. data/lib/decidim/amendable.rb +1 -2
  562. data/lib/decidim/api/functions/component_finder_base.rb +1 -1
  563. data/lib/decidim/api/functions/component_list.rb +1 -1
  564. data/lib/decidim/api/functions/needs_api_filter_and_order.rb +3 -3
  565. data/lib/decidim/api/functions/participatory_space_finder_base.rb +2 -12
  566. data/lib/decidim/api/functions/participatory_space_list_base.rb +1 -1
  567. data/lib/decidim/api/input_filters/user_entity_input_filter.rb +3 -3
  568. data/lib/decidim/api/interfaces/author_interface.rb +1 -1
  569. data/lib/decidim/api/interfaces/participatory_space_interface.rb +1 -1
  570. data/lib/decidim/api/types/component_type.rb +0 -7
  571. data/lib/decidim/api/types/organization_type.rb +1 -1
  572. data/lib/decidim/api/types/user_group_type.rb +1 -5
  573. data/lib/decidim/api/types/user_type.rb +1 -5
  574. data/lib/decidim/asset_router/pipeline.rb +2 -2
  575. data/lib/decidim/asset_router/storage.rb +11 -214
  576. data/lib/decidim/assets/tailwind/instance.rb +1 -1
  577. data/lib/decidim/assets/tailwind/tailwind.config.js.erb +8 -3
  578. data/lib/decidim/attribute_object/model.rb +2 -2
  579. data/lib/decidim/attribute_object/type_resolver.rb +1 -3
  580. data/lib/decidim/attribute_object.rb +2 -2
  581. data/lib/decidim/attributes/time_with_zone.rb +2 -16
  582. data/lib/decidim/attributes.rb +0 -6
  583. data/lib/decidim/authorable.rb +5 -0
  584. data/lib/decidim/command.rb +2 -2
  585. data/lib/decidim/commands/create_resource.rb +63 -0
  586. data/lib/decidim/commands/destroy_resource.rb +74 -0
  587. data/lib/decidim/commands/hook_error.rb +8 -0
  588. data/lib/decidim/commands/resource_handler.rb +85 -0
  589. data/lib/decidim/commands/update_resource.rb +64 -0
  590. data/lib/decidim/component_manifest.rb +3 -1
  591. data/lib/decidim/component_validator.rb +1 -1
  592. data/lib/decidim/content_blocks/has_related_components.rb +1 -1
  593. data/lib/decidim/content_parsers/resource_parser.rb +2 -2
  594. data/lib/decidim/content_parsers/user_parser.rb +1 -1
  595. data/lib/decidim/content_parsers.rb +0 -1
  596. data/lib/decidim/content_processor.rb +1 -1
  597. data/lib/decidim/content_renderers.rb +0 -1
  598. data/lib/decidim/content_security_policy.rb +1 -1
  599. data/lib/decidim/core/engine.rb +13 -58
  600. data/lib/decidim/core/menu.rb +13 -3
  601. data/lib/decidim/core/seeds.rb +120 -147
  602. data/lib/decidim/core/test/factories.rb +24 -31
  603. data/lib/decidim/core/test/shared_examples/acts_as_author_examples.rb +1 -1
  604. data/lib/decidim/core/test/shared_examples/amendable/withdraw_amendment_examples.rb +2 -2
  605. data/lib/decidim/core/test/shared_examples/announcements_examples.rb +3 -3
  606. data/lib/decidim/core/test/shared_examples/assembly_announcements_examples.rb +4 -4
  607. data/lib/decidim/core/test/shared_examples/attachable_interface_examples.rb +1 -1
  608. data/lib/decidim/core/test/shared_examples/authorable_interface_examples.rb +1 -1
  609. data/lib/decidim/core/test/shared_examples/comments_examples.rb +90 -107
  610. data/lib/decidim/core/test/shared_examples/comments_reports_examples.rb +4 -4
  611. data/lib/decidim/core/test/shared_examples/digest_mail_examples.rb +1 -1
  612. data/lib/decidim/core/test/shared_examples/edit_link_shared_examples.rb +1 -1
  613. data/lib/decidim/core/test/shared_examples/editor_shared_examples.rb +7 -7
  614. data/lib/decidim/core/test/shared_examples/fingerprint_examples.rb +1 -1
  615. data/lib/decidim/core/test/shared_examples/follows_examples.rb +6 -11
  616. data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +4 -2
  617. data/lib/decidim/core/test/shared_examples/has_attachments.rb +3 -2
  618. data/lib/decidim/core/test/shared_examples/has_contextual_help.rb +4 -4
  619. data/lib/decidim/core/test/shared_examples/has_reference.rb +1 -1
  620. data/lib/decidim/core/test/shared_examples/logo_email.rb +1 -1
  621. data/lib/decidim/core/test/shared_examples/manage_component_share_tokens.rb +9 -9
  622. data/lib/decidim/core/test/shared_examples/map_examples.rb +5 -5
  623. data/lib/decidim/core/test/shared_examples/paginated_resource_examples.rb +7 -7
  624. data/lib/decidim/core/test/shared_examples/participatory_space_dropdown_metadata_cell_examples.rb +3 -3
  625. data/lib/decidim/core/test/shared_examples/preview_component_with_share_token_examples.rb +3 -3
  626. data/lib/decidim/core/test/shared_examples/process_announcements_examples.rb +4 -4
  627. data/lib/decidim/core/test/shared_examples/reports_examples.rb +11 -53
  628. data/lib/decidim/core/test/shared_examples/rich_text_editor_examples.rb +10 -10
  629. data/lib/decidim/core/test/shared_examples/searchable_participatory_space_examples.rb +1 -1
  630. data/lib/decidim/core/test/shared_examples/searchable_results_examples.rb +8 -8
  631. data/lib/decidim/core/test/shared_examples/share_link_examples.rb +2 -2
  632. data/lib/decidim/core/test/shared_examples/simple_event.rb +1 -1
  633. data/lib/decidim/core/test/shared_examples/space_cell_changes_button_text_cta.rb +3 -3
  634. data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +15 -113
  635. data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +2 -2
  636. data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +2 -28
  637. data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +0 -26
  638. data/lib/decidim/core/test/shared_examples/with_endorsable_permissions_examples.rb +1 -1
  639. data/lib/decidim/core/version.rb +1 -1
  640. data/lib/decidim/core.rb +24 -17
  641. data/lib/decidim/dependency_resolver.rb +3 -3
  642. data/lib/decidim/diffy_extension.rb +1 -19
  643. data/lib/decidim/download_your_data_serializers/download_your_data_user_serializer.rb +2 -1
  644. data/lib/decidim/engine_router.rb +2 -2
  645. data/lib/decidim/events/base_event.rb +19 -0
  646. data/lib/decidim/events/simple_event.rb +1 -0
  647. data/lib/decidim/exporters/export_manifest.rb +1 -1
  648. data/lib/decidim/faker/localized.rb +3 -3
  649. data/lib/decidim/form_builder.rb +5 -5
  650. data/lib/decidim/hashtag.rb +1 -1
  651. data/lib/decidim/jsonb_attributes.rb +4 -4
  652. data/lib/decidim/manifest_messages.rb +2 -2
  653. data/lib/decidim/map/autocomplete.rb +0 -1
  654. data/lib/decidim/map/provider/dynamic_map/here.rb +40 -1
  655. data/lib/decidim/map/provider/static_map/here.rb +0 -34
  656. data/lib/decidim/nicknamizable.rb +1 -1
  657. data/lib/decidim/organization_settings.rb +5 -8
  658. data/lib/decidim/paddable.rb +1 -1
  659. data/lib/decidim/participable.rb +1 -1
  660. data/lib/decidim/participatory_space_manifest.rb +1 -1
  661. data/lib/decidim/participatory_space_user.rb +0 -4
  662. data/lib/decidim/query_extensions.rb +26 -0
  663. data/lib/decidim/reportable.rb +2 -6
  664. data/lib/decidim/resourceable.rb +1 -1
  665. data/lib/decidim/search_resource_fields_mapper.rb +2 -2
  666. data/lib/decidim/searchable.rb +3 -3
  667. data/lib/decidim/seeds.rb +62 -0
  668. data/lib/decidim/settings_manifest.rb +0 -2
  669. data/lib/decidim/stats_registry.rb +2 -2
  670. data/lib/decidim/translatable_attributes.rb +4 -13
  671. data/lib/decidim/translatable_resource.rb +1 -1
  672. data/lib/decidim/view_hooks.rb +1 -1
  673. data/lib/decidim/view_model.rb +4 -1
  674. data/lib/decidim/webpacker/esbuild.config.js +14 -0
  675. data/lib/decidim/webpacker/shakapacker.yml +2 -2
  676. data/lib/decidim/webpacker/tsconfig.json +11 -0
  677. data/lib/decidim/webpacker/webpack/custom.js +13 -35
  678. data/lib/devise/models/decidim_newsletterable.rb +1 -1
  679. data/lib/tasks/decidim_download_your_data_tasks.rake +2 -2
  680. data/lib/tasks/decidim_locales_tasks.rake +1 -1
  681. data/lib/tasks/decidim_mailers_tasks.rake +2 -2
  682. data/lib/tasks/decidim_metrics_tasks.rake +6 -6
  683. data/lib/tasks/decidim_procfile.rake +9 -3
  684. data/lib/tasks/decidim_tasks.rake +5 -4
  685. data/lib/tasks/decidim_webpacker_tasks.rake +126 -117
  686. data/lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake +80 -0
  687. data/lib/tasks/upgrade/decidim_content_blocks_tasks.rake +50 -0
  688. data/lib/tasks/upgrade/decidim_deduplicate_endorsements.rake +1 -1
  689. data/lib/tasks/upgrade/decidim_fix_categorization.rake +6 -132
  690. data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +20 -23
  691. data/lib/tasks/upgrade/decidim_fix_short_url_resolver.rake +1 -1
  692. data/lib/tasks/upgrade/decidim_moderation_tasks.rake +1 -1
  693. data/lib/tasks/upgrade/decidim_user_moderation.rake +1 -1
  694. metadata +220 -103
  695. data/app/cells/decidim/content_blocks/cta/show.erb +0 -12
  696. data/app/cells/decidim/content_blocks/cta_cell.rb +0 -31
  697. data/app/cells/decidim/footer_pages/pages.erb +0 -3
  698. data/app/cells/decidim/footer_pages/topics.erb +0 -12
  699. data/app/cells/decidim/footer_pages_cell.rb +0 -68
  700. data/app/controllers/concerns/decidim/direct_upload.rb +0 -82
  701. data/app/helpers/concerns/decidim/user_role_checker.rb +0 -46
  702. data/app/packs/src/decidim/remote_tooltips.js +0 -38
  703. data/app/packs/src/decidim/vendor/modernizr.js +0 -5
  704. data/app/packs/stylesheets/decidim/_hashtags.scss +0 -5
  705. data/app/queries/decidim/similar_emendations.rb +0 -56
  706. data/app/uploaders/decidim/cw/application_uploader.rb +0 -77
  707. data/app/uploaders/decidim/cw/attachment_uploader.rb +0 -56
  708. data/app/uploaders/decidim/cw/avatar_uploader.rb +0 -24
  709. data/app/uploaders/decidim/cw/banner_image_uploader.rb +0 -7
  710. data/app/uploaders/decidim/cw/download_your_data_uploader.rb +0 -15
  711. data/app/uploaders/decidim/cw/downloader.rb +0 -9
  712. data/app/uploaders/decidim/cw/hero_image_uploader.rb +0 -10
  713. data/app/uploaders/decidim/cw/homepage_image_uploader.rb +0 -14
  714. data/app/uploaders/decidim/cw/image_uploader.rb +0 -78
  715. data/app/uploaders/decidim/cw/newsletter_template_image_uploader.rb +0 -38
  716. data/app/uploaders/decidim/cw/oauth_application_logo_uploader.rb +0 -10
  717. data/app/uploaders/decidim/cw/official_image_footer_uploader.rb +0 -10
  718. data/app/uploaders/decidim/cw/official_image_header_uploader.rb +0 -10
  719. data/app/uploaders/decidim/cw/open_data_uploader.rb +0 -23
  720. data/app/uploaders/decidim/cw/organization_favicon_uploader.rb +0 -18
  721. data/app/uploaders/decidim/cw/organization_logo_uploader.rb +0 -10
  722. data/app/uploaders/decidim/cw/record_image_uploader.rb +0 -15
  723. data/app/uploaders/decidim/downloader.rb +0 -9
  724. data/app/views/decidim/amendments/compare_draft.html.erb +0 -18
  725. data/app/views/layouts/decidim/_edit_link.html.erb +0 -0
  726. data/app/views/layouts/decidim/header/_main_links_mobile.html.erb +0 -36
  727. data/config/initializers/carrierwave.rb +0 -15
  728. data/config/locales/bn-BD.yml +0 -1
  729. data/config/locales/bs-BA.yml +0 -100
  730. data/config/locales/ca-IT.yml +0 -2115
  731. data/lib/decidim/attributes/rich_text.rb +0 -38
  732. data/lib/decidim/carrier_wave_migrator_service.rb +0 -287
  733. data/lib/decidim/content_parsers/blob_parser.rb +0 -95
  734. data/lib/decidim/content_renderers/blob_renderer.rb +0 -90
  735. data/lib/decidim/seven_zip_wrapper.rb +0 -29
  736. data/lib/tasks/decidim_active_storage_migration_tasks.rake +0 -114
  737. data/lib/tasks/decidim_content_blocks_tasks.rake +0 -48
  738. data/lib/tasks/upgrade/decidim_attachments.rake +0 -14
  739. /data/app/views/layouts/decidim/header/{_menu_breadcrumb_main_dropdown.html.erb → _menu_breadcrumb_main_dropdown_desktop.html.erb} +0 -0
@@ -32,7 +32,7 @@ namespace :decidim do
32
32
  else
33
33
  puts " #{index}/#{users_count} !! [#{user_id}] DELETING USER"
34
34
  log.info " #{index}/#{users_count} !! [#{user_id}] DELETING USER"
35
- Decidim::DestroyAccount.call(user, Decidim::DeleteAccountForm.from_params({})) # Delete user!
35
+ Decidim::DestroyAccount.call(Decidim::DeleteAccountForm.from_params({}).with_context({ current_user: user })) # Delete user!
36
36
  end
37
37
  else
38
38
  puts " #{index}/#{users_count} - [#{user_id}] User not found"
@@ -55,7 +55,7 @@ namespace :decidim do
55
55
  end
56
56
  end
57
57
 
58
- desc "Check and notify users to update their newsletter notifications settings"
58
+ desc "Checks and notifies users to update their newsletter notifications settings"
59
59
  task check_users_newsletter_opt_in: :environment do
60
60
  print %(
61
61
  > This will send an email to all the users that have marked the newsletter by default. This should only be run if you were using Decidim before v0.11
@@ -21,7 +21,7 @@ namespace :decidim do
21
21
  end
22
22
  end
23
23
 
24
- desc "Rebuild the search index"
24
+ desc "Rebuilds the search index"
25
25
  task rebuild_search: :environment do
26
26
  Decidim::SearchableResource.destroy_all
27
27
  total = Decidim::Searchable.searchable_resources.count
@@ -2,12 +2,12 @@
2
2
 
3
3
  namespace :decidim do
4
4
  namespace :mailers do
5
- desc "Task to send the notification digest email with the daily report"
5
+ desc "Sends the notification digest email with the daily report"
6
6
  task notifications_digest_daily: :environment do
7
7
  notifications_digest(:daily)
8
8
  end
9
9
 
10
- desc "Task to send the notification digest email with the weekly report"
10
+ desc "Sends the notification digest email with the weekly report"
11
11
  task notifications_digest_weekly: :environment do
12
12
  notifications_digest(:weekly)
13
13
  end
@@ -7,7 +7,7 @@ namespace :decidim do
7
7
  # Get all metrics entities and execute its own rake task.
8
8
  # It admits a date-string parameter, in a 'YYYY-MM-DD' format from
9
9
  # today to all past dates
10
- desc "Execute all metrics calculation methods"
10
+ desc "Calculates all metrics"
11
11
  task :all, [:day] => :environment do |_task, args|
12
12
  Decidim::Organization.find_each do |organization|
13
13
  Decidim.metrics_registry.all.each do |metric_manifest|
@@ -21,7 +21,7 @@ namespace :decidim do
21
21
  # Execute metric calculations for just one metric
22
22
  # It need a metric name and permits a date-string parameter, in a 'YYYY-MM-DD' format from
23
23
  # today to all past dates
24
- desc "Execute one metric calculation method"
24
+ desc "Calculates one metric"
25
25
  task :one, [:metric, :day] => :environment do |_task, args|
26
26
  next if args.metric.blank?
27
27
 
@@ -31,7 +31,7 @@ namespace :decidim do
31
31
  end
32
32
  end
33
33
 
34
- desc "Rebuild calculations from specific day"
34
+ desc "Rebuilds calculations from specific day"
35
35
  task :rebuild, [:metric, :day] => :environment do |_task, args|
36
36
  metric = args.metric
37
37
  day = args.day
@@ -47,10 +47,10 @@ namespace :decidim do
47
47
  Decidim::Organization.find_each do |organization|
48
48
  if metric
49
49
  m_manifest = Decidim.metrics_registry.for(metric)
50
- log_info "[#{organization.name}]: rebuilding metric [#{metric}] for day [#{current_day}]"
50
+ log_info "[#{organization.name[organization.default_locale.to_s]}]: rebuilding metric [#{metric}] for day [#{current_day}]"
51
51
  call_metric_job(m_manifest, organization, current_day)
52
52
  else
53
- log_info "[#{organization.name}]: rebuilding all metrics for day [#{current_day}]"
53
+ log_info "[#{organization.name[organization.default_locale.to_s]}]: rebuilding all metrics for day [#{current_day}]"
54
54
  Decidim.metrics_registry.all.each do |metric_manifest|
55
55
  call_metric_job(metric_manifest, organization, current_day)
56
56
  end
@@ -63,7 +63,7 @@ namespace :decidim do
63
63
  end
64
64
  end
65
65
 
66
- desc "Show available metrics"
66
+ desc "Shows the available metrics"
67
67
  task list: :environment do
68
68
  puts Decidim.metrics_registry.all.pluck :metric_name
69
69
  end
@@ -4,7 +4,7 @@ require "thor"
4
4
 
5
5
  namespace :decidim do
6
6
  namespace :procfile do
7
- desc "Generates a dummy app for testing in external installations"
7
+ desc "Generates a script for starting the development app server"
8
8
  task :install do
9
9
  actions :create_file, "Procfile.dev", <<~RUBY
10
10
  web: bin/rails server -b 0.0.0.0 -p 3000
@@ -13,6 +13,12 @@ namespace :decidim do
13
13
 
14
14
  actions :create_file, "bin/dev", %(#!/usr/bin/env sh
15
15
 
16
+ set -e
17
+
18
+ bundle check || bundle install --jobs 20 --retry 5
19
+
20
+ bin/rails decidim:upgrade db:migrate
21
+
16
22
  if ! gem list foreman -i --silent; then
17
23
  echo "Installing foreman..."
18
24
  gem install foreman
@@ -29,8 +35,8 @@ exec foreman start -f Procfile.dev "$@")
29
35
  include Thor::Actions
30
36
  end
31
37
 
32
- def actions(*args)
33
- Actions.new.send(*args)
38
+ def actions(*)
39
+ Actions.new.send(*)
34
40
  end
35
41
  end
36
42
  end
@@ -1,16 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  namespace :decidim do
4
- desc "Install migrations from Decidim to the app."
4
+ desc "Performs upgrade tasks (migrations, node, docs )."
5
5
  task upgrade: [
6
6
  :choose_target_plugins,
7
7
  :"decidim:upgrade_app",
8
8
  :"railties:install:migrations",
9
- :"decidim:webpacker:upgrade",
9
+ :"decidim:upgrade:webpacker",
10
10
  :"decidim_api:generate_docs"
11
11
  ]
12
12
 
13
- desc "Setup environment so that only decidim migrations are installed."
13
+ task update: [:upgrade]
14
+
15
+ desc "Sets up environment so that only decidim migrations are installed."
14
16
  task :choose_target_plugins do
15
17
  ENV["FROM"] = %w(
16
18
  decidim
@@ -22,7 +24,6 @@ namespace :decidim do
22
24
  decidim_comments
23
25
  decidim_conferences
24
26
  decidim_debates
25
- decidim_elections
26
27
  decidim_forms
27
28
  decidim_initiatives
28
29
  decidim_meetings
@@ -12,12 +12,13 @@ namespace :decidim do
12
12
  remove_file_from_application "bin/yarn"
13
13
  remove_file_from_application "yarn.lock"
14
14
  remove_file_from_application "node_modules/.yarn-integrity"
15
- # Babel config
16
- copy_file_to_application "babel.config.json"
17
15
  # PostCSS configuration
18
16
  copy_file_to_application "decidim-core/lib/decidim/webpacker/postcss.config.js", "postcss.config.js"
19
17
 
20
- # Remnove the Webpacker config and deploy shakacpacker
18
+ copy_file_to_application "decidim-core/lib/decidim/webpacker/esbuild.config.js", "config/esbuild.config.js"
19
+ copy_file_to_application "decidim-core/lib/decidim/webpacker/tsconfig.json", "tsconfig.json"
20
+
21
+ # Remove the Webpacker config and deploy shakapacker
21
22
  migrate_shakapacker
22
23
 
23
24
  # Install JS dependencies
@@ -49,162 +50,173 @@ namespace :decidim do
49
50
  # Add the Browserslist configuration to the project
50
51
  add_decidim_browserslist_configuration
51
52
  end
53
+ end
52
54
 
53
- desc "Upgrade Decidim dependencies in Rails instance application"
54
- task upgrade: :environment do
55
+ namespace :upgrade do
56
+ desc "Upgrades Decidim webpacker dependencies in Rails instance application"
57
+ task webpacker: :environment do
55
58
  raise "Decidim gem is not installed" if decidim_path.nil?
56
59
 
57
60
  remove_file_from_application "bin/yarn"
58
61
 
59
- # Remnove the Webpacker config and deploy shakacpacker
62
+ unless File.exist?(rails_app_path.join("config/esbuild.config.js"))
63
+ copy_file_to_application "decidim-core/lib/decidim/webpacker/esbuild.config.js",
64
+ "config/esbuild.config.js"
65
+ end
66
+ unless File.exist?(rails_app_path.join("tsconfig.json"))
67
+ copy_file_to_application "decidim-core/lib/decidim/webpacker/tsconfig.json",
68
+ "tsconfig.json"
69
+ end
70
+
71
+ # Remove the Webpacker config and deploy shakapacker
60
72
  migrate_shakapacker
61
73
 
62
74
  # Update JS dependencies
63
75
  install_decidim_npm
64
76
  end
77
+ end
65
78
 
66
- def migrate_shakapacker
67
- remove_file_from_application "config/webpacker.yml"
68
- remove_file_from_application "bin/webpack"
69
- remove_file_from_application "bin/webpack-dev-server"
79
+ def migrate_shakapacker
80
+ remove_file_from_application "config/webpacker.yml"
81
+ remove_file_from_application "bin/webpack"
82
+ remove_file_from_application "bin/webpack-dev-server"
70
83
 
71
- unless File.exist?(rails_app_path.join("config/shakapacker.yml"))
72
- copy_file_to_application "decidim-core/lib/decidim/webpacker/shakapacker.yml", "config/shakapacker.yml"
73
- remove_folder_from_application "config/webpack"
74
- end
84
+ unless File.exist?(rails_app_path.join("config/shakapacker.yml"))
85
+ copy_file_to_application "decidim-core/lib/decidim/webpacker/shakapacker.yml", "config/shakapacker.yml"
86
+ remove_folder_from_application "config/webpack"
87
+ end
75
88
 
76
- copy_folder_to_application "decidim-core/lib/decidim/webpacker/webpack", "config"
89
+ copy_folder_to_application "decidim-core/lib/decidim/webpacker/webpack", "config"
77
90
 
78
- system!("bin/rails shakapacker:binstubs") unless File.exist?(rails_app_path.join("bin/shakapacker"))
91
+ system!("bin/rails shakapacker:binstubs") unless File.exist?(rails_app_path.join("bin/shakapacker"))
79
92
 
80
- # Modify the webpack binstubs
81
- add_binstub_load_path "bin/shakapacker"
82
- add_binstub_load_path "bin/shakapacker-dev-server"
83
- end
93
+ # Modify the webpack binstubs
94
+ add_binstub_load_path "bin/shakapacker"
95
+ add_binstub_load_path "bin/shakapacker-dev-server"
96
+ end
84
97
 
85
- def install_decidim_npm
86
- decidim_npm_packages.each do |type, packages|
87
- system! "npm i --save-#{type} #{packages.join(" ")}"
88
- end
98
+ def install_decidim_npm
99
+ decidim_npm_packages.each do |type, packages|
100
+ system! "npm i --save-#{type} #{packages.join(" ")}"
89
101
  end
102
+ end
90
103
 
91
- def add_decidim_browserslist_configuration
92
- package = JSON.parse(File.read(rails_app_path.join("package.json")))
93
- return if package["browserslist"].is_a?(Array) && package["browserslist"].include?("extends @decidim/browserslist-config")
104
+ def add_decidim_browserslist_configuration
105
+ package = JSON.parse(File.read(rails_app_path.join("package.json")))
106
+ return if package["browserslist"].is_a?(Array) && package["browserslist"].include?("extends @decidim/browserslist-config")
94
107
 
95
- package["browserslist"] = ["extends @decidim/browserslist-config"]
96
- File.write(rails_app_path.join("package.json"), JSON.pretty_generate(package))
97
- end
108
+ package["browserslist"] = ["extends @decidim/browserslist-config"]
109
+ File.write(rails_app_path.join("package.json"), JSON.pretty_generate(package))
110
+ end
98
111
 
99
- def decidim_npm_packages
100
- gem_path = unreleased_gem_path
101
-
102
- if gem_path
103
- package_spec = "./packages/%s"
104
-
105
- # The packages folder needs to be copied to the application folder
106
- # because the linked dependencies are not installed when packages
107
- # are installed using file references outside the application root
108
- # where the `package.json` is located at. For more information, see:
109
- # https://github.com/npm/cli/issues/2339
110
- FileUtils.rm_rf(rails_app_path.join("packages"))
111
- FileUtils.cp_r(gem_path.join("packages"), rails_app_path)
112
- else
113
- package_spec = "@decidim/%s@~#{Decidim::GemManager.semver_friendly_version(decidim_gemspec.version.to_s)}"
114
- end
112
+ def decidim_npm_packages
113
+ gem_path = unreleased_gem_path
115
114
 
116
- local_npm_dependencies.transform_values { |names| names.map { |name| format(package_spec, name) } }
115
+ if gem_path
116
+ package_spec = "./packages/%s"
117
+
118
+ # The packages folder needs to be copied to the application folder
119
+ # because the linked dependencies are not installed when packages
120
+ # are installed using file references outside the application root
121
+ # where the `package.json` is located at. For more information, see:
122
+ # https://github.com/npm/cli/issues/2339
123
+ FileUtils.rm_rf(rails_app_path.join("packages"))
124
+ FileUtils.cp_r(gem_path.join("packages"), rails_app_path)
125
+ else
126
+ package_spec = "@decidim/%s@~#{Decidim::GemManager.semver_friendly_version(decidim_gemspec.version.to_s)}"
117
127
  end
118
128
 
119
- def unreleased_gem_path
120
- if decidim_gemspec.source.is_a?(Bundler::Source::Rubygems)
121
- return if released_version?
129
+ local_npm_dependencies.transform_values { |names| names.map { |name| format(package_spec, name) } }
130
+ end
122
131
 
123
- gem_path = Pathname(decidim_gemspec.full_gem_path)
124
- else
125
- gem_path = decidim_gemspec.source.path
126
- gem_path = Pathname(ENV.fetch("BUNDLE_GEMFILE", nil)).dirname.join(gem_path) if gem_path.relative?
127
- end
132
+ def unreleased_gem_path
133
+ if decidim_gemspec.source.is_a?(Bundler::Source::Rubygems)
134
+ return if released_version?
128
135
 
129
- gem_path
136
+ gem_path = Pathname(decidim_gemspec.full_gem_path)
137
+ else
138
+ gem_path = decidim_gemspec.source.path
139
+ gem_path = Pathname(ENV.fetch("BUNDLE_GEMFILE", nil)).dirname.join(gem_path) if gem_path.relative?
130
140
  end
131
141
 
132
- def local_npm_dependencies
133
- @local_npm_dependencies ||= begin
134
- package_json = JSON.parse(File.read(decidim_path.join("package.json")))
135
-
136
- {
137
- prod: local_npm_dependencies_list(package_json["dependencies"]),
138
- dev: local_npm_dependencies_list(package_json["devDependencies"])
139
- }.freeze
140
- end
141
- end
142
+ gem_path
143
+ end
142
144
 
143
- def local_npm_dependencies_list(deps)
144
- return [] unless deps
145
+ def local_npm_dependencies
146
+ @local_npm_dependencies ||= begin
147
+ package_json = JSON.parse(File.read(decidim_path.join("package.json")))
145
148
 
146
- deps.values
147
- .select { |ref| ref.starts_with?("file:packages/") }
148
- .map { |ref| ref.delete_prefix("file:packages/") }
149
+ {
150
+ prod: local_npm_dependencies_list(package_json["dependencies"]),
151
+ dev: local_npm_dependencies_list(package_json["devDependencies"])
152
+ }.freeze
149
153
  end
154
+ end
150
155
 
151
- def decidim_path
152
- @decidim_path ||= Pathname.new(decidim_gemspec.full_gem_path) if Gem.loaded_specs.has_key?("decidim")
153
- end
156
+ def local_npm_dependencies_list(deps)
157
+ return [] unless deps
154
158
 
155
- def decidim_gemspec
156
- @decidim_gemspec ||= Gem.loaded_specs["decidim"]
157
- end
159
+ deps.values
160
+ .select { |ref| ref.starts_with?("file:packages/") }
161
+ .map { |ref| ref.delete_prefix("file:packages/") }
162
+ end
158
163
 
159
- def released_version?
160
- decidim_gemspec.version.segments.last != "dev"
161
- end
164
+ def decidim_path
165
+ @decidim_path ||= Pathname.new(decidim_gemspec.full_gem_path) if Gem.loaded_specs.has_key?("decidim")
166
+ end
162
167
 
163
- def rails_app_path
164
- @rails_app_path ||= Rails.root
165
- end
168
+ def decidim_gemspec
169
+ @decidim_gemspec ||= Gem.loaded_specs["decidim"]
170
+ end
166
171
 
167
- def copy_file_to_application(origin_path, destination_path = origin_path)
168
- FileUtils.cp(decidim_path.join(origin_path), rails_app_path.join(destination_path))
169
- end
172
+ def released_version?
173
+ decidim_gemspec.version.segments.last != "dev"
174
+ end
170
175
 
171
- def copy_folder_to_application(origin_path, destination_path = origin_path)
172
- FileUtils.cp_r(decidim_path.join(origin_path), rails_app_path.join(destination_path))
173
- end
176
+ def rails_app_path
177
+ @rails_app_path ||= Rails.root
178
+ end
174
179
 
175
- def remove_file_from_application(path)
176
- FileUtils.rm(path, force: true)
177
- end
180
+ def copy_file_to_application(origin_path, destination_path = origin_path)
181
+ FileUtils.cp(decidim_path.join(origin_path), rails_app_path.join(destination_path))
182
+ end
178
183
 
179
- def remove_folder_from_application(path)
180
- FileUtils.rm_rf(path)
181
- end
184
+ def copy_folder_to_application(origin_path, destination_path = origin_path)
185
+ FileUtils.cp_r(decidim_path.join(origin_path), rails_app_path.join(destination_path))
186
+ end
182
187
 
183
- def add_binstub_load_path(binstub_path)
184
- file = rails_app_path.join(binstub_path)
185
- lines = File.readlines(file)
188
+ def remove_file_from_application(path)
189
+ FileUtils.rm(path, force: true)
190
+ end
186
191
 
187
- # Skip if the load path is already added
188
- return if lines.grep(
189
- %r{^\$LOAD_PATH.unshift "#\{Gem.loaded_specs\["decidim-core"\].full_gem_path\}/lib/gem_overrides"$}
190
- ).size.positive?
192
+ def remove_folder_from_application(path)
193
+ FileUtils.rm_rf(path)
194
+ end
191
195
 
192
- contents = ""
193
- lines.each do |line|
194
- contents += line
195
- next unless line =~ %r{^require "bundler/setup"$}
196
+ def add_binstub_load_path(binstub_path)
197
+ file = rails_app_path.join(binstub_path)
198
+ lines = File.readlines(file)
196
199
 
197
- contents += "\n"
198
- contents += "# Add the Decidim override load path to override webpacker functionality\n"
199
- contents += "$LOAD_PATH.unshift \"\#{Gem.loaded_specs[\"decidim-core\"].full_gem_path}/lib/gem_overrides\"\n"
200
- end
200
+ # Skip if the load path is already added
201
+ return if lines.grep(
202
+ %r{^\$LOAD_PATH.unshift "#\{Gem.loaded_specs\["decidim-core"\].full_gem_path\}/lib/gem_overrides"$}
203
+ ).size.positive?
201
204
 
202
- File.write(file, contents)
203
- end
205
+ contents = ""
206
+ lines.each do |line|
207
+ contents += line
208
+ next unless line =~ %r{^require "bundler/setup"$}
204
209
 
205
- def system!(command)
206
- system("cd #{rails_app_path} && #{command}") || abort("\n== Command #{command} failed ==")
210
+ contents += "\n"
211
+ contents += "# Add the Decidim override load path to override webpacker functionality\n"
212
+ contents += "$LOAD_PATH.unshift \"\#{Gem.loaded_specs[\"decidim-core\"].full_gem_path}/lib/gem_overrides\"\n"
207
213
  end
214
+
215
+ File.write(file, contents)
216
+ end
217
+
218
+ def system!(command)
219
+ system("cd #{rails_app_path} && #{command}") || abort("\n== Command #{command} failed ==")
208
220
  end
209
221
  end
210
222
 
@@ -218,9 +230,6 @@ if (config_path = Decidim::Webpacker.configuration.configuration_file)
218
230
  )
219
231
  end
220
232
 
221
- # Remove the yarn install prerequisity from assets:precompile
222
- Rake::Task["assets:precompile"].prerequisites.delete("shakapacker:yarn_install")
223
-
224
233
  # Add gem overrides path to the beginning in order to override rake tasks
225
234
  # Needed because of a bug in Rails 6.0 (see the overridden task for details)
226
235
  $LOAD_PATH.unshift "#{Gem.loaded_specs["decidim-core"].full_gem_path}/lib/gem_overrides"
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :decidim do
4
+ namespace :upgrade do
5
+ namespace :active_storage_migrations do
6
+ desc "Migrates inline images to ActiveStorage editor_image attachments"
7
+ task :migrate_inline_images_to_active_storage, [:admin_email] => :environment do |_t, args|
8
+ user = Decidim::User.find_by(email: args[:admin_email])
9
+
10
+ raise "Invalid admin. Please, provide the email of an admin with permissions to create editor images" unless user&.admin? && user&.admin_terms_accepted?
11
+
12
+ inline_images_available_attributes.each do |model, attributes|
13
+ puts "=== Updating model #{model.name} (attributes: #{attributes.join(", ")})..."
14
+ model.all.each do |item|
15
+ attributes.each do |attribute|
16
+ item.update(attribute => rewrite_value(item.send(attribute), user))
17
+ end
18
+ end
19
+ puts "=== Finished update of model #{model.name}\n\n"
20
+ end
21
+ end
22
+
23
+ def rewrite_value(value, user)
24
+ if value.is_a?(Hash)
25
+ value.transform_values do |nested_value|
26
+ rewrite_value(nested_value, user)
27
+ end
28
+ else
29
+ parser = Decidim::ContentParsers::InlineImagesParser.new(value, user:)
30
+ parser.rewrite
31
+ end
32
+ end
33
+
34
+ def inline_images_available_attributes
35
+ {
36
+ "Decidim::Accountability::Result" => %w(description),
37
+ "Decidim::Proposals::Proposal" => %w(body answer cost_report execution_period),
38
+ "Decidim::Votings::Voting" => %w(description),
39
+ "Decidim::Elections::Question" => %w(description),
40
+ "Decidim::Elections::Answer" => %w(description),
41
+ "Decidim::Elections::Election" => %w(description),
42
+ "Decidim::Initiative" => %w(description answer),
43
+ "Decidim::InitiativesType" => %w(description extra_fields_legal_information),
44
+ "Decidim::Assembly" => %w(short_description description purpose_of_action composition internal_organisation announcement closing_date_reason special_features),
45
+ "Decidim::Forms::Questionnaire" => %w(description tos),
46
+ "Decidim::Forms::Question" => %w(description),
47
+ "Decidim::Organization" => %w(
48
+ welcome_notification_body
49
+ admin_terms_of_use_body
50
+ admin_terms_of_service_body
51
+ description
52
+ highlighted_content_banner_short_description
53
+ id_documents_explanation_text
54
+ ),
55
+ "Decidim::StaticPage" => %w(content),
56
+ "Decidim::ContextualHelpSection" => %w(content),
57
+ "Decidim::Category" => %w(description),
58
+ "Decidim::Blogs::Post" => %w(body),
59
+ "Decidim::Pages::Page" => %w(body),
60
+ "Decidim::Sortitions::Sortition" => %w(additional_info witnesses cancel_reason),
61
+ "Decidim::Debates::Debate" => %w(description instructions information_updates conclusions),
62
+ "Decidim::Budgets::Budget" => %w(description),
63
+ "Decidim::Budgets::Project" => %w(description),
64
+ "Decidim::ConferenceSpeaker" => %w(short_bio),
65
+ "Decidim::Conferences::RegistrationType" => %w(description),
66
+ "Decidim::Conference" => %w(short_description description objectives registration_terms),
67
+ "Decidim::ParticipatoryProcessGroup" => %w(description),
68
+ "Decidim::ParticipatoryProcess" => %w(short_description description announcement),
69
+ "Decidim::ParticipatoryProcessStep" => %w(description),
70
+ "Decidim::Meetings::AgendaItem" => %w(description),
71
+ "Decidim::Meetings::Meeting" => %w(registration_terms description registration_email_custom_content closing_report)
72
+ }.each_with_object({}) do |(main_model, attributes), hash|
73
+ hash[main_model.constantize] = attributes
74
+ rescue NameError
75
+ hash
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :decidim do
4
+ namespace :upgrade do
5
+ namespace :content_blocks do
6
+ desc "Initializes a default set of content blocks for each space whose landing page uses content blocks"
7
+ task :initialize_default_content_blocks, [:manifest_name, :space_id, :include_components] => :environment do |_task, args|
8
+ manifest_name = args[:manifest_name]
9
+ space_id = args[:space_id]&.to_i
10
+
11
+ raise "Please, provide a valid manifest name to find the space by id" if space_id.present? && manifest_name.blank?
12
+
13
+ include_components = args[:include_components] == "true"
14
+
15
+ valid_manifests = manifests_with_content_blocks
16
+ valid_manifests = valid_manifests.select { |manifest| manifest.name.to_s == manifest_name.to_s } if manifest_name.present?
17
+
18
+ raise "The #{manifest_name} spaces do not exist or have content blocks" if manifest_name.present? && valid_manifests.blank?
19
+
20
+ valid_manifests.each do |manifest|
21
+ spaces = resources_for(manifest)
22
+ spaces = spaces.select { |space| space.id == space_id } if space_id.present?
23
+
24
+ spaces.each do |space|
25
+ content_blocks_creator = Decidim::ContentBlocksCreator.new(space)
26
+ content_blocks_creator.create_default!
27
+
28
+ content_blocks_creator.create_components_blocks! if include_components
29
+ end
30
+ end
31
+ end
32
+
33
+ def manifests_with_content_blocks
34
+ [
35
+ Decidim.participatory_space_manifests,
36
+ Decidim.resource_manifests
37
+ ].map do |manifests|
38
+ manifests.select { |manifest| manifest.content_blocks_scope_name.present? }
39
+ end.flatten
40
+ end
41
+
42
+ def resources_for(manifest)
43
+ return manifest.participatory_spaces.call(Decidim::Organization.all) if manifest.respond_to?(:participatory_spaces)
44
+ return manifest.model_class.all if manifest.respond_to?(:model_class)
45
+
46
+ []
47
+ end
48
+ end
49
+ end
50
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  namespace :decidim do
4
4
  namespace :upgrade do
5
- desc "Remove duplicated endorsements"
5
+ desc "Removes duplicated endorsements"
6
6
  task fix_duplicate_endorsements: :environment do
7
7
  logger = Logger.new($stdout)
8
8
  logger.info("Removing duplicate endorsements...")