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.
- checksums.yaml +4 -4
- data/README.md +3 -13
- data/app/cells/decidim/amendable/amend_button_card/show.erb +2 -2
- data/app/cells/decidim/amendable/amend_button_card_cell.rb +1 -1
- data/app/cells/decidim/author_cell.rb +4 -0
- data/app/cells/decidim/card_metadata_cell.rb +1 -1
- data/app/cells/decidim/comments_button_cell.rb +1 -9
- data/app/cells/decidim/content_blocks/announcement_settings_form/show.erb +5 -0
- data/app/cells/decidim/content_blocks/announcement_settings_form_cell.rb +17 -0
- data/app/cells/decidim/content_blocks/cta_settings_form/show.erb +1 -1
- data/app/cells/decidim/content_blocks/hero_settings_form/show.erb +2 -2
- data/app/cells/decidim/content_blocks/highlighted_content_banner_cell.rb +1 -1
- data/app/cells/decidim/content_blocks/highlighted_content_banner_settings_form/show.erb +1 -1
- data/app/cells/decidim/content_blocks/highlighted_participatory_spaces_cell.rb +1 -1
- data/app/cells/decidim/content_blocks/how_to_participate/show.erb +1 -1
- data/app/cells/decidim/content_blocks/html_cell.rb +1 -1
- data/app/cells/decidim/content_blocks/participatory_space_announcement_cell.rb +1 -3
- data/app/cells/decidim/content_blocks/participatory_space_hero_cell.rb +1 -5
- data/app/cells/decidim/content_blocks/participatory_space_hero_settings_form/show.erb +1 -1
- data/app/cells/decidim/content_blocks/static_page/section_cell.rb +1 -1
- data/app/cells/decidim/content_blocks/static_page/section_settings_form/show.erb +1 -3
- data/app/cells/decidim/content_blocks/static_page/summary_cell.rb +1 -1
- data/app/cells/decidim/content_blocks/static_page/summary_settings_form/show.erb +1 -3
- data/app/cells/decidim/content_blocks/static_page/two_pane_section_cell.rb +2 -2
- data/app/cells/decidim/content_blocks/static_page/two_pane_section_settings_form/show.erb +2 -4
- data/app/cells/decidim/data_consent/category.erb +38 -25
- data/app/cells/decidim/footer_topics/show.erb +8 -5
- data/app/cells/decidim/{participatory_space_private_user_cell.rb → member_cell.rb} +1 -1
- data/app/cells/decidim/onboarding_action_message_cell.rb +1 -0
- data/app/cells/decidim/profile/details.erb +1 -1
- data/app/cells/decidim/profile_cell.rb +1 -0
- data/app/cells/decidim/profile_member_of/show.erb +13 -0
- data/app/cells/decidim/profile_member_of_cell.rb +35 -0
- data/app/cells/decidim/resource_types_filter/show.erb +2 -2
- data/app/cells/decidim/share_widget/qr_code_modal.erb +1 -1
- data/app/cells/decidim/tags_cell.rb +1 -1
- data/app/cells/decidim/upload_modal_cell.rb +0 -5
- data/app/cells/decidim/versions_list/show.erb +25 -0
- data/app/commands/decidim/create_follow.rb +3 -5
- data/app/commands/decidim/create_user_report.rb +1 -1
- data/app/commands/decidim/destroy_account.rb +4 -15
- data/app/commands/decidim/gallery_methods.rb +107 -0
- data/app/commands/decidim/multiple_attachments_methods.rb +27 -28
- data/app/commands/decidim/search.rb +5 -5
- data/app/controllers/concerns/decidim/ajax_permission_handler.rb +1 -1
- data/app/controllers/concerns/decidim/devise_controllers.rb +0 -10
- data/app/controllers/concerns/decidim/direct_upload.rb +3 -2
- data/app/controllers/concerns/decidim/ephemeral_session_checker.rb +1 -1
- data/app/controllers/concerns/decidim/force_authentication.rb +10 -1
- data/app/controllers/concerns/decidim/impersonate_users.rb +4 -0
- data/app/controllers/concerns/decidim/locale_switcher.rb +52 -2
- data/app/controllers/concerns/decidim/needs_tos_accepted.rb +1 -1
- data/app/controllers/concerns/decidim/participatory_space/has_members_page.rb +27 -0
- data/app/controllers/concerns/decidim/participatory_space_context.rb +1 -5
- data/app/controllers/decidim/account_controller.rb +1 -1
- data/app/controllers/decidim/amendments_controller.rb +5 -4
- data/app/controllers/decidim/components/base_controller.rb +20 -3
- data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +1 -1
- data/app/controllers/decidim/devise/passwords_controller.rb +1 -1
- data/app/controllers/decidim/devise/registrations_controller.rb +1 -1
- data/app/controllers/decidim/devise/sessions_controller.rb +1 -1
- data/app/controllers/decidim/download_your_data_controller.rb +2 -2
- data/app/controllers/decidim/editor_images_controller.rb +1 -1
- data/app/controllers/decidim/follows_controller.rb +4 -3
- data/app/controllers/decidim/geolocation_controller.rb +1 -1
- data/app/controllers/decidim/likes_controller.rb +2 -1
- data/app/controllers/decidim/locales_controller.rb +3 -11
- data/app/controllers/decidim/messaging/conversations_controller.rb +3 -3
- data/app/controllers/decidim/newsletters_controller.rb +1 -1
- data/app/controllers/decidim/notifications_settings_controller.rb +1 -1
- data/app/controllers/decidim/notifications_subscriptions_controller.rb +0 -8
- data/app/controllers/decidim/open_data_controller.rb +1 -1
- data/app/controllers/decidim/report_users_controller.rb +2 -2
- data/app/controllers/decidim/reports_controller.rb +1 -1
- data/app/controllers/decidim/user_activities_controller.rb +1 -2
- data/app/events/decidim/amendable/amendment_base_event.rb +1 -7
- data/app/events/decidim/welcome_notification_event.rb +1 -1
- data/app/forms/decidim/upload_validation_form.rb +1 -1
- data/app/helpers/concerns/decidim/flash_helper_extensions.rb +1 -0
- data/app/helpers/decidim/active_link_to_helper.rb +136 -0
- data/app/helpers/decidim/amendments_helper.rb +3 -3
- data/app/helpers/decidim/check_boxes_tree_helper.rb +2 -2
- data/app/helpers/decidim/component_path_helper.rb +9 -4
- data/app/helpers/decidim/filters_helper.rb +0 -2
- data/app/helpers/decidim/menu_helper.rb +5 -3
- data/app/helpers/decidim/meta_tags_helper.rb +0 -2
- data/app/helpers/decidim/paginate_helper.rb +14 -1
- data/app/helpers/decidim/sanitize_helper.rb +1 -0
- data/app/helpers/decidim/short_link_helper.rb +5 -5
- data/app/helpers/decidim/translations_helper.rb +4 -4
- data/app/jobs/decidim/delete_inactive_participants_job.rb +2 -2
- data/app/jobs/decidim/process_inactive_participant_job.rb +7 -0
- data/app/mailers/decidim/application_mailer.rb +7 -2
- data/app/mailers/decidim/decidim_devise_mailer.rb +1 -0
- data/app/mailers/decidim/participants_account_mailer.rb +16 -0
- data/app/mailers/decidim/reported_mailer.rb +4 -1
- data/app/models/decidim/action_log.rb +1 -1
- data/app/models/decidim/attachment.rb +2 -20
- data/app/models/decidim/authorization.rb +0 -7
- data/app/models/decidim/authorization_transfer.rb +1 -1
- data/app/models/decidim/component.rb +6 -9
- data/app/models/decidim/content_block.rb +3 -3
- data/app/models/decidim/moderation.rb +1 -1
- data/app/models/decidim/newsletter.rb +2 -2
- data/app/models/decidim/participatory_space/member.rb +55 -0
- data/app/models/decidim/private_export.rb +0 -6
- data/app/models/decidim/resource_link.rb +1 -1
- data/app/models/decidim/short_link.rb +1 -1
- data/app/models/decidim/user.rb +2 -2
- data/app/models/decidim/user_base_entity.rb +2 -17
- data/app/models/decidim/user_moderation.rb +1 -1
- data/app/packs/src/decidim/controllers/accordion/accordion.test.js +42 -196
- data/app/packs/src/decidim/controllers/accordion/controller.js +17 -93
- data/app/packs/src/decidim/controllers/assign_role/assign_role.test.js +80 -0
- data/app/packs/src/decidim/controllers/assign_role/controller.js +27 -0
- data/app/packs/src/decidim/controllers/dropdown/controller.js +0 -6
- data/app/packs/src/decidim/controllers/dropdown/dropdown.test.js +0 -28
- data/app/packs/src/decidim/controllers/form_validator/form_validator.js +6 -6
- data/app/packs/src/decidim/controllers/form_validator/form_validator.test.js +1 -23
- data/app/packs/src/decidim/controllers/main_menu/controller.js +115 -0
- data/app/packs/src/decidim/controllers/main_menu/main_menu.test.js +185 -0
- data/app/packs/src/decidim/controllers/mention/controller.js +140 -296
- data/app/packs/src/decidim/controllers/mention/input_mentions.test.js +457 -120
- data/app/packs/src/decidim/controllers/multiple_mentions/controller.js +32 -68
- data/app/packs/src/decidim/controllers/multiple_mentions/input_multiple_mentions.test.js +23 -30
- data/app/packs/src/decidim/controllers/password_toggler/controller.js +1 -22
- data/app/packs/src/decidim/controllers/password_toggler/password_toggler.test.js +20 -11
- data/app/packs/src/decidim/datepicker/generate_datepicker.js +1 -13
- data/app/packs/src/decidim/direct_uploads/upload_field.js +4 -4
- data/app/packs/src/decidim/direct_uploads/upload_modal.js +7 -12
- data/app/packs/src/decidim/editor/common/suggestion.js +1 -1
- data/app/packs/src/decidim/editor/extensions/decidim_kit/index.js +4 -1
- data/app/packs/src/decidim/editor/extensions/image/index.js +8 -5
- data/app/packs/src/decidim/editor/extensions/link/index.js +8 -0
- data/app/packs/src/decidim/editor/extensions/mention/index.js +18 -5
- data/app/packs/src/decidim/editor/extensions/mention_resource/index.js +16 -7
- data/app/packs/src/decidim/editor/test/extensions/decidim_kit.test.js +13 -4
- data/app/packs/src/decidim/editor/test/extensions/heading.test.js +1 -1
- data/app/packs/src/decidim/editor/test/extensions/image.test.js +26 -28
- data/app/packs/src/decidim/editor/test/extensions/mention.test.js +6 -2
- data/app/packs/src/decidim/editor/test/extensions/video_embed.test.js +27 -15
- data/app/packs/src/decidim/editor/test/helpers.js +8 -10
- data/app/packs/src/decidim/editor/test/toolbar/full.test.js +15 -4
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_block.js +8 -4
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_formatting.js +5 -1
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_indent.js +9 -5
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_link.js +5 -1
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_list.js +8 -4
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_basic_styling.js +13 -9
- data/app/packs/src/decidim/editor/test/toolbar/shared/behaves_like_content_styling.js +6 -2
- data/app/packs/src/decidim/geocoding/reverse_geocoding.js +5 -15
- data/app/packs/src/decidim/index.js +3 -5
- data/app/packs/src/decidim/map/controller.js +1 -10
- data/app/packs/src/decidim/refactor/moved/focus_guard.js +12 -12
- data/app/packs/src/decidim/sw/push-permissions.js +13 -48
- data/app/packs/src/decidim/sw/sw.js +1 -1
- data/app/packs/src/decidim/utilities/text.js +6 -6
- data/app/packs/src/decidim/vendor/tribute.js +1890 -0
- data/app/packs/stylesheets/decidim/_cards.scss +3 -2
- data/app/packs/stylesheets/decidim/_conversations.scss +0 -14
- data/app/packs/stylesheets/decidim/_cookies.scss +5 -13
- data/app/packs/stylesheets/decidim/_datepicker.scss +0 -8
- data/app/packs/stylesheets/decidim/_documents.scss +1 -1
- data/app/packs/stylesheets/decidim/_dropdown.scss +21 -31
- data/app/packs/stylesheets/decidim/_floating_help.scss +1 -1
- data/app/packs/stylesheets/decidim/_footer.scss +1 -69
- data/app/packs/stylesheets/decidim/_forms.scss +5 -1
- data/app/packs/stylesheets/decidim/_header.scss +148 -46
- data/app/packs/stylesheets/decidim/_language_chooser.scss +79 -0
- data/app/packs/stylesheets/decidim/_participatory_spaces.scss +1 -1
- data/app/packs/stylesheets/decidim/_tribute.scss +36 -0
- data/app/packs/stylesheets/decidim/application.scss +1 -2
- data/app/packs/stylesheets/decidim/editor.scss +33 -2
- data/app/packs/stylesheets/decidim/geocoding_addons.scss +2 -10
- data/app/presenters/decidim/admin_log/participatory_space/member_presenter.rb +40 -0
- data/app/presenters/decidim/admin_log/static_page_resource_presenter.rb +1 -1
- data/app/presenters/decidim/authorization_transfer_presenter.rb +1 -1
- data/app/presenters/decidim/breadcrumb_root_menu_item_presenter.rb +3 -3
- data/app/presenters/decidim/footer_menu_presenter.rb +4 -2
- data/app/presenters/decidim/log/user_presenter.rb +1 -0
- data/app/presenters/decidim/log/value_types/access_mode_presenter.rb +45 -0
- data/app/presenters/decidim/menu_item_presenter.rb +3 -9
- data/app/presenters/decidim/participatory_space/member_presenter.rb +48 -0
- data/app/presenters/decidim/resource_locator_presenter.rb +22 -3
- data/app/presenters/decidim/stats_presenter.rb +1 -1
- data/app/queries/decidim/last_activity.rb +1 -1
- data/app/resolvers/decidim/meta_image_url_resolver.rb +0 -7
- data/app/serializers/decidim/exporters/participatory_space_serializer.rb +15 -1
- data/app/services/decidim/email_notification_generator.rb +2 -0
- data/app/services/decidim/notification_generator.rb +4 -0
- data/app/services/decidim/notifications_subscriptions_persistor.rb +0 -6
- data/app/services/decidim/send_push_notification.rb +1 -5
- data/app/uploaders/decidim/image_uploader.rb +1 -1
- data/app/uploaders/decidim/organization_favicon_uploader.rb +4 -9
- data/app/validators/uploader_image_dimensions_validator.rb +13 -11
- data/app/views/decidim/gamification/badges/index.html.erb +1 -1
- data/app/views/decidim/homepage/show.html.erb +2 -2
- data/app/views/decidim/last_activities/index.html.erb +1 -1
- data/app/views/decidim/messaging/conversations/_error_modal.html.erb +19 -11
- data/app/views/decidim/messaging/conversations/_new_conversation_button.html.erb +1 -1
- data/app/views/decidim/messaging/conversations/_reply.html.erb +1 -1
- data/app/views/decidim/messaging/conversations/error.js.erb +7 -12
- data/app/views/decidim/messaging/conversations/new.html.erb +1 -1
- data/app/views/decidim/messaging/conversations/show.html.erb +2 -2
- data/app/views/decidim/newsletters/unsubscribe.html.erb +1 -1
- data/app/views/decidim/notifications_settings/show.html.erb +5 -5
- data/app/views/decidim/offline/show.html.erb +1 -1
- data/app/views/decidim/pages/index.html.erb +1 -1
- data/app/views/decidim/participants_account_mailer/removal_notification.html.erb +11 -0
- data/app/views/decidim/participatory_space/members/_member.html.erb +1 -0
- data/app/views/decidim/profiles/show.html.erb +1 -1
- data/app/views/decidim/searches/_filters.html.erb +1 -1
- data/app/views/decidim/shared/_resource_actions.html.erb +4 -4
- data/app/views/decidim/shared/_results_per_page.html.erb +1 -1
- data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -1
- data/app/views/decidim/shared/filters/_dropdown_label.html.erb +4 -3
- data/app/views/decidim/user_activities/index.html.erb +1 -1
- data/app/views/devise/mailer/{invite_private_user.html.erb → invite_member.html.erb} +2 -2
- data/app/views/devise/mailer/{invite_private_user.text.erb → invite_member.text.erb} +2 -2
- data/app/views/layouts/decidim/_head.html.erb +2 -2
- data/app/views/layouts/decidim/_wrapper.html.erb +3 -3
- data/app/views/layouts/decidim/footer/_focus_mode_main.html.erb +0 -1
- data/app/views/layouts/decidim/footer/_main.html.erb +1 -2
- data/app/views/layouts/decidim/footer/_main_links.html.erb +28 -56
- data/app/views/layouts/decidim/header/_focus_mode_back_button.html.erb +4 -1
- data/app/views/layouts/decidim/header/_main.html.erb +17 -8
- data/app/views/layouts/decidim/header/_main_language_chooser.html.erb +24 -0
- data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +56 -56
- data/app/views/layouts/decidim/header/_main_links_mobile_account.html.erb +2 -2
- data/app/views/layouts/decidim/header/_main_links_mobile_item_account.html.erb +3 -1
- data/app/views/layouts/decidim/header/_main_menu_mobile.html.erb +18 -5
- data/app/views/layouts/decidim/header/_main_search.html.erb +3 -3
- data/app/views/layouts/decidim/header/_menu.html.erb +5 -5
- data/app/views/layouts/decidim/header/_menu_breadcrumb_desktop.html.erb +13 -12
- data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile.html.erb +28 -0
- data/app/views/layouts/decidim/shared/_layout_center.html.erb +1 -1
- data/app/views/layouts/decidim/shared/_layout_item.html.erb +1 -1
- data/app/views/layouts/decidim/shared/_layout_two_col.html.erb +1 -1
- data/config/initializers/invisible_captcha.rb +1 -0
- data/config/locales/ar.yml +29 -12
- data/config/locales/bg.yml +31 -14
- data/config/locales/bs-BA.yml +0 -1
- data/config/locales/ca-IT.yml +68 -60
- data/config/locales/ca.yml +68 -60
- data/config/locales/cs.yml +56 -37
- data/config/locales/da.yml +0 -1
- data/config/locales/de.yml +58 -27
- data/config/locales/el.yml +26 -9
- data/config/locales/en.yml +64 -55
- data/config/locales/eo.yml +0 -1
- data/config/locales/es-MX.yml +67 -59
- data/config/locales/es-PY.yml +67 -59
- data/config/locales/es.yml +67 -59
- data/config/locales/et.yml +0 -1
- data/config/locales/eu.yml +104 -94
- data/config/locales/fa-IR.yml +0 -1
- data/config/locales/fi-plain.yml +63 -60
- data/config/locales/fi.yml +65 -62
- data/config/locales/fr-CA.yml +63 -39
- data/config/locales/fr.yml +63 -39
- data/config/locales/ga-IE.yml +3 -2
- data/config/locales/gl.yml +26 -9
- data/config/locales/gn-PY.yml +0 -1
- data/config/locales/hr.yml +0 -1
- data/config/locales/hu.yml +26 -12
- data/config/locales/id-ID.yml +25 -9
- data/config/locales/is-IS.yml +7 -2
- data/config/locales/it.yml +24 -23
- data/config/locales/ja.yml +65 -75
- data/config/locales/ka-GE.yml +0 -1
- data/config/locales/kaa.yml +0 -1
- data/config/locales/ko.yml +0 -1
- data/config/locales/lb.yml +27 -10
- data/config/locales/lt.yml +28 -12
- data/config/locales/lv.yml +25 -9
- data/config/locales/mt.yml +0 -1
- data/config/locales/nl.yml +27 -10
- data/config/locales/no.yml +27 -10
- data/config/locales/oc-FR.yml +0 -1
- data/config/locales/pl.yml +33 -18
- data/config/locales/pt-BR.yml +61 -26
- data/config/locales/pt.yml +27 -10
- data/config/locales/ro-RO.yml +43 -21
- data/config/locales/ru.yml +8 -7
- data/config/locales/sk.yml +25 -1409
- data/config/locales/sl.yml +0 -1
- data/config/locales/sr-CS.yml +0 -1
- data/config/locales/sv.yml +72 -30
- data/config/locales/tr-TR.yml +28 -10
- data/config/locales/uk.yml +6 -4
- data/config/locales/vi.yml +0 -1
- data/config/locales/zh-CN.yml +25 -9
- data/config/locales/zh-TW.yml +28 -10
- data/config/routes.rb +138 -77
- data/db/data/20251213075429_rename_members_in_action_log.rb +22 -0
- data/db/data/20260319145808_rename_send_to_members_in_newsletter.rb +27 -0
- data/db/migrate/20200730142511_add_file_upload_settings_to_decidim_organizations.rb +13 -15
- data/db/migrate/20250217192438_convert_user_groups_into_users.rb +2 -3
- data/db/migrate/20250523104311_move_cta_to_hero_content_block.rb +1 -1
- data/db/migrate/20250527122040_move_highlighted_content_banner_settings_to_content_block.rb +1 -1
- data/db/migrate/20250819110800_convert_private_exports_id_to_uuid.rb +2 -2
- data/db/migrate/20251112132305_remove_legacy_images_from_core_module.rb +27 -0
- data/db/migrate/20251205122428_rename_participatory_space_private_users_to_members.rb +9 -0
- data/db/migrate/20251216185133_rename_privatable_to_to_participatory_space_in_members.rb +10 -0
- data/db/migrate/20260208201405_remove_user_group_core.rb +21 -0
- data/db/migrate/20260208201406_remove_user_group_memberships.rb +30 -0
- data/db/migrate/20260208201407_remove_user_group_organizations.rb +11 -0
- data/db/migrate/20260217152425_remove_enable_participatory_space_filters_from_decidim_organizations.rb +7 -0
- data/db/migrate/20260314081619_add_index_on_decidim_members.rb +25 -0
- data/decidim-core.gemspec +25 -31
- data/lib/decidim/acts_as_tree.rb +12 -12
- data/lib/decidim/admin_filters_registry.rb +1 -1
- data/lib/decidim/amendable.rb +5 -1
- data/lib/decidim/api/functions/category_list.rb +1 -0
- data/lib/decidim/api/functions/component_finder_base.rb +1 -1
- data/lib/decidim/api/functions/component_list.rb +3 -1
- data/lib/decidim/api/functions/component_list_base.rb +1 -0
- data/lib/decidim/api/functions/participatory_space_finder_base.rb +1 -1
- data/lib/decidim/api/functions/participatory_space_list_base.rb +1 -0
- data/lib/decidim/api/functions/user_entity_list.rb +0 -3
- data/lib/decidim/api/interfaces/amendable_entity_interface.rb +1 -0
- data/lib/decidim/api/interfaces/amendable_interface.rb +1 -0
- data/lib/decidim/api/interfaces/attachable_collection_interface.rb +1 -0
- data/lib/decidim/api/interfaces/attachable_interface.rb +1 -0
- data/lib/decidim/api/interfaces/author_interface.rb +2 -1
- data/lib/decidim/api/interfaces/authorable_interface.rb +1 -0
- data/lib/decidim/api/interfaces/categories_container_interface.rb +1 -0
- data/lib/decidim/api/interfaces/categorizable_interface.rb +1 -0
- data/lib/decidim/api/interfaces/coauthorable_interface.rb +1 -0
- data/lib/decidim/api/interfaces/component_interface.rb +9 -8
- data/lib/decidim/api/interfaces/fingerprint_interface.rb +1 -0
- data/lib/decidim/api/interfaces/followable_interface.rb +2 -0
- data/lib/decidim/api/interfaces/likeable_interface.rb +2 -2
- data/lib/decidim/api/interfaces/localizable_interface.rb +1 -0
- data/lib/decidim/api/interfaces/participatory_space_interface.rb +1 -0
- data/lib/decidim/api/interfaces/referable_interface.rb +1 -0
- data/lib/decidim/api/interfaces/scopable_interface.rb +1 -0
- data/lib/decidim/api/interfaces/taxonomizable_interface.rb +1 -0
- data/lib/decidim/api/interfaces/timestamps_interface.rb +1 -0
- data/lib/decidim/api/interfaces/traceable_interface.rb +1 -0
- data/lib/decidim/api/types/attachment_collection_type.rb +5 -3
- data/lib/decidim/api/types/attachment_type.rb +11 -4
- data/lib/decidim/api/types/badge_score_type.rb +28 -0
- data/lib/decidim/api/types/moderation_type.rb +25 -0
- data/lib/decidim/api/types/participant_details_type.rb +17 -0
- data/lib/decidim/api/types/reportable_type.rb +18 -0
- data/lib/decidim/api/types/reportable_user_type.rb +17 -0
- data/lib/decidim/api/types/static_page_topic_type.rb +16 -0
- data/lib/decidim/api/types/static_page_type.rb +22 -0
- data/lib/decidim/api/types/taxonomy_type.rb +2 -0
- data/lib/decidim/api/types/user_moderation_type.rb +36 -0
- data/lib/decidim/api/types/user_type.rb +13 -0
- data/lib/decidim/asset_router/pipeline.rb +1 -1
- data/lib/decidim/asset_router/storage.rb +9 -9
- data/lib/decidim/assets/tailwind/tailwind.config.js.erb +3 -0
- data/lib/decidim/attachment_attributes.rb +9 -58
- data/lib/decidim/attribute_encryptor.rb +51 -10
- data/lib/decidim/attribute_object/model.rb +0 -5
- data/lib/decidim/block_registry.rb +1 -1
- data/lib/decidim/coauthorable.rb +2 -1
- data/lib/decidim/command.rb +2 -1
- data/lib/decidim/content_processor.rb +1 -1
- data/lib/decidim/content_renderers/base_renderer.rb +0 -112
- data/lib/decidim/content_renderers/blob_renderer.rb +7 -4
- data/lib/decidim/content_renderers/mention_resource_renderer.rb +6 -10
- data/lib/decidim/content_renderers/resource_renderer.rb +7 -16
- data/lib/decidim/content_renderers/user_renderer.rb +9 -11
- data/lib/decidim/core/api.rb +8 -0
- data/lib/decidim/core/content_blocks/registry_manager.rb +4 -10
- data/lib/decidim/core/engine.rb +2 -42
- data/lib/decidim/core/menu.rb +0 -26
- data/lib/decidim/core/test/factories.rb +29 -21
- data/lib/decidim/core/test/shared_examples/access_mode_restricted_participatory_spaces.rb +172 -0
- data/lib/decidim/core/test/shared_examples/access_mode_transparent_participatory_spaces.rb +241 -0
- data/lib/decidim/core/test/shared_examples/admin_resource_gallery_examples.rb +10 -10
- data/lib/decidim/core/test/shared_examples/amendable/amendment_event_examples.rb +2 -2
- data/lib/decidim/core/test/shared_examples/amendable/amendment_promoted_event_examples.rb +3 -3
- data/lib/decidim/core/test/shared_examples/comments_examples.rb +121 -143
- data/lib/decidim/core/test/shared_examples/fingerprint_examples.rb +2 -0
- data/lib/decidim/core/test/shared_examples/has_members.rb +63 -0
- data/lib/decidim/core/test/shared_examples/has_space_in_mcell_examples.rb +1 -2
- data/lib/decidim/core/test/shared_examples/manage_share_tokens_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/map_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/participant_details_examples.rb +16 -0
- data/lib/decidim/core/test/shared_examples/participatory_space_members_page_examples.rb +10 -10
- data/lib/decidim/core/test/shared_examples/resource_liked_event_examples.rb +3 -3
- data/lib/decidim/core/test/shared_examples/resource_locator_presenter_examples.rb +7 -7
- data/lib/decidim/core/test/shared_examples/searchable_participatory_space_examples.rb +3 -3
- data/lib/decidim/core/test/shared_examples/searchable_results_examples.rb +2 -2
- data/lib/decidim/core/test/shared_examples/simple_event.rb +1 -0
- data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +2 -2
- data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +1 -1
- data/lib/decidim/core/test.rb +2 -1
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/core.rb +222 -335
- data/lib/decidim/download_your_data_serializers/{download_your_data_participatory_space_private_user_serializer.rb → download_your_data_member_serializer.rb} +6 -6
- data/lib/decidim/download_your_data_serializers.rb +2 -2
- data/lib/decidim/engine_router.rb +31 -6
- data/lib/decidim/exporters/csv.rb +1 -1
- data/lib/decidim/filter_form_builder.rb +1 -1
- data/{app/controllers/concerns → lib}/decidim/form_factory.rb +11 -1
- data/lib/decidim/has_settings.rb +2 -2
- data/lib/decidim/legacy_form_builder.rb +1 -0
- data/lib/decidim/locale_router_detector.rb +41 -0
- data/lib/decidim/maintenance/import_models/scope.rb +1 -1
- data/lib/decidim/maintenance/import_models.rb +0 -2
- data/lib/decidim/map/autocomplete.rb +3 -4
- data/lib/decidim/map/dynamic_map.rb +1 -3
- data/lib/decidim/map/frontend.rb +1 -1
- data/lib/decidim/map/geocoding.rb +2 -2
- data/lib/decidim/map/static_map.rb +10 -22
- data/lib/decidim/map/utility.rb +3 -6
- data/lib/decidim/map.rb +2 -2
- data/lib/decidim/menu.rb +1 -1
- data/lib/decidim/menu_item.rb +1 -0
- data/lib/decidim/menu_registry.rb +1 -1
- data/lib/decidim/moderation_tools.rb +1 -1
- data/lib/decidim/newsletter_encryptor.rb +5 -8
- data/lib/decidim/organization_settings.rb +2 -2
- data/lib/decidim/participable.rb +1 -0
- data/lib/decidim/participatory_space/has_members.rb +61 -0
- data/lib/decidim/participatory_space_manifest.rb +0 -4
- data/lib/decidim/participatory_space_resourceable.rb +10 -1
- data/lib/decidim/routes/locale_redirects.rb +47 -0
- data/lib/decidim/routes.rb +7 -0
- data/lib/decidim/search_resource_fields_mapper.rb +3 -4
- data/lib/decidim/searchable.rb +0 -5
- data/lib/decidim/seeds.rb +17 -0
- data/lib/decidim/shakapacker/runner.rb +4 -4
- data/lib/decidim/shakapacker/shakapacker.yml +28 -3
- data/lib/decidim/taxonomizable.rb +1 -1
- data/lib/decidim/translatable_attributes.rb +9 -3
- data/lib/decidim/view_model.rb +5 -1
- data/lib/devise/models/decidim_newsletterable.rb +1 -1
- data/lib/tasks/decidim_mailers_tasks.rake +9 -31
- data/lib/tasks/decidim_procfile.rake +1 -1
- data/lib/tasks/decidim_tasks.rake +0 -1
- data/lib/tasks/decidim_taxonomies.rake +1 -1
- data/lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake +0 -1
- data/lib/tasks/upgrade/decidim_encryption.rake +12 -0
- data/lib/tasks/upgrade/decidim_migrate_wysiwyg_content.rake +0 -1
- data/lib/tasks/upgrade/decidim_remove_deleted_users_left_data_tasks.rake +1 -1
- data/lib/tasks/upgrade/{fix_deleted_private_follows.rake → fix_deleted_members_follows.rake} +5 -5
- data/lib/tasks/upgrade/migrations.rake +0 -1
- data/lib/tasks/upgrade/user_groups_migration.rake +0 -1
- metadata +206 -155
- data/app/cells/decidim/content_blocks/global_menu/show.erb +0 -11
- data/app/cells/decidim/content_blocks/global_menu_cell.rb +0 -35
- data/app/cells/decidim/content_blocks/menu_breadcrumb_last_activity/show.erb +0 -10
- data/app/cells/decidim/content_blocks/menu_breadcrumb_last_activity_cell.rb +0 -49
- data/app/cells/decidim/participatory_space_dropdown_metadata/links.erb +0 -9
- data/app/cells/decidim/participatory_space_dropdown_metadata/metadata.erb +0 -1
- data/app/cells/decidim/participatory_space_dropdown_metadata/show.erb +0 -11
- data/app/cells/decidim/participatory_space_dropdown_metadata_cell.rb +0 -26
- data/app/controllers/concerns/decidim/has_members_page.rb +0 -25
- data/app/controllers/decidim/private_downloads_controller.rb +0 -29
- data/app/jobs/decidim/newsletters_opt_in_job.rb +0 -11
- data/app/jobs/decidim/user_report_job.rb +0 -11
- data/app/mailers/decidim/delete_user_mailer.rb +0 -14
- data/app/models/decidim/participatory_space_private_user.rb +0 -51
- data/app/models/decidim/private_download.rb +0 -61
- data/app/packs/src/decidim/controllers/sticky_header/controller.js +0 -116
- data/app/packs/src/decidim/controllers/sticky_header/sticky_header.test.js +0 -320
- data/app/packs/src/decidim/dropdown_menu.js +0 -18
- data/app/packs/src/decidim/geocoding/reverse_geocoding.test.js +0 -197
- data/app/packs/src/decidim/identity_selector_dialog.js +0 -33
- data/app/packs/src/decidim/refactor/moved/focus_guard.test.js +0 -136
- data/app/packs/stylesheets/decidim/_editor_suggestions.scss +0 -49
- data/app/packs/stylesheets/decidim/_tom_select.scss +0 -23
- data/app/presenters/decidim/admin_log/participatory_space_private_user_presenter.rb +0 -38
- data/app/presenters/decidim/participatory_space_private_user_presenter.rb +0 -46
- data/app/services/decidim/push_subscription_endpoint_validator.rb +0 -34
- data/app/views/decidim/delete_user_mailer/delete.html.erb +0 -6
- data/app/views/decidim/participatory_space_private_users/_participatory_space_private_user.html.erb +0 -1
- data/app/views/layouts/decidim/footer/_main_language_chooser.html.erb +0 -26
- data/app/views/layouts/decidim/header/_menu_breadcrumb_items.html.erb +0 -34
- data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_desktop.html.erb +0 -10
- data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_mobile.html.erb +0 -17
- data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_top_left.html.erb +0 -2
- data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +0 -33
- data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +0 -25
- data/lib/decidim/core/test/shared_examples/has_private_users.rb +0 -63
- data/lib/decidim/core/test/shared_examples/participatory_space_dropdown_metadata_cell_examples.rb +0 -81
- data/lib/decidim/has_private_users.rb +0 -57
- data/lib/decidim/maintenance/import_models/assembly_type.rb +0 -49
- data/lib/decidim/maintenance/import_models/participatory_process_type.rb +0 -21
- data/lib/decidim/query_extensions.rb +0 -64
- /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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
287
|
-
|
|
288
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
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
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
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
|
-
|
|
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
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
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
|
-
|
|
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
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|