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
@@ -37,22 +37,13 @@ module Decidim
37
37
  end
38
38
  end
39
39
 
40
- # Converts the blob and blob variant references to blob URLs.
41
- def decidim_rich_text(html, options = {})
42
- renderer = Decidim::ContentProcessor.renderer_klass(:blob).constantize.new(html)
43
- renderer.render(options)
44
- end
45
-
46
40
  def decidim_sanitize_editor(html, options = {})
47
41
  content_tag(:div, decidim_sanitize(html, options), class: %w(rich-text-display))
48
42
  end
49
43
 
50
44
  def decidim_sanitize_editor_admin(html, options = {})
51
45
  html = Decidim::IframeDisabler.new(html, options).perform
52
- decidim_sanitize_editor(
53
- decidim_rich_text(html),
54
- { scrubber: Decidim::AdminInputScrubber.new }.merge(options)
55
- )
46
+ decidim_sanitize_editor(html, { scrubber: Decidim::AdminInputScrubber.new }.merge(options))
56
47
  end
57
48
 
58
49
  def decidim_html_escape(text)
@@ -60,7 +51,7 @@ module Decidim
60
51
  end
61
52
 
62
53
  def decidim_url_escape(text)
63
- decidim_html_escape(text).sub(/^\s*javascript:/, "")
54
+ decidim_html_escape(text).sub(/^javascript:/, "")
64
55
  end
65
56
 
66
57
  def decidim_sanitize_translated(text)
@@ -9,7 +9,7 @@ module Decidim
9
9
  Option = Struct.new(:id, :name)
10
10
 
11
11
  # Checks if the resource should show its scope or not.
12
- # resource - the resource to analize
12
+ # resource - the resource to analyze
13
13
  #
14
14
  # Returns boolean.
15
15
  def has_visible_scopes?(resource)
@@ -53,14 +53,13 @@ module Decidim
53
53
  # options - An optional Hash with options:
54
54
  #
55
55
  # Returns nothing.
56
- def scopes_select_field(form, name, root: false, options: {}, html_options: {})
56
+ def scopes_select_field(form, name, root: false, options: {})
57
57
  options = options.merge(include_blank: I18n.t("decidim.scopes.prompt")) unless options.has_key?(:include_blank)
58
58
 
59
59
  form.select(
60
60
  name,
61
61
  ordered_scopes_descendants_for_select(root),
62
- options,
63
- html_options
62
+ options
64
63
  )
65
64
  end
66
65
 
@@ -7,7 +7,7 @@ module Decidim
7
7
  #
8
8
  # klass_name - a String representing the class name of the resource to render
9
9
  # count - (optional) the number of resources so that the I18n backend
10
- # can decide to translate into singluar or plural form.
10
+ # can decide to translate into singular or plural form.
11
11
  def searchable_resource_human_name(resource, count: 5)
12
12
  resource = if resource.is_a?(String)
13
13
  resource.constantize
@@ -15,14 +15,14 @@ module Decidim
15
15
  # @option kwargs [Float] :params the URL query parameters that should be
16
16
  # included in the URL where the short link redirects to
17
17
  # @return [String] The short URL
18
- def short_url(**kwargs)
18
+ def short_url(**)
19
19
  target = respond_to?(:current_component) && current_component
20
20
  target ||= respond_to?(:current_participatory_space) && current_participatory_space
21
21
  target ||= respond_to?(:current_organization) && current_organization
22
22
  target ||= Rails.application
23
23
 
24
24
  mounted_engine = target.try(:mounted_engine) || EngineResolver.new(_routes).mounted_name
25
- ShortLink.to(target, mounted_engine, **kwargs).short_url
25
+ ShortLink.to(target, mounted_engine, **).short_url
26
26
  end
27
27
  end
28
28
  end
@@ -14,10 +14,10 @@ module Decidim
14
14
  # options - Any other option to delegate to the individual I18n.t calls
15
15
  #
16
16
  # Returns a Hash with the locales as keys and the translations as values.
17
- def multi_translation(key, locales = Decidim.available_locales, **options)
17
+ def multi_translation(key, locales = Decidim.available_locales, **)
18
18
  locales.each_with_object({}) do |locale, result|
19
19
  I18n.with_locale(locale) do
20
- result[locale.to_sym] = I18n.t(key, **options)
20
+ result[locale.to_sym] = I18n.t(key, **)
21
21
  end
22
22
  end
23
23
  end
@@ -4,7 +4,7 @@ module Decidim
4
4
  module TwitterSearchHelper
5
5
  # Builds the URL for Twitter's hashtag search.
6
6
  #
7
- # @param hashtag [String] The hasthag to search
7
+ # @param hashtag [String] The hashtag to search
8
8
  #
9
9
  # @return [String]
10
10
  def twitter_hashtag_url(hashtag)
@@ -14,7 +14,6 @@ module Decidim
14
14
  #
15
15
  # Returns a String with the menu tab.
16
16
  def user_profile_tab(text, link, options = {})
17
- cls = %w(tabs-title)
18
17
  aria = {}
19
18
  if is_active_link?(link, (options[:aria_link_type] || :inclusive))
20
19
  cls << "is-active"
@@ -8,10 +8,10 @@ module Decidim
8
8
  user = Decidim::User.find_by(id: user_id)
9
9
  return if user.blank?
10
10
 
11
- should_notify = force || NotificationsDigestSendingDecider.must_notify?(user, time:)
11
+ should_notify = force || NotificationsDigestSendingDecider.must_notify?(user, time)
12
12
  return unless should_notify
13
13
 
14
- notification_ids = user.notifications.try(frequency, time:).pluck(:id)
14
+ notification_ids = user.notifications.try(frequency, time).pluck(:id)
15
15
  return if notification_ids.blank?
16
16
 
17
17
  NotificationsDigestMailer.digest_mail(user, notification_ids).deliver_later
@@ -6,6 +6,10 @@ module Decidim
6
6
  class ApplicationMailer < ActionMailer::Base
7
7
  include LocalisedMailer
8
8
  include MultitenantAssetHost
9
+ include Decidim::SanitizeHelper
10
+ include Decidim::OrganizationHelper
11
+ helper_method :organization_name, :decidim_escape_translated, :decidim_sanitize_translated, :translated_attribute, :decidim_sanitize, :decidim_sanitize_newsletter
12
+
9
13
  after_action :set_smtp
10
14
  after_action :set_from
11
15
 
@@ -44,11 +48,11 @@ module Decidim
44
48
  smtp_settings_from = organization.smtp_settings["from"]
45
49
  return smtp_settings_from if already_defined_name_in_mail?(smtp_settings_from)
46
50
 
47
- email_address_with_name(smtp_settings_from, organization.name)
51
+ email_address_with_name(smtp_settings_from, organization_name(organization))
48
52
  end
49
53
 
50
54
  def default_sender
51
- email_address_with_name(Decidim.config.mailer_sender, organization.name)
55
+ email_address_with_name(Decidim.config.mailer_sender, organization_name(organization))
52
56
  end
53
57
 
54
58
  def already_defined_name_in_mail?(mail_address)
@@ -11,7 +11,7 @@ module Decidim
11
11
  @justification = justification
12
12
  subject = I18n.t(
13
13
  "decidim.block_user_mailer.notify.subject",
14
- organization_name: @organization.name,
14
+ organization_name: organization_name(@organization),
15
15
  justification: @justification
16
16
  )
17
17
 
@@ -5,6 +5,8 @@ module Decidim
5
5
  # each role and use a localised version.
6
6
  class DecidimDeviseMailer < ::Devise::Mailer
7
7
  include LocalisedMailer
8
+ include Decidim::SanitizeHelper
9
+ helper_method :decidim_escape_translated, :decidim_sanitize_translated, :translated_attribute
8
10
 
9
11
  layout "decidim/mailer"
10
12
 
@@ -19,7 +21,11 @@ module Decidim
19
21
  @organization = user.organization
20
22
  @opts = opts
21
23
 
22
- opts[:subject] = I18n.t("devise.mailer.#{opts[:invitation_instructions]}.subject", organization: user.organization.name) if opts[:invitation_instructions]
24
+ if opts[:invitation_instructions]
25
+ opts[:subject] =
26
+ I18n.t("devise.mailer.#{opts[:invitation_instructions]}.subject",
27
+ organization: organization_name(user.organization))
28
+ end
23
29
  end
24
30
 
25
31
  devise_mail(user, opts[:invitation_instructions] || :invitation_instructions, opts)
@@ -2,16 +2,13 @@
2
2
 
3
3
  module Decidim
4
4
  class NewsletterMailer < ApplicationMailer
5
- helper Decidim::SanitizeHelper
6
- helper Decidim::TranslationsHelper
7
-
8
5
  include Decidim::NewslettersHelper
9
6
 
10
7
  layout "decidim/newsletter_base"
11
8
 
12
9
  helper_method :cell
13
10
 
14
- def newsletter(user, newsletter, preview: false)
11
+ def newsletter(user, newsletter, preview = nil)
15
12
  return if user.email.blank?
16
13
 
17
14
  @organization = user.organization
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Decidim
4
4
  # A custom mailer for Decidim so we can notify users to verify
5
- # their own newsletter notifications settings. GDPR releated
5
+ # their own newsletter notifications settings. GDPR related
6
6
  class NewslettersOptInMailer < ApplicationMailer
7
7
  def notify(user, token)
8
8
  with_user(user) do
@@ -10,7 +10,7 @@ module Decidim
10
10
  @organization = user.organization
11
11
  @token = token
12
12
 
13
- mail(to: user.email, subject: I18n.t("decidim.newsletters_opt_in_mailer.notify.subject", organization_name: @organization.name))
13
+ mail(to: user.email, subject: I18n.t("decidim.newsletters_opt_in_mailer.notify.subject", organization_name: organization_name(@organization)))
14
14
  end
15
15
  end
16
16
  end
@@ -5,7 +5,6 @@ module Decidim
5
5
  # a events are received.
6
6
  class NotificationMailer < Decidim::ApplicationMailer
7
7
  helper Decidim::ResourceHelper
8
- helper Decidim::SanitizeHelper
9
8
 
10
9
  def event_received(event, event_class_name, resource, user, user_role, extra) # rubocop:disable Metrics/ParameterLists
11
10
  with_user(user) do
@@ -5,7 +5,6 @@ module Decidim
5
5
  # a events are received.
6
6
  class NotificationsDigestMailer < Decidim::ApplicationMailer
7
7
  helper Decidim::ResourceHelper
8
- helper Decidim::SanitizeHelper
9
8
  SIZE_LIMIT = 10
10
9
 
11
10
  def digest_mail(user, notification_ids)
@@ -1,10 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
- # A custom mailer for sending notifications to an admin when a report is created..
4
+ # A custom mailer for sending notifications to an admin when a report is created.
5
5
  class ReportedMailer < Decidim::ApplicationMailer
6
6
  helper Decidim::ResourceHelper
7
- helper Decidim::TranslationsHelper
8
7
 
9
8
  helper_method :reported_content_url, :report_url, :manage_moderations_url, :author_profile_url, :reported_content_cell
10
9
 
@@ -38,6 +37,10 @@ module Decidim
38
37
  @organization
39
38
  end
40
39
 
40
+ def current_user
41
+ @user
42
+ end
43
+
41
44
  private
42
45
 
43
46
  def reported_content_url
@@ -63,7 +66,7 @@ module Decidim
63
66
  end
64
67
 
65
68
  # This is needed to be able to use a cell in an ActionMailer, which is not supported out of the box by cells-rails.
66
- # We are are passing the current object as if it was a controller.
69
+ # We are passing the current object as if it was a controller.
67
70
  # We also need to define a 'current_organization' method, which is expected by Decidim::ViewModel.
68
71
  # A similar approach is used in Decidim::NewsletterMailer
69
72
  def reported_content_cell
@@ -11,7 +11,7 @@ module Decidim
11
11
  with_user(admin) do
12
12
  mail(to: admin.email, subject: I18n.t(
13
13
  "decidim.user_report_mailer.notify.subject",
14
- organization_name: report.moderation.user.organization.name,
14
+ organization_name: organization_name(report.moderation.user.organization),
15
15
  reason: @report.reason
16
16
  ))
17
17
  end
@@ -138,7 +138,6 @@ module Decidim
138
138
  Decidim::Proposals::Proposal
139
139
  Decidim::Surveys::Survey
140
140
  Decidim::Assembly
141
- Decidim::Conference
142
141
  Decidim::Initiative
143
142
  Decidim::ParticipatoryProcess
144
143
  ).select do |klass|
@@ -155,16 +154,7 @@ module Decidim
155
154
  end
156
155
 
157
156
  def self.publicable_public_resource_types
158
- @publicable_public_resource_types ||= public_resource_types
159
- .select { |klass| klass.constantize.column_names.include?("published_at") } - publicable_exceptions
160
- end
161
-
162
- def self.publicable_exceptions
163
- @publicable_exceptions = %w(
164
- Decidim::Blogs::Post
165
- ).select do |klass|
166
- klass.safe_constantize.present?
167
- end
157
+ @publicable_public_resource_types ||= public_resource_types.select { |klass| klass.constantize.column_names.include?("published_at") }
168
158
  end
169
159
 
170
160
  def self.ransackable_scopes(auth_object = nil)
@@ -204,7 +194,7 @@ module Decidim
204
194
  # as a regular object.
205
195
  def participatory_space_lazy(cache: true)
206
196
  return if participatory_space_id.blank? || participatory_space_type.blank?
207
- return resouce_lazy if participatory_space_id == resource_id && participatory_space_type == resource_type
197
+ return resource_lazy if participatory_space_id == resource_id && participatory_space_type == resource_type
208
198
 
209
199
  self.class.lazy_relation(participatory_space_id, participatory_space_type, cache)
210
200
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Decidim
4
4
  # Area types allows to use different types of areas in participatory space
5
- # (terriotrial, sectorial, etc.)
5
+ # (territorial, sectorial, etc.)
6
6
  class AreaType < ApplicationRecord
7
7
  include Decidim::TranslatableResource
8
8
  include Decidim::Traceable
@@ -9,6 +9,7 @@ module Decidim
9
9
  include Traceable
10
10
 
11
11
  before_save :set_content_type_and_size, if: :attached?
12
+ before_validation :set_link_content_type_and_size, if: :link?
12
13
 
13
14
  translatable_fields :title, :description
14
15
  belongs_to :attachment_collection, class_name: "Decidim::AttachmentCollection", optional: true
@@ -61,15 +62,33 @@ module Decidim
61
62
  !photo?
62
63
  end
63
64
 
65
+ # Whether this attachment is a link or not.
66
+ #
67
+ # Returns Boolean.
68
+ def link?
69
+ link.present?
70
+ end
71
+
64
72
  # Which kind of file this is.
65
73
  #
66
74
  # Returns String.
67
75
  def file_type
68
- url&.split(".")&.last&.split("&")&.first&.downcase
76
+ if file?
77
+ url&.split(".")&.last&.downcase
78
+ elsif link?
79
+ "link"
80
+ end
69
81
  end
70
82
 
83
+ # The URL that points to the attachment
84
+ #
85
+ # Returns String.
71
86
  def url
72
- attached_uploader(:file).url
87
+ if file?
88
+ attached_uploader(:file).path
89
+ elsif link?
90
+ link
91
+ end
73
92
  end
74
93
 
75
94
  # The URL to download the thumbnail of the file. Only works with images.
@@ -78,7 +97,7 @@ module Decidim
78
97
  def thumbnail_url
79
98
  return unless photo?
80
99
 
81
- @thumbnail_url ||= attached_uploader(:file).variant_url(:thumbnail)
100
+ attached_uploader(:file).path(variant: :thumbnail)
82
101
  end
83
102
 
84
103
  # The URL to download the a big version of the file. Only works with images.
@@ -87,7 +106,7 @@ module Decidim
87
106
  def big_url
88
107
  return unless photo?
89
108
 
90
- @big_url ||= attached_uploader(:file).variant_url(:big)
109
+ attached_uploader(:file).path(variant: :big)
91
110
  end
92
111
 
93
112
  def set_content_type_and_size
@@ -95,6 +114,11 @@ module Decidim
95
114
  self.file_size = file.byte_size
96
115
  end
97
116
 
117
+ def set_link_content_type_and_size
118
+ self.content_type = "text/uri-list"
119
+ self.file_size = 0
120
+ end
121
+
98
122
  def self.log_presenter_class_for(_log)
99
123
  Decidim::AdminLog::AttachmentPresenter
100
124
  end
@@ -101,7 +101,7 @@ module Decidim
101
101
  @workflow_manifest ||= Decidim::Verifications.find_workflow_manifest(name)
102
102
  end
103
103
 
104
- # Calculates when this authorization can be reseted, if desired.
104
+ # Calculates when this authorization can be reset, if desired.
105
105
  #
106
106
  # **time_between_renewals** is defined in `workflow_manifest.time_between_renewals`
107
107
  # defaults to 1 day
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rubocop:disable Rails/HelperInstanceVariable
3
4
  module Decidim
4
5
  # An authorization transfer object is created when the user authorizes
5
6
  # themselves with the same unique ID as some other user had used in the past.
@@ -14,10 +14,7 @@ module Decidim
14
14
 
15
15
  belongs_to :participatory_space, polymorphic: true
16
16
 
17
- scope :registered_component_manifests, -> { where(manifest_name: Decidim.component_registry.manifests.collect(&:name)) }
18
- scope :registered_space_manifests, -> { where(participatory_space_type: Decidim.participatory_space_registry.manifests.collect(&:model_class_name)) }
19
-
20
- default_scope { registered_component_manifests.registered_space_manifests.order(arel_table[:weight].asc, arel_table[:manifest_name].asc) }
17
+ default_scope { order(arel_table[:weight].asc, arel_table[:manifest_name].asc) }
21
18
 
22
19
  delegate :organization, :categories, to: :participatory_space
23
20
 
@@ -59,8 +56,8 @@ module Decidim
59
56
  # Public: The hash of contextual params when the component is mounted.
60
57
  def mounted_params
61
58
  {
62
- host: organization.host,
63
- component_id: id,
59
+ :host => organization.host,
60
+ :component_id => id,
64
61
  "#{participatory_space.underscored_name}_slug".to_sym => participatory_space.slug
65
62
  }
66
63
  end
@@ -60,8 +60,8 @@ module Decidim
60
60
  #
61
61
  # # This is how you can access the image data, just like with any other
62
62
  # # uploader field. You can use the uploader variants too.
63
- # content_block.images_container.attached_uploader(:my_image).url
64
- # content_block.images_container.attached_uploader(:my_image).variant_url(:big)
63
+ # content_block.images_container.attached_uploader(:my_image).path
64
+ # content_block.images_container.attached_uploader(:my_image).path(variant: :big)
65
65
  #
66
66
  # # This will delete the attached image
67
67
  # content_block.images_container.my_image = nil
@@ -134,7 +134,7 @@ module Decidim
134
134
  images_container.save
135
135
  end
136
136
 
137
- # On instance reloading we need to remove the `images_cointainer` cached
137
+ # On instance reloading we need to remove the `images_container` cached
138
138
  # class so it gets regenerated with the new values.
139
139
  def reload_images
140
140
  @images_container = nil
@@ -34,7 +34,7 @@ module Decidim
34
34
 
35
35
  #
36
36
  # Associates receipts for this message for each of the given users,
37
- # including also a receipt for the remitent (sender) of the message.
37
+ # including also a receipt for the remittant (sender) of the message.
38
38
  # Receipts are unread by default, except for the sender's receipt.
39
39
  #
40
40
  # If the sender is a UserGroup then receipts will be created for its managers
@@ -64,7 +64,7 @@ module Decidim
64
64
 
65
65
  private
66
66
 
67
- # returns all posible recipients from a list of users or groups
67
+ # returns all possible recipients from a list of users or groups
68
68
  def all_recipients(recipients)
69
69
  users = recipients.flat_map do |recipient|
70
70
  recipient.is_a?(UserGroup) ? recipient.managers : recipient
@@ -46,7 +46,7 @@ module Decidim
46
46
  extended_data["send_to_participants"]
47
47
  end
48
48
 
49
- def sended_to_partipatory_spaces
49
+ def sent_to_participatory_spaces
50
50
  extended_data["participatory_space_types"]
51
51
  end
52
52
 
@@ -56,16 +56,16 @@ module Decidim
56
56
  .find_by(scoped_resource_id: id)
57
57
  end
58
58
 
59
- def url(**kwargs)
60
- proxy_url(:newsletter_url, id:, **kwargs)
59
+ def url(**)
60
+ proxy_url(:newsletter_url, id:, **)
61
61
  end
62
62
 
63
- def notifications_settings_url(**kwargs)
64
- proxy_url(__method__, **kwargs)
63
+ def notifications_settings_url(**)
64
+ proxy_url(__method__, **)
65
65
  end
66
66
 
67
- def unsubscribe_newsletters_url(**kwargs)
68
- proxy_url(__method__, **kwargs)
67
+ def unsubscribe_newsletters_url(**)
68
+ proxy_url(__method__, **)
69
69
  end
70
70
 
71
71
  def organization_official_url
@@ -82,10 +82,10 @@ module Decidim
82
82
  errors.add(:author, :invalid) unless author.organization == organization
83
83
  end
84
84
 
85
- def proxy_url(method, **kwargs)
85
+ def proxy_url(method, **)
86
86
  return "#" unless sent?
87
87
 
88
- router.public_send(method, host: organization.host, **kwargs)
88
+ router.public_send(method, host: organization.host, **)
89
89
  end
90
90
 
91
91
  def router
@@ -9,12 +9,12 @@ module Decidim
9
9
 
10
10
  # Daily notifications should contain all notifications within the previous
11
11
  # day from the given day.
12
- scope :daily, ->(time: Time.now.utc) { where(created_at: (time - 1.day).all_day) }
12
+ scope :daily, ->(time = Time.now.utc) { where(created_at: (time - 1.day).all_day) }
13
13
 
14
14
  # Weekly notifications should contain all notifications within the previous
15
15
  # week counting from the end of the previous day until the start of the day
16
16
  # 1 week ago from the previous day.
17
- scope :weekly, lambda { |time: Time.now.utc|
17
+ scope :weekly, lambda { |time = Time.now.utc|
18
18
  end_of_previous_day = (time - 1.day).end_of_day
19
19
  where(created_at: (end_of_previous_day - 7.days).beginning_of_day..end_of_previous_day)
20
20
  }
@@ -15,7 +15,7 @@ module Decidim
15
15
  SOCIAL_HANDLERS = [:twitter, :facebook, :instagram, :youtube, :github].freeze
16
16
  AVAILABLE_MACHINE_TRANSLATION_DISPLAY_PRIORITIES = %w(original translation).freeze
17
17
 
18
- translatable_fields :description, :cta_button_text, :omnipresent_banner_title, :omnipresent_banner_short_description,
18
+ translatable_fields :name, :description, :cta_button_text, :omnipresent_banner_title, :omnipresent_banner_short_description,
19
19
  :highlighted_content_banner_title, :highlighted_content_banner_short_description, :highlighted_content_banner_action_title,
20
20
  :highlighted_content_banner_action_subtitle, :welcome_notification_subject, :welcome_notification_body, :id_documents_explanation_text,
21
21
  :admin_terms_of_service_body
@@ -41,7 +41,7 @@ module Decidim
41
41
  # disable: Users cannot register or sign in.
42
42
  enum users_registration_mode: [:enabled, :existing, :disabled], _prefix: true
43
43
 
44
- validates :name, :host, uniqueness: true
44
+ validates :host, uniqueness: true
45
45
  validates :reference_prefix, presence: true
46
46
  validates :time_zone, presence: true, time_zone: true
47
47
  validates :default_locale, inclusion: { in: :available_locales }
@@ -60,6 +60,27 @@ module Decidim
60
60
 
61
61
  has_one_attached :open_data_file
62
62
 
63
+ validate :unique_name
64
+
65
+ def unique_name
66
+ base_query = new_record? ? Decidim::Organization.all : Decidim::Organization.where.not(id:).all
67
+
68
+ organization_names = []
69
+
70
+ base_query.pluck(:name).each do |value|
71
+ organization_names += value.except("machine_translations").values
72
+ organization_names += value.fetch("machine_translations", {}).values
73
+ end
74
+
75
+ organization_names = organization_names.map(&:downcase).compact_blank
76
+
77
+ name.each do |language, value|
78
+ next if value.is_a?(Hash)
79
+
80
+ errors.add("name_#{language}", :taken) if organization_names.include?(value.downcase)
81
+ end
82
+ end
83
+
63
84
  def self.log_presenter_class_for(_log)
64
85
  Decidim::AdminLog::OrganizationPresenter
65
86
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
- # A messsage from a conversation that will be sent as a push notification
4
+ # A message from a conversation that will be sent as a push notification
5
5
  class PushNotificationMessage
6
6
  class InvalidActionError < StandardError; end
7
7
 
@@ -7,7 +7,7 @@ module Decidim
7
7
  # In order to group the relations between resources you need to specify a name.
8
8
  #
9
9
  # Some examples could be: proposals that have been created in a meeting or
10
- # projects that are a result of merging diffrent proposals.
10
+ # projects that are a result of merging different proposals.
11
11
  class ResourceLink < ApplicationRecord
12
12
  belongs_to :from, polymorphic: true
13
13
  belongs_to :to, polymorphic: true