decidim-core 0.30.3 → 0.31.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 (784) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -4
  3. data/app/cells/decidim/activity_cell.rb +0 -3
  4. data/app/cells/decidim/address/show.erb +1 -0
  5. data/app/cells/decidim/address_cell.rb +7 -1
  6. data/app/cells/decidim/amendable/amend_button_card/show.erb +2 -2
  7. data/app/cells/decidim/author/likes.erb +4 -0
  8. data/app/cells/decidim/author/show.erb +2 -8
  9. data/app/cells/decidim/author_cell.rb +5 -38
  10. data/app/cells/decidim/badge_cell.rb +1 -7
  11. data/app/cells/decidim/card_cell.rb +2 -12
  12. data/app/cells/decidim/card_metadata_cell.rb +4 -4
  13. data/app/cells/decidim/coauthorships_cell.rb +1 -1
  14. data/app/cells/decidim/collapsible_authors/show.erb +1 -1
  15. data/app/cells/decidim/content_blocks/hero_cell.rb +23 -4
  16. data/app/cells/decidim/content_blocks/hero_settings_form/show.erb +16 -2
  17. data/app/cells/decidim/content_blocks/highlighted_content_banner/show.erb +6 -6
  18. data/app/cells/decidim/content_blocks/highlighted_content_banner_cell.rb +28 -1
  19. data/app/cells/decidim/content_blocks/highlighted_content_banner_settings_form/show.erb +27 -0
  20. data/app/cells/decidim/content_blocks/highlighted_content_banner_settings_form_cell.rb +13 -0
  21. data/app/cells/decidim/content_blocks/highlighted_elements_for_component_settings_form/show.erb +9 -2
  22. data/app/cells/decidim/content_blocks/html_settings_form/show.erb +3 -1
  23. data/app/cells/decidim/content_blocks/last_activity_cell.rb +1 -1
  24. data/app/cells/decidim/content_blocks/last_activity_settings_form/show.erb +3 -1
  25. data/app/cells/decidim/content_blocks/menu_breadcrumb_last_activity_cell.rb +1 -1
  26. data/app/cells/decidim/content_blocks/participatory_space_extra_data/recent_users.erb +1 -1
  27. data/app/cells/decidim/content_blocks/participatory_space_hero/show.erb +0 -5
  28. data/app/cells/decidim/content_blocks/participatory_space_hero_cell.rb +1 -13
  29. data/app/cells/decidim/content_blocks/participatory_space_hero_settings_form/show.erb +10 -3
  30. data/app/cells/decidim/content_blocks/participatory_space_last_activity/content.erb +1 -1
  31. data/app/cells/decidim/content_blocks/participatory_space_last_activity/recent_avatars.erb +1 -1
  32. data/app/cells/decidim/content_blocks/participatory_space_last_activity_cell.rb +3 -3
  33. data/app/cells/decidim/content_blocks/participatory_space_main_data/title.erb +17 -5
  34. data/app/cells/decidim/content_blocks/participatory_space_main_data_cell.rb +4 -0
  35. data/app/cells/decidim/content_blocks/stats/show.erb +2 -3
  36. data/app/cells/decidim/data_consent/modal.erb +1 -1
  37. data/app/cells/decidim/like_block/show.erb +3 -0
  38. data/app/cells/decidim/{endorsement_block_cell.rb → like_block_cell.rb} +2 -2
  39. data/app/cells/decidim/like_buttons/button_content.erb +2 -0
  40. data/app/cells/decidim/like_buttons/show.erb +17 -0
  41. data/app/cells/decidim/{endorsement_buttons → like_buttons}/verification_modal.erb +3 -3
  42. data/app/cells/decidim/like_buttons_cell.rb +77 -0
  43. data/app/cells/decidim/likers_list/empty.erb +3 -0
  44. data/app/cells/decidim/{endorsers_list → likers_list}/full.erb +3 -3
  45. data/app/cells/decidim/likers_list/show.erb +20 -0
  46. data/app/cells/decidim/likers_list_cell.rb +64 -0
  47. data/app/cells/decidim/nav_links/show.erb +1 -1
  48. data/app/cells/decidim/notification_actions/buttons_cell.rb +1 -1
  49. data/app/cells/decidim/onboarding_action_message_cell.rb +1 -1
  50. data/app/cells/decidim/participatory_space_dropdown_metadata/metadata.erb +0 -8
  51. data/app/cells/decidim/participatory_space_dropdown_metadata_cell.rb +0 -8
  52. data/app/cells/decidim/profile/avatar.erb +2 -0
  53. data/app/cells/decidim/profile/badge.erb +3 -3
  54. data/app/cells/decidim/profile/details.erb +2 -3
  55. data/app/cells/decidim/profile/tabs.erb +1 -1
  56. data/app/cells/decidim/profile_actions/show.erb +0 -1
  57. data/app/cells/decidim/profile_actions_cell.rb +5 -91
  58. data/app/cells/decidim/profile_cell.rb +4 -39
  59. data/app/cells/decidim/report_button/content.erb +2 -0
  60. data/app/cells/decidim/report_button/flag_modal.erb +1 -1
  61. data/app/cells/decidim/report_button_cell.rb +1 -1
  62. data/app/cells/decidim/report_user_button/flag_modal.erb +1 -1
  63. data/app/cells/decidim/resource_history_cell.rb +2 -1
  64. data/app/cells/decidim/resource_types_filter/show.erb +1 -1
  65. data/app/cells/decidim/share_button_cell.rb +1 -1
  66. data/app/cells/decidim/share_text_widget/modal.erb +16 -0
  67. data/app/cells/decidim/share_text_widget/show.erb +2 -0
  68. data/app/cells/decidim/share_text_widget_cell.rb +27 -0
  69. data/app/cells/decidim/share_widget/modal.erb +19 -8
  70. data/app/cells/decidim/share_widget/qr_code_modal.erb +26 -0
  71. data/app/cells/decidim/share_widget/show.erb +1 -0
  72. data/app/cells/decidim/share_widget_cell.rb +10 -6
  73. data/app/cells/decidim/statistic/show.erb +23 -5
  74. data/app/cells/decidim/statistic_cell.rb +28 -3
  75. data/app/cells/decidim/tab_panels/show.erb +1 -1
  76. data/app/cells/decidim/user_activity_cell.rb +1 -6
  77. data/app/cells/decidim/user_profile/show.erb +1 -1
  78. data/app/cells/decidim/user_profile_cell.rb +1 -9
  79. data/app/cells/decidim/version_author_cell.rb +0 -7
  80. data/app/commands/decidim/amendable/accept.rb +1 -3
  81. data/app/commands/decidim/amendable/create_draft.rb +2 -3
  82. data/app/commands/decidim/amendable/update_draft.rb +2 -3
  83. data/app/commands/decidim/create_ephemeral_user.rb +7 -1
  84. data/app/commands/decidim/create_omniauth_registration.rb +8 -7
  85. data/app/commands/decidim/create_report.rb +9 -1
  86. data/app/commands/decidim/destroy_account.rb +0 -5
  87. data/app/commands/decidim/like_resource.rb +52 -0
  88. data/app/commands/decidim/messaging/reply_to_conversation.rb +2 -21
  89. data/app/commands/decidim/messaging/start_conversation.rb +2 -21
  90. data/app/commands/decidim/unlike_resource.rb +34 -0
  91. data/app/commands/decidim/update_account.rb +1 -1
  92. data/app/controllers/concerns/decidim/ephemeral_session_checker.rb +6 -2
  93. data/app/controllers/concerns/decidim/user_profile.rb +0 -1
  94. data/app/controllers/decidim/account_controller.rb +1 -1
  95. data/app/controllers/decidim/amendments_controller.rb +4 -5
  96. data/app/controllers/decidim/application_controller.rb +2 -1
  97. data/app/controllers/decidim/devise/confirmations_controller.rb +0 -5
  98. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +1 -1
  99. data/app/controllers/decidim/devise/passwords_controller.rb +1 -1
  100. data/app/controllers/decidim/devise/registrations_controller.rb +1 -1
  101. data/app/controllers/decidim/doorkeeper/authorizations_controller.rb +19 -1
  102. data/app/controllers/decidim/download_your_data_controller.rb +2 -2
  103. data/app/controllers/decidim/likes_controller.rb +57 -0
  104. data/app/controllers/decidim/links_controller.rb +1 -0
  105. data/app/controllers/decidim/messaging/conversations_controller.rb +1 -8
  106. data/app/controllers/decidim/newsletters_controller.rb +1 -1
  107. data/app/controllers/decidim/notifications_settings_controller.rb +2 -2
  108. data/app/controllers/decidim/pages_controller.rb +0 -1
  109. data/app/controllers/decidim/profiles_controller.rb +2 -57
  110. data/app/controllers/decidim/qr_controller.rb +73 -0
  111. data/app/controllers/decidim/resource_autocomplete_controller.rb +56 -0
  112. data/app/controllers/decidim/user_activities_controller.rb +0 -1
  113. data/app/events/decidim/resource_liked_event.rb +36 -0
  114. data/app/forms/decidim/amendable/create_form.rb +0 -1
  115. data/app/forms/decidim/amendable/edit_form.rb +0 -1
  116. data/app/forms/decidim/amendable/form.rb +4 -4
  117. data/app/forms/decidim/ephemeral_user_form.rb +1 -0
  118. data/app/forms/decidim/notifications_settings_form.rb +1 -1
  119. data/app/forms/decidim/omniauth_registration_form.rb +1 -1
  120. data/app/forms/decidim/upload_validation_form.rb +9 -1
  121. data/app/helpers/decidim/amendments_helper.rb +1 -2
  122. data/app/helpers/decidim/animations_helper.rb +14 -0
  123. data/app/helpers/decidim/decidim_form_helper.rb +17 -6
  124. data/app/helpers/decidim/layout_helper.rb +1 -15
  125. data/app/helpers/decidim/likeable_helper.rb +46 -0
  126. data/app/helpers/decidim/map_helper.rb +1 -1
  127. data/app/helpers/decidim/menu_helper.rb +2 -8
  128. data/app/helpers/decidim/messaging/conversation_helper.rb +1 -1
  129. data/app/helpers/decidim/omniauth_helper.rb +1 -1
  130. data/app/helpers/decidim/qr_code_helper.rb +37 -0
  131. data/app/helpers/decidim/rich_text_editor_helper.rb +0 -1
  132. data/app/helpers/decidim/sanitize_helper.rb +5 -5
  133. data/app/helpers/decidim/social_share_button_helper.rb +11 -10
  134. data/app/jobs/decidim/delete_inactive_participants_job.rb +41 -0
  135. data/app/jobs/decidim/process_inactive_participant_job.rb +48 -0
  136. data/app/mailers/decidim/participants_account_mailer.rb +38 -0
  137. data/app/mailers/decidim/user_group_mailer.rb +28 -0
  138. data/app/models/decidim/action_log.rb +3 -5
  139. data/app/models/decidim/amendment.rb +1 -1
  140. data/app/models/decidim/attachment_collection.rb +2 -0
  141. data/app/models/decidim/authorization_transfer.rb +0 -1
  142. data/app/models/decidim/coauthorship.rb +1 -1
  143. data/app/models/decidim/component.rb +4 -1
  144. data/app/models/decidim/{endorsement.rb → like.rb} +4 -4
  145. data/app/models/decidim/messaging/conversation.rb +3 -5
  146. data/app/models/decidim/messaging/message.rb +3 -15
  147. data/app/models/decidim/omniauth_provider.rb +1 -1
  148. data/app/models/decidim/organization.rb +3 -8
  149. data/app/models/decidim/participatory_space_role_config/{valuator.rb → evaluator.rb} +1 -1
  150. data/app/models/decidim/reminder_record.rb +1 -1
  151. data/app/models/decidim/searchable_resource.rb +16 -0
  152. data/app/models/decidim/taxonomy.rb +6 -1
  153. data/app/models/decidim/user.rb +32 -15
  154. data/app/models/decidim/user_base_entity.rb +2 -2
  155. data/app/packs/entrypoints/decidim_conference_diploma.scss +2 -2
  156. data/app/packs/entrypoints/decidim_core.scss +2 -2
  157. data/app/packs/entrypoints/decidim_editor.js +0 -4
  158. data/app/packs/entrypoints/decidim_map.scss +2 -2
  159. data/app/packs/entrypoints/decidim_overrides.scss +1 -1
  160. data/app/packs/entrypoints/decidim_qr.js +1 -0
  161. data/app/packs/images/decidim/remixicon.symbol.svg +3 -3
  162. data/app/packs/src/decidim/a11y.js +1 -120
  163. data/app/packs/src/decidim/append_redirect_url_to_modals.js +1 -1
  164. data/app/packs/src/decidim/attachments/file_or_link_tabs.js +1 -1
  165. data/app/packs/src/decidim/confirm.js +27 -20
  166. data/app/packs/src/decidim/controllers/.keep +0 -0
  167. data/app/packs/src/decidim/controllers/accordion/controller.js +100 -0
  168. data/app/packs/src/decidim/controllers/account_form/account_form.test.js +423 -0
  169. data/app/packs/src/decidim/controllers/account_form/controller.js +69 -0
  170. data/app/packs/src/decidim/{input_character_counter.js → controllers/character_counter/controller.js} +90 -106
  171. data/app/packs/src/decidim/controllers/clipboard_copy/clipboard_copy.test.js +305 -0
  172. data/app/packs/src/decidim/controllers/clipboard_copy/controller.js +403 -0
  173. data/app/packs/src/decidim/controllers/date_picker/controller.js +12 -0
  174. data/app/packs/src/decidim/controllers/delete_account_form/controller.js +45 -0
  175. data/app/packs/src/decidim/controllers/delete_account_form/delete_account_form.test.js +216 -0
  176. data/app/packs/src/decidim/controllers/dropdown/controller.js +125 -0
  177. data/app/packs/src/decidim/controllers/editor/controller.js +8 -0
  178. data/app/packs/src/decidim/controllers/emoji/controller.js +26 -0
  179. data/app/packs/src/decidim/{input_emoji.js → controllers/emoji/emoji.js} +1 -15
  180. data/app/packs/src/decidim/{form_filter.js → controllers/form_filter/controller.js} +68 -57
  181. data/app/packs/src/decidim/controllers/form_filter/form_filter.test.js +648 -0
  182. data/app/packs/src/decidim/controllers/form_validator/controller.js +23 -0
  183. data/app/packs/src/decidim/controllers/form_validator/form_validator.js +789 -0
  184. data/app/packs/src/decidim/controllers/form_validator/form_validator.test.js +685 -0
  185. data/app/packs/src/decidim/controllers/impersonation_warning/controller.js +137 -0
  186. data/app/packs/src/decidim/controllers/impersonation_warning/impersonation.test.js +382 -0
  187. data/app/packs/src/decidim/controllers/input_tags/controller.js +28 -0
  188. data/app/packs/src/decidim/controllers/mention/controller.js +243 -0
  189. data/app/packs/src/decidim/controllers/mention/input_mentions.test.js +562 -0
  190. data/app/packs/src/decidim/controllers/multiple_mentions/controller.js +215 -0
  191. data/app/packs/src/decidim/controllers/multiple_mentions/input_multiple_mentions.test.js +645 -0
  192. data/app/packs/src/decidim/controllers/notification_action/controller.js +210 -0
  193. data/app/packs/src/decidim/controllers/notification_action/notification_action.test.js +388 -0
  194. data/app/packs/src/decidim/controllers/password_toggler/controller.js +232 -0
  195. data/app/packs/src/decidim/controllers/password_toggler/password_toggler.test.js +229 -0
  196. data/app/packs/src/decidim/controllers/report_form/controller.js +184 -0
  197. data/app/packs/src/decidim/controllers/report_form/report_form_manager.test.js +511 -0
  198. data/app/packs/src/decidim/controllers/scroll_to_last/controller.js +9 -0
  199. data/app/packs/src/decidim/controllers/scroll_to_last/scroll_to_last_child.test.js +225 -0
  200. data/app/packs/src/decidim/controllers/sticky_buttons/controller.js +55 -0
  201. data/app/packs/src/decidim/controllers/sticky_buttons/sticky_buttons.test.js +334 -0
  202. data/app/packs/src/decidim/controllers/sticky_header/controller.js +116 -0
  203. data/app/packs/src/decidim/controllers/sticky_header/sticky_header.test.js +320 -0
  204. data/app/packs/src/decidim/controllers/toggle/controller.js +111 -0
  205. data/app/packs/src/decidim/controllers/toggle/toggle.test.js +260 -0
  206. data/app/packs/src/decidim/controllers/tooltip/controller.js +287 -0
  207. data/app/packs/src/decidim/controllers/tooltip/tooltip.test.js +380 -0
  208. data/app/packs/src/decidim/controllers/user_registration_form/controller.js +160 -0
  209. data/app/packs/src/decidim/controllers/user_registration_form/omniauth_registration_form.test.js +441 -0
  210. data/app/packs/src/decidim/controllers/user_registration_form/user_registration_form.test.js +386 -0
  211. data/app/packs/src/decidim/data_consent/index.js +1 -1
  212. data/app/packs/src/decidim/datalist_select.js +1 -1
  213. data/app/packs/src/decidim/datepicker/form_datepicker.js +1 -1
  214. data/app/packs/src/decidim/datepicker/generate_datepicker.js +2 -2
  215. data/app/packs/src/decidim/datepicker/generate_timepicker.js +2 -2
  216. data/app/packs/src/decidim/direct_uploads/upload_field.js +3 -5
  217. data/app/packs/src/decidim/direct_uploads/upload_modal.js +1 -1
  218. data/app/packs/src/decidim/dropdown_menu.js +1 -1
  219. data/app/packs/src/decidim/editor/common/input_dialog.js +1 -1
  220. data/app/packs/src/decidim/editor/common/suggestion.js +10 -2
  221. data/app/packs/src/decidim/editor/common/upload_dialog.js +1 -1
  222. data/app/packs/src/decidim/editor/extensions/decidim_kit/index.js +7 -7
  223. data/app/packs/src/decidim/editor/extensions/emoji/index.js +2 -3
  224. data/app/packs/src/decidim/editor/extensions/image/index.js +1 -1
  225. data/app/packs/src/decidim/editor/extensions/image/node_view.js +1 -1
  226. data/app/packs/src/decidim/editor/extensions/link/bubble_menu.js +1 -1
  227. data/app/packs/src/decidim/editor/extensions/link/index.js +1 -1
  228. data/app/packs/src/decidim/editor/extensions/mention/index.js +1 -2
  229. data/app/packs/src/decidim/editor/extensions/mention_resource/index.js +69 -0
  230. data/app/packs/src/decidim/editor/extensions/video_embed/index.js +1 -1
  231. data/app/packs/src/decidim/editor/index.js +6 -5
  232. data/app/packs/src/decidim/editor/test/extensions/decidim_kit.test.js +1 -2
  233. data/app/packs/src/decidim/editor/test/extensions/emoji.test.js +17 -0
  234. data/app/packs/src/decidim/editor/test/extensions/heading.test.js +2 -2
  235. data/app/packs/src/decidim/editor/toolbar.js +1 -1
  236. data/app/packs/src/decidim/form_attachments.js +1 -1
  237. data/app/packs/src/decidim/geocoding/attach_input.js +3 -0
  238. data/app/packs/src/decidim/geocoding/provider/here.js +1 -1
  239. data/app/packs/src/decidim/geocoding/provider/photon.js +1 -1
  240. data/app/packs/src/decidim/geocoding/reverse_geocoding.js +2 -2
  241. data/app/packs/src/decidim/geocoding.js +2 -2
  242. data/app/packs/src/decidim/index.js +127 -95
  243. data/app/packs/src/decidim/map/integration/forms.js +1 -1
  244. data/app/packs/src/decidim/map/legacy.js +1 -1
  245. data/app/packs/src/decidim/map/provider/default.js +1 -1
  246. data/app/packs/src/decidim/map/provider/here.js +1 -1
  247. data/app/packs/src/decidim/map.js +1 -1
  248. data/app/packs/src/decidim/{external_link.js → refactor/implementation/external_link.js} +1 -1
  249. data/app/packs/src/decidim/{onboarding_pending_action.js → refactor/integration/onboarding_pending_action.js} +4 -4
  250. data/app/packs/src/decidim/{check_boxes_tree.js → refactor/moved/check_boxes_tree.js} +24 -9
  251. data/app/packs/src/decidim/{i18n.test.js → refactor/moved/i18n.test.js} +1 -1
  252. data/app/packs/src/decidim/{icon.js → refactor/moved/icon.js} +2 -0
  253. data/app/packs/src/decidim/refactor/support/stimulus.js +39 -0
  254. data/app/packs/src/decidim/refactor/test/configuration.test.js +360 -0
  255. data/app/packs/src/decidim/{external_domain_warning.test.js → refactor/test/external_domain_warning.test.js} +1 -1
  256. data/app/packs/src/decidim/{external_link.test.js → refactor/test/external_link.test.js} +1 -1
  257. data/app/packs/src/decidim/results_listing.js +2 -2
  258. data/app/packs/src/decidim/security/selfxss_warning.js +1 -1
  259. data/app/packs/src/decidim/session_timeouter.js +1 -1
  260. data/app/packs/src/decidim/sw/push-permissions.js +1 -1
  261. data/app/packs/src/decidim/utilities/dom.js +1 -1
  262. data/app/packs/stylesheets/decidim/_accordion.scss +37 -3
  263. data/app/packs/stylesheets/decidim/_author.scss +0 -29
  264. data/app/packs/stylesheets/decidim/_buttons.scss +4 -0
  265. data/app/packs/stylesheets/decidim/_callout.scss +1 -1
  266. data/app/packs/stylesheets/decidim/_cards.scss +2 -6
  267. data/app/packs/stylesheets/decidim/_content_blocks.scss +1 -1
  268. data/app/packs/stylesheets/decidim/_cookies.scss +1 -1
  269. data/app/packs/stylesheets/decidim/_datepicker.scss +0 -4
  270. data/app/packs/stylesheets/decidim/_dropdown.scss +56 -19
  271. data/app/packs/stylesheets/decidim/_forms.scss +6 -6
  272. data/app/packs/stylesheets/decidim/_header.scss +17 -1
  273. data/app/packs/stylesheets/decidim/_labels.scss +1 -1
  274. data/app/packs/stylesheets/decidim/_layout.scss +12 -2
  275. data/app/packs/stylesheets/decidim/{_endorsers_list.scss → _likes_list.scss} +1 -1
  276. data/app/packs/stylesheets/decidim/_modal.scss +5 -1
  277. data/app/packs/stylesheets/decidim/_modal_share.scss +83 -9
  278. data/app/packs/stylesheets/decidim/_modal_update.scss +1 -5
  279. data/app/packs/stylesheets/decidim/_participatory_spaces.scss +1 -1
  280. data/app/packs/stylesheets/decidim/_profile.scss +6 -6
  281. data/app/packs/stylesheets/decidim/_rich_text.scss +13 -0
  282. data/app/packs/stylesheets/decidim/_statistics.scss +35 -3
  283. data/app/packs/stylesheets/decidim/_tooltip.scss +1 -1
  284. data/app/packs/stylesheets/decidim/_typography.scss +6 -0
  285. data/app/packs/stylesheets/decidim/_wizard_steps.scss +1 -1
  286. data/app/packs/stylesheets/decidim/application.scss +76 -76
  287. data/app/packs/stylesheets/decidim/editor.scss +12 -15
  288. data/app/packs/stylesheets/decidim/legacy/email.scss +6 -5
  289. data/app/packs/stylesheets/decidim/map.scss +5 -3
  290. data/app/packs/stylesheets/decidim/qr.scss +65 -0
  291. data/app/permissions/decidim/default_permissions.rb +16 -0
  292. data/app/permissions/decidim/permissions.rb +5 -26
  293. data/app/presenters/decidim/admin_log/base_user_presenter.rb +2 -2
  294. data/app/presenters/decidim/admin_log/organization_presenter.rb +0 -15
  295. data/app/presenters/decidim/home_stats_presenter.rb +4 -54
  296. data/app/presenters/decidim/log/base_presenter.rb +1 -1
  297. data/app/presenters/decidim/menu_item_presenter.rb +10 -3
  298. data/app/presenters/decidim/official_author_presenter.rb +0 -4
  299. data/app/presenters/decidim/participatory_space_private_user_presenter.rb +0 -4
  300. data/app/presenters/decidim/resource_locator_presenter.rb +15 -4
  301. data/app/presenters/decidim/resource_presenter.rb +8 -8
  302. data/app/presenters/decidim/stats_presenter.rb +39 -60
  303. data/app/presenters/decidim/taxonomy_presenter.rb +5 -1
  304. data/app/presenters/decidim/user_presenter.rb +0 -6
  305. data/app/queries/decidim/authorized_users.rb +26 -0
  306. data/app/queries/decidim/inactive_users_query.rb +31 -0
  307. data/app/queries/decidim/public_activities.rb +2 -2
  308. data/app/queries/decidim/stats_followers_count.rb +43 -0
  309. data/app/queries/decidim/stats_participants_count.rb +102 -0
  310. data/app/serializers/decidim/exporters/open_data_user_serializer.rb +1 -5
  311. data/app/serializers/decidim/exporters/participatory_space_serializer.rb +0 -1
  312. data/app/services/decidim/action_logger.rb +2 -1
  313. data/app/services/decidim/base_diff_renderer.rb +0 -17
  314. data/app/services/decidim/onboarding_manager.rb +4 -0
  315. data/app/services/decidim/open_data_exporter.rb +19 -11
  316. data/app/services/decidim/send_push_notification.rb +4 -3
  317. data/app/services/decidim/traceability.rb +1 -1
  318. data/app/validators/etiquette_validator.rb +9 -2
  319. data/app/validators/password_validator.rb +1 -3
  320. data/app/validators/translated_etiquette_validator.rb +1 -0
  321. data/app/views/decidim/account/_old_password_field.html.erb +1 -1
  322. data/app/views/decidim/account/_password_fields.html.erb +1 -1
  323. data/app/views/decidim/account/delete.html.erb +1 -1
  324. data/app/views/decidim/account/show.html.erb +3 -3
  325. data/app/views/decidim/amendments/edit_draft.html.erb +0 -4
  326. data/app/views/decidim/amendments/new.html.erb +0 -4
  327. data/app/views/decidim/amendments/preview_draft.html.erb +1 -1
  328. data/app/views/decidim/application/_accordion_section.html.erb +1 -1
  329. data/app/views/decidim/application/_collection.html.erb +1 -1
  330. data/app/views/decidim/application/_document.html.erb +2 -2
  331. data/app/views/decidim/application/_radio_accordion.html.erb +30 -0
  332. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +1 -1
  333. data/app/views/decidim/devise/omniauth_registrations/new_tos_fields.html.erb +1 -1
  334. data/app/views/decidim/devise/registrations/new.html.erb +1 -1
  335. data/app/views/decidim/devise/shared/_links.html.erb +1 -1
  336. data/app/views/decidim/doorkeeper/authorizations/new.html.erb +39 -8
  337. data/app/views/decidim/errors/internal_server_error.html.erb +1 -0
  338. data/app/views/decidim/likes/update_buttons_and_counters.js.erb +21 -0
  339. data/app/views/decidim/messaging/conversations/_add_conversation_users.html.erb +2 -2
  340. data/app/views/decidim/messaging/conversations/_reply_form.html.erb +1 -1
  341. data/app/views/decidim/messaging/conversations/_start.html.erb +1 -1
  342. data/app/views/decidim/messaging/conversations/create.js.erb +0 -1
  343. data/app/views/decidim/messaging/conversations/new.html.erb +1 -1
  344. data/app/views/decidim/messaging/conversations/show.html.erb +1 -1
  345. data/app/views/decidim/notifications_settings/show.html.erb +3 -3
  346. data/app/views/decidim/pages/_tabbed.html.erb +1 -1
  347. data/app/views/decidim/pages/index.html.erb +1 -1
  348. data/app/views/decidim/participants_account_mailer/inactivity_notification.html.erb +13 -0
  349. data/app/views/decidim/participants_account_mailer/removal_notification.html.erb +11 -0
  350. data/app/views/decidim/profiles/show.html.erb +1 -1
  351. data/app/views/decidim/qr/show.html.erb +28 -0
  352. data/app/views/decidim/searches/_filters.html.erb +18 -2
  353. data/app/views/decidim/searches/index.html.erb +5 -2
  354. data/app/views/decidim/shared/_confirm_modal.html.erb +5 -3
  355. data/app/views/decidim/shared/_filters.html.erb +3 -3
  356. data/app/views/decidim/shared/_orders.html.erb +1 -1
  357. data/app/views/decidim/shared/_resource_actions.html.erb +8 -5
  358. data/app/views/decidim/user_activities/index.html.erb +1 -1
  359. data/app/views/decidim/user_group_mailer/notify_deprecation_to_member.html.erb +15 -0
  360. data/app/views/decidim/user_group_mailer/notify_deprecation_to_owner.html.erb +22 -0
  361. data/app/views/layouts/decidim/_application.html.erb +1 -1
  362. data/app/views/layouts/decidim/_head.html.erb +15 -12
  363. data/app/views/layouts/decidim/_impersonation_warning.html.erb +1 -1
  364. data/app/views/layouts/decidim/_js_configuration.html.erb +17 -19
  365. data/app/views/layouts/decidim/_meta_tags_context.html.erb +3 -0
  366. data/app/views/layouts/decidim/_offline_banner.html.erb +1 -1
  367. data/app/views/layouts/decidim/_wrapper.html.erb +8 -6
  368. data/app/views/layouts/decidim/footer/_focus_mode_main.html.erb +7 -0
  369. data/app/views/layouts/decidim/footer/_main_language_chooser.html.erb +1 -1
  370. data/app/views/layouts/decidim/header/_close_ephemeral_session.html.erb +12 -2
  371. data/app/views/layouts/decidim/header/_focus_mode_back_button.html.erb +24 -0
  372. data/app/views/layouts/decidim/header/_main.html.erb +28 -22
  373. data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +1 -1
  374. data/app/views/layouts/decidim/header/_main_links_dropdown.html.erb +18 -18
  375. data/app/views/layouts/decidim/header/_main_links_mobile_item_account.html.erb +1 -1
  376. data/app/views/layouts/decidim/header/_main_menu_mobile.html.erb +1 -1
  377. data/app/views/layouts/decidim/header/_menu_breadcrumb_desktop.html.erb +1 -1
  378. data/app/views/layouts/decidim/header/_menu_breadcrumb_items.html.erb +1 -1
  379. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +1 -1
  380. data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +1 -1
  381. data/app/views/layouts/decidim/mailer.html.erb +2 -2
  382. data/app/views/layouts/decidim/newsletter_base.html.erb +2 -2
  383. data/app/views/layouts/decidim/shared/_layout_two_col.html.erb +3 -1
  384. data/app/views/layouts/decidim/shared/_layout_user_profile.html.erb +7 -3
  385. data/config/assets.rb +3 -3
  386. data/config/initializers/devise.rb +8 -0
  387. data/config/initializers/omniauth.rb +1 -1
  388. data/config/locales/ar.yml +0 -209
  389. data/config/locales/bg.yml +0 -238
  390. data/config/locales/bs-BA.yml +0 -30
  391. data/config/locales/ca-IT.yml +120 -294
  392. data/config/locales/ca.yml +120 -294
  393. data/config/locales/cs.yml +85 -284
  394. data/config/locales/de.yml +111 -285
  395. data/config/locales/el.yml +0 -224
  396. data/config/locales/en.yml +112 -286
  397. data/config/locales/eo.yml +0 -2
  398. data/config/locales/es-MX.yml +112 -286
  399. data/config/locales/es-PY.yml +112 -286
  400. data/config/locales/es.yml +112 -286
  401. data/config/locales/eu.yml +138 -312
  402. data/config/locales/fi-plain.yml +112 -286
  403. data/config/locales/fi.yml +112 -286
  404. data/config/locales/fr-CA.yml +85 -275
  405. data/config/locales/fr.yml +85 -275
  406. data/config/locales/ga-IE.yml +0 -28
  407. data/config/locales/gl.yml +0 -140
  408. data/config/locales/hu.yml +0 -237
  409. data/config/locales/id-ID.yml +0 -136
  410. data/config/locales/is-IS.yml +0 -14
  411. data/config/locales/it.yml +1 -234
  412. data/config/locales/ja.yml +107 -282
  413. data/config/locales/lb.yml +0 -189
  414. data/config/locales/lt.yml +0 -240
  415. data/config/locales/lv.yml +0 -186
  416. data/config/locales/nl.yml +0 -189
  417. data/config/locales/no.yml +0 -189
  418. data/config/locales/pl.yml +0 -244
  419. data/config/locales/pt-BR.yml +0 -213
  420. data/config/locales/pt.yml +0 -189
  421. data/config/locales/ro-RO.yml +54 -218
  422. data/config/locales/ru.yml +0 -62
  423. data/config/locales/sk.yml +0 -164
  424. data/config/locales/sr-CS.yml +0 -31
  425. data/config/locales/sv.yml +80 -263
  426. data/config/locales/tr-TR.yml +0 -189
  427. data/config/locales/uk.yml +0 -23
  428. data/config/locales/zh-CN.yml +0 -180
  429. data/config/locales/zh-TW.yml +0 -229
  430. data/config/routes.rb +3 -36
  431. data/db/migrate/20250217192438_convert_user_groups_into_users.rb +38 -0
  432. data/db/migrate/20250221085317_add_user_type_to_action_logs.rb +12 -0
  433. data/db/migrate/20250221090905_create_decidim_api_jwt_denylist.rb +11 -0
  434. data/db/migrate/20250221091348_add_api_key_to_decidim_api_user.rb +7 -0
  435. data/db/migrate/20250327143657_remove_metrics_content_blocks.rb +9 -0
  436. data/db/migrate/20250401153444_enable_pkce.rb +8 -0
  437. data/db/migrate/20250416130426_rename_doorkeeper_scopes.rb +25 -0
  438. data/db/migrate/20250515105231_rename_endorsements_to_likes.rb +62 -0
  439. data/db/migrate/20250523104311_move_cta_to_hero_content_block.rb +34 -0
  440. data/db/migrate/20250527122040_move_highlighted_content_banner_settings_to_content_block.rb +69 -0
  441. data/db/migrate/20250603103953_add_refresh_tokens_enabled_to_doorkeeper_applications.rb +7 -0
  442. data/db/migrate/20250609073104_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb +10 -0
  443. data/db/migrate/20250613122148_remove_hashtag_table_from_core.rb +7 -0
  444. data/decidim-core.gemspec +4 -4
  445. data/{app/helpers → lib}/decidim/action_authorization_helper.rb +5 -4
  446. data/lib/decidim/amendable.rb +4 -4
  447. data/lib/decidim/api/functions/user_entity_finder.rb +1 -1
  448. data/lib/decidim/api/input_filters/component_input_filter.rb +3 -3
  449. data/lib/decidim/api/input_filters/user_entity_input_filter.rb +0 -21
  450. data/lib/decidim/api/input_sorts/has_likeable_input_sort.rb +15 -0
  451. data/lib/decidim/api/interfaces/attachable_collection_interface.rb +13 -0
  452. data/lib/decidim/api/interfaces/author_interface.rb +1 -2
  453. data/lib/decidim/api/interfaces/authorable_interface.rb +2 -2
  454. data/lib/decidim/api/interfaces/coauthorable_interface.rb +1 -1
  455. data/lib/decidim/api/interfaces/component_interface.rb +6 -0
  456. data/lib/decidim/api/interfaces/followable_interface.rb +13 -0
  457. data/lib/decidim/api/interfaces/likeable_interface.rb +19 -0
  458. data/lib/decidim/api/interfaces/localizable_interface.rb +18 -0
  459. data/lib/decidim/api/interfaces/participatory_space_interface.rb +6 -8
  460. data/lib/decidim/api/interfaces/referable_interface.rb +13 -0
  461. data/lib/decidim/api/interfaces/timestamps_interface.rb +0 -1
  462. data/lib/decidim/api/interfaces/traceable_interface.rb +1 -1
  463. data/lib/decidim/api/types/attachment_collection_type.rb +14 -0
  464. data/lib/decidim/api/types/organization_type.rb +3 -1
  465. data/lib/decidim/api/types/session_type.rb +0 -5
  466. data/lib/decidim/api/types/statistic_type.rb +29 -3
  467. data/lib/decidim/api/types/trace_version_type.rb +1 -1
  468. data/lib/decidim/api/types/user_type.rb +1 -2
  469. data/lib/decidim/api_response_helper.rb +12 -0
  470. data/lib/decidim/asset_router/storage.rb +10 -12
  471. data/lib/decidim/assets/tailwind/instance.rb +1 -1
  472. data/lib/decidim/assets/tailwind/tailwind.config.js.erb +4 -3
  473. data/lib/decidim/attribute_encryptor.rb +1 -1
  474. data/lib/decidim/attributes/time_with_zone.rb +1 -1
  475. data/lib/decidim/authorable.rb +5 -34
  476. data/lib/decidim/coauthorable.rb +13 -31
  477. data/lib/decidim/content_parsers/blob_parser.rb +1 -1
  478. data/lib/decidim/content_parsers/mention_resource_parser.rb +23 -0
  479. data/lib/decidim/content_parsers/tag_parser.rb +2 -2
  480. data/lib/decidim/content_parsers/user_parser.rb +2 -2
  481. data/lib/decidim/content_parsers.rb +14 -2
  482. data/lib/decidim/content_processor.rb +1 -1
  483. data/lib/decidim/content_renderers/mention_resource_renderer.rb +77 -0
  484. data/lib/decidim/content_renderers.rb +1 -2
  485. data/lib/decidim/core/api.rb +7 -8
  486. data/lib/decidim/core/content_blocks/registry_manager.rb +19 -5
  487. data/lib/decidim/core/engine.rb +72 -104
  488. data/lib/decidim/core/menu.rb +0 -7
  489. data/lib/decidim/core/seeds.rb +11 -39
  490. data/lib/decidim/core/test/factories.rb +22 -121
  491. data/lib/decidim/core/test/shared_examples/authorable.rb +0 -17
  492. data/lib/decidim/core/test/shared_examples/coauthorable.rb +5 -48
  493. data/lib/decidim/core/test/shared_examples/comments_examples.rb +7 -56
  494. data/lib/decidim/core/test/shared_examples/likeable.rb +22 -0
  495. data/lib/decidim/core/test/shared_examples/manage_share_tokens_examples.rb +16 -3
  496. data/lib/decidim/core/test/shared_examples/map_examples.rb +1 -1
  497. data/lib/decidim/core/test/shared_examples/oauth_application_examples.rb +137 -0
  498. data/lib/decidim/core/test/shared_examples/participatory_space_dropdown_metadata_cell_examples.rb +0 -18
  499. data/lib/decidim/core/test/shared_examples/permissions.rb +0 -46
  500. data/lib/decidim/core/test/shared_examples/reports_examples.rb +2 -2
  501. data/lib/decidim/core/test/shared_examples/{resource_endorsed_event_examples.rb → resource_liked_event_examples.rb} +7 -7
  502. data/lib/decidim/core/test/shared_examples/resource_search_examples.rb +0 -14
  503. data/lib/decidim/core/test/shared_examples/searchable_results_examples.rb +8 -34
  504. data/lib/decidim/core/test/shared_examples/social_share_examples.rb +79 -0
  505. data/lib/decidim/core/test/shared_examples/system_like_resource_examples.rb +192 -0
  506. data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +2 -2
  507. data/lib/decidim/core/test/shared_examples/{with_endorsable_permissions_examples.rb → with_likeable_permissions_examples.rb} +22 -22
  508. data/lib/decidim/core/test.rb +6 -9
  509. data/lib/decidim/core/version.rb +1 -1
  510. data/lib/decidim/core.rb +237 -88
  511. data/lib/decidim/deprecations.rb +1 -1
  512. data/lib/decidim/download_your_data_serializers.rb +6 -3
  513. data/lib/decidim/env.rb +3 -1
  514. data/lib/decidim/events.rb +0 -1
  515. data/lib/decidim/form_builder.rb +27 -44
  516. data/lib/decidim/gamification/badge_scorer.rb +0 -2
  517. data/lib/decidim/gamification.rb +1 -1
  518. data/lib/decidim/has_conversations.rb +0 -44
  519. data/lib/decidim/has_workflows.rb +42 -0
  520. data/lib/decidim/icon_registry.rb +4 -4
  521. data/lib/decidim/legacy_form_builder.rb +17 -2
  522. data/lib/decidim/likeable.rb +24 -0
  523. data/lib/decidim/manifest_registry.rb +1 -1
  524. data/lib/decidim/map/provider/dynamic_map/here.rb +0 -19
  525. data/lib/decidim/map/provider/static_map/here.rb +2 -10
  526. data/lib/decidim/menu.rb +1 -1
  527. data/lib/decidim/moderation_tools.rb +1 -1
  528. data/lib/decidim/mutation_registry.rb +17 -0
  529. data/lib/decidim/newsletter_encryptor.rb +1 -1
  530. data/lib/decidim/oauth/token_generator.rb +35 -0
  531. data/lib/decidim/oauth.rb +7 -0
  532. data/lib/decidim/organization_settings.rb +2 -10
  533. data/lib/decidim/paddable.rb +1 -1
  534. data/lib/decidim/participatory_space_resourceable.rb +2 -2
  535. data/lib/decidim/participatory_space_user.rb +1 -1
  536. data/lib/decidim/pdf_signature_example.rb +108 -0
  537. data/lib/decidim/query.rb +1 -1
  538. data/lib/decidim/query_extensions.rb +0 -33
  539. data/lib/decidim/reportable.rb +1 -1
  540. data/lib/decidim/searchable.rb +4 -2
  541. data/lib/decidim/seeds.rb +8 -0
  542. data/lib/decidim/settings_manifest.rb +3 -2
  543. data/lib/decidim/{webpacker → shakapacker}/configuration.rb +4 -4
  544. data/lib/decidim/{webpacker → shakapacker}/runner.rb +3 -3
  545. data/lib/decidim/shakapacker/shakapacker.rb +8 -0
  546. data/lib/decidim/{webpacker → shakapacker}/shakapacker.yml +3 -1
  547. data/lib/decidim/{webpacker → shakapacker}/webpack/custom.js +1 -1
  548. data/lib/decidim/shakapacker.rb +34 -0
  549. data/lib/decidim/social_share_service_manifest.rb +7 -12
  550. data/lib/decidim/stats_registry.rb +15 -3
  551. data/{app/helpers → lib}/decidim/tooltip_helper.rb +3 -3
  552. data/lib/decidim/url_option_resolver.rb +1 -1
  553. data/lib/decidim/view_model.rb +0 -3
  554. data/lib/decidim/webpacker.rb +11 -20
  555. data/lib/decidim/workflow_registry.rb +61 -0
  556. data/lib/tasks/decidim_participants_tasks.rake +22 -0
  557. data/lib/tasks/{decidim_webpacker_tasks.rake → decidim_shakapacker_tasks.rake} +35 -33
  558. data/lib/tasks/decidim_tasks.rake +4 -1
  559. data/lib/tasks/decidim_taxonomies.rake +0 -34
  560. data/lib/tasks/upgrade/clean.rake +1 -1
  561. data/lib/tasks/upgrade/decidim_action_log_valuation_assignment.rake +13 -0
  562. data/lib/tasks/upgrade/decidim_change_valuator_tasks.rake +12 -0
  563. data/lib/tasks/upgrade/{decidim_deduplicate_endorsements.rake → decidim_deduplicate_likes.rake} +10 -10
  564. data/lib/tasks/upgrade/decidim_migrate_wysiwyg_content.rake +2 -2
  565. data/lib/tasks/upgrade/decidim_paper_trail_valuation_assignment.rake +13 -0
  566. data/lib/tasks/upgrade/user_groups_migration.rake +155 -0
  567. metadata +204 -257
  568. data/app/cells/decidim/author/badge.erb +0 -6
  569. data/app/cells/decidim/author/endorsements.erb +0 -4
  570. data/app/cells/decidim/author/profile_minicard.erb +0 -30
  571. data/app/cells/decidim/content_blocks/organization_metrics_cell.rb +0 -21
  572. data/app/cells/decidim/content_blocks/participatory_space_metrics/content.erb +0 -18
  573. data/app/cells/decidim/content_blocks/participatory_space_metrics_cell.rb +0 -43
  574. data/app/cells/decidim/endorsement_block/show.erb +0 -3
  575. data/app/cells/decidim/endorsement_buttons/button_content.erb +0 -2
  576. data/app/cells/decidim/endorsement_buttons/select_identity_button.erb +0 -7
  577. data/app/cells/decidim/endorsement_buttons/show.erb +0 -17
  578. data/app/cells/decidim/endorsement_buttons_cell.rb +0 -87
  579. data/app/cells/decidim/endorsers_list/empty.erb +0 -3
  580. data/app/cells/decidim/endorsers_list/show.erb +0 -20
  581. data/app/cells/decidim/endorsers_list_cell.rb +0 -64
  582. data/app/cells/decidim/group_admins/show.erb +0 -34
  583. data/app/cells/decidim/group_admins_cell.rb +0 -8
  584. data/app/cells/decidim/group_members/show.erb +0 -46
  585. data/app/cells/decidim/group_members_cell.rb +0 -8
  586. data/app/cells/decidim/groups/show.erb +0 -14
  587. data/app/cells/decidim/groups_cell.rb +0 -22
  588. data/app/cells/decidim/members/show.erb +0 -12
  589. data/app/cells/decidim/members_cell.rb +0 -34
  590. data/app/cells/decidim/profile_actions/dropdown_actions.erb +0 -21
  591. data/app/cells/decidim/represent_user_group/show.erb +0 -11
  592. data/app/cells/decidim/represent_user_group_cell.rb +0 -46
  593. data/app/cells/decidim/user_conversation/conversation_header.erb +0 -14
  594. data/app/cells/decidim/user_conversation/messages.erb +0 -1
  595. data/app/cells/decidim/user_conversation/new.erb +0 -6
  596. data/app/cells/decidim/user_conversation/reply.erb +0 -9
  597. data/app/cells/decidim/user_conversation/show.erb +0 -19
  598. data/app/cells/decidim/user_conversation/start.erb +0 -12
  599. data/app/cells/decidim/user_conversation_cell.rb +0 -62
  600. data/app/cells/decidim/user_conversations/new_conversation_button.erb +0 -20
  601. data/app/cells/decidim/user_conversations/show.erb +0 -13
  602. data/app/cells/decidim/user_conversations_cell.rb +0 -28
  603. data/app/cells/decidim/user_group_pending_invitations_list/show.erb +0 -28
  604. data/app/cells/decidim/user_group_pending_invitations_list_cell.rb +0 -26
  605. data/app/cells/decidim/user_group_pending_requests_list/show.erb +0 -27
  606. data/app/cells/decidim/user_group_pending_requests_list_cell.rb +0 -26
  607. data/app/commands/decidim/accept_group_invitation.rb +0 -43
  608. data/app/commands/decidim/accept_user_group_join_request.rb +0 -53
  609. data/app/commands/decidim/create_user_group.rb +0 -73
  610. data/app/commands/decidim/demote_membership.rb +0 -57
  611. data/app/commands/decidim/endorse_resource.rb +0 -66
  612. data/app/commands/decidim/invite_user_to_group.rb +0 -63
  613. data/app/commands/decidim/join_user_group.rb +0 -57
  614. data/app/commands/decidim/leave_user_group.rb +0 -47
  615. data/app/commands/decidim/promote_membership.rb +0 -55
  616. data/app/commands/decidim/reject_group_invitation.rb +0 -42
  617. data/app/commands/decidim/reject_user_group_join_request.rb +0 -53
  618. data/app/commands/decidim/remove_user_from_group.rb +0 -53
  619. data/app/commands/decidim/unendorse_resource.rb +0 -39
  620. data/app/commands/decidim/update_user_group.rb +0 -72
  621. data/app/controllers/concerns/decidim/user_groups.rb +0 -23
  622. data/app/controllers/decidim/endorsements_controller.rb +0 -71
  623. data/app/controllers/decidim/group_email_confirmations_controller.rb +0 -32
  624. data/app/controllers/decidim/group_invites_controller.rb +0 -104
  625. data/app/controllers/decidim/group_members_controller.rb +0 -75
  626. data/app/controllers/decidim/groups_controller.rb +0 -99
  627. data/app/controllers/decidim/own_user_groups_controller.rb +0 -15
  628. data/app/controllers/decidim/user_conversations_controller.rb +0 -133
  629. data/app/controllers/decidim/user_group_join_requests_controller.rb +0 -72
  630. data/app/events/decidim/demoted_membership_event.rb +0 -28
  631. data/app/events/decidim/invited_to_group_event.rb +0 -62
  632. data/app/events/decidim/join_request_accepted_event.rb +0 -28
  633. data/app/events/decidim/join_request_created_event.rb +0 -28
  634. data/app/events/decidim/join_request_rejected_event.rb +0 -28
  635. data/app/events/decidim/promoted_to_admin_event.rb +0 -28
  636. data/app/events/decidim/removed_from_group_event.rb +0 -28
  637. data/app/events/decidim/resource_endorsed_event.rb +0 -36
  638. data/app/events/decidim/user_group_admin_event.rb +0 -37
  639. data/app/events/decidim/user_group_created_event.rb +0 -6
  640. data/app/events/decidim/user_group_updated_event.rb +0 -6
  641. data/app/forms/decidim/invite_user_to_group_form.rb +0 -29
  642. data/app/forms/decidim/user_group_form.rb +0 -87
  643. data/app/helpers/decidim/cta_button_helper.rb +0 -31
  644. data/app/helpers/decidim/endorsable_helper.rb +0 -84
  645. data/app/helpers/decidim/twitter_search_helper.rb +0 -14
  646. data/app/helpers/decidim/user_group_helper.rb +0 -22
  647. data/app/jobs/decidim/metric_job.rb +0 -15
  648. data/app/models/decidim/metric.rb +0 -25
  649. data/app/models/decidim/user_group.rb +0 -217
  650. data/app/models/decidim/user_group_membership.rb +0 -17
  651. data/app/packs/entrypoints/decidim_widget.js +0 -1
  652. data/app/packs/src/decidim/abide_form_validator_fixer.js +0 -44
  653. data/app/packs/src/decidim/account_form.js +0 -96
  654. data/app/packs/src/decidim/append_elements.js +0 -6
  655. data/app/packs/src/decidim/back_to_list.js +0 -26
  656. data/app/packs/src/decidim/change_report_form_behavior.js +0 -45
  657. data/app/packs/src/decidim/clipboard.js +0 -128
  658. data/app/packs/src/decidim/editor/extensions/hashtag/index.js +0 -66
  659. data/app/packs/src/decidim/editor/extensions/heading/index.js +0 -33
  660. data/app/packs/src/decidim/editor/test/extensions/hashtag.test.js +0 -105
  661. data/app/packs/src/decidim/form_filter.component_for_testing.js +0 -7
  662. data/app/packs/src/decidim/form_validator.js +0 -56
  663. data/app/packs/src/decidim/gallery.js +0 -5
  664. data/app/packs/src/decidim/impersonation.js +0 -23
  665. data/app/packs/src/decidim/input_autojump.js +0 -38
  666. data/app/packs/src/decidim/input_hashtags.js +0 -91
  667. data/app/packs/src/decidim/input_mentions.js +0 -143
  668. data/app/packs/src/decidim/input_multiple_mentions.js +0 -115
  669. data/app/packs/src/decidim/input_tags.js +0 -16
  670. data/app/packs/src/decidim/notifications_actions.js +0 -40
  671. data/app/packs/src/decidim/password_toggler.js +0 -104
  672. data/app/packs/src/decidim/remote_tooltips.js +0 -38
  673. data/app/packs/src/decidim/responsive_horizontal_tabs.js +0 -12
  674. data/app/packs/src/decidim/scroll_to_last_child.js +0 -14
  675. data/app/packs/src/decidim/slug_form.js +0 -9
  676. data/app/packs/src/decidim/sticky_footer.js +0 -48
  677. data/app/packs/src/decidim/sticky_header.js +0 -62
  678. data/app/packs/src/decidim/toggle.js +0 -37
  679. data/app/packs/src/decidim/tooltips.js +0 -152
  680. data/app/packs/src/decidim/user_registrations.js +0 -65
  681. data/app/packs/src/decidim/vizzs/areachart.js +0 -251
  682. data/app/packs/src/decidim/vizzs/index.js +0 -82
  683. data/app/packs/src/decidim/widget.js +0 -14
  684. data/app/packs/stylesheets/decidim/_hashtags.scss +0 -5
  685. data/app/packs/stylesheets/decidim/_metrics.scss +0 -70
  686. data/app/packs/stylesheets/decidim/_modal_identities.scss +0 -23
  687. data/app/presenters/decidim/admin_log/user_group_presenter.rb +0 -31
  688. data/app/presenters/decidim/hashtag_presenter.rb +0 -37
  689. data/app/presenters/decidim/metric_charts_presenter.rb +0 -92
  690. data/app/presenters/decidim/metric_object_presenter.rb +0 -32
  691. data/app/presenters/decidim/user_group_presenter.rb +0 -38
  692. data/app/queries/decidim/metric_manage.rb +0 -81
  693. data/app/queries/decidim/metric_measure.rb +0 -36
  694. data/app/queries/decidim/metrics/blocked_users_metric_manage.rb +0 -26
  695. data/app/queries/decidim/metrics/followers_metric_manage.rb +0 -65
  696. data/app/queries/decidim/metrics/participants_metric_manage.rb +0 -79
  697. data/app/queries/decidim/metrics/reported_users_metric_manage.rb +0 -26
  698. data/app/queries/decidim/metrics/user_reports_metric_manage.rb +0 -26
  699. data/app/queries/decidim/metrics/users_metric_manage.rb +0 -26
  700. data/app/queries/decidim/user_groups/accepted_memberships.rb +0 -36
  701. data/app/queries/decidim/user_groups/accepted_user_groups.rb +0 -38
  702. data/app/queries/decidim/user_groups/accepted_users.rb +0 -36
  703. data/app/queries/decidim/user_groups/admin_memberships.rb +0 -37
  704. data/app/queries/decidim/user_groups/invited_memberships.rb +0 -36
  705. data/app/queries/decidim/user_groups/manageable_user_groups.rb +0 -39
  706. data/app/queries/decidim/user_groups/member_memberships.rb +0 -37
  707. data/app/resolvers/decidim/core/metric_resolver.rb +0 -71
  708. data/app/resolvers/decidim/hashtags_resolver.rb +0 -15
  709. data/app/serializers/decidim/exporters/open_data_metric_serializer.rb +0 -22
  710. data/app/serializers/decidim/exporters/open_data_user_group_serializer.rb +0 -38
  711. data/app/views/decidim/endorsements/_identity.html.erb +0 -4
  712. data/app/views/decidim/endorsements/identities.html.erb +0 -18
  713. data/app/views/decidim/endorsements/update_buttons_and_counters.js.erb +0 -25
  714. data/app/views/decidim/group_invites/index.html.erb +0 -26
  715. data/app/views/decidim/groups/_form.html.erb +0 -17
  716. data/app/views/decidim/groups/edit.html.erb +0 -19
  717. data/app/views/decidim/groups/new.html.erb +0 -23
  718. data/app/views/decidim/messaging/conversation_mailer/comanagers_new_conversation.html.erb +0 -17
  719. data/app/views/decidim/messaging/conversation_mailer/comanagers_new_message.html.erb +0 -17
  720. data/app/views/decidim/messaging/conversation_mailer/new_group_conversation.html.erb +0 -17
  721. data/app/views/decidim/messaging/conversation_mailer/new_group_message.html.erb +0 -17
  722. data/app/views/decidim/own_user_groups/index.html.erb +0 -10
  723. data/app/views/decidim/shared/_extended_navigation_bar.html.erb +0 -50
  724. data/app/views/decidim/user_conversations/index.html.erb +0 -4
  725. data/app/views/decidim/user_conversations/show.html.erb +0 -4
  726. data/app/views/decidim/user_conversations/update.js.erb +0 -8
  727. data/config/initializers/new_framework_defaults_7_0.rb +0 -145
  728. data/lib/decidim/api/input_filters/has_hastaggable_input_filter.rb +0 -15
  729. data/lib/decidim/api/input_sorts/has_endorsable_input_sort.rb +0 -15
  730. data/lib/decidim/api/interfaces/endorsable_interface.rb +0 -19
  731. data/lib/decidim/api/types/hashtag_type.rb +0 -13
  732. data/lib/decidim/api/types/metric_history_type.rb +0 -20
  733. data/lib/decidim/api/types/metric_type.rb +0 -13
  734. data/lib/decidim/api/types/user_group_type.rb +0 -55
  735. data/lib/decidim/content_parsers/hashtag_parser.rb +0 -66
  736. data/lib/decidim/content_parsers/user_group_parser.rb +0 -33
  737. data/lib/decidim/content_renderers/hashtag_renderer.rb +0 -78
  738. data/lib/decidim/content_renderers/user_group_renderer.rb +0 -31
  739. data/lib/decidim/core/test/shared_examples/amendable_interface_examples.rb +0 -14
  740. data/lib/decidim/core/test/shared_examples/amendable_proposals_interface_examples.rb +0 -50
  741. data/lib/decidim/core/test/shared_examples/assembly_announcements_examples.rb +0 -38
  742. data/lib/decidim/core/test/shared_examples/attachable_interface_examples.rb +0 -16
  743. data/lib/decidim/core/test/shared_examples/authorable_interface_examples.rb +0 -59
  744. data/lib/decidim/core/test/shared_examples/categories_container_examples.rb +0 -22
  745. data/lib/decidim/core/test/shared_examples/categorizable_interface_examples.rb +0 -27
  746. data/lib/decidim/core/test/shared_examples/coauthorable_interface_examples.rb +0 -91
  747. data/lib/decidim/core/test/shared_examples/endorsable.rb +0 -69
  748. data/lib/decidim/core/test/shared_examples/endorsable_interface_examples.rb +0 -22
  749. data/lib/decidim/core/test/shared_examples/fingerprintable_interface_examples.rb +0 -17
  750. data/lib/decidim/core/test/shared_examples/input_filter_examples.rb +0 -118
  751. data/lib/decidim/core/test/shared_examples/input_sort_examples.rb +0 -126
  752. data/lib/decidim/core/test/shared_examples/metric_manage_shared_context.rb +0 -9
  753. data/lib/decidim/core/test/shared_examples/participatory_space_resourcable_interface_examples.rb +0 -43
  754. data/lib/decidim/core/test/shared_examples/process_announcements_examples.rb +0 -37
  755. data/lib/decidim/core/test/shared_examples/scopable_interface_examples.rb +0 -19
  756. data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +0 -298
  757. data/lib/decidim/core/test/shared_examples/taxonomizable_interface_examples.rb +0 -20
  758. data/lib/decidim/core/test/shared_examples/timestamps_interface_examples.rb +0 -21
  759. data/lib/decidim/core/test/shared_examples/traceable_interface_examples.rb +0 -47
  760. data/lib/decidim/download_your_data_serializers/download_your_data_user_group_serializer.rb +0 -21
  761. data/lib/decidim/endorsable.rb +0 -29
  762. data/lib/decidim/events/user_group_event.rb +0 -43
  763. data/lib/decidim/hashtag.rb +0 -13
  764. data/lib/decidim/metric_manifest.rb +0 -35
  765. data/lib/decidim/metric_operation.rb +0 -58
  766. data/lib/decidim/metric_operation_manifest.rb +0 -21
  767. data/lib/decidim/metric_registry.rb +0 -109
  768. data/lib/gem_overrides/shakapacker/runner.rb +0 -9
  769. data/lib/tasks/decidim_metrics_tasks.rake +0 -89
  770. /data/app/cells/decidim/{endorsement_buttons/disabled_endorsements.erb → like_buttons/disabled_likes.erb} +0 -0
  771. /data/app/packs/src/decidim/{configuration.js → refactor/implementation/configuration.js} +0 -0
  772. /data/app/packs/src/decidim/{external_domain_warning.js → refactor/implementation/external_domain_warning.js} +0 -0
  773. /data/app/packs/src/decidim/{autocomplete.js → refactor/moved/autocomplete.js} +0 -0
  774. /data/app/packs/src/decidim/{delayed.js → refactor/moved/delayed.js} +0 -0
  775. /data/app/packs/src/decidim/{focus_guard.js → refactor/moved/focus_guard.js} +0 -0
  776. /data/app/packs/src/decidim/{history.js → refactor/moved/history.js} +0 -0
  777. /data/app/packs/src/decidim/{i18n.js → refactor/moved/i18n.js} +0 -0
  778. /data/lib/decidim/core/test/shared_examples/{endorsements_controller_shared_context.rb → likes_controller_shared_context.rb} +0 -0
  779. /data/{app/helpers → lib}/decidim/resource_helper.rb +0 -0
  780. /data/lib/decidim/{webpacker → shakapacker}/esbuild.config.js +0 -0
  781. /data/lib/decidim/{webpacker → shakapacker}/postcss.config.js +0 -0
  782. /data/lib/decidim/{webpacker → shakapacker}/tsconfig.json +0 -0
  783. /data/lib/decidim/{webpacker → shakapacker}/webpack/.modernizrrc +0 -0
  784. /data/lib/decidim/{webpacker → shakapacker}/webpack/webpack.config.js +0 -0
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # A command with all the business logic to unlike a resource.
5
+ class UnlikeResource < Decidim::Command
6
+ # Public: Initializes the command.
7
+ #
8
+ # resource - A Decidim::Likeable object.
9
+ # current_user - The current user.
10
+ def initialize(resource, current_user)
11
+ @resource = resource
12
+ @current_user = current_user
13
+ end
14
+
15
+ # Executes the command. Broadcasts these events:
16
+ #
17
+ # - :ok when everything is valid, together with the resource.
18
+ # - :invalid if the form was not valid and we could not proceed.
19
+ #
20
+ # Returns nothing.
21
+ def call
22
+ destroy_resource_like
23
+ broadcast(:ok, @resource)
24
+ end
25
+
26
+ private
27
+
28
+ def destroy_resource_like
29
+ query = @resource.likes.where(author: @current_user)
30
+
31
+ query.destroy_all
32
+ end
33
+ end
34
+ end
@@ -56,7 +56,7 @@ module Decidim
56
56
 
57
57
  def update_avatar
58
58
  if @form.avatar.present?
59
- current_user.avatar.attach(@form.avatar)
59
+ current_user.avatar.attach(@form.avatar.signed_id)
60
60
  elsif @form.remove_avatar
61
61
  current_user.avatar = nil
62
62
  end
@@ -30,7 +30,7 @@ module Decidim
30
30
  if onboarding_manager.valid?
31
31
  authorizations = action_authorized_to(onboarding_manager.action, **onboarding_manager.action_authorized_resources)
32
32
 
33
- return redirect_to decidim_verifications.onboarding_pending_authorizations_path unless authorizations_permitted_paths?(authorizations, onboarding_manager)
33
+ return redirect_to pending_authorizations_path unless authorizations_permitted_paths?(authorizations, onboarding_manager)
34
34
 
35
35
  if authorizations.global_code == :unauthorized
36
36
  flash[:alert] = t("unauthorized", scope: "decidim.core.actions")
@@ -77,11 +77,15 @@ module Decidim
77
77
  []
78
78
  end
79
79
  paths_list.prepend(
80
- decidim_verifications.onboarding_pending_authorizations_path,
80
+ pending_authorizations_path,
81
81
  decidim.page_path(terms_of_service_page)
82
82
  )
83
83
 
84
84
  paths_list.find { |el| /\A#{URI.parse(el).path}/.match?(request.path) }
85
85
  end
86
+
87
+ def pending_authorizations_path
88
+ onboarding_manager.authorization_path || decidim_verifications.onboarding_pending_authorizations_path
89
+ end
86
90
  end
87
91
  end
@@ -10,7 +10,6 @@ module Decidim
10
10
  module UserProfile
11
11
  extend ActiveSupport::Concern
12
12
  include FormFactory
13
- include UserGroups
14
13
  include HasAccountBreadcrumb
15
14
 
16
15
  included do
@@ -31,7 +31,7 @@ module Decidim
31
31
  on(:invalid) do |password|
32
32
  fetch_entered_password(password)
33
33
  flash[:alert] = t("account.update.error", scope: "decidim")
34
- render action: :show
34
+ render action: :show, status: :unprocessable_entity
35
35
  end
36
36
  end
37
37
  end
@@ -6,7 +6,6 @@ module Decidim
6
6
  include FormFactory
7
7
  include HasSpecificBreadcrumb
8
8
  helper Decidim::ResourceReferenceHelper
9
- helper UserGroupHelper
10
9
 
11
10
  before_action :authenticate_user!
12
11
  helper_method :amendment, :amendable, :emendation
@@ -39,7 +38,7 @@ module Decidim
39
38
 
40
39
  on(:invalid) do
41
40
  flash.now[:alert] = t("created.error", scope: "decidim.amendments")
42
- render :new
41
+ render :new, status: :unprocessable_entity
43
42
  end
44
43
  end
45
44
  end
@@ -63,7 +62,7 @@ module Decidim
63
62
 
64
63
  on(:invalid) do
65
64
  flash.now[:alert] = t("error", scope: "decidim.amendments.update_draft")
66
- render :edit_draft
65
+ render :edit_draft, status: :unprocessable_entity
67
66
  end
68
67
  end
69
68
  end
@@ -101,7 +100,7 @@ module Decidim
101
100
 
102
101
  on(:invalid) do
103
102
  flash.now[:alert] = t("error", scope: "decidim.amendments.publish_draft")
104
- render :edit_draft
103
+ render :edit_draft, status: :unprocessable_entity
105
104
  end
106
105
  end
107
106
  end
@@ -161,7 +160,7 @@ module Decidim
161
160
 
162
161
  on(:invalid) do
163
162
  flash.now[:alert] = t("accepted.error", scope: "decidim.amendments")
164
- render :review
163
+ render :review, status: :unprocessable_entity
165
164
  end
166
165
  end
167
166
  end
@@ -41,7 +41,6 @@ module Decidim
41
41
  helper Decidim::ViewHooksHelper
42
42
  helper Decidim::CardHelper
43
43
  helper Decidim::SanitizeHelper
44
- helper Decidim::TwitterSearchHelper
45
44
  helper Decidim::SocialShareButtonHelper
46
45
  helper Decidim::FiltersHelper
47
46
  helper Decidim::OnboardingActionHelper
@@ -68,6 +67,8 @@ module Decidim
68
67
 
69
68
  private
70
69
 
70
+ def allow_browser(**); end
71
+
71
72
  # This overrides Devise's method for extracting the path from the URL. We
72
73
  # want to ensure the path to be stored in the cookie is not too long in
73
74
  # order to avoid ActionDispatch::Cookies::CookieOverflow exception. If the
@@ -7,8 +7,6 @@ module Decidim
7
7
  include Decidim::DeviseControllers
8
8
  include Decidim::OnboardingActionMethods
9
9
 
10
- helper_method :new_user_group_session_path
11
-
12
10
  def create
13
11
  super do |resource|
14
12
  resource.errors.delete(:decidim_organization_id) if resource.errors.any?
@@ -28,10 +26,7 @@ module Decidim
28
26
  super.merge(decidim_organization_id: current_organization.id)
29
27
  end
30
28
 
31
- # Overwrites the default method to handle user groups confirmations.
32
29
  def after_confirmation_path_for(resource_name, resource)
33
- return profile_path(resource.nickname) if resource_name == :user_group
34
-
35
30
  sign_in(resource)
36
31
 
37
32
  store_onboarding_cookie_data!(resource)
@@ -34,7 +34,7 @@ module Decidim
34
34
 
35
35
  on(:invalid) do
36
36
  set_flash_message :notice, :success, kind: @form.provider.capitalize
37
- render :new
37
+ render :new, status: :unprocessable_entity
38
38
  end
39
39
 
40
40
  on(:add_tos_errors) do
@@ -36,7 +36,7 @@ module Decidim
36
36
  on(:invalid) do
37
37
  flash.now[:alert] = t("passwords.update.error", scope: "decidim")
38
38
  resource.errors.errors.concat(@form.errors.errors)
39
- render action: "edit"
39
+ render action: "edit", status: :unprocessable_entity
40
40
  end
41
41
  end
42
42
  end
@@ -40,7 +40,7 @@ module Decidim
40
40
 
41
41
  on(:invalid) do
42
42
  flash.now[:alert] = t("error", scope: "decidim.devise.registrations.create")
43
- render :new
43
+ render :new, status: :unprocessable_entity
44
44
  end
45
45
  end
46
46
  end
@@ -6,7 +6,18 @@ module Decidim
6
6
  class AuthorizationsController < ::Doorkeeper::AuthorizationsController
7
7
  include HasSpecificBreadcrumb
8
8
 
9
- helper_method :oauth_application
9
+ helper_method :oauth_application, :all_abilities?
10
+
11
+ def new
12
+ @scopes =
13
+ if pre_auth.authorizable?
14
+ pre_auth.scopes
15
+ else
16
+ []
17
+ end
18
+
19
+ super
20
+ end
10
21
 
11
22
  def oauth_application
12
23
  @oauth_application ||= Decidim::OAuthApplication.find_by(uid: params[:client_id])
@@ -18,6 +29,13 @@ module Decidim
18
29
  active: true
19
30
  }
20
31
  end
32
+
33
+ private
34
+
35
+ def all_abilities?
36
+ %w(api:read api:write).all? { |scope| @scopes.include?(scope) } &&
37
+ %w(profile user).any? { |scope| @scopes.include?(scope) }
38
+ end
21
39
  end
22
40
  end
23
41
  end
@@ -10,7 +10,6 @@ module Decidim
10
10
 
11
11
  helper_method :help_definitions
12
12
 
13
- # i18n-tasks-use t('decidim.download_your_data.show.answers')
14
13
  # i18n-tasks-use t('decidim.download_your_data.show.assemblies')
15
14
  # i18n-tasks-use t('decidim.download_your_data.show.debate_comments')
16
15
  # i18n-tasks-use t('decidim.download_your_data.show.debates')
@@ -21,9 +20,10 @@ module Decidim
21
20
  # i18n-tasks-use t('decidim.download_your_data.show.projects')
22
21
  # i18n-tasks-use t('decidim.download_your_data.show.proposal_comments')
23
22
  # i18n-tasks-use t('decidim.download_your_data.show.proposals')
23
+ # i18n-tasks-use t('decidim.download_your_data.show.responses')
24
24
  # i18n-tasks-use t('decidim.download_your_data.show.result_comments')
25
25
  # i18n-tasks-use t('decidim.download_your_data.show.results')
26
- # i18n-tasks-use t('decidim.download_your_data.show.survey_user_answers')
26
+ # i18n-tasks-use t('decidim.download_your_data.show.survey_user_responses')
27
27
  def show
28
28
  enforce_permission_to(:show, :user, current_user:)
29
29
 
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # Exposes the `Likes` so that users can like resources.
5
+ class LikesController < Decidim::Components::BaseController
6
+ # we need to +include+ to be able to call :like_button from the view
7
+ include Decidim::LikeableHelper
8
+ helper_method :like_button
9
+ # we need to declare with +helper+ to be able to call :render_like_identity from the views
10
+ helper Decidim::LikeableHelper
11
+ helper_method :resource
12
+
13
+ before_action :authenticate_user!
14
+
15
+ def create
16
+ enforce_permission_to(:create, :like, resource:)
17
+
18
+ LikeResource.call(resource, current_user) do
19
+ on(:ok) do
20
+ resource.reload
21
+ render :update_buttons_and_counters
22
+ end
23
+
24
+ on(:invalid) do
25
+ render json: { error: I18n.t("resource_likes.create.error", scope: "decidim") }, status: :unprocessable_entity
26
+ end
27
+ end
28
+ end
29
+
30
+ def destroy
31
+ enforce_permission_to(:withdraw, :like, resource:)
32
+
33
+ UnlikeResource.call(resource, current_user) do
34
+ on(:ok) do
35
+ resource.reload
36
+ render :update_buttons_and_counters
37
+ end
38
+ end
39
+ end
40
+
41
+ # should be pubic in order to be visible in NeedsPermission#permissions_context
42
+ def current_component
43
+ resource.component
44
+ end
45
+
46
+ private
47
+
48
+ def resource
49
+ gid_param = params[:id] || params[:resource_id]
50
+ @resource ||= GlobalID::Locator.locate(GlobalID.parse(gid_param))
51
+ end
52
+
53
+ def current_participatory_space
54
+ current_component.participatory_space
55
+ end
56
+ end
57
+ end
@@ -10,6 +10,7 @@ module Decidim
10
10
  helper_method :external_url
11
11
 
12
12
  before_action :parse_url
13
+
13
14
  rescue_from Decidim::InvalidUrlError, with: :modal
14
15
  rescue_from URI::InvalidURIError, with: :modal
15
16
 
@@ -14,7 +14,7 @@ module Decidim
14
14
 
15
15
  before_action :authenticate_user!
16
16
 
17
- helper_method :conversation, :user_grouped_messages, :sender_is_user?, :user_groups, :validation_messages
17
+ helper_method :conversation, :user_grouped_messages, :sender_is_user?, :validation_messages
18
18
 
19
19
  # Shows the form to initiate a conversation with an user (the recipient)
20
20
  # recipient is passed via GET parameter:
@@ -102,13 +102,6 @@ module Decidim
102
102
 
103
103
  private
104
104
 
105
- # deprecated
106
- def user_groups
107
- return [] unless current_organization.user_groups_enabled?
108
-
109
- current_user.manageable_user_groups
110
- end
111
-
112
105
  def validation_messages
113
106
  @validation_messages ||= []
114
107
  end
@@ -34,7 +34,7 @@ module Decidim
34
34
 
35
35
  on(:invalid) do
36
36
  flash.now[:alert] = t("newsletters.unsubscribe.error", scope: "decidim")
37
- render action: :unsubscribe
37
+ render action: :unsubscribe, status: :unprocessable_entity
38
38
  end
39
39
  end
40
40
  else
@@ -17,14 +17,14 @@ module Decidim
17
17
  UpdateNotificationsSettings.call(@notifications_settings) do
18
18
  on(:ok) do
19
19
  flash.now[:notice] = t("notifications_settings.update.success", scope: "decidim")
20
+ render action: :show
20
21
  end
21
22
 
22
23
  on(:invalid) do
23
24
  flash.now[:alert] = t("notifications_settings.update.error", scope: "decidim")
25
+ render action: :show, status: :unprocessable_entity
24
26
  end
25
27
  end
26
-
27
- render action: :show
28
28
  end
29
29
  end
30
30
  end
@@ -6,7 +6,6 @@ module Decidim
6
6
  layout "layouts/decidim/application"
7
7
 
8
8
  helper_method :page, :pages, :page_content_blocks
9
- helper CtaButtonHelper
10
9
  helper Decidim::SanitizeHelper
11
10
 
12
11
  before_action :legacy_redirect, :set_default_request_format
@@ -4,11 +4,7 @@ module Decidim
4
4
  # The controller to handle the user's public profile page.
5
5
  #
6
6
  # i18n-tasks-use t('decidim.profiles.show.badges')
7
- # i18n-tasks-use t('decidim.profiles.show.groups')
8
- # i18n-tasks-use t('decidim.profiles.show.group_admins')
9
- # i18n-tasks-use t('decidim.profiles.show.group_members')
10
7
  class ProfilesController < Decidim::ApplicationController
11
- include UserGroups
12
8
  include Flaggable
13
9
  include HasProfileBreadcrumb
14
10
 
@@ -17,20 +13,13 @@ module Decidim
17
13
  helper_method :profile_holder, :active_content, :context_menu
18
14
 
19
15
  before_action :ensure_profile_holder
20
- before_action :ensure_profile_holder_is_a_group, only: [:members]
21
- before_action :ensure_profile_holder_is_a_user, only: [:groups, :following]
16
+ before_action :ensure_profile_holder_is_a_user, only: :following
22
17
  before_action :ensure_user_not_blocked
23
18
 
24
19
  def show
25
- return redirect_to profile_members_path if profile_holder.is_a?(Decidim::UserGroup)
26
-
27
20
  redirect_to profile_activity_path(nickname: params[:nickname].downcase)
28
21
  end
29
22
 
30
- def tooltip
31
- render json: { data: cell("decidim/author", profile_holder.presenter).profile_minicard }
32
- end
33
-
34
23
  def following
35
24
  @content_cell = "decidim/following"
36
25
  @title_key = "following"
@@ -49,46 +38,6 @@ module Decidim
49
38
  render :show
50
39
  end
51
40
 
52
- def groups
53
- enforce_user_groups_enabled
54
-
55
- @content_cell = "decidim/groups"
56
- @title_key = "groups"
57
- render :show
58
- end
59
-
60
- def members
61
- enforce_user_groups_enabled
62
-
63
- @content_cell = "decidim/members"
64
- @title_key = "members"
65
- render :show
66
- end
67
-
68
- def group_admins
69
- enforce_permission_to :manage, :user_group, user_group: profile_holder
70
-
71
- @content_cell = "decidim/group_admins"
72
- @title_key = "group_admins"
73
- render :show
74
- end
75
-
76
- def group_members
77
- enforce_permission_to :manage, :user_group, user_group: profile_holder
78
-
79
- @content_cell = "decidim/group_members"
80
- @title_key = "group_members"
81
- render :show
82
- end
83
-
84
- def group_invites
85
- enforce_permission_to :manage, :user_group, user_group: profile_holder
86
-
87
- @content_cell = "decidim/group_invites"
88
- @title_key = "group_invites"
89
- render :show
90
- end
91
-
92
41
  def activity
93
42
  @content_cell = "decidim/user_activity"
94
43
  @title_key = "activity"
@@ -101,16 +50,12 @@ module Decidim
101
50
  raise ActionController::RoutingError, "Blocked User" if profile_holder&.blocked? && !current_user&.admin?
102
51
  end
103
52
 
104
- def ensure_profile_holder_is_a_group
105
- raise ActionController::RoutingError, "No user group with the given nickname" unless profile_holder.is_a?(Decidim::UserGroup)
106
- end
107
-
108
53
  def ensure_profile_holder_is_a_user
109
54
  raise ActionController::RoutingError, "No user with the given nickname" unless profile_holder.is_a?(Decidim::User)
110
55
  end
111
56
 
112
57
  def ensure_profile_holder
113
- raise ActionController::RoutingError, "No user or user group with the given nickname" if !profile_holder || profile_holder.nickname.blank?
58
+ raise ActionController::RoutingError, "No user with the given nickname" if !profile_holder || profile_holder.nickname.blank?
114
59
  end
115
60
 
116
61
  def profile_holder
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rqrcode"
4
+
5
+ module Decidim
6
+ class QrController < Decidim::ApplicationController
7
+ include Decidim::OrganizationHelper
8
+ include Decidim::QrCodeHelper
9
+
10
+ helper_method :resource, :qr_code, :qr_code_image
11
+ before_action :validate_resource
12
+ before_action :validate_component
13
+ before_action :validate_participatory_space
14
+
15
+ layout false
16
+
17
+ def show
18
+ respond_to do |format|
19
+ format.html
20
+ format.png { send_data(qr_code.as_png(size: 500), filename: "qr-#{organization_name}-#{parametrized_title}.png") }
21
+ end
22
+ end
23
+
24
+ # needs to be public so that short link works
25
+ def current_component = resource.try(:component)
26
+
27
+ # needs to be public so that short link works
28
+ def current_participatory_space
29
+ return resource if resource.is_a?(Decidim::Participable)
30
+
31
+ resource.try(:participatory_space)
32
+ end
33
+
34
+ private
35
+
36
+ def validate_resource
37
+ raise ActiveRecord::RecordNotFound if resource.blank?
38
+ raise ActiveRecord::RecordNotFound if resource.respond_to?(:hidden?) && resource.hidden?
39
+ raise ActiveRecord::RecordNotFound if resource.is_a?(Decidim::Publicable) && !resource.published?
40
+ end
41
+
42
+ def validate_component
43
+ return unless resource.respond_to?(:component) && resource.component.present?
44
+
45
+ raise ActiveRecord::RecordNotFound unless resource.component.published?
46
+ end
47
+
48
+ def validate_participatory_space
49
+ raise ActiveRecord::RecordNotFound if resource.respond_to?(:participatory_space) && !resource.participatory_space.published?
50
+ end
51
+
52
+ def processed_params
53
+ return {} if resource.is_a?(Decidim::Participable)
54
+
55
+ {
56
+ participatory_process_slug: current_participatory_space.slug,
57
+ component_id: current_component&.id&.to_s,
58
+ id: resource.id.to_s
59
+ }.with_indifferent_access
60
+ end
61
+
62
+ def resource
63
+ @resource ||= GlobalID::Locator.locate_signed(params[:resource])
64
+ end
65
+
66
+ def parametrized_title
67
+ [
68
+ resource.presenter.title(html_escape: true).parameterize,
69
+ resource.id
70
+ ].join("-")
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ class ResourceAutocompleteController < Decidim::ApplicationController
5
+ def index
6
+ respond_to do |format|
7
+ format.json do
8
+ if term.blank?
9
+ render json: [{ title: t("decidim.resource_autocomplete.help"), help: true }]
10
+ else
11
+ render json: serialized_results
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def allowed_resource_types
20
+ %w(Decidim::Proposals::Proposal)
21
+ end
22
+
23
+ def serialized_results
24
+ search_results.map do |result|
25
+ {
26
+ gid: result.resource_global_id,
27
+ title: result.content_a
28
+ }
29
+ end
30
+ end
31
+
32
+ def search_results
33
+ Decidim::SearchableResource
34
+ .where(
35
+ resource_type: allowed_resource_types,
36
+ organization: current_organization,
37
+ decidim_participatory_space: current_participatory_space,
38
+ locale: I18n.locale
39
+ )
40
+ .autocomplete_search(term)
41
+ .limit(10)
42
+ end
43
+
44
+ def term
45
+ params[:term]
46
+ end
47
+
48
+ def participatory_space_gid
49
+ params[:participatory_space_gid]
50
+ end
51
+
52
+ def current_participatory_space
53
+ @current_participatory_space ||= GlobalID::Locator.locate(participatory_space_gid)
54
+ end
55
+ end
56
+ end
@@ -4,7 +4,6 @@ module Decidim
4
4
  # The controller to show all the last activities in a Decidim Organization.
5
5
  class UserActivitiesController < Decidim::ApplicationController
6
6
  include Paginable
7
- include UserGroups
8
7
  include FilterResource
9
8
  include Flaggable
10
9
  include HasProfileBreadcrumb
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ class ResourceLikedEvent < Decidim::Events::SimpleEvent
5
+ i18n_attributes :liker_nickname, :liker_name, :liker_path, :nickname, :resource_type
6
+
7
+ delegate :nickname, :name, to: :liker, prefix: true
8
+
9
+ def nickname
10
+ liker_nickname
11
+ end
12
+
13
+ def liker_path
14
+ liker.profile_path
15
+ end
16
+
17
+ def resource_text
18
+ return resource.body if resource.respond_to? :body
19
+ return resource.description if resource.respond_to? :description
20
+ end
21
+
22
+ def resource_type
23
+ resource.class.model_name.human
24
+ end
25
+
26
+ private
27
+
28
+ def liker
29
+ @liker ||= Decidim::UserPresenter.new(liker_user)
30
+ end
31
+
32
+ def liker_user
33
+ @liker_user ||= Decidim::User.find_by(id: extra[:liker_id])
34
+ end
35
+ end
36
+ end
@@ -7,7 +7,6 @@ module Decidim
7
7
  mimic :amendment
8
8
 
9
9
  attribute :amendable_gid, String
10
- attribute :user_group_id, Integer
11
10
  attribute :emendation_params, Hash
12
11
 
13
12
  validates :amendable_gid, presence: true
@@ -7,7 +7,6 @@ module Decidim
7
7
  mimic :amendment
8
8
 
9
9
  attribute :id, Integer
10
- attribute :user_group_id, Integer
11
10
  attribute :emendation_params, Hash
12
11
 
13
12
  validates :id, presence: true