decidim-core 0.30.4 → 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 (794) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -4
  3. data/app/cells/decidim/activity_cell.rb +0 -9
  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 +4 -7
  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/private_export.rb +0 -4
  151. data/app/models/decidim/reminder_record.rb +1 -1
  152. data/app/models/decidim/searchable_resource.rb +16 -0
  153. data/app/models/decidim/taxonomy.rb +6 -1
  154. data/app/models/decidim/user.rb +32 -15
  155. data/app/models/decidim/user_base_entity.rb +2 -2
  156. data/app/packs/entrypoints/decidim_conference_diploma.scss +2 -2
  157. data/app/packs/entrypoints/decidim_core.scss +2 -2
  158. data/app/packs/entrypoints/decidim_editor.js +0 -4
  159. data/app/packs/entrypoints/decidim_map.scss +2 -2
  160. data/app/packs/entrypoints/decidim_overrides.scss +1 -1
  161. data/app/packs/entrypoints/decidim_qr.js +1 -0
  162. data/app/packs/images/decidim/remixicon.symbol.svg +3 -3
  163. data/app/packs/src/decidim/a11y.js +1 -120
  164. data/app/packs/src/decidim/append_redirect_url_to_modals.js +1 -1
  165. data/app/packs/src/decidim/attachments/file_or_link_tabs.js +1 -1
  166. data/app/packs/src/decidim/confirm.js +27 -20
  167. data/app/packs/src/decidim/controllers/.keep +0 -0
  168. data/app/packs/src/decidim/controllers/accordion/controller.js +100 -0
  169. data/app/packs/src/decidim/controllers/account_form/account_form.test.js +423 -0
  170. data/app/packs/src/decidim/controllers/account_form/controller.js +69 -0
  171. data/app/packs/src/decidim/{input_character_counter.js → controllers/character_counter/controller.js} +90 -106
  172. data/app/packs/src/decidim/controllers/clipboard_copy/clipboard_copy.test.js +305 -0
  173. data/app/packs/src/decidim/controllers/clipboard_copy/controller.js +403 -0
  174. data/app/packs/src/decidim/controllers/date_picker/controller.js +12 -0
  175. data/app/packs/src/decidim/controllers/delete_account_form/controller.js +45 -0
  176. data/app/packs/src/decidim/controllers/delete_account_form/delete_account_form.test.js +216 -0
  177. data/app/packs/src/decidim/controllers/dropdown/controller.js +125 -0
  178. data/app/packs/src/decidim/controllers/editor/controller.js +8 -0
  179. data/app/packs/src/decidim/controllers/emoji/controller.js +26 -0
  180. data/app/packs/src/decidim/{input_emoji.js → controllers/emoji/emoji.js} +1 -15
  181. data/app/packs/src/decidim/{form_filter.js → controllers/form_filter/controller.js} +68 -57
  182. data/app/packs/src/decidim/controllers/form_filter/form_filter.test.js +648 -0
  183. data/app/packs/src/decidim/controllers/form_validator/controller.js +23 -0
  184. data/app/packs/src/decidim/controllers/form_validator/form_validator.js +789 -0
  185. data/app/packs/src/decidim/controllers/form_validator/form_validator.test.js +685 -0
  186. data/app/packs/src/decidim/controllers/impersonation_warning/controller.js +137 -0
  187. data/app/packs/src/decidim/controllers/impersonation_warning/impersonation.test.js +382 -0
  188. data/app/packs/src/decidim/controllers/input_tags/controller.js +28 -0
  189. data/app/packs/src/decidim/controllers/mention/controller.js +243 -0
  190. data/app/packs/src/decidim/controllers/mention/input_mentions.test.js +562 -0
  191. data/app/packs/src/decidim/controllers/multiple_mentions/controller.js +215 -0
  192. data/app/packs/src/decidim/controllers/multiple_mentions/input_multiple_mentions.test.js +645 -0
  193. data/app/packs/src/decidim/controllers/notification_action/controller.js +210 -0
  194. data/app/packs/src/decidim/controllers/notification_action/notification_action.test.js +388 -0
  195. data/app/packs/src/decidim/controllers/password_toggler/controller.js +232 -0
  196. data/app/packs/src/decidim/controllers/password_toggler/password_toggler.test.js +229 -0
  197. data/app/packs/src/decidim/controllers/report_form/controller.js +184 -0
  198. data/app/packs/src/decidim/controllers/report_form/report_form_manager.test.js +511 -0
  199. data/app/packs/src/decidim/controllers/scroll_to_last/controller.js +9 -0
  200. data/app/packs/src/decidim/controllers/scroll_to_last/scroll_to_last_child.test.js +225 -0
  201. data/app/packs/src/decidim/controllers/sticky_buttons/controller.js +55 -0
  202. data/app/packs/src/decidim/controllers/sticky_buttons/sticky_buttons.test.js +334 -0
  203. data/app/packs/src/decidim/controllers/sticky_header/controller.js +116 -0
  204. data/app/packs/src/decidim/controllers/sticky_header/sticky_header.test.js +320 -0
  205. data/app/packs/src/decidim/controllers/toggle/controller.js +111 -0
  206. data/app/packs/src/decidim/controllers/toggle/toggle.test.js +260 -0
  207. data/app/packs/src/decidim/controllers/tooltip/controller.js +287 -0
  208. data/app/packs/src/decidim/controllers/tooltip/tooltip.test.js +380 -0
  209. data/app/packs/src/decidim/controllers/user_registration_form/controller.js +160 -0
  210. data/app/packs/src/decidim/controllers/user_registration_form/omniauth_registration_form.test.js +441 -0
  211. data/app/packs/src/decidim/controllers/user_registration_form/user_registration_form.test.js +386 -0
  212. data/app/packs/src/decidim/data_consent/index.js +1 -1
  213. data/app/packs/src/decidim/datalist_select.js +1 -1
  214. data/app/packs/src/decidim/datepicker/form_datepicker.js +1 -1
  215. data/app/packs/src/decidim/datepicker/generate_datepicker.js +2 -2
  216. data/app/packs/src/decidim/datepicker/generate_timepicker.js +2 -2
  217. data/app/packs/src/decidim/direct_uploads/upload_field.js +3 -5
  218. data/app/packs/src/decidim/direct_uploads/upload_modal.js +1 -1
  219. data/app/packs/src/decidim/dropdown_menu.js +1 -1
  220. data/app/packs/src/decidim/editor/common/input_dialog.js +1 -1
  221. data/app/packs/src/decidim/editor/common/suggestion.js +10 -2
  222. data/app/packs/src/decidim/editor/common/upload_dialog.js +1 -1
  223. data/app/packs/src/decidim/editor/extensions/decidim_kit/index.js +7 -7
  224. data/app/packs/src/decidim/editor/extensions/emoji/index.js +2 -3
  225. data/app/packs/src/decidim/editor/extensions/image/index.js +1 -1
  226. data/app/packs/src/decidim/editor/extensions/image/node_view.js +1 -1
  227. data/app/packs/src/decidim/editor/extensions/link/bubble_menu.js +1 -1
  228. data/app/packs/src/decidim/editor/extensions/link/index.js +1 -1
  229. data/app/packs/src/decidim/editor/extensions/mention/index.js +1 -2
  230. data/app/packs/src/decidim/editor/extensions/mention_resource/index.js +69 -0
  231. data/app/packs/src/decidim/editor/extensions/video_embed/index.js +1 -1
  232. data/app/packs/src/decidim/editor/index.js +6 -5
  233. data/app/packs/src/decidim/editor/test/extensions/decidim_kit.test.js +1 -2
  234. data/app/packs/src/decidim/editor/test/extensions/emoji.test.js +17 -0
  235. data/app/packs/src/decidim/editor/test/extensions/heading.test.js +2 -2
  236. data/app/packs/src/decidim/editor/toolbar.js +1 -1
  237. data/app/packs/src/decidim/form_attachments.js +1 -1
  238. data/app/packs/src/decidim/geocoding/attach_input.js +3 -0
  239. data/app/packs/src/decidim/geocoding/provider/here.js +1 -1
  240. data/app/packs/src/decidim/geocoding/provider/photon.js +1 -1
  241. data/app/packs/src/decidim/geocoding/reverse_geocoding.js +2 -2
  242. data/app/packs/src/decidim/geocoding.js +2 -2
  243. data/app/packs/src/decidim/index.js +127 -95
  244. data/app/packs/src/decidim/map/controller/markers.js +1 -3
  245. data/app/packs/src/decidim/map/integration/forms.js +1 -1
  246. data/app/packs/src/decidim/map/legacy.js +1 -1
  247. data/app/packs/src/decidim/map/provider/default.js +1 -1
  248. data/app/packs/src/decidim/map/provider/here.js +1 -1
  249. data/app/packs/src/decidim/map.js +1 -1
  250. data/app/packs/src/decidim/{external_link.js → refactor/implementation/external_link.js} +1 -1
  251. data/app/packs/src/decidim/{onboarding_pending_action.js → refactor/integration/onboarding_pending_action.js} +4 -4
  252. data/app/packs/src/decidim/{check_boxes_tree.js → refactor/moved/check_boxes_tree.js} +24 -9
  253. data/app/packs/src/decidim/{i18n.test.js → refactor/moved/i18n.test.js} +1 -1
  254. data/app/packs/src/decidim/{icon.js → refactor/moved/icon.js} +2 -0
  255. data/app/packs/src/decidim/refactor/support/stimulus.js +39 -0
  256. data/app/packs/src/decidim/refactor/test/configuration.test.js +360 -0
  257. data/app/packs/src/decidim/{external_domain_warning.test.js → refactor/test/external_domain_warning.test.js} +1 -1
  258. data/app/packs/src/decidim/{external_link.test.js → refactor/test/external_link.test.js} +1 -1
  259. data/app/packs/src/decidim/results_listing.js +2 -2
  260. data/app/packs/src/decidim/security/selfxss_warning.js +1 -1
  261. data/app/packs/src/decidim/session_timeouter.js +1 -1
  262. data/app/packs/src/decidim/sw/push-permissions.js +1 -1
  263. data/app/packs/src/decidim/utilities/dom.js +1 -1
  264. data/app/packs/stylesheets/decidim/_accordion.scss +37 -3
  265. data/app/packs/stylesheets/decidim/_author.scss +0 -29
  266. data/app/packs/stylesheets/decidim/_buttons.scss +4 -0
  267. data/app/packs/stylesheets/decidim/_callout.scss +1 -1
  268. data/app/packs/stylesheets/decidim/_cards.scss +2 -6
  269. data/app/packs/stylesheets/decidim/_content_blocks.scss +1 -1
  270. data/app/packs/stylesheets/decidim/_cookies.scss +1 -1
  271. data/app/packs/stylesheets/decidim/_datepicker.scss +0 -4
  272. data/app/packs/stylesheets/decidim/_dropdown.scss +56 -19
  273. data/app/packs/stylesheets/decidim/_footer.scss +0 -5
  274. data/app/packs/stylesheets/decidim/_forms.scss +6 -6
  275. data/app/packs/stylesheets/decidim/_header.scss +17 -1
  276. data/app/packs/stylesheets/decidim/_labels.scss +1 -1
  277. data/app/packs/stylesheets/decidim/_layout.scss +12 -2
  278. data/app/packs/stylesheets/decidim/{_endorsers_list.scss → _likes_list.scss} +1 -1
  279. data/app/packs/stylesheets/decidim/_modal.scss +5 -1
  280. data/app/packs/stylesheets/decidim/_modal_share.scss +83 -9
  281. data/app/packs/stylesheets/decidim/_modal_update.scss +1 -5
  282. data/app/packs/stylesheets/decidim/_participatory_spaces.scss +1 -1
  283. data/app/packs/stylesheets/decidim/_profile.scss +6 -6
  284. data/app/packs/stylesheets/decidim/_rich_text.scss +13 -0
  285. data/app/packs/stylesheets/decidim/_statistics.scss +35 -3
  286. data/app/packs/stylesheets/decidim/_tooltip.scss +1 -1
  287. data/app/packs/stylesheets/decidim/_typography.scss +6 -0
  288. data/app/packs/stylesheets/decidim/_wizard_steps.scss +1 -1
  289. data/app/packs/stylesheets/decidim/application.scss +76 -76
  290. data/app/packs/stylesheets/decidim/editor.scss +12 -15
  291. data/app/packs/stylesheets/decidim/legacy/email.scss +6 -5
  292. data/app/packs/stylesheets/decidim/map.scss +5 -3
  293. data/app/packs/stylesheets/decidim/qr.scss +65 -0
  294. data/app/permissions/decidim/default_permissions.rb +16 -0
  295. data/app/permissions/decidim/permissions.rb +5 -26
  296. data/app/presenters/decidim/admin_log/base_user_presenter.rb +2 -2
  297. data/app/presenters/decidim/admin_log/organization_presenter.rb +0 -15
  298. data/app/presenters/decidim/home_stats_presenter.rb +4 -54
  299. data/app/presenters/decidim/log/base_presenter.rb +1 -1
  300. data/app/presenters/decidim/menu_item_presenter.rb +10 -3
  301. data/app/presenters/decidim/official_author_presenter.rb +0 -4
  302. data/app/presenters/decidim/participatory_space_private_user_presenter.rb +0 -4
  303. data/app/presenters/decidim/resource_locator_presenter.rb +15 -4
  304. data/app/presenters/decidim/resource_presenter.rb +8 -8
  305. data/app/presenters/decidim/stats_presenter.rb +39 -60
  306. data/app/presenters/decidim/taxonomy_presenter.rb +5 -1
  307. data/app/presenters/decidim/user_presenter.rb +0 -6
  308. data/app/queries/decidim/authorized_users.rb +26 -0
  309. data/app/queries/decidim/inactive_users_query.rb +31 -0
  310. data/app/queries/decidim/public_activities.rb +2 -2
  311. data/app/queries/decidim/stats_followers_count.rb +43 -0
  312. data/app/queries/decidim/stats_participants_count.rb +102 -0
  313. data/app/serializers/decidim/exporters/open_data_user_serializer.rb +1 -5
  314. data/app/serializers/decidim/exporters/participatory_space_serializer.rb +0 -1
  315. data/app/services/decidim/action_logger.rb +2 -1
  316. data/app/services/decidim/base_diff_renderer.rb +0 -17
  317. data/app/services/decidim/download_your_data_exporter.rb +4 -15
  318. data/app/services/decidim/onboarding_manager.rb +4 -0
  319. data/app/services/decidim/open_data_exporter.rb +20 -13
  320. data/app/services/decidim/send_push_notification.rb +4 -3
  321. data/app/services/decidim/traceability.rb +1 -1
  322. data/app/validators/etiquette_validator.rb +9 -2
  323. data/app/validators/password_validator.rb +1 -3
  324. data/app/validators/translated_etiquette_validator.rb +1 -0
  325. data/app/views/decidim/account/_old_password_field.html.erb +1 -1
  326. data/app/views/decidim/account/_password_fields.html.erb +1 -1
  327. data/app/views/decidim/account/delete.html.erb +1 -1
  328. data/app/views/decidim/account/show.html.erb +3 -3
  329. data/app/views/decidim/amendments/edit_draft.html.erb +0 -4
  330. data/app/views/decidim/amendments/new.html.erb +0 -4
  331. data/app/views/decidim/amendments/preview_draft.html.erb +1 -1
  332. data/app/views/decidim/application/_accordion_section.html.erb +1 -1
  333. data/app/views/decidim/application/_collection.html.erb +1 -1
  334. data/app/views/decidim/application/_document.html.erb +2 -2
  335. data/app/views/decidim/application/_radio_accordion.html.erb +30 -0
  336. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +1 -1
  337. data/app/views/decidim/devise/omniauth_registrations/new_tos_fields.html.erb +1 -1
  338. data/app/views/decidim/devise/registrations/new.html.erb +1 -1
  339. data/app/views/decidim/devise/shared/_links.html.erb +1 -1
  340. data/app/views/decidim/doorkeeper/authorizations/new.html.erb +39 -8
  341. data/app/views/decidim/download_your_data/_export.html.erb +1 -1
  342. data/app/views/decidim/errors/internal_server_error.html.erb +1 -0
  343. data/app/views/decidim/export_mailer/download_your_data_export.html.erb +1 -1
  344. data/app/views/decidim/export_mailer/export.html.erb +1 -1
  345. data/app/views/decidim/likes/update_buttons_and_counters.js.erb +21 -0
  346. data/app/views/decidim/messaging/conversations/_add_conversation_users.html.erb +2 -2
  347. data/app/views/decidim/messaging/conversations/_reply_form.html.erb +1 -1
  348. data/app/views/decidim/messaging/conversations/_start.html.erb +1 -1
  349. data/app/views/decidim/messaging/conversations/create.js.erb +0 -1
  350. data/app/views/decidim/messaging/conversations/new.html.erb +1 -1
  351. data/app/views/decidim/messaging/conversations/show.html.erb +1 -1
  352. data/app/views/decidim/notifications_settings/show.html.erb +3 -3
  353. data/app/views/decidim/pages/_tabbed.html.erb +1 -1
  354. data/app/views/decidim/pages/index.html.erb +1 -1
  355. data/app/views/decidim/participants_account_mailer/inactivity_notification.html.erb +13 -0
  356. data/app/views/decidim/participants_account_mailer/removal_notification.html.erb +11 -0
  357. data/app/views/decidim/profiles/show.html.erb +1 -1
  358. data/app/views/decidim/qr/show.html.erb +28 -0
  359. data/app/views/decidim/searches/_filters.html.erb +18 -2
  360. data/app/views/decidim/searches/index.html.erb +5 -2
  361. data/app/views/decidim/shared/_confirm_modal.html.erb +5 -3
  362. data/app/views/decidim/shared/_filters.html.erb +3 -3
  363. data/app/views/decidim/shared/_orders.html.erb +1 -1
  364. data/app/views/decidim/shared/_resource_actions.html.erb +8 -5
  365. data/app/views/decidim/user_activities/index.html.erb +1 -1
  366. data/app/views/decidim/user_group_mailer/notify_deprecation_to_member.html.erb +15 -0
  367. data/app/views/decidim/user_group_mailer/notify_deprecation_to_owner.html.erb +22 -0
  368. data/app/views/layouts/decidim/_application.html.erb +1 -1
  369. data/app/views/layouts/decidim/_head.html.erb +15 -12
  370. data/app/views/layouts/decidim/_impersonation_warning.html.erb +1 -1
  371. data/app/views/layouts/decidim/_js_configuration.html.erb +17 -19
  372. data/app/views/layouts/decidim/_meta_tags_context.html.erb +3 -0
  373. data/app/views/layouts/decidim/_offline_banner.html.erb +1 -1
  374. data/app/views/layouts/decidim/_wrapper.html.erb +8 -6
  375. data/app/views/layouts/decidim/footer/_focus_mode_main.html.erb +7 -0
  376. data/app/views/layouts/decidim/footer/_main_language_chooser.html.erb +1 -1
  377. data/app/views/layouts/decidim/header/_close_ephemeral_session.html.erb +12 -2
  378. data/app/views/layouts/decidim/header/_focus_mode_back_button.html.erb +24 -0
  379. data/app/views/layouts/decidim/header/_main.html.erb +28 -22
  380. data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +1 -1
  381. data/app/views/layouts/decidim/header/_main_links_dropdown.html.erb +18 -18
  382. data/app/views/layouts/decidim/header/_main_links_mobile_item_account.html.erb +1 -1
  383. data/app/views/layouts/decidim/header/_main_menu_mobile.html.erb +1 -1
  384. data/app/views/layouts/decidim/header/_menu_breadcrumb_desktop.html.erb +1 -1
  385. data/app/views/layouts/decidim/header/_menu_breadcrumb_items.html.erb +1 -1
  386. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +1 -1
  387. data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +1 -1
  388. data/app/views/layouts/decidim/mailer.html.erb +2 -2
  389. data/app/views/layouts/decidim/newsletter_base.html.erb +2 -2
  390. data/app/views/layouts/decidim/shared/_layout_two_col.html.erb +3 -1
  391. data/app/views/layouts/decidim/shared/_layout_user_profile.html.erb +7 -3
  392. data/config/assets.rb +3 -3
  393. data/config/initializers/devise.rb +8 -0
  394. data/config/initializers/omniauth.rb +1 -1
  395. data/config/locales/ar.yml +0 -209
  396. data/config/locales/bg.yml +0 -238
  397. data/config/locales/bs-BA.yml +0 -30
  398. data/config/locales/ca-IT.yml +122 -298
  399. data/config/locales/ca.yml +120 -296
  400. data/config/locales/cs.yml +85 -284
  401. data/config/locales/de.yml +112 -286
  402. data/config/locales/el.yml +0 -224
  403. data/config/locales/en.yml +112 -288
  404. data/config/locales/eo.yml +0 -2
  405. data/config/locales/es-MX.yml +112 -288
  406. data/config/locales/es-PY.yml +112 -288
  407. data/config/locales/es.yml +112 -288
  408. data/config/locales/eu.yml +148 -324
  409. data/config/locales/fi-plain.yml +112 -287
  410. data/config/locales/fi.yml +112 -287
  411. data/config/locales/fr-CA.yml +86 -278
  412. data/config/locales/fr.yml +86 -278
  413. data/config/locales/ga-IE.yml +0 -28
  414. data/config/locales/gl.yml +0 -140
  415. data/config/locales/hu.yml +0 -237
  416. data/config/locales/id-ID.yml +0 -136
  417. data/config/locales/is-IS.yml +0 -14
  418. data/config/locales/it.yml +1 -236
  419. data/config/locales/ja.yml +107 -284
  420. data/config/locales/lb.yml +0 -189
  421. data/config/locales/lt.yml +0 -240
  422. data/config/locales/lv.yml +0 -186
  423. data/config/locales/nl.yml +0 -189
  424. data/config/locales/no.yml +0 -189
  425. data/config/locales/pl.yml +0 -244
  426. data/config/locales/pt-BR.yml +0 -213
  427. data/config/locales/pt.yml +0 -189
  428. data/config/locales/ro-RO.yml +54 -218
  429. data/config/locales/ru.yml +1 -62
  430. data/config/locales/sk.yml +0 -164
  431. data/config/locales/sl.yml +1 -0
  432. data/config/locales/sr-CS.yml +0 -31
  433. data/config/locales/sv.yml +80 -263
  434. data/config/locales/tr-TR.yml +0 -189
  435. data/config/locales/uk.yml +0 -23
  436. data/config/locales/zh-CN.yml +0 -180
  437. data/config/locales/zh-TW.yml +0 -229
  438. data/config/routes.rb +3 -36
  439. data/db/migrate/20250217192438_convert_user_groups_into_users.rb +38 -0
  440. data/db/migrate/20250221085317_add_user_type_to_action_logs.rb +12 -0
  441. data/db/migrate/20250221090905_create_decidim_api_jwt_denylist.rb +11 -0
  442. data/db/migrate/20250221091348_add_api_key_to_decidim_api_user.rb +7 -0
  443. data/db/migrate/20250327143657_remove_metrics_content_blocks.rb +9 -0
  444. data/db/migrate/20250401153444_enable_pkce.rb +8 -0
  445. data/db/migrate/20250416130426_rename_doorkeeper_scopes.rb +25 -0
  446. data/db/migrate/20250515105231_rename_endorsements_to_likes.rb +62 -0
  447. data/db/migrate/20250523104311_move_cta_to_hero_content_block.rb +34 -0
  448. data/db/migrate/20250527122040_move_highlighted_content_banner_settings_to_content_block.rb +69 -0
  449. data/db/migrate/20250603103953_add_refresh_tokens_enabled_to_doorkeeper_applications.rb +7 -0
  450. data/db/migrate/20250609073104_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb +10 -0
  451. data/db/migrate/20250613122148_remove_hashtag_table_from_core.rb +7 -0
  452. data/decidim-core.gemspec +4 -4
  453. data/{app/helpers → lib}/decidim/action_authorization_helper.rb +5 -4
  454. data/lib/decidim/amendable.rb +4 -4
  455. data/lib/decidim/api/functions/user_entity_finder.rb +1 -1
  456. data/lib/decidim/api/input_filters/component_input_filter.rb +3 -3
  457. data/lib/decidim/api/input_filters/user_entity_input_filter.rb +0 -21
  458. data/lib/decidim/api/input_sorts/has_likeable_input_sort.rb +15 -0
  459. data/lib/decidim/api/interfaces/attachable_collection_interface.rb +13 -0
  460. data/lib/decidim/api/interfaces/author_interface.rb +1 -2
  461. data/lib/decidim/api/interfaces/authorable_interface.rb +2 -2
  462. data/lib/decidim/api/interfaces/coauthorable_interface.rb +1 -1
  463. data/lib/decidim/api/interfaces/component_interface.rb +6 -0
  464. data/lib/decidim/api/interfaces/followable_interface.rb +13 -0
  465. data/lib/decidim/api/interfaces/likeable_interface.rb +19 -0
  466. data/lib/decidim/api/interfaces/localizable_interface.rb +18 -0
  467. data/lib/decidim/api/interfaces/participatory_space_interface.rb +6 -8
  468. data/lib/decidim/api/interfaces/referable_interface.rb +13 -0
  469. data/lib/decidim/api/interfaces/timestamps_interface.rb +0 -1
  470. data/lib/decidim/api/interfaces/traceable_interface.rb +1 -1
  471. data/lib/decidim/api/types/attachment_collection_type.rb +14 -0
  472. data/lib/decidim/api/types/organization_type.rb +3 -1
  473. data/lib/decidim/api/types/session_type.rb +0 -5
  474. data/lib/decidim/api/types/statistic_type.rb +29 -3
  475. data/lib/decidim/api/types/trace_version_type.rb +1 -1
  476. data/lib/decidim/api/types/user_type.rb +1 -2
  477. data/lib/decidim/api_response_helper.rb +12 -0
  478. data/lib/decidim/asset_router/storage.rb +10 -12
  479. data/lib/decidim/assets/tailwind/instance.rb +1 -1
  480. data/lib/decidim/assets/tailwind/tailwind.config.js.erb +4 -3
  481. data/lib/decidim/attribute_encryptor.rb +1 -1
  482. data/lib/decidim/attributes/time_with_zone.rb +1 -1
  483. data/lib/decidim/authorable.rb +5 -34
  484. data/lib/decidim/coauthorable.rb +13 -31
  485. data/lib/decidim/content_parsers/blob_parser.rb +1 -1
  486. data/lib/decidim/content_parsers/mention_resource_parser.rb +23 -0
  487. data/lib/decidim/content_parsers/tag_parser.rb +2 -2
  488. data/lib/decidim/content_parsers/user_parser.rb +2 -2
  489. data/lib/decidim/content_parsers.rb +14 -2
  490. data/lib/decidim/content_processor.rb +1 -1
  491. data/lib/decidim/content_renderers/mention_resource_renderer.rb +77 -0
  492. data/lib/decidim/content_renderers.rb +1 -2
  493. data/lib/decidim/core/api.rb +7 -8
  494. data/lib/decidim/core/content_blocks/registry_manager.rb +19 -5
  495. data/lib/decidim/core/engine.rb +72 -105
  496. data/lib/decidim/core/menu.rb +0 -7
  497. data/lib/decidim/core/seeds.rb +11 -39
  498. data/lib/decidim/core/test/factories.rb +24 -128
  499. data/lib/decidim/core/test/shared_examples/authorable.rb +0 -17
  500. data/lib/decidim/core/test/shared_examples/coauthorable.rb +5 -48
  501. data/lib/decidim/core/test/shared_examples/comments_examples.rb +7 -80
  502. data/lib/decidim/core/test/shared_examples/likeable.rb +22 -0
  503. data/lib/decidim/core/test/shared_examples/manage_share_tokens_examples.rb +16 -3
  504. data/lib/decidim/core/test/shared_examples/map_examples.rb +1 -1
  505. data/lib/decidim/core/test/shared_examples/oauth_application_examples.rb +137 -0
  506. data/lib/decidim/core/test/shared_examples/participatory_space_dropdown_metadata_cell_examples.rb +0 -18
  507. data/lib/decidim/core/test/shared_examples/permissions.rb +0 -46
  508. data/lib/decidim/core/test/shared_examples/reports_examples.rb +2 -2
  509. data/lib/decidim/core/test/shared_examples/{resource_endorsed_event_examples.rb → resource_liked_event_examples.rb} +7 -7
  510. data/lib/decidim/core/test/shared_examples/resource_search_examples.rb +0 -14
  511. data/lib/decidim/core/test/shared_examples/searchable_results_examples.rb +8 -34
  512. data/lib/decidim/core/test/shared_examples/social_share_examples.rb +79 -0
  513. data/lib/decidim/core/test/shared_examples/system_like_resource_examples.rb +192 -0
  514. data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +2 -2
  515. data/lib/decidim/core/test/shared_examples/{with_endorsable_permissions_examples.rb → with_likeable_permissions_examples.rb} +22 -22
  516. data/lib/decidim/core/test.rb +6 -9
  517. data/lib/decidim/core/version.rb +1 -1
  518. data/lib/decidim/core.rb +237 -88
  519. data/lib/decidim/deprecations.rb +1 -1
  520. data/lib/decidim/download_your_data_serializers.rb +6 -3
  521. data/lib/decidim/env.rb +3 -1
  522. data/lib/decidim/events.rb +0 -1
  523. data/lib/decidim/form_builder.rb +27 -44
  524. data/lib/decidim/gamification/badge_scorer.rb +0 -2
  525. data/lib/decidim/gamification.rb +1 -1
  526. data/lib/decidim/has_conversations.rb +0 -44
  527. data/lib/decidim/has_workflows.rb +42 -0
  528. data/lib/decidim/icon_registry.rb +4 -4
  529. data/lib/decidim/legacy_form_builder.rb +17 -2
  530. data/lib/decidim/likeable.rb +24 -0
  531. data/lib/decidim/manifest_registry.rb +1 -1
  532. data/lib/decidim/map/provider/dynamic_map/here.rb +0 -19
  533. data/lib/decidim/map/provider/static_map/here.rb +2 -10
  534. data/lib/decidim/menu.rb +1 -1
  535. data/lib/decidim/moderation_tools.rb +1 -1
  536. data/lib/decidim/mutation_registry.rb +17 -0
  537. data/lib/decidim/newsletter_encryptor.rb +1 -1
  538. data/lib/decidim/oauth/token_generator.rb +35 -0
  539. data/lib/decidim/oauth.rb +7 -0
  540. data/lib/decidim/organization_settings.rb +2 -10
  541. data/lib/decidim/paddable.rb +1 -1
  542. data/lib/decidim/participatory_space_resourceable.rb +2 -2
  543. data/lib/decidim/participatory_space_user.rb +1 -1
  544. data/lib/decidim/pdf_signature_example.rb +108 -0
  545. data/lib/decidim/query.rb +1 -1
  546. data/lib/decidim/query_extensions.rb +0 -33
  547. data/lib/decidim/reportable.rb +1 -1
  548. data/lib/decidim/searchable.rb +4 -2
  549. data/lib/decidim/seeds.rb +8 -0
  550. data/lib/decidim/settings_manifest.rb +3 -2
  551. data/lib/decidim/{webpacker → shakapacker}/configuration.rb +4 -8
  552. data/lib/decidim/{webpacker → shakapacker}/runner.rb +3 -3
  553. data/lib/decidim/shakapacker/shakapacker.rb +8 -0
  554. data/lib/decidim/{webpacker → shakapacker}/shakapacker.yml +3 -1
  555. data/lib/decidim/{webpacker → shakapacker}/webpack/custom.js +1 -1
  556. data/lib/decidim/shakapacker.rb +34 -0
  557. data/lib/decidim/social_share_service_manifest.rb +7 -12
  558. data/lib/decidim/stats_registry.rb +15 -3
  559. data/{app/helpers → lib}/decidim/tooltip_helper.rb +3 -3
  560. data/lib/decidim/url_option_resolver.rb +1 -1
  561. data/lib/decidim/view_model.rb +0 -3
  562. data/lib/decidim/webpacker.rb +11 -20
  563. data/lib/decidim/workflow_registry.rb +61 -0
  564. data/lib/tasks/decidim_participants_tasks.rake +22 -0
  565. data/lib/tasks/{decidim_webpacker_tasks.rake → decidim_shakapacker_tasks.rake} +35 -33
  566. data/lib/tasks/decidim_tasks.rake +4 -1
  567. data/lib/tasks/decidim_taxonomies.rake +0 -34
  568. data/lib/tasks/upgrade/clean.rake +1 -12
  569. data/lib/tasks/upgrade/decidim_action_log_valuation_assignment.rake +13 -0
  570. data/lib/tasks/upgrade/decidim_change_valuator_tasks.rake +12 -0
  571. data/lib/tasks/upgrade/{decidim_deduplicate_endorsements.rake → decidim_deduplicate_likes.rake} +10 -10
  572. data/lib/tasks/upgrade/decidim_migrate_wysiwyg_content.rake +2 -2
  573. data/lib/tasks/upgrade/decidim_paper_trail_valuation_assignment.rake +13 -0
  574. data/lib/tasks/upgrade/user_groups_migration.rake +155 -0
  575. metadata +204 -259
  576. data/app/cells/decidim/author/badge.erb +0 -6
  577. data/app/cells/decidim/author/endorsements.erb +0 -4
  578. data/app/cells/decidim/author/profile_minicard.erb +0 -30
  579. data/app/cells/decidim/content_blocks/organization_metrics_cell.rb +0 -21
  580. data/app/cells/decidim/content_blocks/participatory_space_metrics/content.erb +0 -18
  581. data/app/cells/decidim/content_blocks/participatory_space_metrics_cell.rb +0 -43
  582. data/app/cells/decidim/endorsement_block/show.erb +0 -3
  583. data/app/cells/decidim/endorsement_buttons/button_content.erb +0 -2
  584. data/app/cells/decidim/endorsement_buttons/select_identity_button.erb +0 -7
  585. data/app/cells/decidim/endorsement_buttons/show.erb +0 -17
  586. data/app/cells/decidim/endorsement_buttons_cell.rb +0 -87
  587. data/app/cells/decidim/endorsers_list/empty.erb +0 -3
  588. data/app/cells/decidim/endorsers_list/show.erb +0 -20
  589. data/app/cells/decidim/endorsers_list_cell.rb +0 -64
  590. data/app/cells/decidim/group_admins/show.erb +0 -34
  591. data/app/cells/decidim/group_admins_cell.rb +0 -8
  592. data/app/cells/decidim/group_members/show.erb +0 -46
  593. data/app/cells/decidim/group_members_cell.rb +0 -8
  594. data/app/cells/decidim/groups/show.erb +0 -14
  595. data/app/cells/decidim/groups_cell.rb +0 -22
  596. data/app/cells/decidim/members/show.erb +0 -12
  597. data/app/cells/decidim/members_cell.rb +0 -34
  598. data/app/cells/decidim/profile_actions/dropdown_actions.erb +0 -21
  599. data/app/cells/decidim/represent_user_group/show.erb +0 -11
  600. data/app/cells/decidim/represent_user_group_cell.rb +0 -46
  601. data/app/cells/decidim/user_conversation/conversation_header.erb +0 -14
  602. data/app/cells/decidim/user_conversation/messages.erb +0 -1
  603. data/app/cells/decidim/user_conversation/new.erb +0 -6
  604. data/app/cells/decidim/user_conversation/reply.erb +0 -9
  605. data/app/cells/decidim/user_conversation/show.erb +0 -19
  606. data/app/cells/decidim/user_conversation/start.erb +0 -12
  607. data/app/cells/decidim/user_conversation_cell.rb +0 -62
  608. data/app/cells/decidim/user_conversations/new_conversation_button.erb +0 -20
  609. data/app/cells/decidim/user_conversations/show.erb +0 -13
  610. data/app/cells/decidim/user_conversations_cell.rb +0 -28
  611. data/app/cells/decidim/user_group_pending_invitations_list/show.erb +0 -28
  612. data/app/cells/decidim/user_group_pending_invitations_list_cell.rb +0 -26
  613. data/app/cells/decidim/user_group_pending_requests_list/show.erb +0 -27
  614. data/app/cells/decidim/user_group_pending_requests_list_cell.rb +0 -26
  615. data/app/commands/decidim/accept_group_invitation.rb +0 -43
  616. data/app/commands/decidim/accept_user_group_join_request.rb +0 -53
  617. data/app/commands/decidim/create_user_group.rb +0 -73
  618. data/app/commands/decidim/demote_membership.rb +0 -57
  619. data/app/commands/decidim/endorse_resource.rb +0 -66
  620. data/app/commands/decidim/invite_user_to_group.rb +0 -63
  621. data/app/commands/decidim/join_user_group.rb +0 -57
  622. data/app/commands/decidim/leave_user_group.rb +0 -47
  623. data/app/commands/decidim/promote_membership.rb +0 -55
  624. data/app/commands/decidim/reject_group_invitation.rb +0 -42
  625. data/app/commands/decidim/reject_user_group_join_request.rb +0 -53
  626. data/app/commands/decidim/remove_user_from_group.rb +0 -53
  627. data/app/commands/decidim/unendorse_resource.rb +0 -39
  628. data/app/commands/decidim/update_user_group.rb +0 -72
  629. data/app/controllers/concerns/decidim/user_groups.rb +0 -23
  630. data/app/controllers/decidim/endorsements_controller.rb +0 -71
  631. data/app/controllers/decidim/group_email_confirmations_controller.rb +0 -32
  632. data/app/controllers/decidim/group_invites_controller.rb +0 -104
  633. data/app/controllers/decidim/group_members_controller.rb +0 -75
  634. data/app/controllers/decidim/groups_controller.rb +0 -99
  635. data/app/controllers/decidim/own_user_groups_controller.rb +0 -15
  636. data/app/controllers/decidim/user_conversations_controller.rb +0 -133
  637. data/app/controllers/decidim/user_group_join_requests_controller.rb +0 -72
  638. data/app/events/decidim/demoted_membership_event.rb +0 -28
  639. data/app/events/decidim/invited_to_group_event.rb +0 -62
  640. data/app/events/decidim/join_request_accepted_event.rb +0 -28
  641. data/app/events/decidim/join_request_created_event.rb +0 -28
  642. data/app/events/decidim/join_request_rejected_event.rb +0 -28
  643. data/app/events/decidim/promoted_to_admin_event.rb +0 -28
  644. data/app/events/decidim/removed_from_group_event.rb +0 -28
  645. data/app/events/decidim/resource_endorsed_event.rb +0 -36
  646. data/app/events/decidim/user_group_admin_event.rb +0 -37
  647. data/app/events/decidim/user_group_created_event.rb +0 -6
  648. data/app/events/decidim/user_group_updated_event.rb +0 -6
  649. data/app/forms/decidim/invite_user_to_group_form.rb +0 -29
  650. data/app/forms/decidim/user_group_form.rb +0 -87
  651. data/app/helpers/decidim/cta_button_helper.rb +0 -31
  652. data/app/helpers/decidim/endorsable_helper.rb +0 -84
  653. data/app/helpers/decidim/twitter_search_helper.rb +0 -14
  654. data/app/helpers/decidim/user_group_helper.rb +0 -22
  655. data/app/jobs/decidim/metric_job.rb +0 -15
  656. data/app/models/decidim/metric.rb +0 -25
  657. data/app/models/decidim/user_group.rb +0 -217
  658. data/app/models/decidim/user_group_membership.rb +0 -17
  659. data/app/packs/entrypoints/decidim_widget.js +0 -1
  660. data/app/packs/src/decidim/abide_form_validator_fixer.js +0 -44
  661. data/app/packs/src/decidim/account_form.js +0 -96
  662. data/app/packs/src/decidim/append_elements.js +0 -6
  663. data/app/packs/src/decidim/back_to_list.js +0 -26
  664. data/app/packs/src/decidim/change_report_form_behavior.js +0 -45
  665. data/app/packs/src/decidim/clipboard.js +0 -128
  666. data/app/packs/src/decidim/editor/extensions/hashtag/index.js +0 -66
  667. data/app/packs/src/decidim/editor/extensions/heading/index.js +0 -33
  668. data/app/packs/src/decidim/editor/test/extensions/hashtag.test.js +0 -105
  669. data/app/packs/src/decidim/form_filter.component_for_testing.js +0 -7
  670. data/app/packs/src/decidim/form_validator.js +0 -56
  671. data/app/packs/src/decidim/gallery.js +0 -5
  672. data/app/packs/src/decidim/impersonation.js +0 -23
  673. data/app/packs/src/decidim/input_autojump.js +0 -38
  674. data/app/packs/src/decidim/input_hashtags.js +0 -91
  675. data/app/packs/src/decidim/input_mentions.js +0 -143
  676. data/app/packs/src/decidim/input_multiple_mentions.js +0 -115
  677. data/app/packs/src/decidim/input_tags.js +0 -16
  678. data/app/packs/src/decidim/notifications_actions.js +0 -40
  679. data/app/packs/src/decidim/password_toggler.js +0 -104
  680. data/app/packs/src/decidim/remote_tooltips.js +0 -38
  681. data/app/packs/src/decidim/responsive_horizontal_tabs.js +0 -12
  682. data/app/packs/src/decidim/scroll_to_last_child.js +0 -14
  683. data/app/packs/src/decidim/slug_form.js +0 -9
  684. data/app/packs/src/decidim/sticky_footer.js +0 -48
  685. data/app/packs/src/decidim/sticky_header.js +0 -62
  686. data/app/packs/src/decidim/toggle.js +0 -37
  687. data/app/packs/src/decidim/tooltips.js +0 -152
  688. data/app/packs/src/decidim/user_registrations.js +0 -65
  689. data/app/packs/src/decidim/vizzs/areachart.js +0 -251
  690. data/app/packs/src/decidim/vizzs/index.js +0 -82
  691. data/app/packs/src/decidim/widget.js +0 -14
  692. data/app/packs/stylesheets/decidim/_hashtags.scss +0 -5
  693. data/app/packs/stylesheets/decidim/_metrics.scss +0 -70
  694. data/app/packs/stylesheets/decidim/_modal_identities.scss +0 -23
  695. data/app/presenters/decidim/admin_log/user_group_presenter.rb +0 -31
  696. data/app/presenters/decidim/hashtag_presenter.rb +0 -37
  697. data/app/presenters/decidim/metric_charts_presenter.rb +0 -92
  698. data/app/presenters/decidim/metric_object_presenter.rb +0 -32
  699. data/app/presenters/decidim/user_group_presenter.rb +0 -38
  700. data/app/queries/decidim/metric_manage.rb +0 -81
  701. data/app/queries/decidim/metric_measure.rb +0 -36
  702. data/app/queries/decidim/metrics/blocked_users_metric_manage.rb +0 -26
  703. data/app/queries/decidim/metrics/followers_metric_manage.rb +0 -65
  704. data/app/queries/decidim/metrics/participants_metric_manage.rb +0 -79
  705. data/app/queries/decidim/metrics/reported_users_metric_manage.rb +0 -26
  706. data/app/queries/decidim/metrics/user_reports_metric_manage.rb +0 -26
  707. data/app/queries/decidim/metrics/users_metric_manage.rb +0 -26
  708. data/app/queries/decidim/user_groups/accepted_memberships.rb +0 -36
  709. data/app/queries/decidim/user_groups/accepted_user_groups.rb +0 -38
  710. data/app/queries/decidim/user_groups/accepted_users.rb +0 -36
  711. data/app/queries/decidim/user_groups/admin_memberships.rb +0 -37
  712. data/app/queries/decidim/user_groups/invited_memberships.rb +0 -36
  713. data/app/queries/decidim/user_groups/manageable_user_groups.rb +0 -39
  714. data/app/queries/decidim/user_groups/member_memberships.rb +0 -37
  715. data/app/resolvers/decidim/core/metric_resolver.rb +0 -71
  716. data/app/resolvers/decidim/hashtags_resolver.rb +0 -15
  717. data/app/serializers/decidim/exporters/open_data_metric_serializer.rb +0 -22
  718. data/app/serializers/decidim/exporters/open_data_user_group_serializer.rb +0 -38
  719. data/app/views/decidim/endorsements/_identity.html.erb +0 -4
  720. data/app/views/decidim/endorsements/identities.html.erb +0 -18
  721. data/app/views/decidim/endorsements/update_buttons_and_counters.js.erb +0 -25
  722. data/app/views/decidim/group_invites/index.html.erb +0 -26
  723. data/app/views/decidim/groups/_form.html.erb +0 -17
  724. data/app/views/decidim/groups/edit.html.erb +0 -19
  725. data/app/views/decidim/groups/new.html.erb +0 -23
  726. data/app/views/decidim/messaging/conversation_mailer/comanagers_new_conversation.html.erb +0 -17
  727. data/app/views/decidim/messaging/conversation_mailer/comanagers_new_message.html.erb +0 -17
  728. data/app/views/decidim/messaging/conversation_mailer/new_group_conversation.html.erb +0 -17
  729. data/app/views/decidim/messaging/conversation_mailer/new_group_message.html.erb +0 -17
  730. data/app/views/decidim/own_user_groups/index.html.erb +0 -10
  731. data/app/views/decidim/shared/_extended_navigation_bar.html.erb +0 -50
  732. data/app/views/decidim/user_conversations/index.html.erb +0 -4
  733. data/app/views/decidim/user_conversations/show.html.erb +0 -4
  734. data/app/views/decidim/user_conversations/update.js.erb +0 -8
  735. data/config/initializers/new_framework_defaults_7_0.rb +0 -145
  736. data/db/migrate/20250819110800_convert_private_exports_id_to_uuid.rb +0 -55
  737. data/lib/decidim/api/input_filters/has_hastaggable_input_filter.rb +0 -15
  738. data/lib/decidim/api/input_sorts/has_endorsable_input_sort.rb +0 -15
  739. data/lib/decidim/api/interfaces/endorsable_interface.rb +0 -19
  740. data/lib/decidim/api/types/hashtag_type.rb +0 -13
  741. data/lib/decidim/api/types/metric_history_type.rb +0 -20
  742. data/lib/decidim/api/types/metric_type.rb +0 -13
  743. data/lib/decidim/api/types/user_group_type.rb +0 -55
  744. data/lib/decidim/content_parsers/hashtag_parser.rb +0 -66
  745. data/lib/decidim/content_parsers/user_group_parser.rb +0 -33
  746. data/lib/decidim/content_renderers/hashtag_renderer.rb +0 -78
  747. data/lib/decidim/content_renderers/user_group_renderer.rb +0 -31
  748. data/lib/decidim/core/test/shared_examples/amendable_interface_examples.rb +0 -14
  749. data/lib/decidim/core/test/shared_examples/amendable_proposals_interface_examples.rb +0 -50
  750. data/lib/decidim/core/test/shared_examples/assembly_announcements_examples.rb +0 -38
  751. data/lib/decidim/core/test/shared_examples/attachable_interface_examples.rb +0 -16
  752. data/lib/decidim/core/test/shared_examples/authorable_interface_examples.rb +0 -59
  753. data/lib/decidim/core/test/shared_examples/categories_container_examples.rb +0 -22
  754. data/lib/decidim/core/test/shared_examples/categorizable_interface_examples.rb +0 -27
  755. data/lib/decidim/core/test/shared_examples/coauthorable_interface_examples.rb +0 -91
  756. data/lib/decidim/core/test/shared_examples/endorsable.rb +0 -69
  757. data/lib/decidim/core/test/shared_examples/endorsable_interface_examples.rb +0 -22
  758. data/lib/decidim/core/test/shared_examples/fingerprintable_interface_examples.rb +0 -17
  759. data/lib/decidim/core/test/shared_examples/input_filter_examples.rb +0 -118
  760. data/lib/decidim/core/test/shared_examples/input_sort_examples.rb +0 -126
  761. data/lib/decidim/core/test/shared_examples/metric_manage_shared_context.rb +0 -9
  762. data/lib/decidim/core/test/shared_examples/participatory_space_resourcable_interface_examples.rb +0 -43
  763. data/lib/decidim/core/test/shared_examples/process_announcements_examples.rb +0 -37
  764. data/lib/decidim/core/test/shared_examples/scopable_interface_examples.rb +0 -19
  765. data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +0 -298
  766. data/lib/decidim/core/test/shared_examples/taxonomizable_interface_examples.rb +0 -20
  767. data/lib/decidim/core/test/shared_examples/timestamps_interface_examples.rb +0 -21
  768. data/lib/decidim/core/test/shared_examples/traceable_interface_examples.rb +0 -47
  769. data/lib/decidim/download_your_data_serializers/download_your_data_user_group_serializer.rb +0 -21
  770. data/lib/decidim/endorsable.rb +0 -29
  771. data/lib/decidim/events/user_group_event.rb +0 -43
  772. data/lib/decidim/hashtag.rb +0 -13
  773. data/lib/decidim/metric_manifest.rb +0 -35
  774. data/lib/decidim/metric_operation.rb +0 -58
  775. data/lib/decidim/metric_operation_manifest.rb +0 -21
  776. data/lib/decidim/metric_registry.rb +0 -109
  777. data/lib/gem_overrides/shakapacker/runner.rb +0 -9
  778. data/lib/tasks/decidim_metrics_tasks.rake +0 -89
  779. data/lib/tasks/upgrade/decidim_fix_action_log.rake +0 -28
  780. /data/app/cells/decidim/{endorsement_buttons/disabled_endorsements.erb → like_buttons/disabled_likes.erb} +0 -0
  781. /data/app/packs/src/decidim/{configuration.js → refactor/implementation/configuration.js} +0 -0
  782. /data/app/packs/src/decidim/{external_domain_warning.js → refactor/implementation/external_domain_warning.js} +0 -0
  783. /data/app/packs/src/decidim/{autocomplete.js → refactor/moved/autocomplete.js} +0 -0
  784. /data/app/packs/src/decidim/{delayed.js → refactor/moved/delayed.js} +0 -0
  785. /data/app/packs/src/decidim/{focus_guard.js → refactor/moved/focus_guard.js} +0 -0
  786. /data/app/packs/src/decidim/{history.js → refactor/moved/history.js} +0 -0
  787. /data/app/packs/src/decidim/{i18n.js → refactor/moved/i18n.js} +0 -0
  788. /data/lib/decidim/core/test/shared_examples/{endorsements_controller_shared_context.rb → likes_controller_shared_context.rb} +0 -0
  789. /data/{app/helpers → lib}/decidim/resource_helper.rb +0 -0
  790. /data/lib/decidim/{webpacker → shakapacker}/esbuild.config.js +0 -0
  791. /data/lib/decidim/{webpacker → shakapacker}/postcss.config.js +0 -0
  792. /data/lib/decidim/{webpacker → shakapacker}/tsconfig.json +0 -0
  793. /data/lib/decidim/{webpacker → shakapacker}/webpack/.modernizrrc +0 -0
  794. /data/lib/decidim/{webpacker → shakapacker}/webpack/webpack.config.js +0 -0
@@ -44,6 +44,14 @@ def generate_localized_title(field = nil, skip_injection: false)
44
44
  end
45
45
  end
46
46
 
47
+ def generate_title(field = nil, skip_injection:)
48
+ skip_injection = true if field.nil?
49
+
50
+ prepend = skip_injection ? "" : "<script>alert(\"#{field}\");</script>"
51
+
52
+ "#{prepend}#{generate(:title)}"
53
+ end
54
+
47
55
  FactoryBot.define do
48
56
  sequence(:title) do |n|
49
57
  "#{Faker::Lorem.sentence(word_count: 3)} #{n}".delete("'")
@@ -57,18 +65,10 @@ FactoryBot.define do
57
65
  "#{Faker::Lorem.characters(number: rand(1..10))}_#{n}".gsub("'", "_")
58
66
  end
59
67
 
60
- sequence(:hashtag_name) do |n|
61
- "#{Faker::Lorem.characters(number: rand(1..10))}_#{n}".gsub("'", "_")
62
- end
63
-
64
68
  sequence(:email) do |n|
65
69
  "user#{n}@example.org"
66
70
  end
67
71
 
68
- sequence(:user_group_email) do |n|
69
- "usergroup#{n}@example.org"
70
- end
71
-
72
72
  sequence(:slug) do |n|
73
73
  "#{Decidim::Faker::Internet.slug(words: nil, glue: "-")}-#{n}".gsub("'", "_")
74
74
  end
@@ -132,10 +132,8 @@ FactoryBot.define do
132
132
  users_registration_mode { :enabled }
133
133
  official_img_footer { Decidim::Dev.test_file("avatar.jpg", "image/jpeg") }
134
134
  official_url { Faker::Internet.url }
135
- highlighted_content_banner_enabled { false }
136
135
  enable_omnipresent_banner { false }
137
136
  badges_enabled { true }
138
- user_groups_enabled { true }
139
137
  send_welcome_notification { true }
140
138
  comments_max_length { 1000 }
141
139
  admin_terms_of_service_body { generate_localized_description(:admin_terms_of_service_body, skip_injection:) }
@@ -299,76 +297,6 @@ FactoryBot.define do
299
297
  privatable_to { create(:assembly, organization: user.organization, skip_injection:) }
300
298
  end
301
299
 
302
- factory :user_group, class: "Decidim::UserGroup" do
303
- transient do
304
- skip_injection { false }
305
- document_number { "#{Faker::Number.number(digits: 8)}X" }
306
- phone { Faker::PhoneNumber.phone_number }
307
- rejected_at { nil }
308
- verified_at { nil }
309
- end
310
-
311
- sequence(:name) { |n| "#{Faker::Company.name} #{n}" }
312
- email { generate(:user_group_email) }
313
- nickname { generate(:nickname) }
314
- about { generate_localized_title(:user_group_about, skip_injection:) }
315
- organization
316
- avatar { Decidim::Dev.test_file("avatar.jpg", "image/jpeg") } # Keep after organization
317
-
318
- transient do
319
- users { [] }
320
- end
321
-
322
- trait :verified do
323
- verified_at { Time.current }
324
- end
325
-
326
- trait :rejected do
327
- rejected_at { Time.current }
328
- end
329
-
330
- trait :confirmed do
331
- confirmed_at { Time.current }
332
- end
333
-
334
- trait :blocked do
335
- blocked { true }
336
- blocked_at { Time.current }
337
- extended_data { { user_name: generate(:name) } }
338
- name { "Blocked user group" }
339
- end
340
-
341
- after(:build) do |user_group, evaluator|
342
- user_group.extended_data = user_group.extended_data.merge({
343
- document_number: evaluator.document_number,
344
- phone: evaluator.phone,
345
- rejected_at: evaluator.rejected_at,
346
- verified_at: evaluator.verified_at
347
- })
348
- end
349
-
350
- after(:create) do |user_group, evaluator|
351
- users = evaluator.users.dup
352
- next if users.empty?
353
-
354
- creator = users.shift
355
- create(:user_group_membership, user: creator, user_group:, role: :creator, skip_injection: evaluator.skip_injection)
356
-
357
- users.each do |user|
358
- create(:user_group_membership, user:, user_group:, role: :admin, skip_injection: evaluator.skip_injection)
359
- end
360
- end
361
- end
362
-
363
- factory :user_group_membership, class: "Decidim::UserGroupMembership" do
364
- transient do
365
- skip_injection { false }
366
- end
367
- user { create(:user, :confirmed, organization: user_group.organization, skip_injection:) }
368
- role { :creator }
369
- user_group
370
- end
371
-
372
300
  factory :identity, class: "Decidim::Identity" do
373
301
  transient do
374
302
  skip_injection { false }
@@ -580,29 +508,29 @@ FactoryBot.define do
580
508
  end
581
509
  end
582
510
 
583
- trait :with_endorsements_enabled do
511
+ trait :with_likes_enabled do
584
512
  step_settings do
585
513
  participatory_space_with_steps if participatory_space.active_step.nil?
586
514
  {
587
- participatory_space.active_step.id => { endorsements_enabled: true }
515
+ participatory_space.active_step.id => { likes_enabled: true }
588
516
  }
589
517
  end
590
518
  end
591
519
 
592
- trait :with_endorsements_disabled do
520
+ trait :with_likes_disabled do
593
521
  step_settings do
594
522
  participatory_space_with_steps if participatory_space.active_step.nil?
595
523
  {
596
- participatory_space.active_step.id => { endorsements_enabled: false }
524
+ participatory_space.active_step.id => { likes_enabled: false }
597
525
  }
598
526
  end
599
527
  end
600
528
 
601
- trait :with_endorsements_blocked do
529
+ trait :with_likes_blocked do
602
530
  step_settings do
603
531
  participatory_space_with_steps if participatory_space.active_step.nil?
604
532
  {
605
- participatory_space.active_step.id => { endorsements_blocked: true }
533
+ participatory_space.active_step.id => { likes_blocked: true }
606
534
  }
607
535
  end
608
536
  end
@@ -878,8 +806,10 @@ FactoryBot.define do
878
806
  extra_data { {} }
879
807
  end
880
808
 
809
+ user { create(:user) }
881
810
  organization { user.organization }
882
- user
811
+ user_id { user.id }
812
+ user_type { user.class.name }
883
813
  participatory_space { build(:participatory_process, organization:, skip_injection:) }
884
814
  component { build(:component, participatory_space:, skip_injection:) }
885
815
  resource { build(:dummy_resource, component:, skip_injection:) }
@@ -917,7 +847,9 @@ FactoryBot.define do
917
847
  organization_url { "http://example.org" }
918
848
  organization_logo { Decidim::Dev.test_file("avatar.jpg", "image/jpeg") }
919
849
  redirect_uri { "https://app.example.org/oauth" }
920
- scopes { "public" }
850
+ scopes { "profile" }
851
+ confidential { true }
852
+ refresh_tokens_enabled { false }
921
853
  end
922
854
 
923
855
  factory :oauth_access_token, class: "Doorkeeper::AccessToken" do
@@ -929,7 +861,7 @@ FactoryBot.define do
929
861
  token { SecureRandom.hex(32) }
930
862
  expires_in { 1.month.from_now }
931
863
  created_at { Time.current }
932
- scopes { "public" }
864
+ scopes { "profile" }
933
865
  end
934
866
 
935
867
  factory :private_export, class: "Decidim::PrivateExport" do
@@ -939,14 +871,9 @@ FactoryBot.define do
939
871
  end
940
872
  expires_at { 1.week.from_now }
941
873
  attached_to { create(:user, organization:, skip_injection:) }
942
- export_type { "download_your_data" }
874
+ export_type { "dummy" }
943
875
  content_type { "application/zip" }
944
- file_size { 208.bytes }
945
- file { Decidim::Dev.test_file("dummy-export.zip", "application/zip") }
946
-
947
- trait :expired do
948
- expires_at { 1.week.ago }
949
- end
876
+ file_size { 10.kilobytes }
950
877
  end
951
878
 
952
879
  factory :searchable_resource, class: "Decidim::SearchableResource" do
@@ -979,28 +906,6 @@ FactoryBot.define do
979
906
  end
980
907
  end
981
908
 
982
- factory :hashtag, class: "Decidim::Hashtag" do
983
- transient do
984
- skip_injection { false }
985
- end
986
- name { generate(:hashtag_name) }
987
- organization
988
- end
989
-
990
- factory :metric, class: "Decidim::Metric" do
991
- transient do
992
- skip_injection { false }
993
- end
994
- organization
995
- day { Time.zone.today }
996
- metric_type { "random_metric" }
997
- cumulative { 2 }
998
- quantity { 1 }
999
- category { create(:category) }
1000
- participatory_space { create(:participatory_process, organization:, skip_injection:) }
1001
- related_object { create(:component, participatory_space:, skip_injection:) }
1002
- end
1003
-
1004
909
  factory :amendment, class: "Decidim::Amendment" do
1005
910
  transient do
1006
911
  skip_injection { false }
@@ -1049,7 +954,7 @@ FactoryBot.define do
1049
954
  user { create(:user, :confirmed) }
1050
955
  end
1051
956
 
1052
- factory :endorsement, class: "Decidim::Endorsement" do
957
+ factory :like, class: "Decidim::Like" do
1053
958
  transient do
1054
959
  skip_injection { false }
1055
960
  end
@@ -1057,15 +962,6 @@ FactoryBot.define do
1057
962
  author { resource.try(:creator_author) || resource.try(:author) || build(:user, organization: resource.organization, skip_injection:) }
1058
963
  end
1059
964
 
1060
- factory :user_group_endorsement, class: "Decidim::Endorsement" do
1061
- transient do
1062
- skip_injection { false }
1063
- end
1064
- resource { build(:dummy_resource, skip_injection:) }
1065
- author { build(:user, organization: resource.organization, skip_injection:) }
1066
- user_group { create(:user_group, verified_at: Time.current, organization: resource.organization, users: [author], skip_injection:) }
1067
- end
1068
-
1069
965
  factory :share_token, class: "Decidim::ShareToken" do
1070
966
  transient do
1071
967
  skip_injection { false }
@@ -4,23 +4,6 @@ require "spec_helper"
4
4
 
5
5
  shared_examples_for "authorable" do
6
6
  describe "validations" do
7
- context "when the user group is not verified" do
8
- it "is not valid" do
9
- user_group = create(:user_group)
10
- create(:user_group_membership, user: subject.author, user_group:)
11
- subject.user_group = user_group
12
- expect(subject).not_to be_valid
13
- end
14
- end
15
-
16
- context "when the author does not have a membership of the user group" do
17
- it "is not valid" do
18
- user_group = create(:user_group, :verified)
19
- subject.user_group = user_group
20
- expect(subject).not_to be_valid
21
- end
22
- end
23
-
24
7
  context "when the author is from another organization" do
25
8
  before do
26
9
  subject.author = create(:user)
@@ -6,7 +6,7 @@ shared_examples_for "coauthorable" do
6
6
  describe "authorable interface" do
7
7
  let!(:creator_author) { coauthorable.authors.first }
8
8
  let(:other_authors) { create_list(:user, 5, organization: coauthorable.component.participatory_space.organization) }
9
- let(:other_user_groups) { create_list(:user_group, 5, :verified, organization: creator_author.organization, users: [creator_author]) }
9
+ let(:official_author) { creator_author.organization }
10
10
 
11
11
  describe "authors" do
12
12
  context "when there is one author" do
@@ -31,46 +31,6 @@ shared_examples_for "coauthorable" do
31
31
  end
32
32
  end
33
33
 
34
- describe "user_groups" do
35
- let(:user_group) do
36
- create(:user_group,
37
- :verified,
38
- organization: creator_author.organization,
39
- users: [creator_author])
40
- end
41
-
42
- context "when there is NO user_group" do
43
- it "returns empty array" do
44
- expect(coauthorable.user_groups).to eq([])
45
- end
46
- end
47
-
48
- context "when there is one user_group" do
49
- before do
50
- coauthorship = coauthorable.coauthorships.first
51
- coauthorship.user_group = user_group
52
- coauthorship.save
53
- end
54
-
55
- it "returns the only user_group" do
56
- expect(coauthorable.user_groups).to eq([user_group])
57
- end
58
- end
59
-
60
- context "when there are many user_groups" do
61
- before do
62
- coauthorable.coauthorships.clear
63
- other_user_groups.each do |ug|
64
- Decidim::Coauthorship.create(author: ug.memberships.first.user, user_group: ug, coauthorable:)
65
- end
66
- end
67
-
68
- it "returns all user_groups" do
69
- expect(coauthorable.user_groups).to eq(other_user_groups)
70
- end
71
- end
72
- end
73
-
74
34
  describe "authored by? user" do
75
35
  context "when there are no coauthors" do
76
36
  before do
@@ -112,18 +72,15 @@ shared_examples_for "coauthorable" do
112
72
  coauthorable.add_coauthor(author)
113
73
  end
114
74
 
115
- other_user_groups.each do |user_group|
116
- coauthorable.add_coauthor(
117
- user_group.memberships.first.user,
118
- user_group:
119
- )
120
- end
75
+ coauthorable.add_coauthor(
76
+ official_author
77
+ )
121
78
  end
122
79
 
123
80
  it "returns an array of identities" do
124
81
  identities = [creator_author]
125
82
  identities += other_authors
126
- identities += other_user_groups
83
+ identities += [official_author]
127
84
  expect(coauthorable.identities.to_a).to match_array(identities)
128
85
  end
129
86
  end
@@ -194,7 +194,7 @@ shared_examples "comments" do
194
194
  it "shows a modal with the comment form" do
195
195
  expect(page).to have_content("Add comment")
196
196
  click_on "Add comment"
197
- sleep 1
197
+
198
198
  expect(page).to have_content("Add comment")
199
199
  expect(page).to have_content("1000 characters left")
200
200
  expect(page).to have_css(".add-comment form")
@@ -244,6 +244,9 @@ shared_examples "comments" do
244
244
  click_on locale
245
245
  end
246
246
 
247
+ sleep 1
248
+ page.scroll_to(find(".add-comment form"))
249
+
247
250
  within ".add-comment form" do
248
251
  expect(page).to have_css(".emoji__container")
249
252
  expect(page).to have_css(".emoji__trigger .emoji__button")
@@ -705,28 +708,6 @@ shared_examples "comments" do
705
708
  end
706
709
  end
707
710
 
708
- context "when the user has verified organizations" do
709
- let(:user_group) { create(:user_group, :verified, organization:) }
710
- let(:content) { "This is a new comment" }
711
-
712
- before do
713
- create(:user_group_membership, user:, user_group:)
714
- end
715
-
716
- it "adds new comment as a user group" do
717
- visit resource_path
718
-
719
- within "form#new_comment_for_#{commentable.commentable_type.demodulize}_#{commentable.id}" do
720
- field = find("#add-comment-#{commentable.commentable_type.demodulize}-#{commentable.id}")
721
- field.set " "
722
- field.native.send_keys content
723
- click_on "Publish comment"
724
- end
725
-
726
- expect(page).to have_comment_from(user_group, content, wait: 20)
727
- end
728
- end
729
-
730
711
  context "when a user deletes a comment" do
731
712
  let(:comment_body) { "This comment is a mistake" }
732
713
  let!(:comment) { create(:comment, body: comment_body, commentable:, author: comment_author) }
@@ -892,30 +873,6 @@ shared_examples "comments" do
892
873
  expect(page.find("#comment-#{parent.id}-replies").text).to be_blank
893
874
  end
894
875
  end
895
-
896
- context "when admin moderates the comment" do
897
- let!(:user) { create(:user, :admin, :confirmed, organization:) }
898
-
899
- before do
900
- switch_to_host(organization.host)
901
- login_as user, scope: :user
902
- visit resource_path
903
- end
904
-
905
- it "hides the comment" do
906
- within "#comment_#{comments.first.id}" do
907
- page.find("[id^='dropdown-trigger']").click
908
- click_on "Report"
909
- end
910
-
911
- within "#flagModalComment#{comments.first.id}" do
912
- check "Hide this content"
913
- click_on "Hide"
914
- end
915
-
916
- expect(page).to have_content("This resource has been hidden.")
917
- end
918
- end
919
876
  end
920
877
 
921
878
  describe "arguable option" do
@@ -1015,15 +972,6 @@ shared_examples "comments" do
1015
972
  expect(page).to have_no_css(".tribute-container", text: mentioned_user.name)
1016
973
  end
1017
974
  end
1018
-
1019
- context "when mentioning a group" do
1020
- let!(:mentioned_group) { create(:user_group, :confirmed, organization:) }
1021
- let(:content) { "A confirmed user group mention: @#{mentioned_group.nickname}" }
1022
-
1023
- it "shows the tribute container" do
1024
- expect(page).to have_css(".tribute-container", text: mentioned_group.nickname, wait: 10)
1025
- end
1026
- end
1027
975
  end
1028
976
 
1029
977
  describe "mentions", :slow do
@@ -1069,26 +1017,6 @@ shared_examples "comments" do
1069
1017
  end
1070
1018
  end
1071
1019
 
1072
- describe "hashtags", :slow do
1073
- let(:content) { "A comment with a hashtag #decidim" }
1074
-
1075
- before do
1076
- visit resource_path
1077
-
1078
- within "form#new_comment_for_#{commentable.commentable_type.demodulize}_#{commentable.id}" do
1079
- field = find("#add-comment-#{commentable.commentable_type.demodulize}-#{commentable.id}")
1080
- field.set " "
1081
- field.native.send_keys content
1082
- click_on "Publish comment"
1083
- end
1084
- end
1085
-
1086
- it "replaces the hashtag with a link to the hashtag search" do
1087
- expect(page).to have_comment_from(user, "A comment with a hashtag #decidim", wait: 20)
1088
- expect(page).to have_link "#decidim", href: "/search?term=%23decidim"
1089
- end
1090
- end
1091
-
1092
1020
  describe "export_serializer" do
1093
1021
  let(:comment) { comments.first }
1094
1022
 
@@ -1106,7 +1034,6 @@ shared_examples "comments" do
1106
1034
  it { is_expected.to have_key(:author) }
1107
1035
  it { is_expected.to have_key(:alignment) }
1108
1036
  it { is_expected.to have_key(:depth) }
1109
- it { is_expected.to have_key(:user_group) }
1110
1037
  it { is_expected.to have_key(:commentable_id) }
1111
1038
  it { is_expected.to have_key(:commentable_type) }
1112
1039
  it { is_expected.to have_key(:root_commentable_url) }
@@ -1187,14 +1114,14 @@ shared_examples "comments blocked" do
1187
1114
  end
1188
1115
 
1189
1116
  context "when the user has an evaluator role in the same participatory space" do
1190
- let!(:valuator_role) { create(:participatory_process_user_role, role: :valuator, user:, participatory_process: participatory_space) }
1117
+ let!(:evaluator_role) { create(:participatory_process_user_role, role: :evaluator, user:, participatory_process: participatory_space) }
1191
1118
 
1192
1119
  it_behaves_like "can answer comments"
1193
1120
  end
1194
1121
 
1195
1122
  shared_examples "evaluator role in different participatory space" do |space_type|
1196
- let!(:another_space_valuator_role) do
1197
- create(:"#{space_type}_user_role", role: :valuator, user:, "#{space_type}": create(space_type, organization:))
1123
+ let!(:another_space_evaluator_role) do
1124
+ create(:"#{space_type}_user_role", role: :evaluator, user:, "#{space_type}": create(space_type, organization:))
1198
1125
  end
1199
1126
 
1200
1127
  it "cannot answer" do
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ shared_examples_for "likeable" do
6
+ context "when likeable" do
7
+ let(:user) { create(:user, organization: subject.organization) }
8
+
9
+ describe "#liked_by?" do
10
+ context "with User like" do
11
+ it "returns false if the resource is not liked by the given user" do
12
+ expect(subject).not_to be_liked_by(user)
13
+ end
14
+
15
+ it "returns true if the resource is liked by the given user" do
16
+ create(:like, resource: subject, author: user)
17
+ expect(subject).to be_liked_by(user)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -116,6 +116,7 @@ shared_examples "manage resource share tokens" do
116
116
  expect(page).to have_content("Yes")
117
117
  end
118
118
  within ".share_tokens tbody tr", text: last_token.token do
119
+ find("button[data-controller='dropdown']").click
119
120
  click_on "Edit"
120
121
  end
121
122
 
@@ -142,6 +143,7 @@ shared_examples "manage resource share tokens" do
142
143
 
143
144
  it "allows copying the share link from the share token" do
144
145
  within ".share_tokens tbody tr", text: last_token.token do
146
+ find("button[data-controller='dropdown']").click
145
147
  click_on "Copy link"
146
148
  expect(page).to have_content("copied!")
147
149
  expect(page).to have_css("[data-clipboard-copy-label]")
@@ -153,6 +155,7 @@ shared_examples "manage resource share tokens" do
153
155
  it "has a share link for each token" do
154
156
  urls = share_tokens.map(&:url)
155
157
  within ".share_tokens tbody tr", text: last_token.token do
158
+ find("button[data-controller='dropdown']").click
156
159
  share_window = window_opened_by { click_on "Preview" }
157
160
 
158
161
  within_window share_window do
@@ -163,6 +166,7 @@ shared_examples "manage resource share tokens" do
163
166
 
164
167
  it "has a share button that opens the share url for the resource" do
165
168
  within ".share_tokens tbody tr", text: last_token.token do
169
+ find("button[data-controller='dropdown']").click
166
170
  share_window = window_opened_by { click_on "Preview", wait: 2 }
167
171
 
168
172
  within_window share_window do
@@ -173,6 +177,7 @@ shared_examples "manage resource share tokens" do
173
177
 
174
178
  it "can delete tokens" do
175
179
  within ".share_tokens tbody tr", text: last_token.token do
180
+ find("button[data-controller='dropdown']").click
176
181
  accept_confirm { click_on "Delete" }
177
182
  end
178
183
 
@@ -211,8 +216,11 @@ shared_examples "manage component share tokens" do
211
216
 
212
217
  def visit_share_tokens_page
213
218
  visit components_path
214
- within ".table-list" do
215
- click_on "Access links"
219
+
220
+ within("tr", text: resource_name) do
221
+ # To remove once all the actions are migrated to dropdowns
222
+ find("button[data-controller='dropdown']").click
223
+ click_on "Share link"
216
224
  end
217
225
  end
218
226
 
@@ -230,7 +238,12 @@ shared_examples "manage participatory space share tokens" do
230
238
 
231
239
  def visit_share_tokens_page
232
240
  visit participatory_spaces_path
233
- click_on "Access links"
241
+
242
+ within("tr", text: resource_name) do
243
+ # To remove once all the actions are migrated to dropdowns
244
+ find("button[data-controller='dropdown']").click
245
+ click_on "Share link"
246
+ end
234
247
  end
235
248
 
236
249
  it_behaves_like "manage resource share tokens"
@@ -87,7 +87,7 @@ shared_context "with frontend map elements" do
87
87
  <script type="text/javascript">
88
88
  // This is just to indicate to Capybara that the page has fully
89
89
  // finished loading.
90
- document.addEventListener("DOMContentLoaded", function() {
90
+ document.addEventListener("turbo:load", function() {
91
91
  setTimeout(function() {
92
92
  window.$("body").append('<div id="ready_indicator">Document ready</div>');
93
93
  }, 1000);