decidim-core 0.31.2 → 0.32.1
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 +0 -4
- data/app/cells/decidim/card_metadata_cell.rb +1 -1
- data/app/cells/decidim/comments_button_cell.rb +9 -1
- 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 +1 -1
- 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_elements_with_cell_for_list_cell.rb +5 -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 +3 -1
- 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 +3 -1
- 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 +4 -2
- data/app/cells/decidim/data_consent/category.erb +25 -38
- data/app/cells/decidim/footer_topics/show.erb +5 -8
- data/app/cells/decidim/{participatory_space_private_user → member}/show.erb +6 -6
- data/app/cells/decidim/{participatory_space_private_user_cell.rb → member_cell.rb} +1 -5
- data/app/cells/decidim/nav_links/show.erb +3 -3
- 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/report_button/already_reported_modal.erb +1 -1
- data/app/cells/decidim/report_button/flag_modal.erb +1 -1
- data/app/cells/decidim/report_user_button/already_reported_modal.erb +1 -1
- data/app/cells/decidim/report_user_button/flag_modal.erb +1 -1
- data/app/cells/decidim/resource_types_filter/show.erb +2 -2
- data/app/cells/decidim/share_text_widget/modal.erb +1 -1
- 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/files.erb +5 -1
- data/app/cells/decidim/upload_modal_cell.rb +15 -1
- 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 +15 -4
- data/app/commands/decidim/multiple_attachments_methods.rb +42 -24
- 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 +9 -0
- 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 +8 -0
- data/app/controllers/decidim/open_data_controller.rb +1 -1
- data/app/controllers/decidim/private_downloads_controller.rb +29 -0
- 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 +7 -1
- 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/mailer_helper.rb +36 -0
- data/app/helpers/decidim/menu_helper.rb +4 -5
- data/app/helpers/decidim/meta_tags_helper.rb +0 -2
- data/app/helpers/decidim/newsletters_helper.rb +4 -22
- 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/find_and_update_descendants_job.rb +8 -2
- data/app/jobs/decidim/process_inactive_participant_job.rb +0 -7
- data/app/jobs/decidim/update_search_indexes_job.rb +2 -2
- data/app/mailers/decidim/application_mailer.rb +11 -2
- data/app/mailers/decidim/decidim_devise_mailer.rb +1 -0
- data/app/mailers/decidim/delete_user_mailer.rb +14 -0
- data/app/mailers/decidim/participants_account_mailer.rb +0 -16
- data/app/mailers/decidim/reported_mailer.rb +4 -1
- data/app/models/decidim/action_log.rb +1 -1
- data/app/models/decidim/attachment.rb +20 -2
- data/app/models/decidim/authorization.rb +7 -0
- 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_download.rb +61 -0
- data/app/models/decidim/private_export.rb +6 -0
- 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 +17 -2
- data/app/models/decidim/user_moderation.rb +1 -1
- data/app/packs/src/decidim/a11y.js +29 -0
- data/app/packs/src/decidim/a11y.test.js +81 -0
- data/app/packs/src/decidim/confirm.js +8 -1
- data/app/packs/src/decidim/confirm.test.js +225 -0
- data/app/packs/src/decidim/controllers/accordion/accordion.test.js +272 -0
- data/app/packs/src/decidim/controllers/accordion/controller.js +117 -17
- 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/breadcrumb_truncate/breadcrumb_truncate.test.js +230 -0
- data/app/packs/src/decidim/controllers/breadcrumb_truncate/controller.js +172 -0
- data/app/packs/src/decidim/controllers/dropdown/controller.js +32 -0
- data/app/packs/src/decidim/controllers/dropdown/dropdown.test.js +215 -0
- data/app/packs/src/decidim/controllers/form_validator/form_validator.js +9 -8
- data/app/packs/src/decidim/controllers/form_validator/form_validator.test.js +28 -1
- data/app/packs/src/decidim/controllers/language_change/controller.js +1 -0
- data/app/packs/src/decidim/controllers/language_change/language_change.test.js +13 -0
- data/app/packs/src/decidim/controllers/main_menu/controller.js +152 -0
- data/app/packs/src/decidim/controllers/main_menu/main_menu.test.js +285 -0
- data/app/packs/src/decidim/controllers/mention/controller.js +296 -140
- data/app/packs/src/decidim/controllers/mention/input_mentions.test.js +120 -457
- data/app/packs/src/decidim/controllers/multiple_mentions/controller.js +68 -32
- data/app/packs/src/decidim/controllers/multiple_mentions/input_multiple_mentions.test.js +30 -23
- data/app/packs/src/decidim/controllers/password_toggler/controller.js +22 -1
- data/app/packs/src/decidim/controllers/password_toggler/password_toggler.test.js +11 -20
- data/app/packs/src/decidim/datepicker/datepicker_functions.js +26 -0
- data/app/packs/src/decidim/datepicker/generate_datepicker.js +3 -14
- data/app/packs/src/decidim/datepicker/generate_timepicker.js +3 -2
- data/app/packs/src/decidim/datepicker/test/datepicker_functions_adjust_picker_position.test.js +234 -0
- data/app/packs/src/decidim/direct_uploads/upload_field.js +4 -4
- data/app/packs/src/decidim/direct_uploads/upload_modal.js +12 -7
- data/app/packs/src/decidim/editor/common/suggestion.js +4 -2
- data/app/packs/src/decidim/editor/extensions/decidim_kit/index.js +4 -1
- data/app/packs/src/decidim/editor/extensions/image/index.js +57 -16
- data/app/packs/src/decidim/editor/extensions/image/node_view.js +9 -1
- data/app/packs/src/decidim/editor/extensions/indent/index.js +9 -0
- data/app/packs/src/decidim/editor/extensions/link/bubble_menu.js +34 -6
- data/app/packs/src/decidim/editor/extensions/link/index.js +53 -12
- 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/image_links.test.js +161 -0
- 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 +15 -5
- data/app/packs/src/decidim/geocoding/reverse_geocoding.test.js +197 -0
- data/app/packs/src/decidim/index.js +4 -4
- data/app/packs/src/decidim/map/controller.js +10 -1
- data/app/packs/src/decidim/refactor/moved/focus_guard.js +16 -16
- data/app/packs/src/decidim/refactor/moved/focus_guard.test.js +136 -0
- data/app/packs/src/decidim/sw/push-permissions.js +48 -13
- data/app/packs/src/decidim/sw/sw.js +1 -1
- data/app/packs/src/decidim/utilities/text.js +6 -6
- data/app/packs/stylesheets/decidim/_cards.scss +15 -6
- data/app/packs/stylesheets/decidim/_conversations.scss +14 -0
- data/app/packs/stylesheets/decidim/_cookies.scss +13 -5
- 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 +22 -32
- data/app/packs/stylesheets/decidim/_editor_suggestions.scss +49 -0
- data/app/packs/stylesheets/decidim/_flash.scss +1 -1
- data/app/packs/stylesheets/decidim/_floating_help.scss +1 -1
- data/app/packs/stylesheets/decidim/_footer.scss +27 -31
- data/app/packs/stylesheets/decidim/_forms.scss +5 -1
- data/app/packs/stylesheets/decidim/_header.scss +183 -48
- 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/_rich_text.scss +17 -0
- data/app/packs/stylesheets/decidim/_tom_select.scss +23 -0
- data/app/packs/stylesheets/decidim/application.scss +3 -0
- data/app/packs/stylesheets/decidim/editor.scss +12 -33
- data/app/packs/stylesheets/decidim/geocoding_addons.scss +10 -2
- 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 +2 -4
- 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 +15 -3
- 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 +7 -0
- 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 +6 -0
- data/app/services/decidim/push_subscription_endpoint_validator.rb +34 -0
- data/app/services/decidim/send_push_notification.rb +5 -1
- 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/delete_user_mailer/delete.html.erb +6 -0
- data/app/views/decidim/devise/invitations/edit.html.erb +3 -3
- data/app/views/decidim/devise/registrations/new.html.erb +1 -0
- data/app/views/decidim/devise/shared/_tos_fields.html.erb +3 -3
- 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 +11 -19
- 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 +12 -7
- 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/notification_mailer/event_received.html.erb +3 -3
- 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/_tabbed.html.erb +3 -3
- data/app/views/decidim/pages/index.html.erb +1 -1
- 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/_filters.html.erb +5 -5
- 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 +2 -2
- data/app/views/decidim/shared/filters/_collection.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 +56 -28
- 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 +40 -12
- data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile.html.erb +33 -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/decidim_locale_aware_named_route_helper.rb +16 -0
- data/config/initializers/devise.rb +6 -0
- data/config/initializers/invisible_captcha.rb +1 -0
- data/config/locales/ar.yml +6 -38
- data/config/locales/bg.yml +3 -39
- data/config/locales/ca-IT.yml +91 -58
- data/config/locales/ca.yml +91 -58
- data/config/locales/cs.yml +54 -58
- data/config/locales/de.yml +45 -68
- data/config/locales/el.yml +3 -31
- data/config/locales/en.yml +88 -55
- data/config/locales/es-MX.yml +93 -60
- data/config/locales/es-PY.yml +93 -60
- data/config/locales/es.yml +95 -62
- data/config/locales/eu.yml +124 -92
- data/config/locales/fi-plain.yml +93 -55
- data/config/locales/fi.yml +96 -58
- data/config/locales/fr-CA.yml +70 -52
- data/config/locales/fr.yml +71 -54
- data/config/locales/ga-IE.yml +3 -1
- data/config/locales/gl.yml +3 -31
- data/config/locales/hu.yml +7 -40
- data/config/locales/id-ID.yml +3 -30
- data/config/locales/is-IS.yml +0 -6
- data/config/locales/it.yml +15 -33
- data/config/locales/ja.yml +105 -71
- data/config/locales/lb.yml +3 -33
- data/config/locales/lt.yml +4 -37
- data/config/locales/lv.yml +3 -30
- data/config/locales/nl.yml +3 -33
- data/config/locales/no.yml +3 -33
- data/config/locales/pl.yml +7 -41
- data/config/locales/pt-BR.yml +24 -65
- data/config/locales/pt.yml +3 -33
- data/config/locales/ro-RO.yml +12 -55
- data/config/locales/ru.yml +0 -16
- data/config/locales/sk.yml +1417 -32
- data/config/locales/sv.yml +44 -62
- data/config/locales/tr-TR.yml +20 -37
- data/config/locales/uk.yml +0 -9
- data/config/locales/zh-CN.yml +3 -30
- data/config/locales/zh-TW.yml +4 -35
- data/config/routes.rb +140 -76
- 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 +3 -2
- 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 +28 -28
- 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 +2 -1
- 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 +4 -1
- data/lib/decidim/attachment_attributes.rb +58 -9
- 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_parsers/blob_parser.rb +3 -3
- data/lib/decidim/content_processor.rb +1 -1
- data/lib/decidim/content_renderers/base_renderer.rb +112 -0
- data/lib/decidim/content_renderers/blob_renderer.rb +6 -9
- data/lib/decidim/content_renderers/mention_resource_renderer.rb +10 -6
- data/lib/decidim/content_renderers/resource_renderer.rb +16 -7
- data/lib/decidim/content_renderers/user_renderer.rb +11 -9
- 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 +10 -34
- data/lib/decidim/core/menu.rb +0 -26
- data/lib/decidim/core/test/factories.rb +32 -18
- data/lib/decidim/core/test/shared_examples/access_mode_restricted_participatory_spaces.rb +175 -0
- data/lib/decidim/core/test/shared_examples/access_mode_transparent_participatory_spaces.rb +244 -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 +147 -117
- 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 +2 -1
- 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/participatory_space_members_shared_examples.rb +121 -0
- 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/lib/decidim/form_builder.rb +58 -36
- 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/maintenance/taxonomy_importer.rb +1 -1
- data/lib/decidim/map/autocomplete.rb +4 -3
- data/lib/decidim/map/dynamic_map.rb +3 -1
- 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/participatory_space_user.rb +1 -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 +9 -4
- 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 +31 -9
- 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 +244 -132
- 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/commands/decidim/gallery_methods.rb +0 -107
- data/app/controllers/concerns/decidim/has_members_page.rb +0 -25
- data/app/jobs/decidim/newsletters_opt_in_job.rb +0 -11
- data/app/jobs/decidim/user_report_job.rb +0 -11
- data/app/models/decidim/participatory_space_private_user.rb +0 -51
- 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/identity_selector_dialog.js +0 -33
- data/app/packs/src/decidim/vendor/tribute.js +0 -1890
- data/app/packs/stylesheets/decidim/_tribute.scss +0 -36
- 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/views/decidim/participants_account_mailer/removal_notification.html.erb +0 -11
- 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
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_support/concern"
|
|
4
|
+
|
|
5
|
+
module Decidim
|
|
6
|
+
module ParticipatorySpace
|
|
7
|
+
# A concern with the features needed when you want a model to be able to create
|
|
8
|
+
# members
|
|
9
|
+
module HasMembers
|
|
10
|
+
extend ActiveSupport::Concern
|
|
11
|
+
include Decidim::UserRoleChecker
|
|
12
|
+
|
|
13
|
+
included do
|
|
14
|
+
has_many :members,
|
|
15
|
+
class_name: "Decidim::ParticipatorySpace::Member",
|
|
16
|
+
as: :participatory_space,
|
|
17
|
+
dependent: :destroy
|
|
18
|
+
has_many :users,
|
|
19
|
+
through: :members,
|
|
20
|
+
class_name: "Decidim::User",
|
|
21
|
+
foreign_key: "member_to_id"
|
|
22
|
+
|
|
23
|
+
def self.visible_for(user)
|
|
24
|
+
if user
|
|
25
|
+
return all if user.admin?
|
|
26
|
+
|
|
27
|
+
where(
|
|
28
|
+
id: public_spaces +
|
|
29
|
+
private_spaces
|
|
30
|
+
.joins(:members)
|
|
31
|
+
.where(decidim_members: { decidim_user_id: user.id })
|
|
32
|
+
)
|
|
33
|
+
else
|
|
34
|
+
public_spaces
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def members_public_page?
|
|
39
|
+
has_members && members.published.any?
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def can_participate?(user)
|
|
43
|
+
return false unless published?
|
|
44
|
+
return true if open?
|
|
45
|
+
return true if user_has_any_role?(user, self)
|
|
46
|
+
return false unless user
|
|
47
|
+
|
|
48
|
+
members.exists?(decidim_user_id: user.id)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def self.public_spaces
|
|
52
|
+
where(access_mode: [:open, :transparent]).published
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def self.private_spaces
|
|
56
|
+
where(access_mode: [:restricted, :transparent]).published
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -43,10 +43,6 @@ module Decidim
|
|
|
43
43
|
# probably have the form of `Decidim::<MySpace>::Permissions`.
|
|
44
44
|
attribute :permissions_class_name, String, default: "Decidim::DefaultPermissions"
|
|
45
45
|
|
|
46
|
-
# The cell to use as dropdown in the breadcrumb element associated to the space.
|
|
47
|
-
# If this value is omitted or blank, no breadcrumb is displayed
|
|
48
|
-
attribute :breadcrumb_cell, String
|
|
49
|
-
|
|
50
46
|
# The cell path to use to render the card of a resource.
|
|
51
47
|
attribute :card, String
|
|
52
48
|
|
|
@@ -102,7 +102,16 @@ module Decidim
|
|
|
102
102
|
# - is published
|
|
103
103
|
# - is not private
|
|
104
104
|
def visible?
|
|
105
|
-
published? &&
|
|
105
|
+
published? && access_mode_visible?
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Checks if the ParticipatorySpace has an access_mode attribute
|
|
109
|
+
# If it does not have it, then returns true
|
|
110
|
+
# If it has it, then checks if this access_mode should be visible (open or transparent)
|
|
111
|
+
def access_mode_visible?
|
|
112
|
+
return true unless respond_to?(:access_mode)
|
|
113
|
+
|
|
114
|
+
try(:open?) || try(:transparent?)
|
|
106
115
|
end
|
|
107
116
|
|
|
108
117
|
# Defines a way to get the user roles for the current participatory space.
|
|
@@ -11,7 +11,7 @@ module Decidim
|
|
|
11
11
|
included do
|
|
12
12
|
validate :user_and_space_same_organization
|
|
13
13
|
|
|
14
|
-
belongs_to :user, foreign_key: "decidim_user_id", class_name: "Decidim::User"
|
|
14
|
+
belongs_to :user, foreign_key: "decidim_user_id", class_name: "Decidim::User"
|
|
15
15
|
|
|
16
16
|
ransacker :name do
|
|
17
17
|
Arel.sql(%{("decidim_users"."name")::text})
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module Routes
|
|
5
|
+
module LocaleRedirects
|
|
6
|
+
def locale_scope_options
|
|
7
|
+
{
|
|
8
|
+
defaults: { locale: Decidim.default_locale },
|
|
9
|
+
constraints: { locale: Regexp.union(I18n.available_locales.map(&:to_s)) }
|
|
10
|
+
}
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def locale_redirector(path, preserve_query_string: true)
|
|
14
|
+
lambda do |params, request|
|
|
15
|
+
locale_redirect(params, request, path, preserve_query_string:)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def locale_redirect(params, request, path, preserve_query_string: true)
|
|
20
|
+
locale = Decidim::LocaleRouterDetector.new(request, params).locale
|
|
21
|
+
destination = append_locale(path, locale)
|
|
22
|
+
destination = append_query_string(destination, request) if preserve_query_string
|
|
23
|
+
|
|
24
|
+
destination
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def append_locale(path, locale)
|
|
30
|
+
return path if path == "/404"
|
|
31
|
+
return path if path.start_with?("/#{locale}/") || path == "/#{locale}"
|
|
32
|
+
|
|
33
|
+
path = "/#{path}" unless path.start_with?("/")
|
|
34
|
+
|
|
35
|
+
"/#{locale}#{path}"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def append_query_string(path, request)
|
|
39
|
+
query_string = request.query_string.to_s
|
|
40
|
+
query_params = query_string.gsub(/(?:\A|&)locale=[^&]*(?=&|\z)/, "")
|
|
41
|
+
query_params = query_params.gsub(/\A&|&\z/, "").gsub(/&&+/, "&")
|
|
42
|
+
|
|
43
|
+
query_params.empty? ? path : "#{path}?#{query_params}"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -11,7 +11,7 @@ module Decidim
|
|
|
11
11
|
# - Array each element should be a text field symbol, all values will be concatenated.
|
|
12
12
|
# - Symbol when mapping is direct.
|
|
13
13
|
#
|
|
14
|
-
# @param declared_fields
|
|
14
|
+
# @param declared_fields [Hash] - A Hash with the mappings between a SearchableResource attributes and
|
|
15
15
|
# any given model. Mapped fields are:
|
|
16
16
|
# - scope_id: The field where the scope is set in the model, if any.
|
|
17
17
|
# - participatory_space: The field where the ParticipatorySpace is set in the model.
|
|
@@ -24,14 +24,13 @@ module Decidim
|
|
|
24
24
|
# A: :title,
|
|
25
25
|
# D: [:description, :address],
|
|
26
26
|
# datetime: :start_time}
|
|
27
|
-
#
|
|
28
27
|
def initialize(declared_fields)
|
|
29
28
|
@declared_fields = declared_fields.with_indifferent_access
|
|
30
29
|
@conditions = { create: true, update: true }
|
|
31
30
|
end
|
|
32
31
|
|
|
33
|
-
# @param action
|
|
34
|
-
# @param condition
|
|
32
|
+
# @param action [Symbol] currently supports :create, :update
|
|
33
|
+
# @param condition [TrueClass, FalseClass] a boolean or a Proc that will receive the Searchable and will return a boolean.
|
|
35
34
|
def set_index_condition(action, condition)
|
|
36
35
|
@conditions[action] = condition
|
|
37
36
|
end
|
data/lib/decidim/searchable.rb
CHANGED
|
@@ -101,7 +101,7 @@ module Decidim
|
|
|
101
101
|
|
|
102
102
|
# Public: after_update callback to update index information of the model.
|
|
103
103
|
#
|
|
104
|
-
def try_update_index_for_search_resource
|
|
104
|
+
def try_update_index_for_search_resource(current_depth = 0)
|
|
105
105
|
return unless self.class.searchable_resource?(self)
|
|
106
106
|
|
|
107
107
|
org = self.class.search_resource_fields_mapper.retrieve_organization(self)
|
|
@@ -117,6 +117,11 @@ module Decidim
|
|
|
117
117
|
searchables_in_org.find_each do |sr|
|
|
118
118
|
next if sr.blank?
|
|
119
119
|
|
|
120
|
+
unless sr.locale.in?(org.available_locales)
|
|
121
|
+
sr.destroy
|
|
122
|
+
next
|
|
123
|
+
end
|
|
124
|
+
|
|
120
125
|
sr.update(contents_to_searchable_resource_attributes(fields, sr.locale))
|
|
121
126
|
end
|
|
122
127
|
end
|
|
@@ -124,13 +129,13 @@ module Decidim
|
|
|
124
129
|
searchables_in_org.destroy_all
|
|
125
130
|
end
|
|
126
131
|
|
|
127
|
-
find_and_update_descendants
|
|
132
|
+
find_and_update_descendants(current_depth)
|
|
128
133
|
end
|
|
129
134
|
|
|
130
135
|
private
|
|
131
136
|
|
|
132
|
-
def find_and_update_descendants
|
|
133
|
-
Decidim::FindAndUpdateDescendantsJob.perform_later(self)
|
|
137
|
+
def find_and_update_descendants(current_depth = 0)
|
|
138
|
+
Decidim::FindAndUpdateDescendantsJob.perform_later(self, current_depth)
|
|
134
139
|
end
|
|
135
140
|
|
|
136
141
|
def contents_to_searchable_resource_attributes(fields, locale)
|
data/lib/decidim/seeds.rb
CHANGED
|
@@ -7,6 +7,19 @@ require "decidim/faker/localized"
|
|
|
7
7
|
module Decidim
|
|
8
8
|
# Base class to be inherited from the different modules' seeds classes
|
|
9
9
|
class Seeds
|
|
10
|
+
SEEDS_CONFIG = {
|
|
11
|
+
comments_count: { slow: 6, fast: 2 },
|
|
12
|
+
comments_nested_probability: { slow: 0.5, fast: 0.2 },
|
|
13
|
+
comments_vote_skip_probability: { slow: 0.5, fast: 0.7 },
|
|
14
|
+
comments_votes_count: { slow: 12, fast: 3 },
|
|
15
|
+
surveys_responses_count: { slow: 200, fast: 20 },
|
|
16
|
+
surveys_response_options_count: { slow: 3, fast: 2 },
|
|
17
|
+
surveys_matrix_rows_count: { slow: 3, fast: 2 },
|
|
18
|
+
initiatives_votes_count: { slow: 50, fast: 10 },
|
|
19
|
+
accountability_statuses_count: { slow: 5, fast: 3 },
|
|
20
|
+
accountability_taxonomies_count: { slow: 2, fast: 1 }
|
|
21
|
+
}.freeze
|
|
22
|
+
|
|
10
23
|
protected
|
|
11
24
|
|
|
12
25
|
def slow_seeds?
|
|
@@ -17,6 +30,10 @@ module Decidim
|
|
|
17
30
|
slow_seeds? ? rand(3..5) : 1
|
|
18
31
|
end
|
|
19
32
|
|
|
33
|
+
def config_value(key)
|
|
34
|
+
slow_seeds? ? SEEDS_CONFIG[key][:slow] : SEEDS_CONFIG[key][:fast]
|
|
35
|
+
end
|
|
36
|
+
|
|
20
37
|
def organization
|
|
21
38
|
@organization ||= Decidim::Organization.first
|
|
22
39
|
end
|
|
@@ -7,15 +7,15 @@ module Decidim
|
|
|
7
7
|
base.alias_method :original_initialize, :initialize
|
|
8
8
|
base.send :private, :original_initialize
|
|
9
9
|
|
|
10
|
-
base.define_method :initialize do |argv|
|
|
11
|
-
decidim_initialize(argv)
|
|
12
|
-
original_initialize(argv)
|
|
10
|
+
base.define_method :initialize do |argv, build_config = nil, bundler_override = nil|
|
|
11
|
+
decidim_initialize(argv, build_config, bundler_override)
|
|
12
|
+
original_initialize(argv, build_config, bundler_override)
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
private
|
|
17
17
|
|
|
18
|
-
def decidim_initialize(_argv)
|
|
18
|
+
def decidim_initialize(_argv, _build_config = nil, _bundler_override = nil)
|
|
19
19
|
# Write runtime configuration for Tailwind
|
|
20
20
|
# This method is called here because in Decidim CSS compilation is done via Webpack.
|
|
21
21
|
# If CSS is decoupled from JS in the future, this call should be removed.
|
|
@@ -21,8 +21,12 @@ default: &default
|
|
|
21
21
|
# Reload manifest.json on all requests so we reload latest compiled packs
|
|
22
22
|
cache_manifest: false
|
|
23
23
|
|
|
24
|
-
# Select
|
|
25
|
-
|
|
24
|
+
# Select JavaScript transpiler to use
|
|
25
|
+
# Available options: 'swc' (default, 20x faster), 'babel', 'esbuild', or 'none'
|
|
26
|
+
# Use 'none' when providing a completely custom webpack configuration
|
|
27
|
+
# Note: When using rspack, swc is used automatically regardless of this setting
|
|
28
|
+
javascript_transpiler: 'esbuild'
|
|
29
|
+
assets_bundler: "webpack"
|
|
26
30
|
|
|
27
31
|
# Set to true to enable check for matching versions of shakapacker gem and NPM package - will raise an error if there is a mismatch or wildcard versioning is used
|
|
28
32
|
ensure_consistent_versioning: true
|
|
@@ -35,15 +39,36 @@ default: &default
|
|
|
35
39
|
# https://webpack.js.org/guides/build-performance/#avoid-production-specific-tooling
|
|
36
40
|
useContentHash: false
|
|
37
41
|
|
|
42
|
+
# Utilizing webpack-subresource-integrity plugin, will generate integrity hashes for all entries in manifest.json
|
|
43
|
+
# https://github.com/waysact/webpack-subresource-integrity/tree/main/webpack-subresource-integrity
|
|
44
|
+
integrity:
|
|
45
|
+
enabled: false
|
|
46
|
+
# Which cryptographic function(s) to use, for generating the integrity hash(es). Default sha-384. Other possible values sha256, sha512
|
|
47
|
+
hash_functions: [ "sha384" ]
|
|
48
|
+
# Default "anonymous". Other possible value "use-credentials"
|
|
49
|
+
# https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#cross-origin_resource_sharing_and_subresource_integrity
|
|
50
|
+
cross_origin: "anonymous"
|
|
51
|
+
|
|
52
|
+
# HTTP 103 Early Hints support for faster asset loading
|
|
53
|
+
# Sends Link headers to browsers so they can preload assets while Rails is rendering
|
|
54
|
+
# See docs/early_hints_new_api.md for setup instructions and requirements
|
|
55
|
+
# https://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-send_early_hints
|
|
56
|
+
early_hints:
|
|
57
|
+
enabled: false
|
|
58
|
+
# css: "preload" # 'preload' | 'prefetch' | 'none' - default: 'preload'
|
|
59
|
+
# js: "preload" # 'preload' | 'prefetch' | 'none' - default: 'preload'
|
|
60
|
+
# debug: false # Output early hints info as HTML comments for troubleshooting
|
|
61
|
+
|
|
38
62
|
development:
|
|
39
63
|
<<: *default
|
|
40
64
|
compile: true
|
|
41
65
|
compiler_strategy: mtime
|
|
42
66
|
# Compile test packs to decidim decidim-packs folder
|
|
43
67
|
|
|
68
|
+
useContentHash: false
|
|
69
|
+
|
|
44
70
|
# Reference: https://webpack.js.org/configuration/dev-server/
|
|
45
71
|
dev_server:
|
|
46
|
-
https: false
|
|
47
72
|
host: localhost
|
|
48
73
|
# Notice that we use a different port (to prevent blocking the default one) as
|
|
49
74
|
# there will be at least two webpack servers running
|
|
@@ -96,8 +96,7 @@ module Decidim
|
|
|
96
96
|
given_organization ||= try(:organization)
|
|
97
97
|
organization_locale = given_organization.try(:default_locale)
|
|
98
98
|
|
|
99
|
-
attribute
|
|
100
|
-
machine_translation_value(attribute, given_organization, override_machine_translation_settings) ||
|
|
99
|
+
translated_value(attribute, given_organization, override_machine_translation_settings) ||
|
|
101
100
|
attribute[organization_locale].presence ||
|
|
102
101
|
attribute[attribute.keys.first].presence ||
|
|
103
102
|
""
|
|
@@ -112,7 +111,7 @@ module Decidim
|
|
|
112
111
|
return unless organization
|
|
113
112
|
return unless organization.enable_machine_translations?
|
|
114
113
|
|
|
115
|
-
attribute.dig("machine_translations", I18n.locale.to_s).presence if must_render_translation?(organization, override_machine_translation_settings)
|
|
114
|
+
attribute.dig("machine_translations", I18n.locale.to_s)&.gsub("<p></p>", "").presence if must_render_translation?(organization, override_machine_translation_settings)
|
|
116
115
|
end
|
|
117
116
|
|
|
118
117
|
def must_render_translation?(organization, override_machine_translation_settings = nil)
|
|
@@ -131,5 +130,12 @@ module Decidim
|
|
|
131
130
|
def attachment?(value)
|
|
132
131
|
value.is_a?(String) && value.include?(ActiveStorage.routes_prefix)
|
|
133
132
|
end
|
|
133
|
+
|
|
134
|
+
private
|
|
135
|
+
|
|
136
|
+
def translated_value(attribute, given_organization, override_machine_translation_settings = nil)
|
|
137
|
+
attribute[I18n.locale.to_s]&.gsub("<p></p>", "").presence ||
|
|
138
|
+
machine_translation_value(attribute, given_organization, override_machine_translation_settings)
|
|
139
|
+
end
|
|
134
140
|
end
|
|
135
141
|
end
|
data/lib/decidim/view_model.rb
CHANGED
|
@@ -35,6 +35,10 @@ module Decidim
|
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
+
def current_locale
|
|
39
|
+
I18n.locale
|
|
40
|
+
end
|
|
41
|
+
|
|
38
42
|
# Rails cells is delegating those methods to some internal view layer which messes up with shakapacker asset loading strategy
|
|
39
43
|
# generating 2 or more queues for the javascript to be loading, resulting in the fact that no js / style pack appended or
|
|
40
44
|
# prepended is added to main view rendering queue.
|
|
@@ -79,7 +83,7 @@ module Decidim
|
|
|
79
83
|
end
|
|
80
84
|
|
|
81
85
|
def perform_caching?
|
|
82
|
-
cache_hash.present?
|
|
86
|
+
super && cache_hash.present?
|
|
83
87
|
end
|
|
84
88
|
|
|
85
89
|
def cache_hash
|
|
@@ -13,7 +13,7 @@ module Devise
|
|
|
13
13
|
def newsletter_opt_in_notify
|
|
14
14
|
unless newsletter_opt_in_valid?
|
|
15
15
|
set_newsletter_token!
|
|
16
|
-
Decidim::
|
|
16
|
+
Decidim::NewslettersOptInMailer.notify(self, newsletter_token).deliver_later
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
|
@@ -4,20 +4,42 @@ namespace :decidim do
|
|
|
4
4
|
namespace :mailers do
|
|
5
5
|
desc "Sends the notification digest email with the daily report"
|
|
6
6
|
task notifications_digest_daily: :environment do
|
|
7
|
-
|
|
7
|
+
time = Time.now.utc
|
|
8
|
+
target_users = Decidim::User.where(notifications_sending_frequency: :daily)
|
|
9
|
+
|
|
10
|
+
target_users.find_in_batches do |batch|
|
|
11
|
+
notification_users =
|
|
12
|
+
Decidim::Notification
|
|
13
|
+
.daily(time)
|
|
14
|
+
.where(decidim_user_id: batch.pluck(:id))
|
|
15
|
+
.select(:decidim_user_id)
|
|
16
|
+
.distinct
|
|
17
|
+
.pluck(:decidim_user_id)
|
|
18
|
+
|
|
19
|
+
notification_users.each do |user_id|
|
|
20
|
+
Decidim::EmailNotificationsDigestGeneratorJob.perform_later(user_id, :daily, time:)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
8
23
|
end
|
|
9
24
|
|
|
10
25
|
desc "Sends the notification digest email with the weekly report"
|
|
11
26
|
task notifications_digest_weekly: :environment do
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
27
|
+
time = Time.now.utc
|
|
28
|
+
target_users = Decidim::User.where(notifications_sending_frequency: :weekly)
|
|
29
|
+
|
|
30
|
+
target_users.find_in_batches do |batch|
|
|
31
|
+
notification_users =
|
|
32
|
+
Decidim::Notification
|
|
33
|
+
.weekly(time)
|
|
34
|
+
.where(decidim_user_id: batch.pluck(:id))
|
|
35
|
+
.select(:decidim_user_id)
|
|
36
|
+
.distinct
|
|
37
|
+
.pluck(:decidim_user_id)
|
|
15
38
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
Decidim::EmailNotificationsDigestGeneratorJob.perform_later(user.id, frequency, time:)
|
|
39
|
+
notification_users.each do |user_id|
|
|
40
|
+
Decidim::EmailNotificationsDigestGeneratorJob.perform_later(user_id, :weekly, time:)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
21
43
|
end
|
|
22
44
|
end
|
|
23
45
|
end
|
|
@@ -106,7 +106,7 @@ namespace :decidim do
|
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
def planner(organization)
|
|
109
|
-
models = ENV.fetch("IMPORTS", "
|
|
109
|
+
models = ENV.fetch("IMPORTS", "Scope Area Category").split.map do |model_name|
|
|
110
110
|
"Decidim::Maintenance::ImportModels::#{model_name}".constantize
|
|
111
111
|
end
|
|
112
112
|
Decidim::Maintenance::TaxonomyPlan.new(organization, models)
|
|
@@ -57,7 +57,6 @@ namespace :decidim do
|
|
|
57
57
|
"Decidim::Category" => %w(description),
|
|
58
58
|
"Decidim::Blogs::Post" => %w(body),
|
|
59
59
|
"Decidim::Pages::Page" => %w(body),
|
|
60
|
-
"Decidim::Sortitions::Sortition" => %w(additional_info witnesses cancel_reason),
|
|
61
60
|
"Decidim::Debates::Debate" => %w(description instructions information_updates conclusions),
|
|
62
61
|
"Decidim::Budgets::Budget" => %w(description),
|
|
63
62
|
"Decidim::Budgets::Project" => %w(description),
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
namespace :decidim do
|
|
4
|
+
namespace :upgrade do
|
|
5
|
+
desc "Upgrade the encryption environment"
|
|
6
|
+
task encryption: :environment do
|
|
7
|
+
# Authorization is using the RecordEncryptor which automatically decrypts or encrypts before using.
|
|
8
|
+
# A simple save will retrigger the encryption using SHA256
|
|
9
|
+
Decidim::Authorization.find_each(&:save)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -39,7 +39,6 @@ namespace :decidim do
|
|
|
39
39
|
Decidim::Upgrade::WysiwygMigrator.register_model("Decidim::Meetings::Meeting", [:description, :registration_terms, :registration_email_custom_content, :closing_report])
|
|
40
40
|
Decidim::Upgrade::WysiwygMigrator.register_model("Decidim::Pages::Page", [:body])
|
|
41
41
|
Decidim::Upgrade::WysiwygMigrator.register_model("Decidim::Proposals::Proposal", [:body, :answer, :cost_report, :execution_period])
|
|
42
|
-
Decidim::Upgrade::WysiwygMigrator.register_model("Decidim::Sortitions::Sortition", [:witnesses, :additional_info, :cancel_reason])
|
|
43
42
|
end
|
|
44
43
|
|
|
45
44
|
desc "Updates the content entered through the WYSIWYG editors"
|
|
@@ -8,7 +8,7 @@ namespace :decidim do
|
|
|
8
8
|
Decidim::User.where.not(deleted_at: nil).find_each do |deleted_user|
|
|
9
9
|
Decidim::Follow.where(followable: deleted_user).find_each(&:destroy)
|
|
10
10
|
Decidim::Follow.where(user: deleted_user).find_each(&:destroy)
|
|
11
|
-
Decidim::
|
|
11
|
+
Decidim::ParticipatorySpace::Member.where(user: deleted_user).find_each(&:destroy)
|
|
12
12
|
Decidim::Gamification::BadgeScore.where(user: deleted_user).find_each(&:destroy)
|
|
13
13
|
Decidim::UserModeration.where(user: deleted_user).find_each(&:destroy)
|
|
14
14
|
Decidim::Like.where(author: deleted_user).find_each(&:destroy)
|
data/lib/tasks/upgrade/{fix_deleted_private_follows.rake → fix_deleted_members_follows.rake}
RENAMED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
namespace :decidim do
|
|
4
4
|
namespace :upgrade do
|
|
5
|
-
desc "Delete follows of
|
|
6
|
-
task
|
|
5
|
+
desc "Delete follows of members deleted from a restricted space"
|
|
6
|
+
task fix_deleted_members_follows: :environment do
|
|
7
7
|
Decidim::Organization.all.each do |organization|
|
|
8
|
-
spaces = organization.participatory_spaces.collect { |space| space if space.respond_to?(:
|
|
8
|
+
spaces = organization.participatory_spaces.collect { |space| space if space.respond_to?(:restricted?) && space.restricted? }.compact_blank
|
|
9
9
|
|
|
10
10
|
next if spaces.blank?
|
|
11
11
|
|
|
12
|
-
spaces = spaces.map { |space| space.respond_to?(:
|
|
12
|
+
spaces = spaces.map { |space| space.respond_to?(:transparent?) ? (space unless space.transparent?) : space }.compact_blank
|
|
13
13
|
|
|
14
14
|
next if spaces.blank?
|
|
15
15
|
|
|
@@ -17,7 +17,7 @@ namespace :decidim do
|
|
|
17
17
|
next unless user.following_follows.count.positive?
|
|
18
18
|
|
|
19
19
|
spaces.each do |space|
|
|
20
|
-
Decidim::Admin::
|
|
20
|
+
Decidim::Admin::ParticipatorySpace::DestroyMembersFollowsJob.perform_later(user, space)
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
end
|