decidim-core 0.31.7 → 0.32.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 (488) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -13
  3. data/app/cells/decidim/amendable/amend_button_card/show.erb +2 -2
  4. data/app/cells/decidim/amendable/amend_button_card_cell.rb +1 -1
  5. data/app/cells/decidim/author_cell.rb +4 -0
  6. data/app/cells/decidim/card_metadata_cell.rb +1 -1
  7. data/app/cells/decidim/comments_button_cell.rb +1 -9
  8. data/app/cells/decidim/content_blocks/announcement_settings_form/show.erb +5 -0
  9. data/app/cells/decidim/content_blocks/announcement_settings_form_cell.rb +17 -0
  10. data/app/cells/decidim/content_blocks/cta_settings_form/show.erb +1 -1
  11. data/app/cells/decidim/content_blocks/hero_settings_form/show.erb +2 -2
  12. data/app/cells/decidim/content_blocks/highlighted_content_banner_cell.rb +1 -1
  13. data/app/cells/decidim/content_blocks/highlighted_content_banner_settings_form/show.erb +1 -1
  14. data/app/cells/decidim/content_blocks/highlighted_participatory_spaces_cell.rb +1 -1
  15. data/app/cells/decidim/content_blocks/how_to_participate/show.erb +1 -1
  16. data/app/cells/decidim/content_blocks/html_cell.rb +1 -1
  17. data/app/cells/decidim/content_blocks/participatory_space_announcement_cell.rb +1 -3
  18. data/app/cells/decidim/content_blocks/participatory_space_hero_cell.rb +1 -5
  19. data/app/cells/decidim/content_blocks/participatory_space_hero_settings_form/show.erb +1 -1
  20. data/app/cells/decidim/content_blocks/static_page/section_cell.rb +1 -1
  21. data/app/cells/decidim/content_blocks/static_page/section_settings_form/show.erb +1 -3
  22. data/app/cells/decidim/content_blocks/static_page/summary_cell.rb +1 -1
  23. data/app/cells/decidim/content_blocks/static_page/summary_settings_form/show.erb +1 -3
  24. data/app/cells/decidim/content_blocks/static_page/two_pane_section_cell.rb +2 -2
  25. data/app/cells/decidim/content_blocks/static_page/two_pane_section_settings_form/show.erb +2 -4
  26. data/app/cells/decidim/data_consent/category.erb +38 -25
  27. data/app/cells/decidim/footer_topics/show.erb +8 -5
  28. data/app/cells/decidim/{participatory_space_private_user_cell.rb → member_cell.rb} +1 -1
  29. data/app/cells/decidim/onboarding_action_message_cell.rb +1 -0
  30. data/app/cells/decidim/profile/details.erb +1 -1
  31. data/app/cells/decidim/profile_cell.rb +1 -0
  32. data/app/cells/decidim/profile_member_of/show.erb +13 -0
  33. data/app/cells/decidim/profile_member_of_cell.rb +35 -0
  34. data/app/cells/decidim/resource_types_filter/show.erb +2 -2
  35. data/app/cells/decidim/share_widget/qr_code_modal.erb +1 -1
  36. data/app/cells/decidim/tags_cell.rb +1 -1
  37. data/app/cells/decidim/upload_modal_cell.rb +0 -5
  38. data/app/cells/decidim/versions_list/show.erb +25 -0
  39. data/app/commands/decidim/create_follow.rb +3 -5
  40. data/app/commands/decidim/create_user_report.rb +1 -1
  41. data/app/commands/decidim/destroy_account.rb +4 -15
  42. data/app/commands/decidim/gallery_methods.rb +107 -0
  43. data/app/commands/decidim/multiple_attachments_methods.rb +27 -28
  44. data/app/commands/decidim/search.rb +5 -5
  45. data/app/controllers/concerns/decidim/ajax_permission_handler.rb +1 -1
  46. data/app/controllers/concerns/decidim/devise_controllers.rb +0 -10
  47. data/app/controllers/concerns/decidim/direct_upload.rb +3 -2
  48. data/app/controllers/concerns/decidim/ephemeral_session_checker.rb +1 -1
  49. data/app/controllers/concerns/decidim/force_authentication.rb +10 -1
  50. data/app/controllers/concerns/decidim/impersonate_users.rb +4 -0
  51. data/app/controllers/concerns/decidim/locale_switcher.rb +52 -2
  52. data/app/controllers/concerns/decidim/needs_tos_accepted.rb +1 -1
  53. data/app/controllers/concerns/decidim/participatory_space/has_members_page.rb +27 -0
  54. data/app/controllers/concerns/decidim/participatory_space_context.rb +1 -5
  55. data/app/controllers/decidim/account_controller.rb +1 -1
  56. data/app/controllers/decidim/amendments_controller.rb +5 -4
  57. data/app/controllers/decidim/components/base_controller.rb +20 -3
  58. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +1 -1
  59. data/app/controllers/decidim/devise/passwords_controller.rb +1 -1
  60. data/app/controllers/decidim/devise/registrations_controller.rb +1 -1
  61. data/app/controllers/decidim/devise/sessions_controller.rb +1 -1
  62. data/app/controllers/decidim/download_your_data_controller.rb +2 -2
  63. data/app/controllers/decidim/editor_images_controller.rb +1 -1
  64. data/app/controllers/decidim/follows_controller.rb +4 -3
  65. data/app/controllers/decidim/geolocation_controller.rb +1 -1
  66. data/app/controllers/decidim/likes_controller.rb +2 -1
  67. data/app/controllers/decidim/locales_controller.rb +3 -11
  68. data/app/controllers/decidim/messaging/conversations_controller.rb +3 -3
  69. data/app/controllers/decidim/newsletters_controller.rb +1 -1
  70. data/app/controllers/decidim/notifications_settings_controller.rb +1 -1
  71. data/app/controllers/decidim/notifications_subscriptions_controller.rb +0 -8
  72. data/app/controllers/decidim/open_data_controller.rb +1 -1
  73. data/app/controllers/decidim/report_users_controller.rb +2 -2
  74. data/app/controllers/decidim/reports_controller.rb +1 -1
  75. data/app/controllers/decidim/user_activities_controller.rb +1 -2
  76. data/app/events/decidim/amendable/amendment_base_event.rb +1 -7
  77. data/app/events/decidim/welcome_notification_event.rb +1 -1
  78. data/app/forms/decidim/upload_validation_form.rb +1 -1
  79. data/app/helpers/concerns/decidim/flash_helper_extensions.rb +1 -0
  80. data/app/helpers/decidim/active_link_to_helper.rb +136 -0
  81. data/app/helpers/decidim/amendments_helper.rb +3 -3
  82. data/app/helpers/decidim/check_boxes_tree_helper.rb +2 -2
  83. data/app/helpers/decidim/component_path_helper.rb +9 -4
  84. data/app/helpers/decidim/filters_helper.rb +0 -2
  85. data/app/helpers/decidim/menu_helper.rb +5 -3
  86. data/app/helpers/decidim/meta_tags_helper.rb +0 -2
  87. data/app/helpers/decidim/paginate_helper.rb +14 -1
  88. data/app/helpers/decidim/sanitize_helper.rb +1 -0
  89. data/app/helpers/decidim/short_link_helper.rb +5 -5
  90. data/app/helpers/decidim/translations_helper.rb +4 -4
  91. data/app/jobs/decidim/delete_inactive_participants_job.rb +2 -2
  92. data/app/jobs/decidim/process_inactive_participant_job.rb +7 -0
  93. data/app/mailers/decidim/application_mailer.rb +7 -2
  94. data/app/mailers/decidim/decidim_devise_mailer.rb +1 -0
  95. data/app/mailers/decidim/participants_account_mailer.rb +16 -0
  96. data/app/mailers/decidim/reported_mailer.rb +4 -1
  97. data/app/models/decidim/action_log.rb +1 -1
  98. data/app/models/decidim/attachment.rb +2 -20
  99. data/app/models/decidim/authorization.rb +0 -7
  100. data/app/models/decidim/authorization_transfer.rb +1 -1
  101. data/app/models/decidim/component.rb +6 -9
  102. data/app/models/decidim/content_block.rb +3 -3
  103. data/app/models/decidim/moderation.rb +1 -1
  104. data/app/models/decidim/newsletter.rb +2 -2
  105. data/app/models/decidim/participatory_space/member.rb +55 -0
  106. data/app/models/decidim/private_export.rb +0 -6
  107. data/app/models/decidim/resource_link.rb +1 -1
  108. data/app/models/decidim/short_link.rb +1 -1
  109. data/app/models/decidim/user.rb +2 -2
  110. data/app/models/decidim/user_base_entity.rb +2 -17
  111. data/app/models/decidim/user_moderation.rb +1 -1
  112. data/app/packs/src/decidim/controllers/accordion/accordion.test.js +42 -196
  113. data/app/packs/src/decidim/controllers/accordion/controller.js +17 -93
  114. data/app/packs/src/decidim/controllers/assign_role/assign_role.test.js +80 -0
  115. data/app/packs/src/decidim/controllers/assign_role/controller.js +27 -0
  116. data/app/packs/src/decidim/controllers/dropdown/controller.js +0 -6
  117. data/app/packs/src/decidim/controllers/dropdown/dropdown.test.js +0 -28
  118. data/app/packs/src/decidim/controllers/form_validator/form_validator.js +6 -6
  119. data/app/packs/src/decidim/controllers/form_validator/form_validator.test.js +1 -23
  120. data/app/packs/src/decidim/controllers/main_menu/controller.js +115 -0
  121. data/app/packs/src/decidim/controllers/main_menu/main_menu.test.js +185 -0
  122. data/app/packs/src/decidim/controllers/mention/controller.js +140 -296
  123. data/app/packs/src/decidim/controllers/mention/input_mentions.test.js +457 -120
  124. data/app/packs/src/decidim/controllers/multiple_mentions/controller.js +32 -68
  125. data/app/packs/src/decidim/controllers/multiple_mentions/input_multiple_mentions.test.js +23 -30
  126. data/app/packs/src/decidim/controllers/password_toggler/controller.js +1 -22
  127. data/app/packs/src/decidim/controllers/password_toggler/password_toggler.test.js +20 -11
  128. data/app/packs/src/decidim/datepicker/generate_datepicker.js +1 -13
  129. data/app/packs/src/decidim/direct_uploads/upload_field.js +4 -4
  130. data/app/packs/src/decidim/direct_uploads/upload_modal.js +7 -12
  131. data/app/packs/src/decidim/editor/common/suggestion.js +1 -1
  132. data/app/packs/src/decidim/editor/extensions/decidim_kit/index.js +4 -1
  133. data/app/packs/src/decidim/editor/extensions/image/index.js +8 -5
  134. data/app/packs/src/decidim/editor/extensions/link/index.js +8 -0
  135. data/app/packs/src/decidim/editor/extensions/mention/index.js +18 -5
  136. data/app/packs/src/decidim/editor/extensions/mention_resource/index.js +16 -7
  137. data/app/packs/src/decidim/editor/test/extensions/decidim_kit.test.js +13 -4
  138. data/app/packs/src/decidim/editor/test/extensions/heading.test.js +1 -1
  139. data/app/packs/src/decidim/editor/test/extensions/image.test.js +26 -28
  140. data/app/packs/src/decidim/editor/test/extensions/mention.test.js +6 -2
  141. data/app/packs/src/decidim/editor/test/extensions/video_embed.test.js +27 -15
  142. data/app/packs/src/decidim/editor/test/helpers.js +8 -10
  143. data/app/packs/src/decidim/editor/test/toolbar/full.test.js +15 -4
  144. data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_block.js +8 -4
  145. data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_formatting.js +5 -1
  146. data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_indent.js +9 -5
  147. data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_link.js +5 -1
  148. data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_list.js +8 -4
  149. data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_styling.js +13 -9
  150. data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_content_styling.js +6 -2
  151. data/app/packs/src/decidim/geocoding/reverse_geocoding.js +5 -15
  152. data/app/packs/src/decidim/index.js +3 -5
  153. data/app/packs/src/decidim/map/controller.js +1 -10
  154. data/app/packs/src/decidim/refactor/moved/focus_guard.js +12 -12
  155. data/app/packs/src/decidim/sw/push-permissions.js +13 -48
  156. data/app/packs/src/decidim/sw/sw.js +1 -1
  157. data/app/packs/src/decidim/utilities/text.js +6 -6
  158. data/app/packs/src/decidim/vendor/tribute.js +1890 -0
  159. data/app/packs/stylesheets/decidim/_cards.scss +3 -2
  160. data/app/packs/stylesheets/decidim/_conversations.scss +0 -14
  161. data/app/packs/stylesheets/decidim/_cookies.scss +5 -13
  162. data/app/packs/stylesheets/decidim/_datepicker.scss +0 -8
  163. data/app/packs/stylesheets/decidim/_documents.scss +1 -1
  164. data/app/packs/stylesheets/decidim/_dropdown.scss +21 -31
  165. data/app/packs/stylesheets/decidim/_floating_help.scss +1 -1
  166. data/app/packs/stylesheets/decidim/_footer.scss +1 -69
  167. data/app/packs/stylesheets/decidim/_forms.scss +5 -1
  168. data/app/packs/stylesheets/decidim/_header.scss +148 -46
  169. data/app/packs/stylesheets/decidim/_language_chooser.scss +79 -0
  170. data/app/packs/stylesheets/decidim/_participatory_spaces.scss +1 -1
  171. data/app/packs/stylesheets/decidim/_tribute.scss +36 -0
  172. data/app/packs/stylesheets/decidim/application.scss +1 -2
  173. data/app/packs/stylesheets/decidim/editor.scss +33 -2
  174. data/app/packs/stylesheets/decidim/geocoding_addons.scss +2 -10
  175. data/app/presenters/decidim/admin_log/participatory_space/member_presenter.rb +40 -0
  176. data/app/presenters/decidim/admin_log/static_page_resource_presenter.rb +1 -1
  177. data/app/presenters/decidim/authorization_transfer_presenter.rb +1 -1
  178. data/app/presenters/decidim/breadcrumb_root_menu_item_presenter.rb +3 -3
  179. data/app/presenters/decidim/footer_menu_presenter.rb +4 -2
  180. data/app/presenters/decidim/log/user_presenter.rb +1 -0
  181. data/app/presenters/decidim/log/value_types/access_mode_presenter.rb +45 -0
  182. data/app/presenters/decidim/menu_item_presenter.rb +3 -9
  183. data/app/presenters/decidim/participatory_space/member_presenter.rb +48 -0
  184. data/app/presenters/decidim/resource_locator_presenter.rb +22 -3
  185. data/app/presenters/decidim/stats_presenter.rb +1 -1
  186. data/app/queries/decidim/last_activity.rb +1 -1
  187. data/app/resolvers/decidim/meta_image_url_resolver.rb +0 -7
  188. data/app/serializers/decidim/exporters/participatory_space_serializer.rb +15 -1
  189. data/app/services/decidim/email_notification_generator.rb +2 -0
  190. data/app/services/decidim/notification_generator.rb +4 -0
  191. data/app/services/decidim/notifications_subscriptions_persistor.rb +0 -6
  192. data/app/services/decidim/send_push_notification.rb +1 -5
  193. data/app/uploaders/decidim/image_uploader.rb +1 -1
  194. data/app/uploaders/decidim/organization_favicon_uploader.rb +4 -9
  195. data/app/validators/uploader_image_dimensions_validator.rb +13 -11
  196. data/app/views/decidim/gamification/badges/index.html.erb +1 -1
  197. data/app/views/decidim/homepage/show.html.erb +2 -2
  198. data/app/views/decidim/last_activities/index.html.erb +1 -1
  199. data/app/views/decidim/messaging/conversations/_error_modal.html.erb +19 -11
  200. data/app/views/decidim/messaging/conversations/_new_conversation_button.html.erb +1 -1
  201. data/app/views/decidim/messaging/conversations/_reply.html.erb +1 -1
  202. data/app/views/decidim/messaging/conversations/error.js.erb +7 -12
  203. data/app/views/decidim/messaging/conversations/new.html.erb +1 -1
  204. data/app/views/decidim/messaging/conversations/show.html.erb +2 -2
  205. data/app/views/decidim/newsletters/unsubscribe.html.erb +1 -1
  206. data/app/views/decidim/notifications_settings/show.html.erb +5 -5
  207. data/app/views/decidim/offline/show.html.erb +1 -1
  208. data/app/views/decidim/pages/index.html.erb +1 -1
  209. data/app/views/decidim/participants_account_mailer/removal_notification.html.erb +11 -0
  210. data/app/views/decidim/participatory_space/members/_member.html.erb +1 -0
  211. data/app/views/decidim/profiles/show.html.erb +1 -1
  212. data/app/views/decidim/searches/_filters.html.erb +1 -1
  213. data/app/views/decidim/shared/_resource_actions.html.erb +4 -4
  214. data/app/views/decidim/shared/_results_per_page.html.erb +1 -1
  215. data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -1
  216. data/app/views/decidim/shared/filters/_dropdown_label.html.erb +4 -3
  217. data/app/views/decidim/user_activities/index.html.erb +1 -1
  218. data/app/views/devise/mailer/{invite_private_user.html.erb → invite_member.html.erb} +2 -2
  219. data/app/views/devise/mailer/{invite_private_user.text.erb → invite_member.text.erb} +2 -2
  220. data/app/views/layouts/decidim/_head.html.erb +2 -2
  221. data/app/views/layouts/decidim/_wrapper.html.erb +3 -3
  222. data/app/views/layouts/decidim/footer/_focus_mode_main.html.erb +0 -1
  223. data/app/views/layouts/decidim/footer/_main.html.erb +1 -2
  224. data/app/views/layouts/decidim/footer/_main_links.html.erb +28 -56
  225. data/app/views/layouts/decidim/header/_focus_mode_back_button.html.erb +4 -1
  226. data/app/views/layouts/decidim/header/_main.html.erb +17 -8
  227. data/app/views/layouts/decidim/header/_main_language_chooser.html.erb +24 -0
  228. data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +56 -56
  229. data/app/views/layouts/decidim/header/_main_links_mobile_account.html.erb +2 -2
  230. data/app/views/layouts/decidim/header/_main_links_mobile_item_account.html.erb +3 -1
  231. data/app/views/layouts/decidim/header/_main_menu_mobile.html.erb +18 -5
  232. data/app/views/layouts/decidim/header/_main_search.html.erb +3 -3
  233. data/app/views/layouts/decidim/header/_menu.html.erb +5 -5
  234. data/app/views/layouts/decidim/header/_menu_breadcrumb_desktop.html.erb +13 -12
  235. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile.html.erb +28 -0
  236. data/app/views/layouts/decidim/shared/_layout_center.html.erb +1 -1
  237. data/app/views/layouts/decidim/shared/_layout_item.html.erb +1 -1
  238. data/app/views/layouts/decidim/shared/_layout_two_col.html.erb +1 -1
  239. data/config/initializers/invisible_captcha.rb +1 -0
  240. data/config/locales/ar.yml +29 -12
  241. data/config/locales/bg.yml +31 -14
  242. data/config/locales/bs-BA.yml +0 -1
  243. data/config/locales/ca-IT.yml +68 -60
  244. data/config/locales/ca.yml +68 -60
  245. data/config/locales/cs.yml +56 -37
  246. data/config/locales/da.yml +0 -1
  247. data/config/locales/de.yml +58 -27
  248. data/config/locales/el.yml +26 -9
  249. data/config/locales/en.yml +64 -55
  250. data/config/locales/eo.yml +0 -1
  251. data/config/locales/es-MX.yml +67 -59
  252. data/config/locales/es-PY.yml +67 -59
  253. data/config/locales/es.yml +67 -59
  254. data/config/locales/et.yml +0 -1
  255. data/config/locales/eu.yml +104 -94
  256. data/config/locales/fa-IR.yml +0 -1
  257. data/config/locales/fi-plain.yml +63 -60
  258. data/config/locales/fi.yml +65 -62
  259. data/config/locales/fr-CA.yml +63 -39
  260. data/config/locales/fr.yml +63 -39
  261. data/config/locales/ga-IE.yml +3 -2
  262. data/config/locales/gl.yml +26 -9
  263. data/config/locales/gn-PY.yml +0 -1
  264. data/config/locales/hr.yml +0 -1
  265. data/config/locales/hu.yml +26 -12
  266. data/config/locales/id-ID.yml +25 -9
  267. data/config/locales/is-IS.yml +7 -2
  268. data/config/locales/it.yml +24 -23
  269. data/config/locales/ja.yml +65 -75
  270. data/config/locales/ka-GE.yml +0 -1
  271. data/config/locales/kaa.yml +0 -1
  272. data/config/locales/ko.yml +0 -1
  273. data/config/locales/lb.yml +27 -10
  274. data/config/locales/lt.yml +28 -12
  275. data/config/locales/lv.yml +25 -9
  276. data/config/locales/mt.yml +0 -1
  277. data/config/locales/nl.yml +27 -10
  278. data/config/locales/no.yml +27 -10
  279. data/config/locales/oc-FR.yml +0 -1
  280. data/config/locales/pl.yml +33 -18
  281. data/config/locales/pt-BR.yml +61 -26
  282. data/config/locales/pt.yml +27 -10
  283. data/config/locales/ro-RO.yml +43 -21
  284. data/config/locales/ru.yml +8 -7
  285. data/config/locales/sk.yml +25 -1409
  286. data/config/locales/sl.yml +0 -1
  287. data/config/locales/sr-CS.yml +0 -1
  288. data/config/locales/sv.yml +72 -30
  289. data/config/locales/tr-TR.yml +28 -10
  290. data/config/locales/uk.yml +6 -4
  291. data/config/locales/vi.yml +0 -1
  292. data/config/locales/zh-CN.yml +25 -9
  293. data/config/locales/zh-TW.yml +28 -10
  294. data/config/routes.rb +138 -77
  295. data/db/data/20251213075429_rename_members_in_action_log.rb +22 -0
  296. data/db/data/20260319145808_rename_send_to_members_in_newsletter.rb +27 -0
  297. data/db/migrate/20200730142511_add_file_upload_settings_to_decidim_organizations.rb +13 -15
  298. data/db/migrate/20250217192438_convert_user_groups_into_users.rb +2 -3
  299. data/db/migrate/20250523104311_move_cta_to_hero_content_block.rb +1 -1
  300. data/db/migrate/20250527122040_move_highlighted_content_banner_settings_to_content_block.rb +1 -1
  301. data/db/migrate/20250819110800_convert_private_exports_id_to_uuid.rb +2 -2
  302. data/db/migrate/20251112132305_remove_legacy_images_from_core_module.rb +27 -0
  303. data/db/migrate/20251205122428_rename_participatory_space_private_users_to_members.rb +9 -0
  304. data/db/migrate/20251216185133_rename_privatable_to_to_participatory_space_in_members.rb +10 -0
  305. data/db/migrate/20260208201405_remove_user_group_core.rb +21 -0
  306. data/db/migrate/20260208201406_remove_user_group_memberships.rb +30 -0
  307. data/db/migrate/20260208201407_remove_user_group_organizations.rb +11 -0
  308. data/db/migrate/20260217152425_remove_enable_participatory_space_filters_from_decidim_organizations.rb +7 -0
  309. data/db/migrate/20260314081619_add_index_on_decidim_members.rb +25 -0
  310. data/decidim-core.gemspec +25 -31
  311. data/lib/decidim/acts_as_tree.rb +12 -12
  312. data/lib/decidim/admin_filters_registry.rb +1 -1
  313. data/lib/decidim/amendable.rb +5 -1
  314. data/lib/decidim/api/functions/category_list.rb +1 -0
  315. data/lib/decidim/api/functions/component_finder_base.rb +1 -1
  316. data/lib/decidim/api/functions/component_list.rb +3 -1
  317. data/lib/decidim/api/functions/component_list_base.rb +1 -0
  318. data/lib/decidim/api/functions/participatory_space_finder_base.rb +1 -1
  319. data/lib/decidim/api/functions/participatory_space_list_base.rb +1 -0
  320. data/lib/decidim/api/functions/user_entity_list.rb +0 -3
  321. data/lib/decidim/api/interfaces/amendable_entity_interface.rb +1 -0
  322. data/lib/decidim/api/interfaces/amendable_interface.rb +1 -0
  323. data/lib/decidim/api/interfaces/attachable_collection_interface.rb +1 -0
  324. data/lib/decidim/api/interfaces/attachable_interface.rb +1 -0
  325. data/lib/decidim/api/interfaces/author_interface.rb +2 -1
  326. data/lib/decidim/api/interfaces/authorable_interface.rb +1 -0
  327. data/lib/decidim/api/interfaces/categories_container_interface.rb +1 -0
  328. data/lib/decidim/api/interfaces/categorizable_interface.rb +1 -0
  329. data/lib/decidim/api/interfaces/coauthorable_interface.rb +1 -0
  330. data/lib/decidim/api/interfaces/component_interface.rb +9 -8
  331. data/lib/decidim/api/interfaces/fingerprint_interface.rb +1 -0
  332. data/lib/decidim/api/interfaces/followable_interface.rb +2 -0
  333. data/lib/decidim/api/interfaces/likeable_interface.rb +2 -2
  334. data/lib/decidim/api/interfaces/localizable_interface.rb +1 -0
  335. data/lib/decidim/api/interfaces/participatory_space_interface.rb +1 -0
  336. data/lib/decidim/api/interfaces/referable_interface.rb +1 -0
  337. data/lib/decidim/api/interfaces/scopable_interface.rb +1 -0
  338. data/lib/decidim/api/interfaces/taxonomizable_interface.rb +1 -0
  339. data/lib/decidim/api/interfaces/timestamps_interface.rb +1 -0
  340. data/lib/decidim/api/interfaces/traceable_interface.rb +1 -0
  341. data/lib/decidim/api/types/attachment_collection_type.rb +5 -3
  342. data/lib/decidim/api/types/attachment_type.rb +11 -4
  343. data/lib/decidim/api/types/badge_score_type.rb +28 -0
  344. data/lib/decidim/api/types/moderation_type.rb +25 -0
  345. data/lib/decidim/api/types/participant_details_type.rb +17 -0
  346. data/lib/decidim/api/types/reportable_type.rb +18 -0
  347. data/lib/decidim/api/types/reportable_user_type.rb +17 -0
  348. data/lib/decidim/api/types/static_page_topic_type.rb +16 -0
  349. data/lib/decidim/api/types/static_page_type.rb +22 -0
  350. data/lib/decidim/api/types/taxonomy_type.rb +2 -0
  351. data/lib/decidim/api/types/user_moderation_type.rb +36 -0
  352. data/lib/decidim/api/types/user_type.rb +13 -0
  353. data/lib/decidim/asset_router/pipeline.rb +1 -1
  354. data/lib/decidim/asset_router/storage.rb +9 -9
  355. data/lib/decidim/assets/tailwind/tailwind.config.js.erb +3 -0
  356. data/lib/decidim/attachment_attributes.rb +9 -58
  357. data/lib/decidim/attribute_encryptor.rb +51 -10
  358. data/lib/decidim/attribute_object/model.rb +0 -5
  359. data/lib/decidim/block_registry.rb +1 -1
  360. data/lib/decidim/coauthorable.rb +2 -1
  361. data/lib/decidim/command.rb +2 -1
  362. data/lib/decidim/content_processor.rb +1 -1
  363. data/lib/decidim/content_renderers/base_renderer.rb +0 -112
  364. data/lib/decidim/content_renderers/blob_renderer.rb +7 -4
  365. data/lib/decidim/content_renderers/mention_resource_renderer.rb +6 -10
  366. data/lib/decidim/content_renderers/resource_renderer.rb +7 -16
  367. data/lib/decidim/content_renderers/user_renderer.rb +9 -11
  368. data/lib/decidim/core/api.rb +8 -0
  369. data/lib/decidim/core/content_blocks/registry_manager.rb +4 -10
  370. data/lib/decidim/core/engine.rb +2 -42
  371. data/lib/decidim/core/menu.rb +0 -26
  372. data/lib/decidim/core/test/factories.rb +29 -21
  373. data/lib/decidim/core/test/shared_examples/access_mode_restricted_participatory_spaces.rb +172 -0
  374. data/lib/decidim/core/test/shared_examples/access_mode_transparent_participatory_spaces.rb +241 -0
  375. data/lib/decidim/core/test/shared_examples/admin_resource_gallery_examples.rb +10 -10
  376. data/lib/decidim/core/test/shared_examples/amendable/amendment_event_examples.rb +2 -2
  377. data/lib/decidim/core/test/shared_examples/amendable/amendment_promoted_event_examples.rb +3 -3
  378. data/lib/decidim/core/test/shared_examples/comments_examples.rb +121 -143
  379. data/lib/decidim/core/test/shared_examples/fingerprint_examples.rb +2 -0
  380. data/lib/decidim/core/test/shared_examples/has_members.rb +63 -0
  381. data/lib/decidim/core/test/shared_examples/has_space_in_mcell_examples.rb +1 -2
  382. data/lib/decidim/core/test/shared_examples/manage_share_tokens_examples.rb +1 -1
  383. data/lib/decidim/core/test/shared_examples/map_examples.rb +1 -1
  384. data/lib/decidim/core/test/shared_examples/participant_details_examples.rb +16 -0
  385. data/lib/decidim/core/test/shared_examples/participatory_space_members_page_examples.rb +10 -10
  386. data/lib/decidim/core/test/shared_examples/resource_liked_event_examples.rb +3 -3
  387. data/lib/decidim/core/test/shared_examples/resource_locator_presenter_examples.rb +7 -7
  388. data/lib/decidim/core/test/shared_examples/searchable_participatory_space_examples.rb +3 -3
  389. data/lib/decidim/core/test/shared_examples/searchable_results_examples.rb +2 -2
  390. data/lib/decidim/core/test/shared_examples/simple_event.rb +1 -0
  391. data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +2 -2
  392. data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +1 -1
  393. data/lib/decidim/core/test.rb +2 -1
  394. data/lib/decidim/core/version.rb +1 -1
  395. data/lib/decidim/core.rb +222 -335
  396. data/lib/decidim/download_your_data_serializers/{download_your_data_participatory_space_private_user_serializer.rb → download_your_data_member_serializer.rb} +6 -6
  397. data/lib/decidim/download_your_data_serializers.rb +2 -2
  398. data/lib/decidim/engine_router.rb +31 -6
  399. data/lib/decidim/exporters/csv.rb +1 -1
  400. data/lib/decidim/filter_form_builder.rb +1 -1
  401. data/{app/controllers/concerns → lib}/decidim/form_factory.rb +11 -1
  402. data/lib/decidim/has_settings.rb +2 -2
  403. data/lib/decidim/legacy_form_builder.rb +1 -0
  404. data/lib/decidim/locale_router_detector.rb +41 -0
  405. data/lib/decidim/maintenance/import_models/scope.rb +1 -1
  406. data/lib/decidim/maintenance/import_models.rb +0 -2
  407. data/lib/decidim/map/autocomplete.rb +3 -4
  408. data/lib/decidim/map/dynamic_map.rb +1 -3
  409. data/lib/decidim/map/frontend.rb +1 -1
  410. data/lib/decidim/map/geocoding.rb +2 -2
  411. data/lib/decidim/map/static_map.rb +10 -22
  412. data/lib/decidim/map/utility.rb +3 -6
  413. data/lib/decidim/map.rb +2 -2
  414. data/lib/decidim/menu.rb +1 -1
  415. data/lib/decidim/menu_item.rb +1 -0
  416. data/lib/decidim/menu_registry.rb +1 -1
  417. data/lib/decidim/moderation_tools.rb +1 -1
  418. data/lib/decidim/newsletter_encryptor.rb +5 -8
  419. data/lib/decidim/organization_settings.rb +2 -2
  420. data/lib/decidim/participable.rb +1 -0
  421. data/lib/decidim/participatory_space/has_members.rb +61 -0
  422. data/lib/decidim/participatory_space_manifest.rb +0 -4
  423. data/lib/decidim/participatory_space_resourceable.rb +10 -1
  424. data/lib/decidim/routes/locale_redirects.rb +47 -0
  425. data/lib/decidim/routes.rb +7 -0
  426. data/lib/decidim/search_resource_fields_mapper.rb +3 -4
  427. data/lib/decidim/searchable.rb +0 -5
  428. data/lib/decidim/seeds.rb +17 -0
  429. data/lib/decidim/shakapacker/runner.rb +4 -4
  430. data/lib/decidim/shakapacker/shakapacker.yml +28 -3
  431. data/lib/decidim/taxonomizable.rb +1 -1
  432. data/lib/decidim/translatable_attributes.rb +9 -3
  433. data/lib/decidim/view_model.rb +5 -1
  434. data/lib/devise/models/decidim_newsletterable.rb +1 -1
  435. data/lib/tasks/decidim_mailers_tasks.rake +9 -31
  436. data/lib/tasks/decidim_procfile.rake +1 -1
  437. data/lib/tasks/decidim_tasks.rake +0 -1
  438. data/lib/tasks/decidim_taxonomies.rake +1 -1
  439. data/lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake +0 -1
  440. data/lib/tasks/upgrade/decidim_encryption.rake +12 -0
  441. data/lib/tasks/upgrade/decidim_migrate_wysiwyg_content.rake +0 -1
  442. data/lib/tasks/upgrade/decidim_remove_deleted_users_left_data_tasks.rake +1 -1
  443. data/lib/tasks/upgrade/{fix_deleted_private_follows.rake → fix_deleted_members_follows.rake} +5 -5
  444. data/lib/tasks/upgrade/migrations.rake +0 -1
  445. data/lib/tasks/upgrade/user_groups_migration.rake +0 -1
  446. metadata +206 -155
  447. data/app/cells/decidim/content_blocks/global_menu/show.erb +0 -11
  448. data/app/cells/decidim/content_blocks/global_menu_cell.rb +0 -35
  449. data/app/cells/decidim/content_blocks/menu_breadcrumb_last_activity/show.erb +0 -10
  450. data/app/cells/decidim/content_blocks/menu_breadcrumb_last_activity_cell.rb +0 -49
  451. data/app/cells/decidim/participatory_space_dropdown_metadata/links.erb +0 -9
  452. data/app/cells/decidim/participatory_space_dropdown_metadata/metadata.erb +0 -1
  453. data/app/cells/decidim/participatory_space_dropdown_metadata/show.erb +0 -11
  454. data/app/cells/decidim/participatory_space_dropdown_metadata_cell.rb +0 -26
  455. data/app/controllers/concerns/decidim/has_members_page.rb +0 -25
  456. data/app/controllers/decidim/private_downloads_controller.rb +0 -29
  457. data/app/jobs/decidim/newsletters_opt_in_job.rb +0 -11
  458. data/app/jobs/decidim/user_report_job.rb +0 -11
  459. data/app/mailers/decidim/delete_user_mailer.rb +0 -14
  460. data/app/models/decidim/participatory_space_private_user.rb +0 -51
  461. data/app/models/decidim/private_download.rb +0 -61
  462. data/app/packs/src/decidim/controllers/sticky_header/controller.js +0 -116
  463. data/app/packs/src/decidim/controllers/sticky_header/sticky_header.test.js +0 -320
  464. data/app/packs/src/decidim/dropdown_menu.js +0 -18
  465. data/app/packs/src/decidim/geocoding/reverse_geocoding.test.js +0 -197
  466. data/app/packs/src/decidim/identity_selector_dialog.js +0 -33
  467. data/app/packs/src/decidim/refactor/moved/focus_guard.test.js +0 -136
  468. data/app/packs/stylesheets/decidim/_editor_suggestions.scss +0 -49
  469. data/app/packs/stylesheets/decidim/_tom_select.scss +0 -23
  470. data/app/presenters/decidim/admin_log/participatory_space_private_user_presenter.rb +0 -38
  471. data/app/presenters/decidim/participatory_space_private_user_presenter.rb +0 -46
  472. data/app/services/decidim/push_subscription_endpoint_validator.rb +0 -34
  473. data/app/views/decidim/delete_user_mailer/delete.html.erb +0 -6
  474. data/app/views/decidim/participatory_space_private_users/_participatory_space_private_user.html.erb +0 -1
  475. data/app/views/layouts/decidim/footer/_main_language_chooser.html.erb +0 -26
  476. data/app/views/layouts/decidim/header/_menu_breadcrumb_items.html.erb +0 -34
  477. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_desktop.html.erb +0 -10
  478. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_mobile.html.erb +0 -17
  479. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_top_left.html.erb +0 -2
  480. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +0 -33
  481. data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +0 -25
  482. data/lib/decidim/core/test/shared_examples/has_private_users.rb +0 -63
  483. data/lib/decidim/core/test/shared_examples/participatory_space_dropdown_metadata_cell_examples.rb +0 -81
  484. data/lib/decidim/has_private_users.rb +0 -57
  485. data/lib/decidim/maintenance/import_models/assembly_type.rb +0 -49
  486. data/lib/decidim/maintenance/import_models/participatory_process_type.rb +0 -21
  487. data/lib/decidim/query_extensions.rb +0 -64
  488. /data/app/cells/decidim/{participatory_space_private_user → member}/show.erb +0 -0
data/lib/decidim/core.rb CHANGED
@@ -74,9 +74,7 @@ module Decidim
74
74
  autoload :Searchable, "decidim/searchable"
75
75
  autoload :FilterableResource, "decidim/filterable_resource"
76
76
  autoload :SearchResourceFieldsMapper, "decidim/search_resource_fields_mapper"
77
- autoload :QueryExtensions, "decidim/query_extensions"
78
77
  autoload :ParticipatorySpaceResourceable, "decidim/participatory_space_resourceable"
79
- autoload :HasPrivateUsers, "decidim/has_private_users"
80
78
  autoload :ViewModel, "decidim/view_model"
81
79
  autoload :FingerprintCalculator, "decidim/fingerprint_calculator"
82
80
  autoload :Fingerprintable, "decidim/fingerprintable"
@@ -134,6 +132,13 @@ module Decidim
134
132
  autoload :ApiResponseHelper, "decidim/api_response_helper"
135
133
  autoload :ResourceHelper, "decidim/resource_helper"
136
134
  autoload :TooltipHelper, "decidim/tooltip_helper"
135
+ autoload :FormFactory, "decidim/form_factory"
136
+ autoload :LocaleRouterDetector, "decidim/locale_router_detector"
137
+ autoload :Routes, "decidim/routes"
138
+
139
+ module ParticipatorySpace
140
+ autoload :HasMembers, "decidim/participatory_space/has_members"
141
+ end
137
142
 
138
143
  module Commands
139
144
  autoload :CreateResource, "decidim/commands/create_resource"
@@ -145,7 +150,14 @@ module Decidim
145
150
  autoload :RestoreResource, "decidim/commands/restore_resource"
146
151
  end
147
152
 
148
- include ActiveSupport::Configurable
153
+ class << self
154
+ def config = self
155
+
156
+ def configure
157
+ yield self
158
+ end
159
+ end
160
+
149
161
  # Loads seeds from all engines.
150
162
  def self.seed!
151
163
  # After running the migrations, some records may have loaded their column
@@ -238,80 +250,54 @@ module Decidim
238
250
  end
239
251
 
240
252
  # Exposes a configuration option: The application name String.
241
- config_accessor :application_name do
242
- config.application_name = Decidim::Env.new("DECIDIM_APPLICATION_NAME", "My Application Name").to_s
243
- end
253
+ mattr_accessor :application_name, default: Decidim::Env.new("DECIDIM_APPLICATION_NAME", "My Application Name").to_s
244
254
 
245
255
  # Exposes a configuration option: The email String to use as sender in all
246
256
  # the mails.
247
- config_accessor :mailer_sender do
248
- Decidim::Env.new("DECIDIM_MAILER_SENDER", "change-me@example.org").to_s
249
- end
257
+ mattr_accessor :mailer_sender, default: Decidim::Env.new("DECIDIM_MAILER_SENDER", "change-me@example.org").to_s
250
258
 
251
259
  # Whether SSL should be forced or not.
252
- config_accessor :force_ssl do
253
- if Decidim::Env.new("DECIDIM_FORCE_SSL", "auto").default_or_present_if_exists.to_s == "auto"
254
- Rails.env.starts_with?("production") || Rails.env.starts_with?("staging")
255
- else
256
- Decidim::Env.new("DECIDIM_FORCE_SSL").present?
257
- end
258
- end
260
+ mattr_accessor :force_ssl
261
+ self.force_ssl ||= if Decidim::Env.new("DECIDIM_FORCE_SSL", "auto").default_or_present_if_exists.to_s == "auto"
262
+ Rails.env.starts_with?("production") || Rails.env.starts_with?("staging")
263
+ else
264
+ Decidim::Env.new("DECIDIM_FORCE_SSL").present?
265
+ end
259
266
 
260
267
  # CDN host configuration
261
- config_accessor :storage_cdn_host do
262
- Decidim::Env.new("STORAGE_CDN_HOST", nil).to_s
263
- end
268
+ mattr_accessor :storage_cdn_host, default: Decidim::Env.new("STORAGE_CDN_HOST", nil).to_s
264
269
 
265
270
  # Which storage provider is going to be used for the application, provides support for the most popular options.
266
- config_accessor :storage_provider do
267
- Decidim::Env.new("STORAGE_PROVIDER", "local").to_s
268
- end
271
+ mattr_accessor :storage_provider, default: Decidim::Env.new("STORAGE_PROVIDER", "local").to_s
269
272
 
270
273
  # VAPID public key that will be used to sign the Push API requests.
271
- config_accessor :vapid_public_key do
272
- Decidim::Env.new("VAPID_PUBLIC_KEY", nil).to_s
273
- end
274
+ mattr_accessor :vapid_public_key, default: Decidim::Env.new("VAPID_PUBLIC_KEY", nil).to_s
274
275
 
275
276
  # VAPID private key that will be used to sign the Push API requests.
276
- config_accessor :vapid_private_key do
277
- Decidim::Env.new("VAPID_PRIVATE_KEY", nil).to_s
278
- end
277
+ mattr_accessor :vapid_private_key, default: Decidim::Env.new("VAPID_PRIVATE_KEY", nil).to_s
279
278
 
280
279
  # Having this on true will change the way the svg assets are being served.
281
- config_accessor :cors_enabled do
282
- Decidim::Env.new("DECIDIM_CORS_ENABLED", "false").present?
283
- end
280
+ mattr_accessor :cors_enabled, default: Decidim::Env.new("DECIDIM_CORS_ENABLED", "false").present?
284
281
 
285
282
  # Exposes a configuration option: The application available locales.
286
- config_accessor :available_locales do
287
- Decidim::Env.new("DECIDIM_AVAILABLE_LOCALES", %w(en bg ar ca cs da de el eo es es-MX es-PY et eu fa fi-pl fi fr fr-CA ga gl hr
288
- hu id is it ja ko lb lt lv mt nl no pl pt pt-BR ro ru sk sl sr sv tr uk vi zh-CN zh-TW).join(",")).to_array
289
- end
283
+ mattr_accessor :available_locales, default: Decidim::Env.new("DECIDIM_AVAILABLE_LOCALES", %w(en bg ar ca cs da de el eo es es-MX es-PY et eu fa fi-pl
284
+ fi fr fr-CA ga gl hr hu id is it ja ko lb lt lv mt nl no pl pt pt-BR ro ru sk sl
285
+ sr sv tr uk vi zh-CN zh-TW).join(",")).to_array
290
286
 
291
287
  # Exposes a configuration option: The application default locale.
292
- config_accessor :default_locale do
293
- (Decidim::Env.new("DECIDIM_DEFAULT_LOCALE", "en").presence || :en).to_s
294
- end
288
+ mattr_accessor :default_locale, default: (Decidim::Env.new("DECIDIM_DEFAULT_LOCALE", "en").presence || :en).to_s
295
289
 
296
290
  # Users that have not logged in for this period of time will be deleted
297
- config_accessor :delete_inactive_users_after_days do
298
- Decidim::Env.new("DECIDIM_DELETE_INACTIVE_USERS_AFTER_DAYS", 365).to_i
299
- end
291
+ mattr_accessor :delete_inactive_users_after_days, default: Decidim::Env.new("DELETE_INACTIVE_USERS_AFTER_DAYS", 365).to_i
300
292
 
301
293
  # The minimum allowed inactivity period for deleting participants.
302
- config_accessor :minimum_inactivity_period do
303
- Decidim::Env.new("DECIDIM_MINIMUM_INACTIVITY_PERIOD_IN_DAYS", 30).to_i
304
- end
294
+ mattr_accessor :minimum_inactivity_period, default: Decidim::Env.new("DECIDIM_MINIMUM_INACTIVITY_PERIOD_IN_DAYS", 30).to_i
305
295
 
306
296
  # Users will be warned for the first time this amount of days before the final removal
307
- config_accessor :delete_inactive_users_first_warning_days_before do
308
- Decidim::Env.new("DECIDIM_DELETE_INACTIVE_USERS_FIRST_WARNING_DAYS_BEFORE", 30).to_i
309
- end
297
+ mattr_accessor :delete_inactive_users_first_warning_days_before, default: Decidim::Env.new("DECIDIM_DELETE_INACTIVE_USERS_FIRST_WARNING_DAYS_BEFORE", 30).to_i
310
298
 
311
299
  # Users will be warned for the last time this amount of days before the final removal
312
- config_accessor :delete_inactive_users_last_warning_days_before do
313
- Decidim::Env.new("DECIDIM_DELETE_INACTIVE_USERS_LAST_WARNING_DAYS_BEFORE", 7).to_i
314
- end
300
+ mattr_accessor :delete_inactive_users_last_warning_days_before, default: Decidim::Env.new("DECIDIM_DELETE_INACTIVE_USERS_LAST_WARNING_DAYS_BEFORE", 7).to_i
315
301
 
316
302
  # Returns the inactivity threshold (in days) to trigger the first warning email.
317
303
  def self.first_warning_inactive_users_after_days
@@ -326,9 +312,7 @@ module Decidim
326
312
  # Disable the redirection to the external host when performing redirect back
327
313
  # For more details https://github.com/rails/rails/issues/39643
328
314
  # Additional context: This has been revealed as an issue during a security audit on Future of Europe installation
329
- config_accessor :allow_open_redirects do
330
- Decidim::Env.new("DECIDIM_ALLOW_OPEN_REDIRECTS").present?
331
- end
315
+ mattr_accessor :allow_open_redirects, default: Decidim::Env.new("DECIDIM_ALLOW_OPEN_REDIRECTS").present?
332
316
 
333
317
  # Exposes a configuration option: an array of symbols representing processors
334
318
  # that will be automatically executed when a content is parsed or rendered.
@@ -343,64 +327,60 @@ module Decidim
343
327
  #
344
328
  # Decidim::ContentParsers::UserParser < BaseParser
345
329
  # Decidim::ContentRenderers::UserRenderer < BaseRenderer
346
- config_accessor :content_processors do
347
- Decidim::Env.new("DECIDIM_CONTENT_PROCESSORS", "").to_array
348
- end
330
+ mattr_accessor :content_processors, default: Decidim::Env.new("DECIDIM_CONTENT_PROCESSORS", "").to_array
349
331
 
350
332
  # Exposes a configuration option: an object to configure geocoder
351
- config_accessor :geocoder
333
+ mattr_accessor :geocoder
352
334
 
353
335
  # Exposes a configuration option: an object to configure the mapping
354
336
  # functionality. See Decidim::Map for more information.
355
- config_accessor :maps do
356
- if Decidim::Env.new("MAPS_STATIC_PROVIDER", ENV.fetch("MAPS_PROVIDER", nil)).present?
357
-
358
- @maps ||= begin
359
- static_provider = Decidim::Env.new("MAPS_STATIC_PROVIDER", ENV.fetch("MAPS_PROVIDER", nil)).to_s
360
- maps = {
361
- provider: static_provider,
362
- api_key: Decidim::Env.new("MAPS_STATIC_API_KEY", ENV.fetch("MAPS_API_KEY", nil)).to_s,
363
- static: false,
364
- dynamic: false
365
- }
366
-
367
- maps[:geocoding] = { host: ENV["MAPS_GEOCODING_HOST"], use_https: true } if ENV["MAPS_GEOCODING_HOST"]
368
-
369
- static_url = ENV.fetch("MAPS_STATIC_URL", nil)
370
- static_url = "https://image.maps.hereapi.com/mia/v3/base/mc/overlay" if static_provider == "here"
371
- maps[:static] = { url: static_url } if static_url
372
-
373
- dynamic_provider = Decidim::Env.new("MAPS_DYNAMIC_PROVIDER", ENV.fetch("MAPS_PROVIDER", nil)).to_s
374
-
375
- if dynamic_provider
376
- dynamic_url = ENV.fetch("MAPS_DYNAMIC_URL", nil)
377
- maps[:dynamic] = {
378
- provider: dynamic_provider,
379
- api_key: Decidim::Env.new("MAPS_DYNAMIC_API_KEY", ENV.fetch("MAPS_API_KEY", nil)).to_s
380
- }
381
- maps[:dynamic][:tile_layer] = {}
382
- maps[:dynamic][:tile_layer][:url] = dynamic_url if dynamic_url
383
- maps[:dynamic][:tile_layer][:attribution] = ENV["MAPS_ATTRIBUTION"] if ENV["MAPS_ATTRIBUTION"]
384
- end
385
- if dynamic_provider && ENV["MAPS_EXTRA_VARS"].present?
386
- vars = URI.decode_www_form(ENV.fetch("MAPS_EXTRA_VARS", nil))
387
- vars.each do |key, value|
388
- # perform a naive type conversion
389
- maps[:dynamic][:tile_layer][key] = case value
390
- when /^true$|^false$/i
391
- value.downcase == "true"
392
- when /\A[-+]?\d+\z/
393
- value.to_i
394
- else
395
- value
396
- end
397
- end
398
- end
399
-
400
- maps
401
- end
402
- end
403
- end
337
+ mattr_accessor :maps
338
+ self.maps ||= if Decidim::Env.new("MAPS_STATIC_PROVIDER", ENV.fetch("MAPS_PROVIDER", nil)).present?
339
+ @maps ||= begin
340
+ static_provider = Decidim::Env.new("MAPS_STATIC_PROVIDER", ENV.fetch("MAPS_PROVIDER", nil)).to_s
341
+ maps = {
342
+ provider: static_provider,
343
+ api_key: Decidim::Env.new("MAPS_STATIC_API_KEY", ENV.fetch("MAPS_API_KEY", nil)).to_s,
344
+ static: false,
345
+ dynamic: false
346
+ }
347
+
348
+ maps[:geocoding] = { host: ENV["MAPS_GEOCODING_HOST"], use_https: true } if ENV["MAPS_GEOCODING_HOST"]
349
+
350
+ static_url = ENV.fetch("MAPS_STATIC_URL", nil)
351
+ static_url = "https://image.maps.hereapi.com/mia/v3/base/mc/overlay" if static_provider == "here"
352
+ maps[:static] = { url: static_url } if static_url
353
+
354
+ dynamic_provider = Decidim::Env.new("MAPS_DYNAMIC_PROVIDER", ENV.fetch("MAPS_PROVIDER", nil)).to_s
355
+
356
+ if dynamic_provider.present?
357
+ dynamic_url = ENV.fetch("MAPS_DYNAMIC_URL", nil)
358
+ maps[:dynamic] = {
359
+ provider: dynamic_provider,
360
+ api_key: Decidim::Env.new("MAPS_DYNAMIC_API_KEY", ENV.fetch("MAPS_API_KEY", nil)).to_s
361
+ }
362
+ maps[:dynamic][:tile_layer] = {}
363
+ maps[:dynamic][:tile_layer][:url] = dynamic_url if dynamic_url
364
+ maps[:dynamic][:tile_layer][:attribution] = ENV["MAPS_ATTRIBUTION"] if ENV["MAPS_ATTRIBUTION"]
365
+ end
366
+ if dynamic_provider.present? && Decidim::Env.new("MAPS_EXTRA_VARS").present?
367
+ vars = URI.decode_www_form(Decidim::Env.new("MAPS_EXTRA_VARS").to_s)
368
+ vars.each do |key, value|
369
+ # perform a naive type conversion
370
+ maps[:dynamic][:tile_layer][key] = case value
371
+ when /^true$|^false$/i
372
+ value.downcase == "true"
373
+ when /\A[-+]?\d+\z/
374
+ value.to_i
375
+ else
376
+ value
377
+ end
378
+ end
379
+ end
380
+
381
+ maps
382
+ end
383
+ end
404
384
 
405
385
  # Exposes a configuration option: a custom method to generate references.
406
386
  # If overwritten, it should handle both component resources and participatory spaces.
@@ -414,191 +394,138 @@ module Decidim
414
394
  # (MEET for meetings or PROJ for projects).
415
395
  # 2017-02: Year-Month of the resource creation date
416
396
  # 6589: ID of the resource
417
- config_accessor :reference_generator do
418
- lambda do |resource, component|
419
- ref = ""
420
-
421
- if resource.is_a?(Decidim::HasComponent) && component.present?
422
- # It is a component resource
423
- ref = component.participatory_space.organization.reference_prefix
424
- elsif resource.is_a?(Decidim::Participable)
425
- # It is a participatory space
426
- ref = resource.organization.reference_prefix
427
- end
428
-
429
- class_identifier = resource.class.name.demodulize[0..3].upcase
430
- year_month = (resource.created_at || Time.current).strftime("%Y-%m")
431
-
432
- [ref, class_identifier, year_month, resource.id].join("-")
397
+ mattr_accessor :reference_generator
398
+ self.reference_generator ||= lambda do |resource, component|
399
+ ref = ""
400
+
401
+ if resource.is_a?(Decidim::HasComponent) && component.present?
402
+ # It is a component resource
403
+ ref = component.participatory_space.organization.reference_prefix
404
+ elsif resource.is_a?(Decidim::Participable)
405
+ # It is a participatory space
406
+ ref = resource.organization.reference_prefix
433
407
  end
408
+ class_identifier = resource.class.name.demodulize[0..3].upcase
409
+ year_month = (resource.created_at || Time.current).strftime("%Y-%m")
410
+
411
+ [ref, class_identifier, year_month, resource.id].join("-")
434
412
  end
435
413
 
436
414
  # Exposes a configuration option: the IPs that are allowed to access the system
437
- config_accessor :system_accesslist_ips do
438
- Decidim::Env.new("DECIDIM_SYSTEM_ACCESSLIST_IPS").to_array
439
- end
415
+ mattr_accessor :system_accesslist_ips, default: Decidim::Env.new("DECIDIM_SYSTEM_ACCESSLIST_IPS").to_array
440
416
 
441
417
  # Exposes a configuration option: the currency unit
442
- config_accessor :currency_unit do
443
- if Decidim::Env.new("DECIDIM_CURRENCY_UNIT", "€").present?
444
- Decidim::Env.new("DECIDIM_CURRENCY_UNIT", "€").to_s
445
- else
446
- "€"
447
- end
448
- end
418
+ mattr_accessor :currency_unit, default: if Decidim::Env.new("DECIDIM_CURRENCY_UNIT", "€").present?
419
+ Decidim::Env.new("DECIDIM_CURRENCY_UNIT", "€").to_s
420
+ else
421
+ "€"
422
+ end
449
423
 
450
424
  # Exposes a configuration option: The image uploader quality.
451
- config_accessor :image_uploader_quality do
452
- Decidim::Env.new("DECIDIM_IMAGE_UPLOADER_QUALITY", "80").to_i
453
- end
425
+ mattr_accessor :image_uploader_quality, default: Decidim::Env.new("DECIDIM_IMAGE_UPLOADER_QUALITY", "80").to_i
454
426
 
455
427
  # The number of reports which a resource can receive before hiding it
456
- config_accessor :max_reports_before_hiding do
457
- Decidim::Env.new("DECIDIM_MAX_REPORTS_BEFORE_HIDING", "3").to_i
458
- end
428
+ mattr_accessor :max_reports_before_hiding, default: Decidim::Env.new("DECIDIM_MAX_REPORTS_BEFORE_HIDING", "3").to_i
459
429
 
460
430
  # Allow organization's administrators to inject custom HTML into the frontend
461
- config_accessor :enable_html_header_snippets do
462
- Decidim::Env.new("DECIDIM_ENABLE_HTML_HEADER_SNIPPETS").present?
463
- end
431
+ mattr_accessor :enable_html_header_snippets, default: Decidim::Env.new("DECIDIM_ENABLE_HTML_HEADER_SNIPPETS").present?
464
432
 
465
433
  # Allow organization's administrators to track newsletter links
466
- config_accessor :track_newsletter_links do
467
- if Decidim::Env.new("DECIDIM_TRACK_NEWSLETTER_LINKS", "auto").default_or_present_if_exists.to_s == "auto"
468
- true
469
- else
470
- Decidim.force_ssl
471
- end
472
- end
434
+ mattr_accessor :track_newsletter_links
435
+ self.track_newsletter_links ||= if Decidim::Env.new("DECIDIM_TRACK_NEWSLETTER_LINKS", "auto").default_or_present_if_exists.to_s == "auto"
436
+ true
437
+ else
438
+ Decidim.force_ssl
439
+ end
473
440
 
474
441
  # Time that download your data files are available in server
475
- config_accessor :download_your_data_expiry_time do
476
- Decidim::Env.new("DECIDIM_DOWNLOAD_YOUR_DATA_EXPIRY_TIME", "7").to_i.days
477
- end
442
+ mattr_accessor :download_your_data_expiry_time, default: Decidim::Env.new("DECIDIM_DOWNLOAD_YOUR_DATA_EXPIRY_TIME", "7").to_i.days
478
443
 
479
444
  # Max requests in a time period to prevent DoS attacks. Only applied on production.
480
- config_accessor :throttling_max_requests do
481
- Decidim::Env.new("DECIDIM_THROTTLING_MAX_REQUESTS", "100").to_i
482
- end
445
+ mattr_accessor :throttling_max_requests, default: Decidim::Env.new("DECIDIM_THROTTLING_MAX_REQUESTS", "100").to_i
483
446
 
484
447
  # Time window in which the throttling is applied.
485
- config_accessor :throttling_period do
486
- Decidim::Env.new("DECIDIM_THROTTLING_PERIOD", "1").to_i.minutes
487
- end
448
+ mattr_accessor :throttling_period, default: Decidim::Env.new("DECIDIM_THROTTLING_PERIOD", "1").to_i.minutes
488
449
 
489
450
  # Time window were users can access the website even if their email is not confirmed.
490
- config_accessor :unconfirmed_access_for do
491
- Decidim::Env.new("DECIDIM_UNCONFIRMED_ACCESS_FOR", "0").to_i.days
492
- end
451
+ mattr_accessor :unconfirmed_access_for, default: Decidim::Env.new("DECIDIM_UNCONFIRMED_ACCESS_FOR", "0").to_i.days
493
452
 
494
453
  # Allow machine translations
495
- config_accessor :enable_machine_translations do
496
- Decidim::Env.new("DECIDIM_ENABLE_MACHINE_TRANSLATION", false).present?
497
- end
454
+ mattr_accessor :enable_machine_translations, default: Decidim::Env.new("DECIDIM_ENABLE_MACHINE_TRANSLATION", false).present?
498
455
 
499
456
  # How long can a user remained logged in before the session expires. Notice that
500
457
  # this is also maximum time that user can idle before getting automatically signed out.
501
- config_accessor :expire_session_after do
502
- Decidim::Env.new("DECIDIM_EXPIRE_SESSION_AFTER", "30").to_i.minutes
503
- end
458
+ mattr_accessor :expire_session_after, default: Decidim::Env.new("DECIDIM_EXPIRE_SESSION_AFTER", "30").to_i.minutes
504
459
 
505
460
  # Defines how long the OAuth access tokens and API access tokens are valid.
506
461
  # Defaults to the default value as defined in Doorkeeper.
507
- config_accessor :oauth_access_token_expires_in do
508
- Decidim::Env.new("DECIDIM_OAUTH_ACCESS_TOKEN_EXPIRES_IN", "120").to_i.minutes
509
- end
462
+ mattr_accessor :oauth_access_token_expires_in, default: Decidim::Env.new("DECIDIM_OAUTH_ACCESS_TOKEN_EXPIRES_IN", "120").to_i.minutes
510
463
 
511
464
  # If set to true, users have option to "remember me". Notice that expire_session_after will not take
512
465
  # effect when the user wants to be remembered.
513
- config_accessor :enable_remember_me do
514
- if Decidim::Env.new("DECIDIM_ENABLE_REMEMBER_ME", "auto").default_or_present_if_exists.to_s == "auto"
515
- true
516
- else
517
- Decidim::Env.new("DECIDIM_ENABLE_REMEMBER_ME", "auto").default_or_present_if_exists
518
- end
519
- end
466
+ mattr_accessor :enable_remember_me
467
+ self.enable_remember_me ||= if Decidim::Env.new("DECIDIM_ENABLE_REMEMBER_ME", "auto").default_or_present_if_exists.to_s == "auto"
468
+ true
469
+ else
470
+ Decidim::Env.new("DECIDIM_ENABLE_REMEMBER_ME", "auto").default_or_present_if_exists
471
+ end
520
472
 
521
473
  # Defines how often session_timeouter.js checks time between current moment and last request
522
- config_accessor :session_timeout_interval do
523
- Decidim::Env.new("DECIDIM_SESSION_TIMEOUT_INTERVAL", "10").to_i.seconds
524
- end
474
+ mattr_accessor :session_timeout_interval, default: Decidim::Env.new("DECIDIM_SESSION_TIMEOUT_INTERVAL", "10").to_i.seconds
525
475
 
526
476
  # Exposes a configuration option: an object to configure Etherpad
527
- config_accessor :etherpad do
528
- if Decidim::Env.new("ETHERPAD_SERVER").present? && Decidim::Env.new("ETHERPAD_API_KEY").present?
529
- {
530
- server: Decidim::Env.new("ETHERPAD_SERVER").to_s,
531
- api_key: Decidim::Env.new("ETHERPAD_API_KEY").to_s,
532
- api_version: Decidim::Env.new("ETHERPAD_API_VERSION", "1.2.1").to_s
533
- }
534
- end
535
- end
477
+ mattr_accessor :etherpad
478
+ self.etherpad ||= if Decidim::Env.new("ETHERPAD_SERVER").present? && Decidim::Env.new("ETHERPAD_API_KEY").present?
479
+ {
480
+ server: Decidim::Env.new("ETHERPAD_SERVER").to_s,
481
+ api_key: Decidim::Env.new("ETHERPAD_API_KEY").to_s,
482
+ api_version: Decidim::Env.new("ETHERPAD_API_VERSION", "1.2.1").to_s
483
+ }
484
+ end
536
485
 
537
486
  # A base path for the uploads. If set, make sure it ends in a slash.
538
487
  # Uploads will be set to `<base_path>/uploads/`. This can be useful if you
539
488
  # want to use the same uploads place for both staging and production
540
489
  # environments, but in different folders.
541
- config_accessor :base_uploads_path do
542
- Decidim::Env.new("DECIDIM_BASE_UPLOADS_PATH").to_s if Decidim::Env.new("DECIDIM_BASE_UPLOADS_PATH").present?
543
- end
490
+ mattr_accessor :base_uploads_path, default: (Decidim::Env.new("DECIDIM_BASE_UPLOADS_PATH").presence&.to_s)
544
491
 
545
492
  # The name of the class to deliver SMS codes to users.
546
493
  #
547
494
  # Check the example in `decidim-verifications`.
548
- config_accessor :sms_gateway_service do
549
- Decidim::Env.new("DECIDIM_SMS_GATEWAY_SERVICE", nil).value
550
- end
495
+ mattr_accessor :sms_gateway_service, default: Decidim::Env.new("DECIDIM_SMS_GATEWAY_SERVICE", nil).value
551
496
 
552
497
  # The name of the class used to generate a timestamp from a document.
553
498
  #
554
499
  # Check the example in `decidim-initiatives`
555
- config_accessor :timestamp_service do
556
- Decidim::Env.new("DECIDIM_TIMESTAMP_SERVICE", nil).value
557
- end
500
+ mattr_accessor :timestamp_service, default: Decidim::Env.new("DECIDIM_TIMESTAMP_SERVICE", nil).value
558
501
 
559
502
  # The name of the class used to process a pdf and add a signature to the
560
503
  # document.
561
504
  #
562
505
  # Check the example in `decidim-initiatives`
563
- config_accessor :pdf_signature_service do
564
- Decidim::Env.new("DECIDIM_PDF_SIGNATURE_SERVICE", nil).value
565
- end
506
+ mattr_accessor :pdf_signature_service, default: Decidim::Env.new("DECIDIM_PDF_SIGNATURE_SERVICE", nil).value
566
507
 
567
508
  # The name of the class to translate user content.
568
509
  #
569
- config_accessor :machine_translation_service do
570
- Decidim::Env.new("DECIDIM_MACHINE_TRANSLATION_SERVICE", nil).value
571
- end
510
+ mattr_accessor :machine_translation_service, default: Decidim::Env.new("DECIDIM_MACHINE_TRANSLATION_SERVICE", nil).value
572
511
 
573
- config_accessor :maximum_attachment_size do
574
- Decidim::Env.new("DECIDIM_MAXIMUM_ATTACHMENT_SIZE", "10").to_i
575
- end
512
+ mattr_accessor :maximum_attachment_size, default: Decidim::Env.new("DECIDIM_MAXIMUM_ATTACHMENT_SIZE", "10").to_i
576
513
 
577
- config_accessor :maximum_avatar_size do
578
- Decidim::Env.new("DECIDIM_MAXIMUM_AVATAR_SIZE", "5").to_i
579
- end
514
+ mattr_accessor :maximum_avatar_size, default: Decidim::Env.new("DECIDIM_MAXIMUM_AVATAR_SIZE", "5").to_i
580
515
 
581
516
  # Social Networking services used for social sharing
582
- config_accessor :social_share_services do
583
- Decidim::Env.new("DECIDIM_SOCIAL_SHARE_SERVICES", "X, Facebook, WhatsApp, Telegram").to_array
584
- end
517
+ mattr_accessor :social_share_services, default: Decidim::Env.new("DECIDIM_SOCIAL_SHARE_SERVICES", "X, Facebook, WhatsApp, Telegram").to_array
585
518
 
586
519
  # The Decidim::Exporters::CSV's default column separator
587
- config_accessor :default_csv_col_sep do
588
- Decidim::Env.new("DECIDIM_DEFAULT_CSV_COL_SEP", ";").to_s
589
- end
520
+ mattr_accessor :default_csv_col_sep, default: Decidim::Env.new("DECIDIM_DEFAULT_CSV_COL_SEP", ";").to_s
590
521
 
591
522
  # Exposes a configuration option: HTTP_X_FORWARDED_HOST header follow-up.
592
523
  # If a caching system is in place, it can also allow cache and log poisoning attacks,
593
524
  # allowing attackers to control the contents of caches and logs that could be used for other attacks.
594
- config_accessor :follow_http_x_forwarded_host do
595
- Decidim::Env.new("DECIDIM_FOLLOW_HTTP_X_FORWARDED_HOST").present?
596
- end
525
+ mattr_accessor :follow_http_x_forwarded_host, default: Decidim::Env.new("DECIDIM_FOLLOW_HTTP_X_FORWARDED_HOST").present?
597
526
 
598
527
  # The list of roles a user can have, not considering the space-specific roles.
599
- config_accessor :user_roles do
600
- Decidim::Env.new("DECIDIM_USER_ROLES", "admin,user_manager").to_array
601
- end
528
+ mattr_accessor :user_roles, default: Decidim::Env.new("DECIDIM_USER_ROLES", "admin,user_manager").to_array
602
529
 
603
530
  # The list of visibility options for amendments. An Array of Strings that
604
531
  # serve both as locale keys and values to construct the input collection in
@@ -607,21 +534,15 @@ module Decidim
607
534
  # This collection is used in Decidim::Admin::SettingsHelper to generate a
608
535
  # radio buttons collection input field form for a Decidim::Component
609
536
  # step setting :amendments_visibility.
610
- config_accessor :amendments_visibility_options do
611
- Decidim::Env.new("DECIDIM_AMENDMENTS_VISIBILITY_OPTIONS", "all,participants").to_array
612
- end
537
+ mattr_accessor :amendments_visibility_options, default: Decidim::Env.new("DECIDIM_AMENDMENTS_VISIBILITY_OPTIONS", "all,participants").to_array
613
538
 
614
539
  # Exposes a configuration option: The maximum length for conversation
615
540
  # messages.
616
- config_accessor :maximum_conversation_message_length do
617
- Decidim::Env.new("DECIDIM_MAXIMUM_CONVERSATION_MESSAGE_LENGTH", 1000).to_i
618
- end
541
+ mattr_accessor :maximum_conversation_message_length, default: Decidim::Env.new("DECIDIM_MAXIMUM_CONVERSATION_MESSAGE_LENGTH", 1000).to_i
619
542
 
620
543
  # Defines the name of the cookie used to check if the user has given consent
621
544
  # to store local data in their browser.
622
- config_accessor :consent_cookie_name do
623
- Decidim::Env.new("DECIDIM_CONSENT_COOKIE_NAME", "decidim-consent").to_s
624
- end
545
+ mattr_accessor :consent_cookie_name, default: Decidim::Env.new("DECIDIM_CONSENT_COOKIE_NAME", "decidim-consent").to_s
625
546
 
626
547
  # Defines data consent categories. Note that when adding an item you need to
627
548
  # add following i18n entries also (change 'foo' with the name of the data
@@ -629,134 +550,104 @@ module Decidim
629
550
  #
630
551
  # layouts.decidim.data_consent.details.items.foo.service
631
552
  # layouts.decidim.data_consent.details.items.foo.description
632
- config_accessor :consent_categories do
633
- [
634
- {
635
- slug: "essential",
636
- mandatory: true,
637
- items: [
638
- {
639
- type: "cookie",
640
- name: "_session_id"
641
- },
642
- {
643
- type: "cookie",
644
- name: Decidim.consent_cookie_name
645
- },
646
- {
647
- type: "local_storage",
648
- name: "pwaInstallPromptSeen"
649
- }
650
- ]
651
- },
652
- {
653
- slug: "preferences",
654
- mandatory: false
655
- },
656
- {
657
- slug: "analytics",
658
- mandatory: false
659
- },
660
- {
661
- slug: "marketing",
662
- mandatory: false
663
- }
664
- ]
665
- end
553
+ mattr_accessor :consent_categories, default: [
554
+ {
555
+ slug: "essential",
556
+ mandatory: true,
557
+ items: [
558
+ {
559
+ type: "cookie",
560
+ name: "_session_id"
561
+ },
562
+ {
563
+ type: "cookie",
564
+ name: Decidim.consent_cookie_name
565
+ },
566
+ {
567
+ type: "local_storage",
568
+ name: "pwaInstallPromptSeen"
569
+ }
570
+ ]
571
+ },
572
+ {
573
+ slug: "preferences",
574
+ mandatory: false
575
+ },
576
+ {
577
+ slug: "analytics",
578
+ mandatory: false
579
+ },
580
+ {
581
+ slug: "marketing",
582
+ mandatory: false
583
+ }
584
+ ]
666
585
 
667
586
  # Denied passwords. Array may contain strings and regex entries.
668
- config_accessor :denied_passwords do
669
- Decidim::Env.new("DECIDIM_DENIED_PASSWORDS").to_array(separator: ", ")
670
- end
587
+ mattr_accessor :denied_passwords, default: Decidim::Env.new("DECIDIM_DENIED_PASSWORDS").to_array(separator: ", ")
671
588
 
672
589
  # Ignores strings similar to email / domain on password validation if too short
673
- config_accessor :password_similarity_length do
674
- Decidim::Env.new("DECIDIM_PASSWORD_SIMILARITY_LENGTH", 4).to_i
675
- end
590
+ mattr_accessor :password_similarity_length, default: Decidim::Env.new("DECIDIM_PASSWORD_SIMILARITY_LENGTH", 4).to_i
676
591
 
677
592
  # Defines if admins are required to have stronger passwords than other users
678
- config_accessor :admin_password_strong do
679
- Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_STRONG", true).present?
680
- end
593
+ mattr_accessor :admin_password_strong, default: Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_STRONG", true).present?
681
594
 
682
- config_accessor :admin_password_expiration_days do
683
- Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_EXPIRATION_DAYS", 90).to_i
684
- end
595
+ mattr_accessor :admin_password_expiration_days, default: Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_EXPIRATION_DAYS", 90).to_i
685
596
 
686
- config_accessor :admin_password_min_length do
687
- Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_MIN_LENGTH", 15).to_i
688
- end
597
+ mattr_accessor :admin_password_min_length, default: Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_MIN_LENGTH", 15).to_i
689
598
 
690
- config_accessor :admin_password_repetition_times do
691
- Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_REPETITION_TIMES", 5).to_i
692
- end
599
+ mattr_accessor :admin_password_repetition_times, default: Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_REPETITION_TIMES", 5).to_i
693
600
 
694
601
  # This is an internal key that allow us to properly configure the caching key separator. This is useful for redis cache store
695
602
  # as it creates some namespaces within the cached data.
696
603
  # use `config.cache_key_separator = ":"` in your initializer to have namespaced data
697
- config_accessor :cache_key_separator do
698
- Decidim::Env.new("DECIDIM_CACHE_KEY_SEPARATOR", "/").to_s
699
- end
604
+ mattr_accessor :cache_key_separator, default: Decidim::Env.new("DECIDIM_CACHE_KEY_SEPARATOR", "/").to_s
700
605
 
701
606
  # This is the maximum time that the cache will be stored. If nil, the cache will be stored indefinitely.
702
607
  # Currently, cache is applied in the Cells where the method `cache_hash` is defined.
703
- config_accessor :cache_expiry_time do
704
- Decidim::Env.new("DECIDIM_CACHE_EXPIRATION_TIME", "1440").to_i.minutes
705
- end
608
+ mattr_accessor :cache_expiry_time, default: Decidim::Env.new("DECIDIM_CACHE_EXPIRATION_TIME", "1440").to_i.minutes
706
609
 
707
610
  # Same as before, but specifically for cell displaying stats
708
- config_accessor :stats_cache_expiry_time do
709
- Decidim::Env.new("DECIDIM_STATS_CACHE_EXPIRATION_TIME", 10).to_i.minutes
710
- end
611
+ mattr_accessor :stats_cache_expiry_time, default: Decidim::Env.new("DECIDIM_STATS_CACHE_EXPIRATION_TIME", 10).to_i.minutes
711
612
 
712
613
  # Enable/Disable the service worker
713
- config_accessor :service_worker_enabled do
714
- Decidim::Env.new("DECIDIM_SERVICE_WORKER_ENABLED", Rails.env.exclude?("development")).present?
715
- end
614
+ mattr_accessor :service_worker_enabled, default: Decidim::Env.new("DECIDIM_SERVICE_WORKER_ENABLED", Rails.env.exclude?("development")).present?
716
615
 
717
616
  # List of static pages' slugs that can include content blocks
718
- config_accessor :page_blocks do
719
- Decidim::Env.new("DECIDIM_PAGE_BLOCKS", "terms-of-service").to_array
720
- end
617
+ mattr_accessor :page_blocks, default: Decidim::Env.new("DECIDIM_PAGE_BLOCKS", "terms-of-service").to_array
721
618
 
722
619
  # The default max last activity users to be shown
723
- config_accessor :default_max_last_activity_users do
724
- Decidim::Env.new("DECIDIM_DEFAULT_MAX_LAST_ACTIVITY_USERS", 6).to_i
725
- end
620
+ mattr_accessor :default_max_last_activity_users, default: Decidim::Env.new("DECIDIM_DEFAULT_MAX_LAST_ACTIVITY_USERS", 6).to_i
726
621
 
727
622
  # List of additional content security policies to be appended to the default ones
728
623
  # This is useful for adding custom CSPs for external services like Here Maps, YouTube, etc.
729
624
  # Read more: https://docs.decidim.org/en/develop/configure/initializer#_content_security_policy
730
- config_accessor :content_security_policies_extra do
731
- {}
732
- end
733
-
734
- config_accessor :omniauth_providers do
735
- {
736
- developer: {
737
- enabled: Rails.env.local?,
738
- icon: "phone-line"
739
- },
740
- facebook: {
741
- enabled: Decidim::Env.new("OMNIAUTH_FACEBOOK_APP_ID").present?,
742
- app_id: Decidim::Env.new("OMNIAUTH_FACEBOOK_APP_ID", nil),
743
- app_secret: Decidim::Env.new("OMNIAUTH_FACEBOOK_APP_SECRET", nil),
744
- icon_path: "media/images/facebook.svg"
745
- },
746
- twitter: {
747
- enabled: Decidim::Env.new("OMNIAUTH_TWITTER_API_KEY").present?,
748
- api_key: Decidim::Env.new("OMNIAUTH_TWITTER_API_KEY", nil),
749
- api_secret: Decidim::Env.new("OMNIAUTH_TWITTER_API_SECRET", nil),
750
- icon_path: "media/images/twitter-x.svg"
751
- },
752
- google_oauth2: {
753
- enabled: Decidim::Env.new("OMNIAUTH_GOOGLE_CLIENT_ID").present?,
754
- icon_path: "media/images/google.svg",
755
- client_id: Decidim::Env.new("OMNIAUTH_GOOGLE_CLIENT_ID", nil),
756
- client_secret: Decidim::Env.new("OMNIAUTH_GOOGLE_CLIENT_SECRET", nil)
757
- }
625
+ mattr_accessor :content_security_policies_extra, default: {}
626
+
627
+ mattr_accessor :omniauth_providers, default: {
628
+ developer: {
629
+ enabled: Rails.env.local?,
630
+ icon: "phone-line"
631
+ },
632
+ facebook: {
633
+ enabled: Decidim::Env.new("OMNIAUTH_FACEBOOK_APP_ID").present?,
634
+ app_id: Decidim::Env.new("OMNIAUTH_FACEBOOK_APP_ID", nil).value,
635
+ app_secret: Decidim::Env.new("OMNIAUTH_FACEBOOK_APP_SECRET", nil).value,
636
+ icon_path: "media/images/facebook.svg"
637
+ },
638
+ twitter: {
639
+ enabled: Decidim::Env.new("OMNIAUTH_TWITTER_API_KEY").present?,
640
+ api_key: Decidim::Env.new("OMNIAUTH_TWITTER_API_KEY", nil).value,
641
+ api_secret: Decidim::Env.new("OMNIAUTH_TWITTER_API_SECRET", nil).value,
642
+ icon_path: "media/images/twitter-x.svg"
643
+ },
644
+ google_oauth2: {
645
+ enabled: Decidim::Env.new("OMNIAUTH_GOOGLE_CLIENT_ID").present?,
646
+ icon_path: "media/images/google.svg",
647
+ client_id: Decidim::Env.new("OMNIAUTH_GOOGLE_CLIENT_ID", nil).value,
648
+ client_secret: Decidim::Env.new("OMNIAUTH_GOOGLE_CLIENT_SECRET", nil).value
758
649
  }
759
- end
650
+ }
760
651
 
761
652
  CoreDataManifest = Data.define(:name, :collection, :serializer, :include_in_open_data)
762
653
 
@@ -1036,15 +927,11 @@ module Decidim
1036
927
  # Decidim::MachineTranslationResourceJob due to a ActiveJob::DeserializationError.
1037
928
  # In some Decidim Installations, ActiveJob can be configured to discard jobs failing with
1038
929
  # ActiveJob::DeserializationError
1039
- config_accessor :machine_translation_delay do
1040
- 0.seconds
1041
- end
930
+ mattr_accessor :machine_translation_delay, default: 0.seconds
1042
931
 
1043
932
  # The etiquette validator is applied to the create and edit forms of Proposals, Meetings,
1044
933
  # and Debates for both regular and admin users.
1045
- config_accessor :enable_etiquette_validator do
1046
- true
1047
- end
934
+ mattr_accessor :enable_etiquette_validator, default: true
1048
935
 
1049
936
  def self.machine_translation_service_klass
1050
937
  return unless Decidim.enable_machine_translations