decidim-core 0.26.2 → 0.27.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 +1 -1
- data/app/cells/decidim/amendable/announcement_cell.rb +3 -8
- data/app/cells/decidim/announcement_cell.rb +1 -1
- data/app/cells/decidim/author_cell.rb +1 -1
- data/app/cells/decidim/content_blocks/footer_sub_hero/show.erb +1 -1
- data/app/cells/decidim/content_blocks/hero/show.erb +1 -1
- data/app/cells/decidim/content_blocks/highlighted_content_banner/show.erb +3 -3
- data/app/cells/decidim/content_blocks/highlighted_elements_cell.rb +1 -1
- data/app/cells/decidim/content_blocks/how_to_participate/show.erb +1 -1
- data/app/cells/decidim/content_blocks/last_activity/show.erb +1 -1
- data/app/cells/decidim/content_blocks/last_activity_cell.rb +3 -3
- data/app/cells/decidim/content_blocks/stats_cell.rb +4 -4
- data/app/cells/decidim/content_blocks/sub_hero/show.erb +1 -1
- data/app/cells/decidim/data_consent/category.erb +64 -0
- data/app/cells/decidim/data_consent/dialog.erb +29 -0
- data/app/cells/decidim/data_consent/modal.erb +39 -0
- data/app/cells/decidim/data_consent/show.erb +3 -0
- data/app/cells/decidim/data_consent_cell.rb +21 -0
- data/app/cells/decidim/follow_button_cell.rb +5 -7
- data/app/cells/decidim/profile_sidebar_cell.rb +1 -1
- data/app/cells/decidim/search_results_cell.rb +1 -1
- data/app/cells/decidim/tos_page/refuse_btn_modal.erb +1 -1
- data/app/cells/decidim/upload_modal/files.erb +52 -0
- data/app/cells/decidim/upload_modal/modal.erb +49 -0
- data/app/cells/decidim/upload_modal/show.erb +3 -0
- data/app/cells/decidim/upload_modal_cell.rb +205 -0
- data/app/cells/decidim/user_conversation/reply.erb +1 -1
- data/app/cells/decidim/user_conversations/add_conversation_users.erb +5 -3
- data/app/cells/decidim/version_cell.rb +2 -13
- data/app/cells/decidim/versions_list_cell.rb +2 -13
- data/app/cells/decidim/versions_list_item_cell.rb +2 -13
- data/app/commands/decidim/accept_group_invitation.rb +1 -1
- data/app/commands/decidim/accept_user_group_join_request.rb +1 -1
- data/app/commands/decidim/amendable/accept.rb +1 -1
- data/app/commands/decidim/amendable/create_draft.rb +1 -1
- data/app/commands/decidim/amendable/destroy_draft.rb +1 -1
- data/app/commands/decidim/amendable/promote.rb +1 -1
- data/app/commands/decidim/amendable/publish_draft.rb +1 -1
- data/app/commands/decidim/amendable/reject.rb +1 -1
- data/app/commands/decidim/amendable/update_draft.rb +1 -1
- data/app/commands/decidim/amendable/withdraw.rb +1 -1
- data/app/commands/decidim/attachment_methods.rb +3 -2
- data/app/commands/decidim/create_editor_image.rb +1 -1
- data/app/commands/decidim/create_follow.rb +1 -1
- data/app/commands/decidim/create_omniauth_registration.rb +2 -3
- data/app/commands/decidim/create_registration.rb +1 -2
- data/app/commands/decidim/create_report.rb +1 -1
- data/app/commands/decidim/create_user_group.rb +2 -2
- data/app/commands/decidim/create_user_report.rb +5 -3
- data/app/commands/decidim/delete_follow.rb +1 -1
- data/app/commands/decidim/demote_membership.rb +1 -1
- data/app/commands/decidim/destroy_account.rb +1 -1
- data/app/commands/decidim/endorse_resource.rb +1 -1
- data/app/commands/decidim/gallery_methods.rb +45 -10
- data/app/commands/decidim/invite_user.rb +1 -3
- data/app/commands/decidim/invite_user_again.rb +1 -1
- data/app/commands/decidim/invite_user_to_group.rb +1 -1
- data/app/commands/decidim/join_user_group.rb +1 -1
- data/app/commands/decidim/leave_user_group.rb +8 -2
- data/app/commands/decidim/messaging/reply_to_conversation.rb +2 -2
- data/app/commands/decidim/messaging/start_conversation.rb +2 -2
- data/app/commands/decidim/multiple_attachments_methods.rb +44 -5
- data/app/commands/decidim/promote_membership.rb +1 -1
- data/app/commands/decidim/reject_group_invitation.rb +1 -1
- data/app/commands/decidim/reject_user_group_join_request.rb +1 -1
- data/app/commands/decidim/remove_user_from_group.rb +1 -1
- data/app/commands/decidim/resend_confirmation_instructions.rb +18 -0
- data/app/commands/decidim/search.rb +10 -9
- data/app/commands/decidim/unendorse_resource.rb +1 -1
- data/app/commands/decidim/unsubscribe_settings.rb +1 -1
- data/app/commands/decidim/update_account.rb +2 -2
- data/app/commands/decidim/update_notifications_settings.rb +3 -2
- data/app/commands/decidim/update_password.rb +31 -0
- data/app/commands/decidim/update_user_group.rb +2 -2
- data/app/commands/decidim/update_user_interests.rb +1 -1
- data/app/commands/decidim/validate_upload.rb +15 -0
- data/app/controllers/concerns/decidim/devise_controllers.rb +0 -1
- data/app/controllers/concerns/decidim/filter_resource.rb +23 -24
- data/app/controllers/concerns/decidim/force_authentication.rb +1 -2
- data/app/controllers/concerns/decidim/http_caching_disabler.rb +1 -1
- data/app/controllers/concerns/decidim/needs_password_change.rb +43 -0
- data/app/controllers/concerns/decidim/needs_tos_accepted.rb +3 -3
- data/app/controllers/concerns/decidim/orderable.rb +1 -1
- data/app/controllers/concerns/decidim/participatory_space_context.rb +2 -2
- data/app/controllers/decidim/account_controller.rb +45 -0
- data/app/controllers/decidim/application_controller.rb +1 -1
- data/app/controllers/decidim/devise/invitations_controller.rb +2 -0
- data/app/controllers/decidim/devise/passwords_controller.rb +33 -0
- data/app/controllers/decidim/devise/registrations_controller.rb +2 -0
- data/app/controllers/decidim/devise/sessions_controller.rb +2 -0
- data/app/controllers/decidim/{data_portability_controller.rb → download_your_data_controller.rb} +8 -8
- data/app/controllers/decidim/groups_controller.rb +5 -0
- data/app/controllers/decidim/last_activities_controller.rb +7 -9
- data/app/controllers/decidim/manifests_controller.rb +11 -0
- data/app/controllers/decidim/newsletters_controller.rb +1 -1
- data/app/controllers/decidim/notifications_subscriptions_controller.rb +16 -0
- data/app/controllers/decidim/offline_controller.rb +7 -0
- data/app/controllers/decidim/profiles_controller.rb +1 -1
- data/app/controllers/decidim/searches_controller.rb +4 -3
- data/app/controllers/decidim/short_links_controller.rb +35 -0
- data/app/controllers/decidim/upload_validations_controller.rb +44 -0
- data/app/controllers/decidim/user_activities_controller.rb +32 -16
- data/app/controllers/decidim/user_interests_controller.rb +0 -2
- data/app/controllers/decidim/user_timeline_controller.rb +6 -8
- data/app/events/decidim/change_nickname_event.rb +21 -0
- data/app/forms/decidim/account_form.rb +7 -6
- data/app/forms/decidim/form.rb +1 -1
- data/app/forms/decidim/messaging/conversation_form.rb +1 -1
- data/app/forms/decidim/notifications_settings_form.rb +8 -2
- data/app/forms/decidim/password_form.rb +10 -0
- data/app/forms/decidim/registration_form.rb +10 -4
- data/app/forms/decidim/upload_validation_form.rb +54 -0
- data/app/forms/decidim/user_group_form.rb +1 -1
- data/app/forms/decidim/user_interest_scope_form.rb +1 -1
- data/app/forms/decidim/user_interests_form.rb +1 -1
- data/app/forms/translatable_presence_validator.rb +2 -2
- data/app/forms/url_validator.rb +1 -1
- data/app/helpers/decidim/application_helper.rb +2 -2
- data/app/helpers/decidim/attachments_helper.rb +1 -1
- data/app/helpers/decidim/cells_paginate_helper.rb +1 -1
- data/app/helpers/decidim/datalist_select_helper.rb +40 -0
- data/app/helpers/decidim/decidim_form_helper.rb +1 -1
- data/app/helpers/decidim/followable_helper.rb +1 -1
- data/app/helpers/decidim/icon_helper.rb +1 -1
- data/app/helpers/decidim/layout_helper.rb +15 -1
- data/app/helpers/decidim/map_helper.rb +12 -8
- data/app/helpers/decidim/meta_tags_helper.rb +0 -2
- data/app/helpers/decidim/notifications_settings_helper.rb +15 -0
- data/app/helpers/decidim/passwords_helper.rb +41 -0
- data/app/helpers/decidim/sanitize_helper.rb +1 -0
- data/app/helpers/decidim/searches_helper.rb +6 -6
- data/app/helpers/decidim/short_link_helper.rb +28 -0
- data/app/helpers/decidim/translations_helper.rb +2 -2
- data/app/jobs/decidim/{data_portability_export_job.rb → download_your_data_export_job.rb} +5 -5
- data/app/jobs/decidim/email_notifications_digest_generator_job.rb +21 -0
- data/app/jobs/decidim/notification_generator_for_recipient_job.rb +5 -3
- data/app/jobs/decidim/reminder_generator_job.rb +12 -0
- data/app/jobs/decidim/resend_confirmation_instructions_job.rb +11 -0
- data/app/jobs/decidim/user_report_job.rb +2 -2
- data/app/mailers/concerns/decidim/multitenant_asset_host.rb +11 -3
- data/app/mailers/decidim/application_mailer.rb +1 -1
- data/app/mailers/decidim/block_user_mailer.rb +8 -7
- data/app/mailers/decidim/export_mailer.rb +2 -2
- data/app/mailers/decidim/newsletter_mailer.rb +2 -2
- data/app/mailers/decidim/newsletters_opt_in_mailer.rb +7 -5
- data/app/mailers/decidim/notifications_digest_mailer.rb +23 -0
- data/app/mailers/decidim/user_report_mailer.rb +10 -11
- data/app/models/decidim/action_log.rb +86 -2
- data/app/models/decidim/amendment.rb +0 -1
- data/app/models/decidim/area.rb +1 -2
- data/app/models/decidim/area_type.rb +5 -0
- data/app/models/decidim/attachment.rb +6 -0
- data/app/models/decidim/attachment_collection.rb +5 -0
- data/app/models/decidim/category.rb +9 -4
- data/app/models/decidim/coauthorship.rb +0 -2
- data/app/models/decidim/contextual_help_section.rb +5 -1
- data/app/models/decidim/follow.rb +2 -2
- data/app/models/decidim/gamification/badge_score.rb +0 -1
- data/app/models/decidim/identity.rb +2 -2
- data/app/models/decidim/messaging/conversation.rb +4 -4
- data/app/models/decidim/messaging/message.rb +1 -2
- data/app/models/decidim/messaging/participation.rb +0 -2
- data/app/models/decidim/messaging/receipt.rb +0 -2
- data/app/models/decidim/notification.rb +5 -2
- data/app/models/decidim/oauth_application.rb +12 -1
- data/app/models/decidim/organization.rb +7 -7
- data/app/models/decidim/participatory_space_private_user.rb +4 -2
- data/app/models/decidim/permission_action.rb +1 -0
- data/app/models/decidim/reminder.rb +10 -0
- data/app/models/decidim/reminder_delivery.rb +7 -0
- data/app/models/decidim/reminder_record.rb +29 -0
- data/app/models/decidim/report.rb +2 -2
- data/app/models/decidim/scope.rb +3 -4
- data/app/models/decidim/scope_type.rb +5 -0
- data/app/models/decidim/share_token.rb +0 -2
- data/app/models/decidim/short_link.rb +162 -0
- data/app/models/decidim/user.rb +34 -6
- data/app/models/decidim/user_base_entity.rb +1 -1
- data/app/models/decidim/user_group.rb +3 -3
- data/app/models/decidim/user_moderation.rb +0 -2
- data/app/models/decidim/user_report.rb +2 -2
- data/app/packs/entrypoints/decidim_core.js +2 -2
- data/app/packs/entrypoints/decidim_sw.js +1 -0
- data/app/packs/src/decidim/autocomplete.js +298 -0
- data/app/packs/src/decidim/cookie_consent/consent_manager.js +133 -0
- data/app/packs/src/decidim/cookie_consent/cookie_consent.js +103 -0
- data/app/packs/src/decidim/datalist_select.js +36 -0
- data/app/packs/src/decidim/direct_uploads/upload_field.js +117 -0
- data/app/packs/src/decidim/direct_uploads/upload_modal.js +264 -0
- data/app/packs/src/decidim/direct_uploads/upload_utility.js +49 -0
- data/app/packs/src/decidim/direct_uploads/uploader.js +89 -0
- data/app/packs/src/decidim/external_domain_warning.js +1 -1
- data/app/packs/src/decidim/external_link.js +14 -3
- data/app/packs/src/decidim/external_link.test.js +64 -0
- data/app/packs/src/decidim/geocoding.js +10 -35
- data/app/packs/src/decidim/identity_selector_dialog.js +1 -1
- data/app/packs/src/decidim/impersonation.js +3 -3
- data/app/packs/src/decidim/input_character_counter.js +177 -7
- data/app/packs/src/decidim/input_multiple_mentions.js +87 -187
- data/app/packs/src/decidim/map/factory.js +3 -1
- data/app/packs/src/decidim/map/icon.js +2 -1
- data/app/packs/src/decidim/map/legacy.js +2 -2
- data/app/packs/src/decidim/map/svg-icon.js +248 -0
- data/app/packs/src/decidim/map.js +2 -2
- data/app/packs/src/decidim/security/selfxss_warning.js +5 -1
- data/app/packs/src/decidim/session_timeouter.js +15 -15
- data/app/packs/src/decidim/sw/a2hs.js +28 -0
- data/app/packs/src/decidim/sw/index.js +3 -0
- data/app/packs/src/decidim/sw/loader.js +18 -0
- data/app/packs/src/decidim/sw/push-permissions.js +87 -0
- data/app/packs/src/decidim/sw/sw.js +80 -0
- data/app/packs/src/decidim/vizzs/areachart.js +33 -28
- data/app/packs/src/decidim/vizzs/{metrics.js → index.js} +0 -0
- data/app/packs/src/decidim/vizzs/linechart.js +23 -18
- data/app/packs/src/decidim/vizzs/rowchart.js +15 -11
- data/app/packs/stylesheets/decidim/email.scss +66 -0
- data/app/packs/stylesheets/decidim/layouts/_user.scss +8 -0
- data/app/packs/stylesheets/decidim/modules/_autocomplete.scss +99 -0
- data/app/packs/stylesheets/decidim/modules/_cookie-consent.scss +115 -0
- data/app/packs/stylesheets/decidim/modules/_footer.scss +4 -0
- data/app/packs/stylesheets/decidim/modules/_input-multiple-mentions.scss +29 -2
- data/app/packs/stylesheets/decidim/modules/_modules.scss +3 -1
- data/app/packs/stylesheets/decidim/modules/_reveal.scss +15 -0
- data/app/packs/stylesheets/decidim/modules/_upload_modal.scss +143 -0
- data/app/packs/stylesheets/decidim/utils/_fontface.scss +3 -0
- data/app/permissions/decidim/permissions.rb +2 -4
- data/app/presenters/decidim/admin_log/area_type_presenter.rb +34 -0
- data/app/presenters/decidim/admin_log/attachment_collection_presenter.rb +35 -0
- data/app/presenters/decidim/admin_log/attachment_presenter.rb +27 -0
- data/app/presenters/decidim/admin_log/category_presenter.rb +36 -0
- data/app/presenters/decidim/admin_log/component_presenter.rb +35 -3
- data/app/presenters/decidim/admin_log/contextual_help_section_presenter.rb +33 -0
- data/app/presenters/decidim/admin_log/organization_presenter.rb +9 -4
- data/app/presenters/decidim/admin_log/scope_type_presenter.rb +34 -0
- data/app/presenters/decidim/home_stats_presenter.rb +4 -2
- data/app/presenters/decidim/log/base_presenter.rb +1 -1
- data/app/presenters/decidim/menu_item_presenter.rb +1 -1
- data/app/presenters/decidim/metric_charts_presenter.rb +7 -1
- data/app/presenters/decidim/nil_presenter.rb +3 -1
- data/app/presenters/decidim/notification_to_mailer_presenter.rb +39 -0
- data/app/presenters/decidim/notifications_digest_presenter.rb +42 -0
- data/app/presenters/decidim/official_author_presenter.rb +4 -0
- data/app/presenters/decidim/organization_presenter.rb +22 -0
- data/app/presenters/decidim/push_notification_presenter.rb +24 -0
- data/app/presenters/decidim/stats_presenter.rb +1 -1
- data/app/presenters/decidim/validation_errors_presenter.rb +1 -1
- data/app/queries/decidim/messaging/user_conversations.rb +1 -1
- data/app/queries/decidim/metric_manage.rb +1 -1
- data/app/queries/decidim/own_activities.rb +11 -0
- data/app/queries/decidim/participatory_processes_with_user_role.rb +1 -1
- data/app/{services/decidim/activity_search.rb → queries/decidim/public_activities.rb} +35 -77
- data/app/queries/decidim/public_components.rb +1 -1
- data/app/queries/decidim/similar_emendations.rb +1 -1
- data/app/queries/decidim/stats_users_count.rb +1 -1
- data/app/queries/decidim/user_groups/accepted_memberships.rb +1 -1
- data/app/queries/decidim/user_groups/accepted_user_groups.rb +1 -1
- data/app/queries/decidim/user_groups/accepted_users.rb +1 -1
- data/app/queries/decidim/user_groups/admin_memberships.rb +1 -1
- data/app/queries/decidim/user_groups/invited_memberships.rb +1 -1
- data/app/queries/decidim/user_groups/manageable_user_groups.rb +1 -1
- data/app/queries/decidim/user_groups/member_memberships.rb +1 -1
- data/app/services/decidim/{data_portability_exporter.rb → download_your_data_exporter.rb} +6 -6
- data/app/services/decidim/email_notification_generator.rb +2 -2
- data/app/services/decidim/engine_resolver.rb +66 -0
- data/app/services/decidim/events_manager.rb +1 -1
- data/app/services/decidim/iframe_disabler.rb +31 -0
- data/app/services/decidim/notification_generator_for_recipient.rb +1 -1
- data/app/services/decidim/notifications_digest_sending_decider.rb +18 -0
- data/app/services/decidim/notifications_subscriptions_persistor.rb +37 -0
- data/app/services/decidim/open_data_exporter.rb +1 -1
- data/app/services/decidim/resource_search.rb +17 -164
- data/app/services/decidim/send_push_notification.rb +59 -0
- data/app/services/decidim/traceability.rb +1 -1
- data/app/uploaders/decidim/application_uploader.rb +2 -12
- data/app/uploaders/decidim/cw/attachment_uploader.rb +1 -1
- data/app/uploaders/decidim/cw/{data_portability_uploader.rb → download_your_data_uploader.rb} +3 -3
- data/app/uploaders/decidim/cw/image_uploader.rb +2 -2
- data/app/uploaders/decidim/organization_favicon_uploader.rb +3 -2
- data/app/validators/passthru_validator.rb +29 -21
- data/app/validators/password_validator.rb +25 -4
- data/app/validators/uploader_image_dimensions_validator.rb +1 -1
- data/app/views/decidim/account/_account_notification.js.erb +20 -0
- data/app/views/decidim/account/_password_fields.html.erb +2 -2
- data/app/views/decidim/account/cancel_email_change.js.erb +6 -0
- data/app/views/decidim/account/resend_confirmation_instructions.erb +1 -0
- data/app/views/decidim/account/show.html.erb +19 -6
- data/app/views/decidim/application/{_attachments.html.erb → _attachments.erb} +2 -2
- data/app/views/decidim/application/_collection.html.erb +1 -1
- data/app/views/decidim/application/{_document.html.erb → _document.erb} +0 -0
- data/app/views/decidim/application/{_documents.html.erb → _documents.erb} +2 -2
- data/app/views/decidim/application/{_photos.html.erb → _photos.erb} +0 -0
- data/app/views/decidim/devise/confirmations/new.html.erb +1 -1
- data/app/views/decidim/devise/invitations/edit.html.erb +3 -4
- data/app/views/decidim/devise/omniauth_registrations/new.html.erb +3 -3
- data/app/views/decidim/devise/passwords/edit.html.erb +7 -5
- data/app/views/decidim/devise/passwords/new.html.erb +1 -1
- data/app/views/decidim/devise/registrations/edit.html.erb +5 -5
- data/app/views/decidim/devise/registrations/new.html.erb +5 -5
- data/app/views/decidim/devise/sessions/new.html.erb +2 -2
- data/app/views/decidim/{data_portability → download_your_data}/export.html.erb +0 -0
- data/app/views/decidim/{data_portability → download_your_data}/show.html.erb +2 -2
- data/app/views/decidim/export_mailer/download_your_data_export.html.erb +7 -0
- data/app/views/decidim/last_activities/index.html.erb +1 -1
- data/app/views/decidim/manifests/show.json.erb +31 -0
- data/app/views/decidim/messaging/conversations/_add_conversation_users.html.erb +5 -3
- data/app/views/decidim/messaging/conversations/_reply.html.erb +1 -1
- data/app/views/decidim/messaging/conversations/_start.html.erb +1 -3
- data/app/views/decidim/messaging/conversations/create.js.erb +1 -0
- data/app/views/decidim/notifications_digest_mailer/_email_content.html.erb +11 -0
- data/app/views/decidim/notifications_digest_mailer/digest_mail.erb +27 -0
- data/app/views/decidim/notifications_settings/show.html.erb +34 -9
- data/app/views/decidim/offline/show.html.erb +9 -0
- data/app/views/decidim/pages/_standalone.html.erb +1 -1
- data/app/views/decidim/reported_mailer/hide.html.erb +1 -1
- data/app/views/decidim/reported_mailer/report.html.erb +1 -1
- data/app/views/decidim/scopes/picker.html.erb +1 -1
- data/app/views/decidim/searches/_filters.html.erb +2 -2
- data/app/views/decidim/shared/participatory_space_filters/_filters.html.erb +3 -3
- data/app/views/decidim/user_report_mailer/notify.html.erb +10 -3
- data/app/views/devise/mailer/confirmation_instructions.html.erb +3 -1
- data/app/views/layouts/decidim/_application.html.erb +6 -3
- data/app/views/layouts/decidim/_cookie_warning.html.erb +8 -8
- data/app/views/layouts/decidim/_decidim_javascript.html.erb +12 -0
- data/app/views/layouts/decidim/_head.html.erb +4 -2
- data/app/views/layouts/decidim/_js_configuration.html.erb +5 -1
- data/app/views/layouts/decidim/_main_footer.html.erb +1 -0
- data/app/views/layouts/decidim/_offline_banner.html.erb +11 -0
- data/app/views/layouts/decidim/widget.html.erb +2 -2
- data/config/assets.rb +1 -0
- data/config/locales/am-ET.yml +1 -0
- data/config/locales/ar.yml +48 -36
- data/config/locales/bg.yml +15 -30
- data/config/locales/ca.yml +186 -35
- data/config/locales/cs.yml +186 -33
- data/config/locales/da.yml +1 -0
- data/config/locales/de.yml +25 -36
- data/config/locales/el.yml +15 -30
- data/config/locales/en.yml +183 -32
- data/config/locales/eo.yml +4 -6
- data/config/locales/es-MX.yml +185 -34
- data/config/locales/es-PY.yml +185 -34
- data/config/locales/es.yml +185 -34
- data/config/locales/et.yml +1 -0
- data/config/locales/eu.yml +15 -36
- data/config/locales/fi-plain.yml +184 -33
- data/config/locales/fi.yml +184 -33
- data/config/locales/fr-CA.yml +170 -33
- data/config/locales/fr.yml +170 -33
- data/config/locales/ga-IE.yml +5 -7
- data/config/locales/gl.yml +47 -30
- data/config/locales/hr.yml +1 -0
- data/config/locales/hu.yml +65 -35
- data/config/locales/id-ID.yml +15 -29
- data/config/locales/is-IS.yml +6 -15
- data/config/locales/it.yml +22 -38
- data/config/locales/ja.yml +173 -34
- data/config/locales/ko.yml +1 -0
- data/config/locales/lb.yml +16 -32
- data/config/locales/lt.yml +1 -0
- data/config/locales/lv.yml +15 -28
- data/config/locales/mt.yml +1 -0
- data/config/locales/nl.yml +25 -33
- data/config/locales/no.yml +24 -35
- data/config/locales/om-ET.yml +1 -0
- data/config/locales/pl.yml +113 -32
- data/config/locales/pt-BR.yml +17 -32
- data/config/locales/pt.yml +16 -32
- data/config/locales/ro-RO.yml +20 -36
- data/config/locales/ru.yml +15 -27
- data/config/locales/si-LK.yml +1 -0
- data/config/locales/sk.yml +15 -30
- data/config/locales/sl.yml +1 -0
- data/config/locales/so-SO.yml +1 -0
- data/config/locales/sr-CS.yml +1 -0
- data/config/locales/sv.yml +69 -34
- data/config/locales/sw-KE.yml +1 -0
- data/config/locales/ti-ER.yml +1 -0
- data/config/locales/tr-TR.yml +15 -29
- data/config/locales/uk.yml +15 -26
- data/config/locales/val-ES.yml +1 -0
- data/config/locales/vi.yml +1 -0
- data/config/locales/zh-CN.yml +15 -28
- data/config/locales/zh-TW.yml +1 -0
- data/config/routes.rb +17 -2
- data/db/migrate/20180508111710_add_accepted_tos_version_field_to_users.rb +1 -0
- data/db/migrate/20181030090144_destroy_deleted_users_follows.rb +1 -0
- data/db/migrate/20190412131728_fix_user_names.rb +4 -4
- data/db/migrate/20210831181634_add_service_name_to_active_storage_blobs.active_storage.rb +22 -0
- data/db/migrate/20210831181635_create_active_storage_variant_records.active_storage.rb +14 -0
- data/db/migrate/20211208155453_create_decidim_reminders.rb +11 -0
- data/db/migrate/20211209121025_create_decidim_reminder_records.rb +11 -0
- data/db/migrate/20211209121040_create_decidim_reminder_deliveries.rb +10 -0
- data/db/migrate/20220118121921_change_required_description_categories.rb +7 -0
- data/db/migrate/20220127113419_add_notification_settings_to_users.rb +7 -0
- data/db/migrate/20220203121137_add_notifications_sending_frequency_to_users.rb +7 -0
- data/db/migrate/20220215172439_add_digest_sent_at_to_users.rb +7 -0
- data/db/migrate/20220323195258_add_index_to_decidim_users_notifications_sending_frequency.rb +7 -0
- data/db/migrate/20220427142214_drop_emails_on_notifications_flag_from_user.rb +15 -0
- data/db/migrate/20220518094535_add_previous_passwords_to_users.rb +20 -0
- data/db/migrate/20220524195530_create_decidim_short_links.rb +23 -0
- data/db/seeds.rb +17 -18
- data/lib/decidim/acts_as_tree.rb +47 -0
- data/lib/decidim/api/input_sorts/component_input_sort.rb +2 -1
- data/lib/decidim/api/interfaces/authorable_interface.rb +6 -5
- data/lib/decidim/asset_router.rb +80 -0
- data/lib/decidim/attachment_attributes.rb +8 -8
- data/lib/decidim/attribute_object/form.rb +174 -0
- data/lib/decidim/attribute_object/model.rb +148 -0
- data/lib/decidim/attribute_object/nested_validator.rb +22 -0
- data/lib/decidim/attribute_object/type_map.rb +14 -0
- data/lib/decidim/attribute_object/type_resolver.rb +91 -0
- data/lib/decidim/attribute_object.rb +26 -0
- data/lib/decidim/attributes/array.rb +62 -0
- data/lib/decidim/attributes/blob.rb +20 -0
- data/lib/decidim/attributes/clean_string.rb +12 -6
- data/lib/decidim/attributes/hash.rb +36 -0
- data/lib/decidim/attributes/integer.rb +17 -0
- data/lib/decidim/attributes/localized_date.rb +9 -7
- data/lib/decidim/attributes/model.rb +24 -0
- data/lib/decidim/attributes/object.rb +28 -0
- data/lib/decidim/attributes/symbol.rb +23 -0
- data/lib/decidim/attributes/time_with_zone.rb +9 -7
- data/lib/decidim/attributes.rb +29 -0
- data/lib/decidim/authorable.rb +21 -6
- data/lib/decidim/authorization_form_builder.rb +9 -11
- data/lib/decidim/carrier_wave_migrator_service.rb +15 -15
- data/lib/decidim/coauthorable.rb +22 -4
- data/lib/decidim/command.rb +44 -0
- data/lib/decidim/common_passwords.rb +1 -1
- data/lib/decidim/component_manifest.rb +5 -5
- data/lib/decidim/component_validator.rb +2 -2
- data/lib/decidim/content_block_manifest.rb +1 -1
- data/lib/decidim/content_parsers/hashtag_parser.rb +2 -2
- data/lib/decidim/content_parsers/resource_parser.rb +1 -1
- data/lib/decidim/content_parsers/user_group_parser.rb +1 -1
- data/lib/decidim/content_parsers/user_parser.rb +4 -4
- data/lib/decidim/content_renderers/hashtag_renderer.rb +1 -1
- data/lib/decidim/content_renderers/link_renderer.rb +2 -2
- data/lib/decidim/content_renderers/user_group_renderer.rb +1 -1
- data/lib/decidim/content_renderers/user_renderer.rb +1 -1
- data/lib/decidim/controller_helpers.rb +41 -0
- data/lib/decidim/core/engine.rb +29 -18
- data/lib/decidim/core/test/factories.rb +48 -8
- data/lib/decidim/core/test/shared_examples/admin_resource_gallery_examples.rb +16 -4
- data/lib/decidim/core/test/shared_examples/amendable/amendment_form_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/authorable_interface_examples.rb +15 -2
- data/lib/decidim/core/test/shared_examples/coauthorable_interface_examples.rb +2 -2
- data/lib/decidim/core/test/shared_examples/comments_examples.rb +203 -0
- data/lib/decidim/core/test/shared_examples/localised_email.rb +1 -1
- data/lib/decidim/core/test/shared_examples/logo_email.rb +1 -1
- data/lib/decidim/core/test/shared_examples/map_examples.rb +2 -2
- data/lib/decidim/core/test/shared_examples/preview_component_with_share_token_examples.rb +0 -6
- data/lib/decidim/core/test/shared_examples/resource_search_examples.rb +120 -40
- data/lib/decidim/core/test/shared_examples/resourceable.rb +0 -6
- data/lib/decidim/core/test/shared_examples/searchable_participatory_space_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/searchable_resources_shared_context.rb +1 -1
- data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +3 -3
- data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +2 -2
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/core.rb +108 -14
- data/lib/decidim/{data_portability.rb → download_your_data.rb} +3 -3
- data/lib/decidim/{data_portability_serializers/data_portability_conversation_serializer.rb → download_your_data_serializers/download_your_data_conversation_serializer.rb} +2 -2
- data/lib/decidim/{data_portability_serializers/data_portability_follow_serializer.rb → download_your_data_serializers/download_your_data_follow_serializer.rb} +2 -2
- data/lib/decidim/{data_portability_serializers/data_portability_identity_serializer.rb → download_your_data_serializers/download_your_data_identity_serializer.rb} +2 -2
- data/lib/decidim/{data_portability_serializers/data_portability_notification_serializer.rb → download_your_data_serializers/download_your_data_notification_serializer.rb} +2 -2
- data/lib/decidim/{data_portability_serializers/data_portability_participatory_space_private_user_serializer.rb → download_your_data_serializers/download_your_data_participatory_space_private_user_serializer.rb} +2 -2
- data/lib/decidim/{data_portability_serializers/data_portability_report_serializer.rb → download_your_data_serializers/download_your_data_report_serializer.rb} +2 -2
- data/lib/decidim/{data_portability_serializers/data_portability_user_group_serializer.rb → download_your_data_serializers/download_your_data_user_group_serializer.rb} +2 -2
- data/lib/decidim/{data_portability_serializers/data_portability_user_serializer.rb → download_your_data_serializers/download_your_data_user_serializer.rb} +3 -3
- data/lib/decidim/download_your_data_serializers.rb +23 -0
- data/lib/decidim/engine_router.rb +7 -1
- data/lib/decidim/env.rb +56 -0
- data/lib/decidim/event_recorder.rb +25 -0
- data/lib/decidim/events/base_event.rb +10 -14
- data/lib/decidim/events/simple_event.rb +12 -4
- data/lib/decidim/exporters/export_data.rb +1 -1
- data/lib/decidim/exporters/export_manifest.rb +2 -1
- data/lib/decidim/file_validator_humanizer.rb +24 -1
- data/lib/decidim/filterable_resource.rb +55 -0
- data/lib/decidim/fingerprint_calculator.rb +2 -4
- data/lib/decidim/form_builder.rb +158 -130
- data/lib/decidim/gamification/badge.rb +2 -3
- data/lib/decidim/gamification/badge_scorer.rb +1 -0
- data/lib/decidim/has_area.rb +27 -0
- data/lib/decidim/has_attachments.rb +2 -2
- data/lib/decidim/has_category.rb +36 -0
- data/lib/decidim/importers/import_manifest.rb +3 -21
- data/lib/decidim/jsonb_attributes.rb +6 -4
- data/lib/decidim/manifest_messages.rb +23 -0
- data/lib/decidim/map/autocomplete.rb +6 -4
- data/lib/decidim/map/frontend.rb +2 -2
- data/lib/decidim/map/provider/geocoding/here.rb +5 -5
- data/lib/decidim/map/provider/here.rb +3 -0
- data/lib/decidim/map/provider/osm.rb +3 -0
- data/lib/decidim/map.rb +4 -4
- data/lib/decidim/menu.rb +1 -1
- data/lib/decidim/metric_manifest.rb +2 -2
- data/lib/decidim/nicknamizable.rb +1 -1
- data/lib/decidim/notification_setting_manifest.rb +19 -0
- data/lib/decidim/organization_settings.rb +8 -7
- data/lib/decidim/participatory_space_context_manifest.rb +2 -2
- data/lib/decidim/participatory_space_manifest.rb +2 -2
- data/lib/decidim/processes_file_locally.rb +31 -0
- data/lib/decidim/query.rb +84 -0
- data/lib/decidim/record_encryptor.rb +29 -8
- data/lib/decidim/reminder_manifest.rb +75 -0
- data/lib/decidim/reminder_registry.rb +67 -0
- data/lib/decidim/resource_manifest.rb +1 -1
- data/lib/decidim/resourceable.rb +11 -0
- data/lib/decidim/scopable.rb +15 -0
- data/lib/decidim/settings_manifest.rb +4 -4
- data/lib/decidim/spring.rb +16 -0
- data/lib/decidim/translatable_attributes.rb +12 -8
- data/lib/decidim/url_option_resolver.rb +50 -0
- data/lib/decidim/view_hooks.rb +1 -1
- data/lib/decidim/view_model.rb +5 -1
- data/lib/decidim/webpacker/thread_safe_compiler.rb +30 -0
- data/lib/decidim/webpacker/webpack/custom.js +15 -3
- data/lib/decidim/webpacker/webpacker.yml +1 -1
- data/lib/decidim/webpacker.rb +2 -0
- data/lib/devise/models/decidim_validatable.rb +1 -1
- data/lib/tasks/decidim_active_storage_migration_tasks.rake +1 -3
- data/lib/tasks/{decidim_data_portability_tasks.rake → decidim_download_your_data_tasks.rake} +9 -9
- data/lib/tasks/decidim_mailers_tasks.rake +23 -0
- data/lib/tasks/decidim_metrics_tasks.rake +1 -1
- data/lib/tasks/decidim_pwa_tasks.rake +18 -0
- data/lib/tasks/decidim_reminders_tasks.rake +17 -0
- data/lib/tasks/decidim_tasks.rake +6 -1
- data/lib/tasks/decidim_webpacker_tasks.rake +1 -1
- data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +51 -0
- metadata +184 -83
- data/app/controllers/decidim/cookie_policy_controller.rb +0 -24
- data/app/helpers/decidim/cookies_helper.rb +0 -11
- data/app/packs/src/decidim/vizzs/renders.js +0 -9
- data/app/packs/src/decidim/vizzs.js +0 -1
- data/app/packs/stylesheets/decidim/modules/_cookie-bar.scss +0 -26
- data/app/services/decidim/home_activity_search.rb +0 -80
- data/app/services/decidim/participatory_space_search.rb +0 -54
- data/app/views/decidim/cookie_policy/accept.js.erb +0 -3
- data/app/views/decidim/export_mailer/data_portability_export.html.erb +0 -7
- data/lib/decidim/data_portability_serializers.rb +0 -23
- data/lib/decidim/middleware/rails_cookies.rb +0 -23
data/lib/decidim/core.rb
CHANGED
|
@@ -3,10 +3,13 @@
|
|
|
3
3
|
require "decidim/core/engine"
|
|
4
4
|
require "decidim/core/api"
|
|
5
5
|
require "decidim/core/version"
|
|
6
|
+
|
|
6
7
|
# Decidim configuration.
|
|
7
8
|
module Decidim
|
|
9
|
+
autoload :Env, "decidim/env"
|
|
8
10
|
autoload :Deprecations, "decidim/deprecations"
|
|
9
11
|
autoload :ActsAsAuthor, "decidim/acts_as_author"
|
|
12
|
+
autoload :ActsAsTree, "decidim/acts_as_tree"
|
|
10
13
|
autoload :TranslatableAttributes, "decidim/translatable_attributes"
|
|
11
14
|
autoload :TranslatableResource, "decidim/translatable_resource"
|
|
12
15
|
autoload :JsonbAttributes, "decidim/jsonb_attributes"
|
|
@@ -14,6 +17,7 @@ module Decidim
|
|
|
14
17
|
autoload :AuthorizationFormBuilder, "decidim/authorization_form_builder"
|
|
15
18
|
autoload :FilterFormBuilder, "decidim/filter_form_builder"
|
|
16
19
|
autoload :ComponentManifest, "decidim/component_manifest"
|
|
20
|
+
autoload :NotificationSettingManifest, "decidim/notification_setting_manifest"
|
|
17
21
|
autoload :ParticipatorySpaceManifest, "decidim/participatory_space_manifest"
|
|
18
22
|
autoload :ResourceManifest, "decidim/resource_manifest"
|
|
19
23
|
autoload :Resourceable, "decidim/resourceable"
|
|
@@ -43,7 +47,6 @@ module Decidim
|
|
|
43
47
|
autoload :FriendlyDates, "decidim/friendly_dates"
|
|
44
48
|
autoload :Nicknamizable, "decidim/nicknamizable"
|
|
45
49
|
autoload :HasReference, "decidim/has_reference"
|
|
46
|
-
autoload :Attributes, "decidim/attributes"
|
|
47
50
|
autoload :StatsRegistry, "decidim/stats_registry"
|
|
48
51
|
autoload :Exporters, "decidim/exporters"
|
|
49
52
|
autoload :FileZipper, "decidim/file_zipper"
|
|
@@ -51,7 +54,9 @@ module Decidim
|
|
|
51
54
|
autoload :MenuItem, "decidim/menu_item"
|
|
52
55
|
autoload :MenuRegistry, "decidim/menu_registry"
|
|
53
56
|
autoload :ManifestRegistry, "decidim/manifest_registry"
|
|
57
|
+
autoload :AssetRouter, "decidim/asset_router"
|
|
54
58
|
autoload :EngineRouter, "decidim/engine_router"
|
|
59
|
+
autoload :UrlOptionResolver, "decidim/url_option_resolver"
|
|
55
60
|
autoload :Events, "decidim/events"
|
|
56
61
|
autoload :ViewHooks, "decidim/view_hooks"
|
|
57
62
|
autoload :ContentBlockRegistry, "decidim/content_block_registry"
|
|
@@ -64,6 +69,7 @@ module Decidim
|
|
|
64
69
|
autoload :NewsletterEncryptor, "decidim/newsletter_encryptor"
|
|
65
70
|
autoload :NewsletterParticipant, "decidim/newsletter_participant"
|
|
66
71
|
autoload :Searchable, "decidim/searchable"
|
|
72
|
+
autoload :FilterableResource, "decidim/filterable_resource"
|
|
67
73
|
autoload :SearchResourceFieldsMapper, "decidim/search_resource_fields_mapper"
|
|
68
74
|
autoload :QueryExtensions, "decidim/query_extensions"
|
|
69
75
|
autoload :ParticipatorySpaceResourceable, "decidim/participatory_space_resourceable"
|
|
@@ -71,9 +77,9 @@ module Decidim
|
|
|
71
77
|
autoload :ViewModel, "decidim/view_model"
|
|
72
78
|
autoload :FingerprintCalculator, "decidim/fingerprint_calculator"
|
|
73
79
|
autoload :Fingerprintable, "decidim/fingerprintable"
|
|
74
|
-
autoload :
|
|
75
|
-
autoload :
|
|
76
|
-
autoload :
|
|
80
|
+
autoload :DownloadYourData, "decidim/download_your_data"
|
|
81
|
+
autoload :DownloadYourDataSerializers, "decidim/download_your_data_serializers"
|
|
82
|
+
autoload :DownloadYourDataExporter, "decidim/download_your_data_exporter"
|
|
77
83
|
autoload :Amendable, "decidim/amendable"
|
|
78
84
|
autoload :Gamification, "decidim/gamification"
|
|
79
85
|
autoload :Hashtag, "decidim/hashtag"
|
|
@@ -96,7 +102,17 @@ module Decidim
|
|
|
96
102
|
autoload :RecordEncryptor, "decidim/record_encryptor"
|
|
97
103
|
autoload :AttachmentAttributes, "decidim/attachment_attributes"
|
|
98
104
|
autoload :CarrierWaveMigratorService, "decidim/carrier_wave_migrator_service"
|
|
105
|
+
autoload :ReminderRegistry, "decidim/reminder_registry"
|
|
106
|
+
autoload :ReminderManifest, "decidim/reminder_manifest"
|
|
107
|
+
autoload :ManifestMessages, "decidim/manifest_messages"
|
|
99
108
|
autoload :CommonPasswords, "decidim/common_passwords"
|
|
109
|
+
autoload :HasArea, "decidim/has_area"
|
|
110
|
+
autoload :AttributeObject, "decidim/attribute_object"
|
|
111
|
+
autoload :Query, "decidim/query"
|
|
112
|
+
autoload :Command, "decidim/command"
|
|
113
|
+
autoload :EventRecorder, "decidim/event_recorder"
|
|
114
|
+
autoload :ControllerHelpers, "decidim/controller_helpers"
|
|
115
|
+
autoload :ProcessesFileLocally, "decidim/processes_file_locally"
|
|
100
116
|
|
|
101
117
|
include ActiveSupport::Configurable
|
|
102
118
|
# Loads seeds from all engines.
|
|
@@ -259,8 +275,8 @@ module Decidim
|
|
|
259
275
|
true
|
|
260
276
|
end
|
|
261
277
|
|
|
262
|
-
# Time that data
|
|
263
|
-
config_accessor :
|
|
278
|
+
# Time that download your data files are available in server
|
|
279
|
+
config_accessor :download_your_data_expiry_time do
|
|
264
280
|
7.days
|
|
265
281
|
end
|
|
266
282
|
|
|
@@ -383,7 +399,43 @@ module Decidim
|
|
|
383
399
|
# Defines the name of the cookie used to check if the user allows Decidim to
|
|
384
400
|
# set cookies.
|
|
385
401
|
config_accessor :consent_cookie_name do
|
|
386
|
-
"decidim-
|
|
402
|
+
"decidim-consent"
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
# Defines cookie categories. Note that when adding a cookie you need to
|
|
406
|
+
# add following i18n entries also (change 'foo' with the name of the cookie).
|
|
407
|
+
#
|
|
408
|
+
# layouts.decidim.cookie_consent.cookie_details.cookies.foo.service
|
|
409
|
+
# layouts.decidim.cookie_consent.cookie_details.cookies.foo.description
|
|
410
|
+
config_accessor :consent_categories do
|
|
411
|
+
[
|
|
412
|
+
{
|
|
413
|
+
slug: "essential",
|
|
414
|
+
mandatory: true,
|
|
415
|
+
cookies: [
|
|
416
|
+
{
|
|
417
|
+
type: "cookie",
|
|
418
|
+
name: "_session_id"
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
type: "cookie",
|
|
422
|
+
name: Decidim.consent_cookie_name
|
|
423
|
+
}
|
|
424
|
+
]
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
slug: "preferences",
|
|
428
|
+
mandatory: false
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
slug: "analytics",
|
|
432
|
+
mandatory: false
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
slug: "marketing",
|
|
436
|
+
mandatory: false
|
|
437
|
+
}
|
|
438
|
+
]
|
|
387
439
|
end
|
|
388
440
|
|
|
389
441
|
# Blacklisted passwords. Array may contain strings and regex entries.
|
|
@@ -391,6 +443,23 @@ module Decidim
|
|
|
391
443
|
[]
|
|
392
444
|
end
|
|
393
445
|
|
|
446
|
+
# Defines if admins are required to have stronger passwords than other users
|
|
447
|
+
config_accessor :admin_password_strong do
|
|
448
|
+
true
|
|
449
|
+
end
|
|
450
|
+
|
|
451
|
+
config_accessor :admin_password_expiration_days do
|
|
452
|
+
90
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
config_accessor :admin_password_min_length do
|
|
456
|
+
15
|
|
457
|
+
end
|
|
458
|
+
|
|
459
|
+
config_accessor :admin_password_repetition_times do
|
|
460
|
+
5
|
|
461
|
+
end
|
|
462
|
+
|
|
394
463
|
# This is an internal key that allow us to properly configure the caching key separator. This is useful for redis cache store
|
|
395
464
|
# as it creates some namespaces within the cached data.
|
|
396
465
|
# use `config.cache_key_separator = ":"` in your initializer to have namespaced data
|
|
@@ -398,6 +467,11 @@ module Decidim
|
|
|
398
467
|
"/"
|
|
399
468
|
end
|
|
400
469
|
|
|
470
|
+
# Enable/Disable the service worker
|
|
471
|
+
config_accessor :service_worker_enabled do
|
|
472
|
+
Rails.env.exclude?("development")
|
|
473
|
+
end
|
|
474
|
+
|
|
401
475
|
# Public: Registers a global engine. This method is intended to be used
|
|
402
476
|
# by component engines that also offer unscoped functionality
|
|
403
477
|
#
|
|
@@ -471,6 +545,10 @@ module Decidim
|
|
|
471
545
|
resource_registry.register(name, &block)
|
|
472
546
|
end
|
|
473
547
|
|
|
548
|
+
def self.notification_settings(name, &block)
|
|
549
|
+
notification_settings_registry.register(name, &block)
|
|
550
|
+
end
|
|
551
|
+
|
|
474
552
|
# Public: Finds all registered resource manifests via the `register_component`
|
|
475
553
|
# method.
|
|
476
554
|
#
|
|
@@ -534,11 +612,19 @@ module Decidim
|
|
|
534
612
|
@participatory_space_registry ||= ManifestRegistry.new(:participatory_spaces)
|
|
535
613
|
end
|
|
536
614
|
|
|
615
|
+
def self.reminders_registry
|
|
616
|
+
@reminders_registry ||= ReminderRegistry.new
|
|
617
|
+
end
|
|
618
|
+
|
|
537
619
|
# Public: Stores the registry of resource spaces
|
|
538
620
|
def self.resource_registry
|
|
539
621
|
@resource_registry ||= ManifestRegistry.new(:resources)
|
|
540
622
|
end
|
|
541
623
|
|
|
624
|
+
def self.notification_settings_registry
|
|
625
|
+
@notification_settings_registry ||= ManifestRegistry.new(:notification_settings)
|
|
626
|
+
end
|
|
627
|
+
|
|
542
628
|
# Public: Stores the registry for user permissions
|
|
543
629
|
def self.permissions_registry
|
|
544
630
|
@permissions_registry ||= PermissionsRegistry.new
|
|
@@ -594,13 +680,12 @@ module Decidim
|
|
|
594
680
|
# organization or a model responding to the `organization` method.
|
|
595
681
|
#
|
|
596
682
|
def self.organization_settings(model)
|
|
597
|
-
organization =
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
end
|
|
683
|
+
organization = if model.is_a?(Decidim::Organization)
|
|
684
|
+
model
|
|
685
|
+
elsif model.respond_to?(:organization) && model.organization.present?
|
|
686
|
+
model.organization
|
|
687
|
+
end
|
|
688
|
+
|
|
604
689
|
return Decidim::OrganizationSettings.defaults unless organization
|
|
605
690
|
|
|
606
691
|
Decidim::OrganizationSettings.for(organization)
|
|
@@ -625,4 +710,13 @@ module Decidim
|
|
|
625
710
|
def self.register_assets_path(path)
|
|
626
711
|
Rails.autoloaders.main.ignore(path) if Rails.configuration.autoloader == :zeitwerk
|
|
627
712
|
end
|
|
713
|
+
|
|
714
|
+
# Checks if a particular decidim gem is installed
|
|
715
|
+
# Note that defined(Decidim::Something) does not work all the times, specially when the
|
|
716
|
+
# Gemfile uses the "path" parameter to find the module.
|
|
717
|
+
# This is because the module can be defined by some files searched by Rails automatically
|
|
718
|
+
# (ie: decidim-initiatives/lib/decidim/initiatives/version.rb automatically defines Decidim::Intiatives even if not required)
|
|
719
|
+
def self.module_installed?(mod)
|
|
720
|
+
Gem.loaded_specs.has_key?("decidim-#{mod}")
|
|
721
|
+
end
|
|
628
722
|
end
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
require "active_support/concern"
|
|
4
4
|
|
|
5
5
|
module Decidim
|
|
6
|
-
# This concern contains the logic related to data
|
|
7
|
-
module
|
|
6
|
+
# This concern contains the logic related to download your data.
|
|
7
|
+
module DownloadYourData
|
|
8
8
|
extend ActiveSupport::Concern
|
|
9
9
|
|
|
10
10
|
included do
|
|
@@ -23,7 +23,7 @@ module Decidim
|
|
|
23
23
|
|
|
24
24
|
# Returns a collection of images scoped by User.
|
|
25
25
|
# Returns nil for default.
|
|
26
|
-
def self.
|
|
26
|
+
def self.download_your_data_images(_user)
|
|
27
27
|
nil
|
|
28
28
|
end
|
|
29
29
|
end
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# This class serializes a Message so can be exported to CSV
|
|
5
|
-
module
|
|
6
|
-
class
|
|
5
|
+
module DownloadYourDataSerializers
|
|
6
|
+
class DownloadYourDataConversationSerializer < Decidim::Exporters::Serializer
|
|
7
7
|
include Decidim::ResourceHelper
|
|
8
8
|
|
|
9
9
|
# Public: Initializes the serializer with a conversation.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# This class serializes a Follow so can be exported to CSV
|
|
5
|
-
module
|
|
6
|
-
class
|
|
5
|
+
module DownloadYourDataSerializers
|
|
6
|
+
class DownloadYourDataFollowSerializer < Decidim::Exporters::Serializer
|
|
7
7
|
include Decidim::ResourceHelper
|
|
8
8
|
|
|
9
9
|
# Public: Exports a hash with the serialized data for follow.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# This class serializes a Identity so can be exported to CSV
|
|
5
|
-
module
|
|
6
|
-
class
|
|
5
|
+
module DownloadYourDataSerializers
|
|
6
|
+
class DownloadYourDataIdentitySerializer < Decidim::Exporters::Serializer
|
|
7
7
|
include Decidim::ResourceHelper
|
|
8
8
|
|
|
9
9
|
# Public: Exports a hash with the serialized data for this identities.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# This class serializes a Follow so can be exported to CSV
|
|
5
|
-
module
|
|
6
|
-
class
|
|
5
|
+
module DownloadYourDataSerializers
|
|
6
|
+
class DownloadYourDataNotificationSerializer < Decidim::Exporters::Serializer
|
|
7
7
|
include Decidim::ResourceHelper
|
|
8
8
|
|
|
9
9
|
# Public: Exports a hash with the serialized data for follow.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# This class serializes a User so can be exported to CSV
|
|
5
|
-
module
|
|
6
|
-
class
|
|
5
|
+
module DownloadYourDataSerializers
|
|
6
|
+
class DownloadYourDataParticipatorySpacePrivateUserSerializer < Decidim::Exporters::Serializer
|
|
7
7
|
include Decidim::ResourceHelper
|
|
8
8
|
|
|
9
9
|
# Public: Exports a hash with the serialized data for this user.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# This class serializes a Report so can be exported to CSV
|
|
5
|
-
module
|
|
6
|
-
class
|
|
5
|
+
module DownloadYourDataSerializers
|
|
6
|
+
class DownloadYourDataReportSerializer < Decidim::Exporters::Serializer
|
|
7
7
|
include Decidim::ResourceHelper
|
|
8
8
|
|
|
9
9
|
# Public: Exports a hash with the serialized data for this conversation.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# This class serializes a User so can be exported to CSV
|
|
5
|
-
module
|
|
6
|
-
class
|
|
5
|
+
module DownloadYourDataSerializers
|
|
6
|
+
class DownloadYourDataUserGroupSerializer < Decidim::Exporters::Serializer
|
|
7
7
|
include Decidim::ResourceHelper
|
|
8
8
|
|
|
9
9
|
# Public: Exports a hash with the serialized data for this user.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# This class serializes a User so can be exported to CSV
|
|
5
|
-
module
|
|
6
|
-
class
|
|
5
|
+
module DownloadYourDataSerializers
|
|
6
|
+
class DownloadYourDataUserSerializer < Decidim::Exporters::Serializer
|
|
7
7
|
include Decidim::ResourceHelper
|
|
8
8
|
|
|
9
9
|
# Public: Exports a hash with the serialized data for this user.
|
|
@@ -19,7 +19,7 @@ module Decidim
|
|
|
19
19
|
name: resource.organization.try(:name)
|
|
20
20
|
},
|
|
21
21
|
newsletter_notifications_at: resource.newsletter_notifications_at,
|
|
22
|
-
|
|
22
|
+
notifications_sending_frequency: resource.notifications_sending_frequency,
|
|
23
23
|
admin: resource.admin,
|
|
24
24
|
personal_url: resource.personal_url,
|
|
25
25
|
about: resource.about,
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module DownloadYourDataSerializers
|
|
5
|
+
autoload :DownloadYourDataUserSerializer, "decidim/download_your_data_serializers/download_your_data_user_serializer"
|
|
6
|
+
autoload :DownloadYourDataUserGroupSerializer, "decidim/download_your_data_serializers/download_your_data_user_group_serializer"
|
|
7
|
+
autoload :DownloadYourDataConversationSerializer, "decidim/download_your_data_serializers/download_your_data_conversation_serializer"
|
|
8
|
+
autoload :DownloadYourDataReportSerializer, "decidim/download_your_data_serializers/download_your_data_report_serializer"
|
|
9
|
+
autoload :DownloadYourDataFollowSerializer, "decidim/download_your_data_serializers/download_your_data_follow_serializer"
|
|
10
|
+
autoload :DownloadYourDataNotificationSerializer, "decidim/download_your_data_serializers/download_your_data_notification_serializer"
|
|
11
|
+
autoload :DownloadYourDataIdentitySerializer, "decidim/download_your_data_serializers/download_your_data_identity_serializer"
|
|
12
|
+
autoload :DownloadYourDataParticipatorySpacePrivateUserSerializer, "decidim/download_your_data_serializers/download_your_data_participatory_space_private_user_serializer"
|
|
13
|
+
|
|
14
|
+
def self.data_entities
|
|
15
|
+
["Decidim::Follow", "Decidim::Identity",
|
|
16
|
+
"Decidim::Messaging::Conversation", "Decidim::Notification",
|
|
17
|
+
"Decidim::ParticipatorySpacePrivateUser", "Decidim::Report", "Decidim::User", "Decidim::UserGroup"] |
|
|
18
|
+
Decidim.component_manifests.map(&:data_portable_entities).flatten |
|
|
19
|
+
Decidim.participatory_space_manifests.map(&:data_portable_entities).flatten |
|
|
20
|
+
(Decidim::Comments.data_portable_entities.flatten if defined?(Decidim::Comments))
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -34,7 +34,7 @@ module Decidim
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
def default_url_options
|
|
37
|
-
@default_url_options.reverse_merge(
|
|
37
|
+
@default_url_options.reverse_merge(configured_default_url_options)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def respond_to_missing?(method_name, include_private = false)
|
|
@@ -52,5 +52,11 @@ module Decidim
|
|
|
52
52
|
def route_helper?(method_name)
|
|
53
53
|
method_name.to_s.match?(/_(url|path)$/)
|
|
54
54
|
end
|
|
55
|
+
|
|
56
|
+
def configured_default_url_options
|
|
57
|
+
@configured_default_url_options ||=
|
|
58
|
+
ActionMailer::Base.default_url_options.presence ||
|
|
59
|
+
UrlOptionResolver.new.options
|
|
60
|
+
end
|
|
55
61
|
end
|
|
56
62
|
end
|
data/lib/decidim/env.rb
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
# This class can be used to parse ENV variables to a set of predefined values
|
|
5
|
+
# For instance, "", nil, "false" or 0 will all translate into false using valid?
|
|
6
|
+
class Env
|
|
7
|
+
FALSE_VALUES = %w(0 false no).freeze
|
|
8
|
+
|
|
9
|
+
def initialize(name, default = nil)
|
|
10
|
+
@name = name
|
|
11
|
+
@value = ENV.fetch(name, nil)
|
|
12
|
+
@default = default
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def value
|
|
16
|
+
@value.presence || @default
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
delegate :to_s, :to_json, to: :value
|
|
20
|
+
|
|
21
|
+
def blank?
|
|
22
|
+
value.blank? || FALSE_VALUES.include?(value.to_s.downcase)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# rubocop:disable Rails/Present
|
|
26
|
+
def present?
|
|
27
|
+
!blank?
|
|
28
|
+
end
|
|
29
|
+
# rubocop:enable Rails/Present
|
|
30
|
+
|
|
31
|
+
def to_boolean_string
|
|
32
|
+
present?.to_s
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def to_i
|
|
36
|
+
str = blank? ? @default : value
|
|
37
|
+
str.to_s.to_i
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def to_f
|
|
41
|
+
str = blank? ? @default : value
|
|
42
|
+
str.to_s.to_f
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def default_or_present_if_exists
|
|
46
|
+
return @default unless ENV.has_key?(@name)
|
|
47
|
+
|
|
48
|
+
@value.present? && FALSE_VALUES.exclude?(@value.to_s.downcase)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def to_array(separator: ",")
|
|
52
|
+
str = blank? ? @default : value
|
|
53
|
+
str.to_s.split(separator).map(&:strip)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2016 Andy Pike - The MIT license
|
|
4
|
+
#
|
|
5
|
+
# This file has been copied from https://github.com/andypike/rectify/blob/master/lib/rectify/command.rb
|
|
6
|
+
# We have done this so we can decouple Decidim from any Virtus dependency, which is a dead project
|
|
7
|
+
# Please follow Decidim discussion to understand more https://github.com/decidim/decidim/discussions/7234
|
|
8
|
+
module Decidim
|
|
9
|
+
class EventRecorder
|
|
10
|
+
attr_reader :events
|
|
11
|
+
|
|
12
|
+
def initialize
|
|
13
|
+
@events = {}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def method_missing(method_name, *args, &_block)
|
|
17
|
+
args = args.first if args.size == 1
|
|
18
|
+
@events[method_name] = args
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def respond_to_missing?(_method_name, _include_private = false)
|
|
22
|
+
true
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -59,24 +59,20 @@ module Decidim
|
|
|
59
59
|
|
|
60
60
|
# Caches the path for the given resource.
|
|
61
61
|
def resource_path
|
|
62
|
-
@resource_path ||=
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
end
|
|
68
|
-
end
|
|
62
|
+
@resource_path ||= if resource.respond_to?(:polymorphic_resource_path)
|
|
63
|
+
resource.polymorphic_resource_path(resource_url_params)
|
|
64
|
+
else
|
|
65
|
+
resource_locator.path(resource_url_params)
|
|
66
|
+
end
|
|
69
67
|
end
|
|
70
68
|
|
|
71
69
|
# Caches the URL for the given resource.
|
|
72
70
|
def resource_url
|
|
73
|
-
@resource_url ||=
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
end
|
|
79
|
-
end
|
|
71
|
+
@resource_url ||= if resource.respond_to?(:polymorphic_resource_url)
|
|
72
|
+
resource.polymorphic_resource_url(resource_url_params)
|
|
73
|
+
else
|
|
74
|
+
resource_locator.url(resource_url_params)
|
|
75
|
+
end
|
|
80
76
|
end
|
|
81
77
|
|
|
82
78
|
def resource_text; end
|
|
@@ -13,6 +13,8 @@ module Decidim
|
|
|
13
13
|
include Decidim::ComponentPathHelper
|
|
14
14
|
include Decidim::SanitizeHelper
|
|
15
15
|
|
|
16
|
+
delegate :created_at, to: :resource
|
|
17
|
+
|
|
16
18
|
class_attribute :i18n_interpolations
|
|
17
19
|
self.i18n_interpolations = []
|
|
18
20
|
|
|
@@ -32,19 +34,25 @@ module Decidim
|
|
|
32
34
|
end
|
|
33
35
|
|
|
34
36
|
def email_subject
|
|
35
|
-
I18n.t("email_subject",
|
|
37
|
+
I18n.t("email_subject", **email_subject_i18n_options).html_safe
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def email_subject_i18n_options
|
|
41
|
+
sanitized_values = { resource_title: decidim_sanitize(resource_title) }
|
|
42
|
+
sanitized_values[:mentioned_proposal_title] = decidim_sanitize(mentioned_proposal_title) if i18n_options.has_key?(:mentioned_proposal_title)
|
|
43
|
+
i18n_options.merge(sanitized_values)
|
|
36
44
|
end
|
|
37
45
|
|
|
38
46
|
def email_intro
|
|
39
|
-
I18n.t("email_intro", i18n_options).html_safe
|
|
47
|
+
I18n.t("email_intro", **i18n_options).html_safe
|
|
40
48
|
end
|
|
41
49
|
|
|
42
50
|
def email_outro
|
|
43
|
-
I18n.t("email_outro", i18n_options).html_safe
|
|
51
|
+
I18n.t("email_outro", **i18n_options).html_safe
|
|
44
52
|
end
|
|
45
53
|
|
|
46
54
|
def notification_title
|
|
47
|
-
I18n.t("notification_title", i18n_options).html_safe
|
|
55
|
+
I18n.t("notification_title", **i18n_options).html_safe
|
|
48
56
|
end
|
|
49
57
|
|
|
50
58
|
# Public: The String to use as scope to search for the keys
|
|
@@ -27,7 +27,7 @@ module Decidim
|
|
|
27
27
|
#
|
|
28
28
|
# Returns a String with the filename of the export.
|
|
29
29
|
def filename(prefix = "export", options = {})
|
|
30
|
-
options[:extension] =
|
|
30
|
+
options[:extension] = options[:extension].nil? ? true : options[:extension]
|
|
31
31
|
result = "#{prefix}-#{I18n.l(Time.zone.today, format: :default)}-#{Time.now.seconds_since_midnight.to_i}"
|
|
32
32
|
result += ".#{extension}" if options[:extension]
|
|
33
33
|
result
|
|
@@ -10,7 +10,7 @@ module Decidim
|
|
|
10
10
|
#
|
|
11
11
|
class ExportManifest
|
|
12
12
|
include ActiveModel::Model
|
|
13
|
-
include
|
|
13
|
+
include Decidim::AttributeObject::Model
|
|
14
14
|
|
|
15
15
|
# A setting to choose if the collection exported by this manifest should
|
|
16
16
|
# be included in the open data export available for all users.
|
|
@@ -26,6 +26,7 @@ module Decidim
|
|
|
26
26
|
# manifest - The parent manifest where this export manifest belongs to.
|
|
27
27
|
#
|
|
28
28
|
def initialize(name, manifest)
|
|
29
|
+
super()
|
|
29
30
|
@name = name.to_sym
|
|
30
31
|
@manifest = manifest
|
|
31
32
|
end
|
|
@@ -12,6 +12,8 @@ module Decidim
|
|
|
12
12
|
# another object in case the PassthruValidator is in charge of the
|
|
13
13
|
# validations.
|
|
14
14
|
class FileValidatorHumanizer
|
|
15
|
+
# record - Form object (e.g. Decidim::AccountForm)
|
|
16
|
+
# attribute - Form field (e.g. :avatar)
|
|
15
17
|
def initialize(record, attribute)
|
|
16
18
|
@record = record
|
|
17
19
|
@attribute = attribute
|
|
@@ -21,7 +23,7 @@ module Decidim
|
|
|
21
23
|
end
|
|
22
24
|
|
|
23
25
|
def uploader
|
|
24
|
-
@uploader ||=
|
|
26
|
+
@uploader ||= fetch_uploader
|
|
25
27
|
end
|
|
26
28
|
|
|
27
29
|
def messages
|
|
@@ -36,6 +38,14 @@ module Decidim
|
|
|
36
38
|
)
|
|
37
39
|
end
|
|
38
40
|
|
|
41
|
+
if (file_dimensions = max_file_dimensions)
|
|
42
|
+
messages << I18n.t(
|
|
43
|
+
"max_file_dimension",
|
|
44
|
+
resolution: file_dimensions,
|
|
45
|
+
scope: "decidim.forms.file_validation"
|
|
46
|
+
)
|
|
47
|
+
end
|
|
48
|
+
|
|
39
49
|
if (extensions = extension_allowlist)
|
|
40
50
|
messages << I18n.t(
|
|
41
51
|
"allowed_file_extensions",
|
|
@@ -73,6 +83,12 @@ module Decidim
|
|
|
73
83
|
end
|
|
74
84
|
# rubocop: enable Metrics/CyclomaticComplexity
|
|
75
85
|
|
|
86
|
+
def max_file_dimensions
|
|
87
|
+
return unless uploader.respond_to?(:max_image_height_or_width)
|
|
88
|
+
|
|
89
|
+
"#{uploader.max_image_height_or_width}x#{uploader.max_image_height_or_width}"
|
|
90
|
+
end
|
|
91
|
+
|
|
76
92
|
def extension_allowlist
|
|
77
93
|
return unless uploader.respond_to?(:extension_allowlist, true)
|
|
78
94
|
|
|
@@ -85,6 +101,13 @@ module Decidim
|
|
|
85
101
|
|
|
86
102
|
attr_reader :record, :attribute, :passthru_validator
|
|
87
103
|
|
|
104
|
+
def fetch_uploader
|
|
105
|
+
return passthru_uploader if passthru_uploader.present?
|
|
106
|
+
return record.attached_uploader(attribute) if record.respond_to?(:attached_uploader) && record.attached_uploader(attribute).present?
|
|
107
|
+
|
|
108
|
+
record.send(attribute)
|
|
109
|
+
end
|
|
110
|
+
|
|
88
111
|
def passthru_record
|
|
89
112
|
return unless passthru_validator
|
|
90
113
|
|