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
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
# This cell creates the necessary elements for dynamic uploads.
|
|
5
|
+
class UploadModalCell < Decidim::ViewModel
|
|
6
|
+
include Cell::ViewModel::Partial
|
|
7
|
+
include ERB::Util
|
|
8
|
+
|
|
9
|
+
alias form model
|
|
10
|
+
|
|
11
|
+
def show
|
|
12
|
+
return unless resource_name
|
|
13
|
+
|
|
14
|
+
render
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def button_id
|
|
20
|
+
prefix = form.object_name.present? ? "#{form.object_name}_" : ""
|
|
21
|
+
|
|
22
|
+
"#{prefix.gsub(/[\[\]]/, "_").gsub(/__+/, "_")}#{attribute}_button"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def button_class
|
|
26
|
+
"button small hollow add-field add-file" if has_title?
|
|
27
|
+
|
|
28
|
+
"button small add-file"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def label
|
|
32
|
+
options[:label]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def button_label
|
|
36
|
+
return button_edit_label if attachments.count.positive?
|
|
37
|
+
|
|
38
|
+
options[:button_label]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def button_edit_label
|
|
42
|
+
options[:button_edit_label] || options[:button_label]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def max_file_size
|
|
46
|
+
options[:max_file_size]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def max_file_size_mb
|
|
50
|
+
return unless max_file_size
|
|
51
|
+
|
|
52
|
+
(((max_file_size / 1024 / 1024) * 100) / 100).round
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def resource_class
|
|
56
|
+
options[:resource_class].to_s
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def resource_name
|
|
60
|
+
options[:resource_name]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def actions_wrapper_class
|
|
64
|
+
has_title? ? "actions-wrapper titled" : "actions-wrapper"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def attribute
|
|
68
|
+
options[:attribute]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def multiple
|
|
72
|
+
options[:multiple] || false
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def optional
|
|
76
|
+
options[:optional]
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# By default Foundation adds form errors next to input, but since input is in the modal
|
|
80
|
+
# and modal is hidden by default, we need to add an additional validation field to the form.
|
|
81
|
+
# This should only be necessary when file is required by the form.
|
|
82
|
+
def input_validation_field
|
|
83
|
+
object_name = form.object.present? ? "#{form.object.model_name.param_key}[#{add_attribute}_validation]" : "#{add_attribute}_validation"
|
|
84
|
+
input = check_box_tag object_name, 1, attachments.present?, class: "hide", label: false, required: !optional
|
|
85
|
+
message = form.send(:abide_error_element, add_attribute) + form.send(:error_and_help_text, add_attribute)
|
|
86
|
+
input + message
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def explanation
|
|
90
|
+
return I18n.t("explanation", scope: options[:help_i18n_scope], attribute: attribute) if options[:help_i18n_scope].present?
|
|
91
|
+
|
|
92
|
+
I18n.t("explanation", scope: "decidim.forms.upload_help", attribute: attribute)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def add_attribute
|
|
96
|
+
return "add_#{attribute}" if form.object.respond_to? "add_#{attribute}"
|
|
97
|
+
|
|
98
|
+
attribute
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def has_title?
|
|
102
|
+
options[:titled] == true
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def with_title
|
|
106
|
+
"with-title" if has_title?
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def attachment_label
|
|
110
|
+
return I18n.t("current_image", scope: "decidim.forms") if attachments.count.positive? && file_attachment_path(attachments.first).present?
|
|
111
|
+
|
|
112
|
+
I18n.t("default_image", scope: "decidim.forms")
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def help_messages
|
|
116
|
+
Array(options[:help])
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def attachments
|
|
120
|
+
@attachments = begin
|
|
121
|
+
attachments = options[:attachments] || form.object.send(attribute)
|
|
122
|
+
attachments = Array(attachments).compact_blank
|
|
123
|
+
attachments.map { |attachment| attachment.is_a?(String) ? ActiveStorage::Blob.find_signed(attachment) : attachment }
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def id_for(attachment)
|
|
128
|
+
return attachment.id if attachment.respond_to? :id
|
|
129
|
+
|
|
130
|
+
rand(1..10_000)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def title_for(attachment)
|
|
134
|
+
return unless has_title?
|
|
135
|
+
|
|
136
|
+
translated_attribute(attachment.title)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def truncated_file_name_for(attachment, max_length = 31)
|
|
140
|
+
filename = file_name_for(attachment)
|
|
141
|
+
return filename if filename.length <= max_length
|
|
142
|
+
|
|
143
|
+
name = File.basename(filename, File.extname(filename))
|
|
144
|
+
name.truncate(max_length, omission: "...#{name.last((max_length / 2) - 3)}#{File.extname(filename)}")
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def file_name_for(attachment)
|
|
148
|
+
filename = determine_filename(attachment)
|
|
149
|
+
|
|
150
|
+
return "(#{filename})" if has_title?
|
|
151
|
+
|
|
152
|
+
filename
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def determine_filename(attachment)
|
|
156
|
+
return attachment.filename.to_s if attachment.is_a? ActiveStorage::Blob
|
|
157
|
+
return blob(attachment).filename.to_s if blob(attachment).present?
|
|
158
|
+
|
|
159
|
+
attachment.url.split("/").last
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def file_attachment_path(attachment)
|
|
163
|
+
return unless attachment
|
|
164
|
+
return Rails.application.routes.url_helpers.rails_blob_url(attachment, only_path: true) if attachment.is_a? ActiveStorage::Blob
|
|
165
|
+
|
|
166
|
+
if attachment.try(:attached?)
|
|
167
|
+
attachment_path = Rails.application.routes.url_helpers&.rails_blob_url(attachment.blob, only_path: true)
|
|
168
|
+
return attachment_path if attachment_path.present?
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
uploader_default_image_path(attribute)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def uploader_default_image_path(attribute)
|
|
175
|
+
uploader = Decidim::FileValidatorHumanizer.new(form.object, attribute).uploader
|
|
176
|
+
return if uploader.blank?
|
|
177
|
+
return unless uploader.is_a?(Decidim::ImageUploader)
|
|
178
|
+
|
|
179
|
+
uploader.try(:default_url)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def blob(attachment)
|
|
183
|
+
return attachment if attachment.is_a? ActiveStorage::Blob
|
|
184
|
+
return ActiveStorage::Blob.find_signed(attachment) if attachment.is_a? String
|
|
185
|
+
return attachment.file.blob if attachment.is_a? Decidim::Attachment
|
|
186
|
+
return attachment.blob if attachment.respond_to? :blob
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def direct_upload_url
|
|
190
|
+
Rails.application.class.routes.url_helpers.rails_direct_uploads_path
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def form_object_class
|
|
194
|
+
form.object.class.to_s
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def modal_id
|
|
198
|
+
@modal_id ||= "upload_#{SecureRandom.uuid}"
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def current_organization
|
|
202
|
+
controller.current_organization
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<%= f.hidden_field :recipient_id, id: nil, name: "conversation[recipient_id][]", value: recipient.id %>
|
|
10
10
|
<% end %>
|
|
11
11
|
|
|
12
|
-
<%= f.text_area :body, label: false, rows: 4, required: true, placeholder: t("decidim.user_conversations.reply.placeholder") %>
|
|
12
|
+
<%= f.text_area :body, label: false, rows: 4, required: true, placeholder: t("decidim.user_conversations.reply.placeholder"), data: { input_emoji: true } %>
|
|
13
13
|
|
|
14
14
|
<%= f.submit t("decidim.user_conversations.reply.send"), class: "button secondary light pull-right", data: { disable: true } %>
|
|
15
15
|
<% end %>
|
|
@@ -6,18 +6,20 @@
|
|
|
6
6
|
</div>
|
|
7
7
|
</div>
|
|
8
8
|
<div class="row">
|
|
9
|
-
<div class="row columns
|
|
9
|
+
<div class="row columns multiple-mentions" data-name="recipient_id[]" data-multiple="true">
|
|
10
10
|
<label for="add_conversation_users"><%= t "decidim.user_conversations.index.add_max_users" %></label>
|
|
11
11
|
<input id="add_conversation_users" type="text"
|
|
12
|
-
|
|
12
|
+
spellcheck="false"
|
|
13
|
+
autocomplete="off"
|
|
13
14
|
placeholder="<%= t("decidim.user_conversations.index.add_users_placeholder") %>"
|
|
14
15
|
data-noresults="<%= t("decidim.user_conversations.index.no_results") %>"
|
|
15
16
|
contenteditable="true"
|
|
16
17
|
data-direct-messages-disabled="<%= t("decidim.user_conversations.index.participant_with_disabled_message_reception") %>"
|
|
18
|
+
data-selected="multiple-mentions-selected"
|
|
17
19
|
aria-expanded="false">
|
|
18
20
|
</div>
|
|
19
21
|
<div class="columns large-12">
|
|
20
|
-
<
|
|
22
|
+
<ul class="multiple-mentions-selected"></ul>
|
|
21
23
|
</div>
|
|
22
24
|
</div>
|
|
23
25
|
</div>
|
|
@@ -49,19 +49,8 @@ module Decidim
|
|
|
49
49
|
i18n("version_created_at")
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
def i18n(string, params
|
|
53
|
-
t(
|
|
54
|
-
string,
|
|
55
|
-
params.merge(
|
|
56
|
-
scope: i18n_scope,
|
|
57
|
-
default: t(
|
|
58
|
-
string,
|
|
59
|
-
params.merge(
|
|
60
|
-
scope: default_i18n_scope
|
|
61
|
-
)
|
|
62
|
-
)
|
|
63
|
-
)
|
|
64
|
-
)
|
|
52
|
+
def i18n(string, **params)
|
|
53
|
+
t(string, **params, scope: i18n_scope, default: t(string, **params, scope: default_i18n_scope))
|
|
65
54
|
end
|
|
66
55
|
|
|
67
56
|
def i18n_scope
|
|
@@ -32,19 +32,8 @@ module Decidim
|
|
|
32
32
|
i18n("back_to_resource")
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
def i18n(string, params
|
|
36
|
-
t(
|
|
37
|
-
string,
|
|
38
|
-
params.merge(
|
|
39
|
-
scope: i18n_scope,
|
|
40
|
-
default: t(
|
|
41
|
-
string,
|
|
42
|
-
params.merge(
|
|
43
|
-
scope: default_i18n_scope
|
|
44
|
-
)
|
|
45
|
-
)
|
|
46
|
-
)
|
|
47
|
-
)
|
|
35
|
+
def i18n(string, **params)
|
|
36
|
+
t(string, **params, scope: i18n_scope, default: t(string, **params, scope: default_i18n_scope))
|
|
48
37
|
end
|
|
49
38
|
|
|
50
39
|
def i18n_scope
|
|
@@ -25,19 +25,8 @@ module Decidim
|
|
|
25
25
|
i18n("version_index", index: index)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
def i18n(string, params
|
|
29
|
-
t(
|
|
30
|
-
string,
|
|
31
|
-
params.merge(
|
|
32
|
-
scope: i18n_scope,
|
|
33
|
-
default: t(
|
|
34
|
-
string,
|
|
35
|
-
params.merge(
|
|
36
|
-
scope: default_i18n_scope
|
|
37
|
-
)
|
|
38
|
-
)
|
|
39
|
-
)
|
|
40
|
-
)
|
|
28
|
+
def i18n(string, **params)
|
|
29
|
+
t(string, **params, scope: i18n_scope, default: t(string, **params, scope: default_i18n_scope))
|
|
41
30
|
end
|
|
42
31
|
|
|
43
32
|
def i18n_scope
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# A command with all the business logic to accept an invitation to belong to a
|
|
5
5
|
# group.
|
|
6
|
-
class AcceptGroupInvitation <
|
|
6
|
+
class AcceptGroupInvitation < Decidim::Command
|
|
7
7
|
# Public: Initializes the command.
|
|
8
8
|
#
|
|
9
9
|
# user_group - the UserGroup where the user has been invited
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# A command with all the business logic to accept a join request to a user
|
|
5
5
|
# group.
|
|
6
|
-
class AcceptUserGroupJoinRequest <
|
|
6
|
+
class AcceptUserGroupJoinRequest < Decidim::Command
|
|
7
7
|
# Public: Initializes the command.
|
|
8
8
|
#
|
|
9
9
|
# membership - the UserGroupMembership to be accepted.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Decidim
|
|
4
4
|
module Amendable
|
|
5
5
|
# A command with all the business logic when a user starts amending a resource.
|
|
6
|
-
class CreateDraft <
|
|
6
|
+
class CreateDraft < Decidim::Command
|
|
7
7
|
# Public: Initializes the command.
|
|
8
8
|
#
|
|
9
9
|
# form - A form object with the params.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Decidim
|
|
4
4
|
module Amendable
|
|
5
5
|
# A command with all the business logic when a user starts amending a resource.
|
|
6
|
-
class DestroyDraft <
|
|
6
|
+
class DestroyDraft < Decidim::Command
|
|
7
7
|
# Public: Initializes the command.
|
|
8
8
|
#
|
|
9
9
|
# amendment - The amendment to destroy.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Decidim
|
|
4
4
|
module Amendable
|
|
5
5
|
# A command with all the business logic when a user promotes a rejected emendation.
|
|
6
|
-
class Promote <
|
|
6
|
+
class Promote < Decidim::Command
|
|
7
7
|
# Public: Initializes the command.
|
|
8
8
|
#
|
|
9
9
|
# emendation - The emendation to promote.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Decidim
|
|
4
4
|
module Amendable
|
|
5
5
|
# A command with all the business logic when a user publishes an amendment draft.
|
|
6
|
-
class PublishDraft <
|
|
6
|
+
class PublishDraft < Decidim::Command
|
|
7
7
|
# Public: Initializes the command.
|
|
8
8
|
#
|
|
9
9
|
# form - A form object with the params.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Decidim
|
|
4
4
|
module Amendable
|
|
5
5
|
# A command with all the business logic when a user updates and amendment draft.
|
|
6
|
-
class UpdateDraft <
|
|
6
|
+
class UpdateDraft < Decidim::Command
|
|
7
7
|
# Public: Initializes the command.
|
|
8
8
|
#
|
|
9
9
|
# form - A form object with the params.
|
|
@@ -18,7 +18,7 @@ module Decidim
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def delete_attachment(attachment)
|
|
21
|
-
Attachment.find(attachment.id).delete if attachment.id == proposal.documents.first.id
|
|
21
|
+
Attachment.find(attachment.id).delete if attachment.id.to_i == proposal.documents.first.id
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def attachment_invalid?
|
|
@@ -36,7 +36,8 @@ module Decidim
|
|
|
36
36
|
!@form.attachment.file.is_a?(Decidim::ApplicationUploader)
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
def create_attachment
|
|
39
|
+
def create_attachment(weight: 0)
|
|
40
|
+
attachment.weight = weight
|
|
40
41
|
attachment.attached_to = @attached_to
|
|
41
42
|
attachment.save!
|
|
42
43
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# A command with all the business logic for when a user starts following a resource.
|
|
5
|
-
class CreateFollow <
|
|
5
|
+
class CreateFollow < Decidim::Command
|
|
6
6
|
# Public: Initializes the command.
|
|
7
7
|
#
|
|
8
8
|
# form - A form object with the params.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# A command with all the business logic to create a user from omniauth
|
|
5
|
-
class CreateOmniauthRegistration <
|
|
5
|
+
class CreateOmniauthRegistration < Decidim::Command
|
|
6
6
|
# Public: Initializes the command.
|
|
7
7
|
#
|
|
8
8
|
# form - A form object with the params.
|
|
@@ -63,13 +63,12 @@ module Decidim
|
|
|
63
63
|
@user.name = form.name
|
|
64
64
|
@user.nickname = form.normalized_nickname
|
|
65
65
|
@user.newsletter_notifications_at = nil
|
|
66
|
-
@user.email_on_notification = true
|
|
67
66
|
@user.password = generated_password
|
|
68
67
|
@user.password_confirmation = generated_password
|
|
69
68
|
if form.avatar_url.present?
|
|
70
69
|
url = URI.parse(form.avatar_url)
|
|
71
70
|
filename = File.basename(url.path)
|
|
72
|
-
file =
|
|
71
|
+
file = url.open
|
|
73
72
|
@user.avatar.attach(io: file, filename: filename)
|
|
74
73
|
end
|
|
75
74
|
@user.skip_confirmation! if verified_email
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# A command with all the business logic to create a user through the sign up form.
|
|
5
|
-
class CreateRegistration <
|
|
5
|
+
class CreateRegistration < Decidim::Command
|
|
6
6
|
# Public: Initializes the command.
|
|
7
7
|
#
|
|
8
8
|
# form - A form object with the params.
|
|
@@ -44,7 +44,6 @@ module Decidim
|
|
|
44
44
|
organization: form.current_organization,
|
|
45
45
|
tos_agreement: form.tos_agreement,
|
|
46
46
|
newsletter_notifications_at: form.newsletter_at,
|
|
47
|
-
email_on_notification: true,
|
|
48
47
|
accepted_tos_version: form.current_organization.tos_version,
|
|
49
48
|
locale: form.current_locale
|
|
50
49
|
)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# A command with all the business logic to create a user group.
|
|
5
|
-
class CreateUserGroup <
|
|
5
|
+
class CreateUserGroup < Decidim::Command
|
|
6
6
|
# Public: Initializes the command.
|
|
7
7
|
#
|
|
8
8
|
# form - A form object with the params.
|
|
@@ -63,7 +63,7 @@ module Decidim
|
|
|
63
63
|
affected_users: Decidim::User.org_admins_except_me(form.current_user)
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
Decidim::EventsManager.publish(data)
|
|
66
|
+
Decidim::EventsManager.publish(**data)
|
|
67
67
|
end
|
|
68
68
|
end
|
|
69
69
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# A command with all the business logic when a user creates a report.
|
|
5
|
-
class CreateUserReport <
|
|
5
|
+
class CreateUserReport < Decidim::Command
|
|
6
6
|
# Public: Initializes the command.
|
|
7
7
|
#
|
|
8
8
|
# form - A form object with the params.
|
|
@@ -55,8 +55,10 @@ module Decidim
|
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
def send_notification_to_admins!
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
@current_user.organization.admins.each do |admin|
|
|
59
|
+
next unless admin.email_on_moderations
|
|
60
|
+
|
|
61
|
+
Decidim::UserReportJob.perform_later(admin, report)
|
|
60
62
|
end
|
|
61
63
|
end
|
|
62
64
|
|
|
@@ -4,7 +4,7 @@ module Decidim
|
|
|
4
4
|
# A command with all the business logic to demote an admin. This means
|
|
5
5
|
# removing their admin righta dn converting them to a basic member. It's the
|
|
6
6
|
# coutnerpart of `PromoteMembership`.
|
|
7
|
-
class DemoteMembership <
|
|
7
|
+
class DemoteMembership < Decidim::Command
|
|
8
8
|
# Public: Initializes the command.
|
|
9
9
|
#
|
|
10
10
|
# membership - the UserGroupMembership to be demoted.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Decidim
|
|
4
4
|
# A command with all the business logic related with a user endorsing a resource.
|
|
5
5
|
# This is a user creates and endorsement.
|
|
6
|
-
class EndorseResource <
|
|
6
|
+
class EndorseResource < Decidim::Command
|
|
7
7
|
# Public: Initializes the command.
|
|
8
8
|
#
|
|
9
9
|
# resource - An instance of Decidim::Endorsable.
|
|
@@ -8,22 +8,27 @@ module Decidim
|
|
|
8
8
|
|
|
9
9
|
def build_gallery(attached_to = nil)
|
|
10
10
|
@gallery = []
|
|
11
|
-
@form.add_photos.each do |photo|
|
|
12
|
-
|
|
11
|
+
@form.add_photos.compact_blank.each do |photo|
|
|
12
|
+
if photo.is_a?(Hash) && photo.has_key?(:id)
|
|
13
|
+
update_attachment_title_for(photo)
|
|
14
|
+
next
|
|
15
|
+
end
|
|
13
16
|
|
|
14
17
|
@gallery << Attachment.new(
|
|
15
|
-
title:
|
|
18
|
+
title: photos_title(photo),
|
|
16
19
|
attached_to: attached_to || gallery_attached_to,
|
|
17
|
-
file: photo, # Define attached_to before this
|
|
18
|
-
content_type: photo
|
|
20
|
+
file: photos_signed_id(photo), # Define attached_to before this
|
|
21
|
+
content_type: photos_content_type(photo)
|
|
19
22
|
)
|
|
20
23
|
end
|
|
21
24
|
end
|
|
22
25
|
|
|
23
|
-
def
|
|
24
|
-
|
|
26
|
+
def update_attachment_title_for(photo)
|
|
27
|
+
Decidim::Attachment.find(photo[:id]).update(title: title_for(photo))
|
|
28
|
+
end
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
def image?(signed_id)
|
|
31
|
+
blob(signed_id).content_type.start_with? "image"
|
|
27
32
|
end
|
|
28
33
|
|
|
29
34
|
def gallery_invalid?
|
|
@@ -36,17 +41,27 @@ module Decidim
|
|
|
36
41
|
false
|
|
37
42
|
end
|
|
38
43
|
|
|
39
|
-
def create_gallery
|
|
44
|
+
def create_gallery(first_weight: 0)
|
|
45
|
+
weight = first_weight
|
|
46
|
+
# Add the weights first to the old photos
|
|
47
|
+
@form.photos.each do |photo|
|
|
48
|
+
photo.update!(weight: weight)
|
|
49
|
+
weight += 1
|
|
50
|
+
end
|
|
40
51
|
@gallery.map! do |photo|
|
|
52
|
+
photo.weight = weight
|
|
41
53
|
photo.attached_to = gallery_attached_to
|
|
42
54
|
photo.save!
|
|
55
|
+
weight += 1
|
|
43
56
|
@form.photos << photo
|
|
44
57
|
end
|
|
45
58
|
end
|
|
46
59
|
|
|
47
60
|
def photo_cleanup!
|
|
48
61
|
gallery_attached_to.photos.each do |photo|
|
|
49
|
-
|
|
62
|
+
next unless @form.photos.map(&:id).exclude?(photo.id)
|
|
63
|
+
|
|
64
|
+
photo.destroy! if (@form.respond_to?(:documents) && @form.documents.map(&:id).exclude?(photo.id)) || !@form.respond_to?(:documents)
|
|
50
65
|
end
|
|
51
66
|
# manually reset cached photos
|
|
52
67
|
gallery_attached_to.reload
|
|
@@ -68,5 +83,25 @@ module Decidim
|
|
|
68
83
|
|
|
69
84
|
form.current_component.organization if form.respond_to?(:current_component)
|
|
70
85
|
end
|
|
86
|
+
|
|
87
|
+
def photos_signed_id(photo)
|
|
88
|
+
return photo[:file] if photo.is_a?(Hash)
|
|
89
|
+
|
|
90
|
+
photo
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def photos_title(photo)
|
|
94
|
+
return { I18n.locale => photo[:title] } if photo.is_a?(Hash) && photo.has_key?(:title)
|
|
95
|
+
|
|
96
|
+
{ I18n.locale => "" }
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def photos_content_type(photo)
|
|
100
|
+
blob(photos_signed_id(photo)).content_type
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def blob(signed_id)
|
|
104
|
+
ActiveStorage::Blob.find_signed(signed_id)
|
|
105
|
+
end
|
|
71
106
|
end
|
|
72
107
|
end
|