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
+ class MoveCtaToHeroContentBlock < ActiveRecord::Migration[7.0]
4
+ class Organization < ApplicationRecord
5
+ self.table_name = :decidim_organizations
6
+ end
7
+
8
+ def up
9
+ Decidim::ContentBlock.reset_column_information
10
+ Organization.find_each do |organization|
11
+ content_block = Decidim::ContentBlock.find_by(organization: organization, scope_name: :homepage, manifest_name: :hero)
12
+ settings = {}
13
+ cta_button_text = organization.cta_button_text || {}
14
+ settings = cta_button_text.inject(settings) { |acc, (k, v)| acc.update("cta_button_text_#{k}" => v) }
15
+
16
+ unless organization.cta_button_path.nil?
17
+ # Adds i18n support to cta_button_path for every defined lang in cta_button_text
18
+ settings = cta_button_text.inject(settings) { |acc, (k, _v)| acc.update("cta_button_path_#{k}" => organization.cta_button_path) }
19
+ end
20
+
21
+ content_block.settings = settings
22
+ content_block.settings_will_change!
23
+ content_block.save!
24
+ end
25
+
26
+ remove_column :decidim_organizations, :cta_button_text
27
+ remove_column :decidim_organizations, :cta_button_path
28
+ end
29
+
30
+ def down
31
+ add_column :decidim_organizations, :cta_button_text, :jsonb
32
+ add_column :decidim_organizations, :cta_button_path, :string
33
+ end
34
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ class MoveHighlightedContentBannerSettingsToContentBlock < ActiveRecord::Migration[7.0]
4
+ class Organization < ApplicationRecord
5
+ self.table_name = :decidim_organizations
6
+ end
7
+
8
+ def up
9
+ Organization.reset_column_information
10
+ # Note that we need to use the actual Decidim::ContentBlock clas, as we need access to the `images_container` method
11
+ Decidim::ContentBlock.reset_column_information
12
+
13
+ Organization.find_each do |organization|
14
+ content_block = Decidim::ContentBlock.find_by(organization: organization, scope_name: :homepage, manifest_name: :highlighted_content_banner)
15
+ settings = extract_settings(organization)
16
+
17
+ # We need to do a workaround for getting the image, as ActiveStorage is polymorphic and expects that the `record_type` is the class name of the model
18
+ background_image = ActiveStorage::Attachment.find_by(name: "highlighted_content_banner_image", record_type: "Decidim::Organization", record_id: organization.id)
19
+ content_block.images_container.background_image = background_image.blob if background_image
20
+
21
+ content_block.settings = settings
22
+ content_block.settings_will_change!
23
+ content_block.save!
24
+ end
25
+
26
+ remove_column :decidim_organizations, :highlighted_content_banner_enabled
27
+ remove_column :decidim_organizations, :highlighted_content_banner_title
28
+ remove_column :decidim_organizations, :highlighted_content_banner_short_description
29
+ remove_column :decidim_organizations, :highlighted_content_banner_action_title
30
+ remove_column :decidim_organizations, :highlighted_content_banner_action_subtitle
31
+ remove_column :decidim_organizations, :highlighted_content_banner_action_url
32
+ remove_column :decidim_organizations, :highlighted_content_banner_image
33
+ end
34
+
35
+ def down
36
+ add_column :decidim_organizations, :highlighted_content_banner_enabled, :boolean, null: false, default: false
37
+ add_column :decidim_organizations, :highlighted_content_banner_title, :jsonb
38
+ add_column :decidim_organizations, :highlighted_content_banner_short_description, :jsonb
39
+ add_column :decidim_organizations, :highlighted_content_banner_action_title, :jsonb
40
+ add_column :decidim_organizations, :highlighted_content_banner_action_subtitle, :jsonb
41
+ add_column :decidim_organizations, :highlighted_content_banner_action_url, :string
42
+ add_column :decidim_organizations, :highlighted_content_banner_image, :string
43
+ end
44
+
45
+ private
46
+
47
+ # rubocop:disable Metrics/CyclomaticComplexity
48
+ def extract_settings(organization)
49
+ settings = {}
50
+
51
+ title = organization.highlighted_content_banner_title || {}
52
+ settings = title.inject(settings) { |acc, (k, v)| acc.update("title_#{k}" => v) }
53
+
54
+ short_description = organization.highlighted_content_banner_short_description || {}
55
+ settings = short_description.inject(settings) { |acc, (k, v)| acc.update("short_description_#{k}" => v) }
56
+
57
+ action_button_title = organization.highlighted_content_banner_action_title || {}
58
+ settings = action_button_title.inject(settings) { |acc, (k, v)| acc.update("action_button_title_#{k}" => v) }
59
+
60
+ action_button_subtitle = organization.highlighted_content_banner_action_subtitle || {}
61
+ settings = action_button_subtitle.inject(settings) { |acc, (k, v)| acc.update("action_button_subtitle_#{k}" => v) }
62
+
63
+ action_button_url = organization.highlighted_content_banner_action_url || ""
64
+ settings["action_button_url"] = action_button_url
65
+
66
+ settings
67
+ end
68
+ # rubocop:enable Metrics/CyclomaticComplexity
69
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddRefreshTokensEnabledToDoorkeeperApplications < ActiveRecord::Migration[7.0]
4
+ def change
5
+ add_column :oauth_applications, :refresh_tokens_enabled, :boolean, default: false
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This migration comes from active_storage (originally 20211119233751)
4
+ class RemoveNotNullOnActiveStorageBlobsChecksum < ActiveRecord::Migration[6.0]
5
+ def change
6
+ return unless table_exists?(:active_storage_blobs)
7
+
8
+ change_column_null(:active_storage_blobs, :checksum, true)
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RemoveHashtagTableFromCore < ActiveRecord::Migration[7.2]
4
+ def change
5
+ drop_table :decidim_hashtags, if_exists: true
6
+ end
7
+ end
data/decidim-core.gemspec CHANGED
@@ -31,8 +31,7 @@ Gem::Specification.new do |s|
31
31
  end
32
32
  end
33
33
 
34
- # Lock Temporarily as it is failing in 0.29 branch. More info: https://github.com/rails/rails/pull/54264
35
- s.add_dependency "concurrent-ruby", "= 1.3.4"
34
+ s.add_dependency "concurrent-ruby", "~> 1.3.0"
36
35
 
37
36
  s.add_dependency "active_link_to", "~> 1.0"
38
37
  s.add_dependency "acts_as_list", "~> 1.0"
@@ -73,14 +72,15 @@ Gem::Specification.new do |s|
73
72
  s.add_dependency "premailer-rails", "~> 1.10"
74
73
  s.add_dependency "rack", "~> 2.2", ">= 2.2.8.1"
75
74
  s.add_dependency "rack-attack", "~> 6.0"
76
- s.add_dependency "rails", "~> 7.0.8"
75
+ s.add_dependency "rails", "~> 7.2.0", ">= 7.2.2.2"
77
76
  s.add_dependency "rails-i18n", "~> 7.0"
78
77
  s.add_dependency "ransack", "~> 4.2.0"
79
78
  s.add_dependency "redis", "~> 4.1"
80
79
  s.add_dependency "request_store", "~> 1.7.0"
80
+ s.add_dependency "rqrcode", "~> 2.2.0"
81
81
  s.add_dependency "rubyXL", "~> 3.4"
82
82
  s.add_dependency "rubyzip", "~> 2.0"
83
- s.add_dependency "shakapacker", "~> 7.1.0"
83
+ s.add_dependency "shakapacker", "~> 8.3.0"
84
84
  s.add_dependency "valid_email2", "~> 7.0"
85
85
  s.add_dependency "web-push", "~> 3.0"
86
86
  s.add_dependency "wisper", "~> 3.0"
@@ -160,10 +160,11 @@ module Decidim
160
160
  return {} if [resource, permissions_holder].all?(&:blank?)
161
161
 
162
162
  {
163
- "data-onboarding-model" => resource&.to_gid,
164
- "data-onboarding-permissions-holder" => permissions_holder&.to_gid,
165
- "data-onboarding-action" => action,
166
- "data-onboarding-redirect-path" => redirect_path
163
+ "data-controller" => "onboarding",
164
+ "data-onboarding-action-value" => action,
165
+ "data-onboarding-model-value" => resource&.to_gid,
166
+ "data-onboarding-permissions-holder-value" => permissions_holder&.to_gid,
167
+ "data-onboarding-redirect-path-value" => redirect_path
167
168
  }.compact
168
169
  end
169
170
 
@@ -147,16 +147,16 @@ module Decidim
147
147
  end
148
148
 
149
149
  # Handles the logic to assign an author to the resource, be it Authorable or Coauthorable.
150
- def add_author(author, user_group = nil)
150
+ def add_author(author)
151
151
  if is_a?(Decidim::Authorable)
152
152
  if persisted?
153
- update(author: user_group || author)
153
+ update(author:)
154
154
  else
155
- self.author = user_group || author
155
+ self.author = author
156
156
  end
157
157
  else # Assume is_a?(Decidim::Coauthorable)
158
158
  coauthorships.clear
159
- add_coauthor(author, user_group:)
159
+ add_coauthor(author)
160
160
  end
161
161
  end
162
162
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Decidim
4
4
  module Core
5
- # A resolver for the GraphQL user/group endpoints
5
+ # A resolver for the GraphQL user endpoint
6
6
  # Used in the keyword "user", ie:
7
7
  #
8
8
  # user(nickname: "foo") {
@@ -35,13 +35,13 @@ module Decidim
35
35
 
36
36
  def self.prepare_comments_enabled(active, _ctx)
37
37
  lambda do |_model_name, _locale|
38
- ["(settings->'global'->>'comments_enabled')::boolean is ?", active]
38
+ ["settings @> ?", { global: { comments_enabled: active } }.to_json]
39
39
  end
40
40
  end
41
41
 
42
42
  def self.prepare_geolocation_enabled(active, _ctx)
43
43
  lambda do |_model_name, _locale|
44
- ["(settings->'global'->>'geocoding_enabled')::boolean is ? or manifest_name='meetings'", active]
44
+ ["settings @> ? or manifest_name='meetings'", { global: { geocoding_enabled: active } }.to_json]
45
45
  end
46
46
  end
47
47
 
@@ -54,7 +54,7 @@ module Decidim
54
54
  end
55
55
 
56
56
  def self.prepare_type(value, _ctx)
57
- { manifest_name: value.downcase }
57
+ { manifest_name: value.underscore }
58
58
  end
59
59
  end
60
60
  end
@@ -12,16 +12,6 @@ module Decidim
12
12
  {
13
13
  users(filter:{wildcard:\"sandy\", excludeIds:[2,10,11]}) {
14
14
  id
15
- ...on User {
16
- groups {
17
- name
18
- }
19
- }
20
- ...on UserGroup {
21
- members {
22
- name
23
- }
24
- }
25
15
  }
26
16
  }
27
17
  ```
@@ -42,11 +32,6 @@ module Decidim
42
32
  description: "Filters by nickname of the user entity. Searches (case-insensitive) any fragment of the provided string",
43
33
  required: false,
44
34
  prepare: :prepare_nickname
45
- argument :type,
46
- type: String,
47
- description: "Filters by type of entity (User or UserGroup)",
48
- required: false,
49
- prepare: :prepare_type
50
35
  argument :wildcard,
51
36
  type: String,
52
37
  description: "Filters by nickname or name of the user entity. Searches (case-insensitive) any fragment of the provided string",
@@ -77,12 +62,6 @@ module Decidim
77
62
  ]
78
63
  end
79
64
 
80
- def self.prepare_type(value, _ctx)
81
- type = value.downcase.camelcase
82
- type = "UserGroup" if %w(Group Usergroup).include?(type)
83
- { type: "Decidim::#{type}" }
84
- end
85
-
86
65
  def self.prepare_wildcard(value, _ctx)
87
66
  value = value[1..-1] if value.starts_with? "@"
88
67
  [
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Core
5
+ module HasLikeableInputSort
6
+ def self.included(child_class)
7
+ child_class.argument :like_count,
8
+ type: GraphQL::Types::String,
9
+ description: "Sort by number of likes, valid values are ASC or DESC",
10
+ required: false,
11
+ as: :likes_count
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Core
5
+ # This interface represents an attachable object.
6
+ module AttachableCollectionInterface
7
+ include Decidim::Api::Types::BaseInterface
8
+ description "An interface that can be used in objects with attachments"
9
+
10
+ field :attachment_collections, [Decidim::Core::AttachmentCollectionType, { null: true }], "This object's attachment collections", null: false
11
+ end
12
+ end
13
+ end
@@ -16,9 +16,9 @@ module Decidim
16
16
  field :nickname, String, "The author's nickname", null: false
17
17
 
18
18
  field :avatar_url, String, "The author's avatar url", null: false
19
- field :profile_path, String, "The author's profile path", null: false
20
19
  field :badge, String, "The author's badge icon", null: false
21
20
  field :organization_name, Decidim::Core::TranslatedFieldType, "The authors's organization name", null: false
21
+ field :profile_path, String, "The author's profile path", null: false
22
22
 
23
23
  def organization_name
24
24
  object.organization.name
@@ -26,7 +26,6 @@ module Decidim
26
26
 
27
27
  def self.resolve_type(obj, _ctx)
28
28
  return Decidim::Core::UserType if obj.is_a? Decidim::User
29
- return Decidim::Core::UserGroupType if obj.is_a? Decidim::UserGroup
30
29
  end
31
30
  end
32
31
  end
@@ -12,8 +12,8 @@ module Decidim
12
12
  end
13
13
 
14
14
  def author
15
- author = if object.respond_to?(:normalized_author)
16
- object&.normalized_author
15
+ author = if object.respond_to?(:author)
16
+ object&.author
17
17
  elsif object.respond_to?(:creator_identity)
18
18
  object&.creator_identity
19
19
  end
@@ -23,7 +23,7 @@ module Decidim
23
23
 
24
24
  def author
25
25
  author = object.creator_identity
26
- author if author.is_a?(Decidim::User) || author.is_a?(Decidim::UserGroup)
26
+ author if author.is_a?(Decidim::User)
27
27
  end
28
28
  end
29
29
  end
@@ -14,6 +14,12 @@ module Decidim
14
14
 
15
15
  field :participatory_space, ParticipatorySpaceType, "The participatory space in which this component belongs to.", null: false
16
16
 
17
+ field :url, String, "The URL of this component.", null: false
18
+
19
+ def url
20
+ Decidim::EngineRouter.main_proxy(object).root_url
21
+ end
22
+
17
23
  def self.resolve_type(obj, _ctx)
18
24
  obj.manifest.query_type.constantize
19
25
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Core
5
+ # This interface represents a followable object.
6
+ module FollowableInterface
7
+ include Decidim::Api::Types::BaseInterface
8
+ description "An interface that can be used in followable objects."
9
+
10
+ field :follows_count, GraphQL::Types::Int, "The number of followers of the resource", null: true
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Core
5
+ # This interface represents an object capable of likes.
6
+ module LikeableInterface
7
+ include Decidim::Api::Types::BaseInterface
8
+ description "An interface that can be used in objects with likes"
9
+
10
+ field :likes, [Decidim::Core::AuthorInterface, { null: true }], "The likes of this object.", null: false
11
+
12
+ field :likes_count, Integer, description: "The total amount of likes the object has received", null: true
13
+
14
+ def likes
15
+ object.likes.map(&:author)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Core
5
+ # This interface represents a localizable (that has address, latitude and longitude) object.
6
+ module LocalizableInterface
7
+ include Decidim::Api::Types::BaseInterface
8
+ description "An interface that can be used in localizable objects."
9
+
10
+ field :address, GraphQL::Types::String, "The physical address (location) of this result", null: true
11
+ field :coordinates, Decidim::Core::CoordinatesType, "Physical coordinates for this result", null: true
12
+
13
+ def coordinates
14
+ [object.latitude, object.longitude]
15
+ end
16
+ end
17
+ end
18
+ end
@@ -7,15 +7,17 @@ module Decidim
7
7
  graphql_name "ParticipatorySpaceInterface"
8
8
  description "The interface that all participatory spaces should implement."
9
9
 
10
- field :id, GraphQL::Types::ID, "The participatory space's unique ID", null: false
10
+ field :allows_steps, Boolean, description: "The participatory space allows steps", null: false, method: :allows_steps?
11
11
  field :components, [ComponentInterface, { null: true }], null: true, description: "Lists the components this space contains." do
12
12
  argument :filter, ComponentInputFilter, "Provides several methods to filter the results", required: false
13
13
  argument :order, ComponentInputSort, "Provides several methods to order the results", required: false
14
14
  end
15
+ field :has_steps, Boolean, description: "The participatory space allows steps", null: false, method: :has_steps?
16
+ field :id, GraphQL::Types::ID, "The participatory space's unique ID", null: false
17
+ field :manifest, Decidim::Core::ParticipatorySpaceManifestType, description: "The manifest information for the participatory space.", null: false
15
18
  field :stats, [Decidim::Core::StatisticType, { null: true }], "The statistics collection of this participatory space", null: true
16
19
  field :title, TranslatedFieldType, "The graphql_name of this participatory space.", null: false
17
20
  field :type, String, description: "The participatory space class name. i.e. Decidim::ParticipatoryProcess", null: false
18
- field :manifest, Decidim::Core::ParticipatorySpaceManifestType, description: "The manifest information for the participatory space.", null: false
19
21
 
20
22
  def type
21
23
  object.class.name
@@ -32,13 +34,9 @@ module Decidim
32
34
  def stats
33
35
  return if object.respond_to?(:show_statistics) && !object.show_statistics
34
36
 
35
- published_components = Component.where(participatory_space: object).published
36
-
37
- stats = Decidim.component_manifests.map do |component_manifest|
38
- component_manifest.stats.with_context(published_components).map { |name, data| [name, data] }.flatten
37
+ Decidim::ParticipatoryProcesses::ParticipatoryProcessStatsPresenter.new(participatory_process: object).collection.map do |stat|
38
+ [object.organization, stat]
39
39
  end
40
-
41
- stats.reject(&:empty?)
42
40
  end
43
41
 
44
42
  def self.resolve_type(obj, _ctx)
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Core
5
+ # This interface represents an object that have a reference field.
6
+ module ReferableInterface
7
+ include Decidim::Api::Types::BaseInterface
8
+ description "An interface that can be used in display reference methods"
9
+
10
+ field :reference, GraphQL::Types::String, "The reference for this record", null: true
11
+ end
12
+ end
13
+ end
@@ -8,7 +8,6 @@ module Decidim
8
8
  description "An interface that can be used in objects with created_at and updated_at attributes"
9
9
 
10
10
  field :created_at, Decidim::Core::DateTimeType, description: "The date and time this object was created", null: true
11
-
12
11
  field :updated_at, Decidim::Core::DateTimeType, description: "The date and time this object was updated", null: true
13
12
  end
14
13
  end
@@ -7,8 +7,8 @@ module Decidim
7
7
  include Decidim::Api::Types::BaseInterface
8
8
  description "An interface that can be used in objects with traceability (versions)"
9
9
 
10
- field :versions_count, Integer, "Total number of versions", null: false
11
10
  field :versions, [Decidim::Core::TraceVersionType, { null: true }], "This object's versions", null: false
11
+ field :versions_count, Integer, "Total number of versions", null: false
12
12
  end
13
13
  end
14
14
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Core
5
+ class AttachmentCollectionType < Decidim::Api::Types::BaseObject
6
+ description "A file attachment collection"
7
+
8
+ field :description, Decidim::Core::TranslatedFieldType, "The description of this AttachmentCollection.", null: false
9
+ field :name, Decidim::Core::TranslatedFieldType, "The name of this AttachmentCollection.", null: false
10
+
11
+ field :attachments, [Decidim::Core::AttachmentType, { null: true }], "This object's attachments", null: false
12
+ end
13
+ end
14
+ end
@@ -11,7 +11,9 @@ module Decidim
11
11
  field :stats, [Core::StatisticType, { null: true }], description: "The statistics associated to this object", null: true
12
12
 
13
13
  def stats
14
- Decidim.stats.with_context(object)
14
+ Decidim::HomeStatsPresenter.new(organization: object).collection.map do |stat|
15
+ [object, stat]
16
+ end
15
17
  end
16
18
 
17
19
  def taxonomies
@@ -7,15 +7,10 @@ module Decidim
7
7
  description "The current session"
8
8
 
9
9
  field :user, UserType, "The current user", null: true
10
- field :verified_user_groups, [UserGroupType], "The current user verified user groups", null: false
11
10
 
12
11
  def user
13
12
  object
14
13
  end
15
-
16
- def verified_user_groups
17
- Decidim::UserGroups::ManageableUserGroups.for(object).verified
18
- end
19
14
  end
20
15
  end
21
16
  end
@@ -5,16 +5,42 @@ module Decidim
5
5
  class StatisticType < Decidim::Api::Types::BaseObject
6
6
  description "Represents a single statistic"
7
7
 
8
- field :name, GraphQL::Types::String, "The name of the statistic", null: false
8
+ field :description, Decidim::Core::TranslatedFieldType, "The description of the statistic calculation", null: true
9
+ field :key, GraphQL::Types::String, "The unique key of the statistic", null: false
10
+ field :name, Decidim::Core::TranslatedFieldType, "The name of the statistic", null: true
9
11
  field :value, GraphQL::Types::Int, "The actual value of the statistic", null: false
10
12
 
11
- def name
13
+ def organization
12
14
  object[0]
13
15
  end
14
16
 
15
- def value
17
+ def stat
16
18
  object[1]
17
19
  end
20
+
21
+ def key
22
+ stat[:name]
23
+ end
24
+
25
+ def value
26
+ stat[:data][0]
27
+ end
28
+
29
+ def name
30
+ organization.available_locales.to_h do |locale|
31
+ I18n.with_locale(locale) do
32
+ [locale, I18n.t(key, scope: "decidim.statistics")]
33
+ end
34
+ end
35
+ end
36
+
37
+ def description
38
+ organization.available_locales.to_h do |locale|
39
+ I18n.with_locale(locale) do
40
+ [locale, I18n.t(stat[:tooltip_key], scope: "decidim.statistics")]
41
+ end
42
+ end
43
+ end
18
44
  end
19
45
  end
20
46
  end
@@ -12,7 +12,7 @@ module Decidim
12
12
 
13
13
  def editor
14
14
  author = Decidim.traceability.version_editor(object)
15
- author if author.is_a?(Decidim::User) || author.is_a?(Decidim::UserGroup)
15
+ author if author.is_a?(Decidim::User)
16
16
  end
17
17
 
18
18
  delegate :changeset, to: :object
@@ -9,13 +9,12 @@ module Decidim
9
9
  implements Decidim::Core::AuthorInterface
10
10
 
11
11
  field :avatar_url, GraphQL::Types::String, "The user's avatar url", null: false
12
- field :badge, GraphQL::Types::String, "A badge for the user group", null: false
12
+ field :badge, GraphQL::Types::String, "A badge for the user", null: false
13
13
  field :deleted, GraphQL::Types::Boolean, "Whether the user's account has been deleted or not", null: false
14
14
  field :direct_messages_enabled, GraphQL::Types::String,
15
15
  null: false,
16
16
  description: ["If the user making the request is logged in, it will return whether this recipient accepts a conversation or not.",
17
17
  " It will return false for non-logged requests."].join
18
- field :groups, [Decidim::Core::UserGroupType, { null: true }], "Groups where this user belongs", null: false, method: :accepted_user_groups
19
18
  field :id, GraphQL::Types::ID, "The user's id", null: false
20
19
  field :name, GraphQL::Types::String, "The user's name", null: false
21
20
  field :nickname, GraphQL::Types::String, "The user's nickname", null: false
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ApiResponseHelper
5
+ # When passing the JSON types as a variables, it results to a string type.
6
+ def json_value(value)
7
+ return JSON.parse(value) if value.is_a?(String)
8
+
9
+ value
10
+ end
11
+ end
12
+ end