decidim-core 0.29.2 → 0.30.0.rc2
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/app/cells/decidim/amendable/amend_button_card/show.erb +6 -4
- data/app/cells/decidim/amendable/amend_button_card_cell.rb +8 -0
- data/app/cells/decidim/amendable/amendments/show.erb +1 -1
- data/app/cells/decidim/amendable/promote_button_card/show.erb +2 -0
- data/app/cells/decidim/author_cell.rb +1 -1
- data/app/cells/decidim/card_l/extra_data.erb +1 -0
- data/app/cells/decidim/card_metadata_cell.rb +9 -16
- data/app/cells/decidim/comments_button_cell.rb +14 -2
- data/app/cells/decidim/content_blocks/highlighted_elements_cell.rb +2 -0
- data/app/cells/decidim/content_blocks/highlighted_elements_with_cell_for_list_cell.rb +1 -1
- data/app/cells/decidim/endorsement_block/show.erb +0 -1
- data/app/cells/decidim/endorsement_block_cell.rb +6 -0
- data/app/cells/decidim/endorsement_buttons/button_content.erb +1 -1
- data/app/cells/decidim/endorsement_buttons/select_identity_button.erb +1 -1
- data/app/cells/decidim/endorsement_buttons/show.erb +7 -7
- data/app/cells/decidim/endorsement_buttons/verification_modal.erb +4 -2
- data/app/cells/decidim/endorsers_list/empty.erb +3 -0
- data/app/cells/decidim/endorsers_list/full.erb +17 -5
- data/app/cells/decidim/endorsers_list/show.erb +19 -10
- data/app/cells/decidim/endorsers_list_cell.rb +19 -6
- data/app/cells/decidim/follow_button/show.erb +1 -2
- data/app/cells/decidim/follow_button_cell.rb +5 -0
- data/app/cells/decidim/map/show.erb +3 -0
- data/app/cells/decidim/map/template.erb +14 -0
- data/app/cells/decidim/map_cell.rb +39 -0
- data/app/cells/decidim/notification_actions/buttons_cell.rb +1 -1
- data/app/cells/decidim/onboarding_action_message/show.erb +15 -0
- data/app/cells/decidim/onboarding_action_message_cell.rb +81 -0
- data/app/cells/decidim/participatory_space_private_user/show.erb +23 -0
- data/app/cells/decidim/participatory_space_private_user_cell.rb +21 -0
- data/app/cells/decidim/progress_bar/show.erb +2 -2
- data/app/cells/decidim/report_button_cell.rb +1 -0
- data/app/cells/decidim/resource_history/show.erb +20 -0
- data/app/cells/decidim/resource_history_cell.rb +66 -0
- data/app/cells/decidim/share_button_cell.rb +0 -4
- data/app/cells/decidim/share_widget/modal.erb +26 -0
- data/app/cells/decidim/share_widget/show.erb +2 -0
- data/app/cells/decidim/share_widget_cell.rb +20 -0
- data/app/cells/decidim/tags/show.erb +7 -4
- data/app/cells/decidim/tags_cell.rb +11 -72
- data/app/commands/decidim/amendable/create_draft.rb +2 -2
- data/app/commands/decidim/create_ephemeral_user.rb +52 -0
- data/app/commands/decidim/create_omniauth_registration.rb +13 -3
- data/app/commands/decidim/create_report.rb +1 -5
- data/app/commands/decidim/create_user_group.rb +6 -2
- data/app/commands/decidim/destroy_ephemeral_user.rb +47 -0
- data/app/commands/decidim/update_account.rb +11 -3
- data/app/commands/decidim/update_notifications_settings.rb +1 -0
- data/app/commands/decidim/update_resources_taxonomies.rb +67 -0
- data/app/commands/decidim/update_user_group.rb +7 -1
- data/app/constraints/decidim/current_component.rb +1 -1
- data/app/controllers/concerns/decidim/ajax_permission_handler.rb +21 -0
- data/app/controllers/concerns/decidim/devise_authentication_methods.rb +3 -6
- data/app/controllers/concerns/decidim/devise_controllers.rb +2 -0
- data/app/controllers/concerns/decidim/disable_redirection_to_external_host.rb +1 -1
- data/app/controllers/concerns/decidim/ephemeral_session_checker.rb +87 -0
- data/app/controllers/concerns/decidim/filter_resource.rb +4 -2
- data/app/controllers/concerns/decidim/has_members_page.rb +25 -0
- data/app/controllers/concerns/decidim/headers/browser_feature_permissions.rb +50 -0
- data/app/controllers/concerns/decidim/locale_switcher.rb +2 -2
- data/app/controllers/concerns/decidim/needs_password_change.rb +0 -1
- data/app/controllers/concerns/decidim/needs_permission.rb +2 -1
- data/app/controllers/concerns/decidim/needs_tos_accepted.rb +4 -5
- data/app/controllers/concerns/decidim/onboarding_action_methods.rb +52 -0
- data/app/controllers/decidim/application_controller.rb +10 -0
- data/app/controllers/decidim/authorization_modals_controller.rb +8 -2
- data/app/controllers/decidim/components/base_controller.rb +3 -7
- data/app/controllers/decidim/devise/confirmations_controller.rb +4 -0
- data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +8 -1
- data/app/controllers/decidim/devise/registrations_controller.rb +1 -1
- data/app/controllers/decidim/devise/sessions_controller.rb +2 -0
- data/app/controllers/decidim/download_your_data_controller.rb +33 -2
- data/app/controllers/decidim/editor_images_controller.rb +1 -11
- data/app/controllers/decidim/follows_controller.rb +1 -1
- data/app/controllers/decidim/geolocation_controller.rb +19 -0
- data/app/controllers/decidim/homepage_controller.rb +0 -1
- data/app/controllers/decidim/open_data_controller.rb +33 -8
- data/app/controllers/decidim/user_conversations_controller.rb +1 -11
- data/app/events/decidim/soft_delete_resource_event.rb +15 -0
- data/app/forms/decidim/amendable/form.rb +4 -2
- data/app/forms/decidim/ephemeral_user_form.rb +22 -0
- data/app/forms/decidim/notifications_settings_form.rb +1 -0
- data/app/forms/decidim/omniauth_registration_form.rb +14 -1
- data/app/helpers/concerns/decidim/flash_helper_extensions.rb +17 -2
- data/app/helpers/decidim/action_authorization_helper.rb +75 -14
- data/app/helpers/decidim/amendments_helper.rb +0 -9
- data/app/helpers/decidim/application_helper.rb +6 -2
- data/app/helpers/decidim/breadcrumb_helper.rb +6 -0
- data/app/helpers/decidim/cache_helper.rb +1 -1
- data/app/helpers/decidim/check_boxes_tree_helper.rb +25 -53
- data/app/helpers/decidim/decidim_form_helper.rb +0 -44
- data/app/helpers/decidim/endorsable_helper.rb +0 -10
- data/app/helpers/decidim/layout_helper.rb +6 -0
- data/app/helpers/decidim/messaging/conversation_helper.rb +2 -3
- data/app/helpers/decidim/meta_tags_helper.rb +32 -23
- data/app/helpers/decidim/modal_helper.rb +23 -0
- data/app/helpers/decidim/omniauth_helper.rb +5 -5
- data/app/helpers/decidim/onboarding_action_helper.rb +13 -0
- data/app/helpers/decidim/orders_helper.rb +2 -1
- data/app/helpers/decidim/participatory_space_helpers.rb +1 -1
- data/app/helpers/decidim/passwords_helper.rb +2 -2
- data/app/helpers/decidim/taxonomies_helper.rb +40 -0
- data/app/jobs/decidim/download_your_data_export_job.rb +2 -19
- data/app/jobs/decidim/event_publisher_job.rb +18 -9
- data/app/jobs/decidim/export_job.rb +5 -1
- data/app/jobs/decidim/export_participatory_space_job.rb +4 -1
- data/app/jobs/decidim/hide_child_resources_job.rb +24 -0
- data/app/jobs/decidim/open_data_job.rb +4 -4
- data/app/mailers/decidim/export_mailer.rb +7 -12
- data/app/models/decidim/action_log.rb +11 -0
- data/app/models/decidim/category.rb +4 -0
- data/app/models/decidim/component.rb +25 -3
- data/app/models/decidim/metric.rb +2 -1
- data/app/models/decidim/moderation.rb +16 -0
- data/app/models/decidim/newsletter.rb +12 -8
- data/app/models/decidim/organization.rb +7 -3
- data/app/models/decidim/participatory_space_private_user.rb +20 -0
- data/app/models/decidim/private_export.rb +24 -0
- data/app/models/decidim/push_notification_message.rb +1 -1
- data/app/models/decidim/report.rb +1 -1
- data/app/models/decidim/scope.rb +4 -0
- data/app/models/decidim/share_token.rb +36 -10
- data/app/models/decidim/taxonomization.rb +23 -0
- data/app/models/decidim/taxonomy.rb +139 -0
- data/app/models/decidim/taxonomy_filter.rb +130 -0
- data/app/models/decidim/taxonomy_filter_item.rb +33 -0
- data/app/models/decidim/user.rb +9 -23
- data/app/models/decidim/user_base_entity.rb +12 -0
- data/app/models/decidim/user_moderation.rb +9 -0
- data/app/models/decidim/user_report.rb +4 -0
- data/app/packs/entrypoints/decidim_core.js +1 -0
- data/app/packs/entrypoints/decidim_geocoding.js +2 -0
- data/app/packs/images/decidim/brands/facebook.svg +10 -0
- data/app/packs/images/decidim/brands/google.svg +7 -1
- data/app/packs/images/decidim/brands/twitter-x.svg +3 -0
- data/app/packs/src/decidim/check_boxes_tree.js +0 -1
- data/app/packs/src/decidim/clipboard.js +18 -9
- data/app/packs/src/decidim/confirm.js +79 -59
- data/app/packs/src/decidim/decidim_application.js +1 -0
- data/app/packs/src/decidim/form_remote.js +1 -1
- data/app/packs/src/decidim/geocoding/reverse_geocoding.js +60 -0
- data/app/packs/src/decidim/impersonation.js +1 -1
- data/app/packs/src/decidim/index.js +11 -1
- data/app/packs/src/decidim/map/provider/here.js +1 -1
- data/app/packs/src/decidim/onboarding_pending_action.js +24 -0
- data/app/packs/src/decidim/session_timeouter.js +1 -1
- data/app/packs/src/decidim/sticky_footer.js +29 -0
- data/app/packs/src/decidim/sticky_header.js +6 -31
- data/app/packs/src/decidim/user_registrations.js +13 -0
- data/app/packs/src/decidim/utilities/dom.js +148 -0
- data/app/packs/stylesheets/decidim/_accordion.scss +30 -0
- data/app/packs/stylesheets/decidim/_buttons.scss +19 -0
- data/app/packs/stylesheets/decidim/_dropdown.scss +1 -1
- data/app/packs/stylesheets/decidim/_endorsers_list.scss +26 -20
- data/app/packs/stylesheets/decidim/_forms.scss +2 -2
- data/app/packs/stylesheets/decidim/_hashtags.scss +5 -0
- data/app/packs/stylesheets/decidim/_header.scss +5 -3
- data/app/packs/stylesheets/decidim/_layout.scss +32 -2
- data/app/packs/stylesheets/decidim/_login.scss +53 -6
- data/app/packs/stylesheets/decidim/_modal.scss +42 -0
- data/app/packs/stylesheets/decidim/_modal_tos_refuse.scss +4 -0
- data/app/packs/stylesheets/decidim/_participatory_spaces.scss +46 -0
- data/app/packs/stylesheets/decidim/_profile.scss +1 -1
- data/app/packs/stylesheets/decidim/_success_image.scss +64 -0
- data/app/packs/stylesheets/decidim/_tribute.scss +36 -0
- data/app/packs/stylesheets/decidim/application.scss +2 -0
- data/app/packs/stylesheets/decidim/geocoding_addons.scss +5 -0
- data/app/packs/stylesheets/decidim/map.scss +7 -10
- data/app/packs/stylesheets/decidim/resource_history.scss +31 -0
- data/app/permissions/decidim/permissions.rb +8 -2
- data/app/presenters/decidim/admin_log/base_user_presenter.rb +67 -0
- data/app/presenters/decidim/admin_log/component_presenter.rb +32 -3
- data/app/presenters/decidim/admin_log/moderation_presenter.rb +30 -3
- data/app/presenters/decidim/admin_log/share_token_presenter.rb +39 -0
- data/app/presenters/decidim/admin_log/taxonomy_filter_presenter.rb +57 -0
- data/app/presenters/decidim/admin_log/taxonomy_presenter.rb +48 -0
- data/app/presenters/decidim/admin_log/user_group_presenter.rb +6 -6
- data/app/presenters/decidim/admin_log/user_presenter.rb +4 -18
- data/app/presenters/decidim/log/value_types/date_presenter.rb +1 -0
- data/app/presenters/decidim/log/value_types/taxonomy_presenter.rb +29 -0
- data/app/presenters/decidim/participatory_space_private_user_presenter.rb +50 -0
- data/app/presenters/decidim/taxonomy_filter_presenter.rb +19 -0
- data/app/presenters/decidim/taxonomy_presenter.rb +14 -0
- data/app/queries/decidim/metrics/blocked_users_metric_manage.rb +2 -2
- data/app/queries/decidim/metrics/users_metric_manage.rb +2 -2
- data/app/queries/decidim/public_activities.rb +1 -12
- data/app/queries/decidim/stats_users_count.rb +2 -2
- data/app/resolvers/decidim/meta_image_url_resolver.rb +128 -0
- data/app/serializers/decidim/exporters/open_data_blocked_user_serializer.rb +25 -0
- data/app/serializers/decidim/exporters/open_data_metric_serializer.rb +22 -0
- data/app/serializers/decidim/exporters/open_data_moderation_serializer.rb +30 -0
- data/app/serializers/decidim/exporters/open_data_taxonomy_serializer.rb +30 -0
- data/app/serializers/decidim/exporters/open_data_user_group_serializer.rb +38 -0
- data/app/serializers/decidim/exporters/open_data_user_serializer.rb +39 -0
- data/app/serializers/decidim/exporters/participatory_space_serializer.rb +104 -0
- data/app/serializers/decidim/exporters/serializer.rb +25 -0
- data/app/serializers/decidim/schema_org_breadcrumb_list_serializer.rb +52 -0
- data/app/services/decidim/action_authorizer.rb +32 -3
- data/app/services/decidim/base_diff_renderer.rb +1 -1
- data/app/services/decidim/download_your_data_exporter.rb +58 -24
- data/app/services/decidim/onboarding_manager.rb +272 -0
- data/app/services/decidim/open_data_exporter.rb +139 -13
- data/app/services/decidim/traceability.rb +13 -0
- data/app/uploaders/decidim/application_uploader.rb +1 -1
- data/app/validators/etiquette_validator.rb +9 -2
- data/app/validators/passthru_validator.rb +1 -1
- data/app/validators/translated_etiquette_validator.rb +32 -0
- data/app/views/decidim/account/_password_fields.html.erb +2 -2
- data/app/views/decidim/application/_accordion_section.html.erb +14 -0
- data/app/views/decidim/application/_collection.html.erb +30 -18
- data/app/views/decidim/devise/omniauth_registrations/new.html.erb +5 -1
- data/app/views/decidim/devise/omniauth_registrations/new_tos_fields.html.erb +29 -0
- data/app/views/decidim/devise/registrations/new.html.erb +10 -22
- data/app/views/decidim/devise/sessions/new.html.erb +24 -29
- data/app/views/decidim/devise/shared/_omniauth_buttons.html.erb +2 -4
- data/app/views/decidim/devise/shared/_tos_fields.html.erb +16 -0
- data/app/views/decidim/download_your_data/_export.html.erb +15 -0
- data/app/views/decidim/download_your_data/show.html.erb +51 -5
- data/app/views/decidim/endorsements/update_buttons_and_counters.js.erb +16 -19
- data/app/views/decidim/export_mailer/download_your_data_export.html.erb +2 -2
- data/app/views/decidim/export_mailer/export.html.erb +5 -1
- data/app/views/decidim/notifications_settings/show.html.erb +22 -0
- data/app/views/decidim/open_data/_how_to_open_accordion_section.html.erb +15 -0
- data/app/views/decidim/open_data/index.html.erb +108 -0
- data/app/views/decidim/pages/show.html.erb +2 -1
- data/app/views/decidim/participatory_space_private_users/_participatory_space_private_user.html.erb +1 -0
- data/app/views/decidim/shared/_login_modal.html.erb +26 -20
- data/app/views/decidim/shared/_orders.html.erb +2 -2
- data/app/views/decidim/shared/_resource_actions.html.erb +21 -0
- data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -2
- data/app/views/decidim/shared/filters/_collection.html.erb +1 -1
- data/app/views/decidim/shared/filters/_dropdown_label.html.erb +7 -4
- data/app/views/layouts/decidim/_application.html.erb +0 -1
- data/app/views/layouts/decidim/_js_configuration.html.erb +1 -0
- data/app/views/layouts/decidim/_logo.html.erb +1 -1
- data/app/views/layouts/decidim/_logo_mobile.html.erb +1 -1
- data/app/views/layouts/decidim/_meta_tags_config.html.erb +6 -11
- data/app/views/layouts/decidim/_schema_org_breadcrumb_list.html.erb +3 -0
- data/app/views/layouts/decidim/_wrapper.html.erb +15 -9
- data/app/views/layouts/decidim/footer/_main_links.html.erb +1 -1
- data/app/views/layouts/decidim/header/_close_ephemeral_session.html.erb +25 -0
- data/app/views/layouts/decidim/header/_main.html.erb +14 -10
- data/app/views/layouts/decidim/header/_menu_breadcrumb_items.html.erb +2 -0
- data/app/views/layouts/decidim/shared/_layout_item.html.erb +1 -1
- data/config/assets.rb +2 -1
- data/config/locales/ar.yml +27 -59
- data/config/locales/bg.yml +3 -64
- data/config/locales/ca.yml +370 -61
- data/config/locales/cs.yml +371 -54
- data/config/locales/de.yml +365 -54
- data/config/locales/el.yml +1 -48
- data/config/locales/en.yml +363 -54
- data/config/locales/eo.yml +0 -2
- data/config/locales/es-MX.yml +363 -57
- data/config/locales/es-PY.yml +363 -57
- data/config/locales/es.yml +367 -58
- data/config/locales/eu.yml +373 -65
- data/config/locales/fi-plain.yml +365 -57
- data/config/locales/fi.yml +370 -59
- data/config/locales/fr-CA.yml +178 -54
- data/config/locales/fr.yml +179 -52
- data/config/locales/ga-IE.yml +0 -21
- data/config/locales/gl.yml +1 -34
- data/config/locales/hu.yml +1 -53
- data/config/locales/id-ID.yml +1 -34
- data/config/locales/is-IS.yml +0 -16
- data/config/locales/it.yml +5 -60
- data/config/locales/ja.yml +215 -56
- data/config/locales/lb.yml +1 -52
- data/config/locales/lt.yml +1 -59
- data/config/locales/lv.yml +1 -40
- data/config/locales/nl.yml +1 -53
- data/config/locales/no.yml +2 -52
- data/config/locales/pl.yml +4 -66
- data/config/locales/pt-BR.yml +11 -52
- data/config/locales/pt.yml +2 -52
- data/config/locales/ro-RO.yml +219 -117
- data/config/locales/ru.yml +0 -20
- data/config/locales/sk.yml +1 -41
- data/config/locales/sv.yml +138 -59
- data/config/locales/tr-TR.yml +1 -50
- data/config/locales/uk.yml +0 -18
- data/config/locales/zh-CN.yml +1 -50
- data/config/locales/zh-TW.yml +1 -54
- data/config/routes.rb +4 -10
- data/db/migrate/20181025082245_add_timestamps_to_components.rb +2 -0
- data/db/migrate/20240628111905_add_visible_to_components.rb +7 -0
- data/db/migrate/20240704115429_create_decidim_taxonomies.rb +23 -0
- data/db/migrate/20240717093514_add_registered_only_to_decidim_share_tokens.rb +7 -0
- data/db/migrate/20240722215500_change_object_changes_on_versions.rb +39 -0
- data/db/migrate/20240806065417_create_decidim_taxonomy_filters.rb +23 -0
- data/db/migrate/20240822161348_add_deleted_at_to_decidim_components.rb +8 -0
- data/db/migrate/20240906162524_add_part_of_to_taxonomies.rb +26 -0
- data/db/migrate/20241001135825_add_role_to_participatory_space_private_users.rb +7 -0
- data/db/migrate/20241001140408_add_published_to_participatory_space_private_users.rb +7 -0
- data/db/migrate/20241022002600_create_private_exports.rb +18 -0
- data/db/migrate/20241028114430_add_component_counter_to_taxonomy_filters.rb +7 -0
- data/db/migrate/20241111104357_add_names_and_space_boolean_to_taxonomy_filters.rb +9 -0
- data/db/migrate/20241127093708_add_taxonomy_to_metrics.rb +7 -0
- data/db/migrate/20241204121445_add_participatory_space_manifests_from_taxonomy_filters.rb +9 -0
- data/decidim-core.gemspec +14 -17
- data/lib/decidim/action_authorization.rb +3 -2
- data/lib/decidim/amendable.rb +1 -1
- data/lib/decidim/api/input_filters/category_input_filter.rb +5 -3
- data/lib/decidim/api/input_filters/component_input_filter.rb +33 -20
- data/lib/decidim/api/input_filters/user_entity_input_filter.rb +53 -44
- data/lib/decidim/api/input_sorts/component_input_sort.rb +15 -13
- data/lib/decidim/api/input_sorts/user_entity_input_sort.rb +4 -4
- data/lib/decidim/api/interfaces/author_interface.rb +3 -2
- data/lib/decidim/api/interfaces/coauthorable_interface.rb +5 -5
- data/lib/decidim/api/interfaces/endorsable_interface.rb +2 -2
- data/lib/decidim/api/interfaces/participatory_space_interface.rb +5 -10
- data/lib/decidim/api/interfaces/taxonomizable_interface.rb +13 -0
- data/lib/decidim/api/types/amendment_type.rb +5 -7
- data/lib/decidim/api/types/area_api_type.rb +3 -3
- data/lib/decidim/api/types/attachment_type.rb +3 -3
- data/lib/decidim/api/types/category_type.rb +2 -2
- data/lib/decidim/api/types/decidim_type.rb +5 -1
- data/lib/decidim/api/types/fingerprint_type.rb +1 -1
- data/lib/decidim/api/types/localized_string_type.rb +1 -1
- data/lib/decidim/api/types/metric_history_type.rb +2 -0
- data/lib/decidim/api/types/metric_type.rb +1 -1
- data/lib/decidim/api/types/organization_type.rb +5 -0
- data/lib/decidim/api/types/participatory_space_link_type.rb +2 -2
- data/lib/decidim/api/types/participatory_space_manifest_type.rb +1 -1
- data/lib/decidim/api/types/quantifiable_translated_field_type.rb +1 -1
- data/lib/decidim/api/types/scope_api_type.rb +2 -3
- data/lib/decidim/api/types/session_type.rb +1 -2
- data/lib/decidim/api/types/taxonomy_type.rb +15 -0
- data/lib/decidim/api/types/trace_version_type.rb +2 -2
- data/lib/decidim/api/types/translated_field_type.rb +3 -5
- data/lib/decidim/api/types/user_group_type.rb +7 -20
- data/lib/decidim/api/types/user_type.rb +7 -20
- data/lib/decidim/asset_router/storage.rb +4 -4
- data/lib/decidim/assets/tailwind/tailwind.config.js.erb +2 -1
- data/lib/decidim/attachment_attributes.rb +1 -1
- data/lib/decidim/attribute_encryptor.rb +1 -1
- data/lib/decidim/attribute_object/nested_validator.rb +1 -1
- data/lib/decidim/attributes/integer_with_units.rb +27 -0
- data/lib/decidim/attributes.rb +2 -0
- data/lib/decidim/authorization_form_builder.rb +0 -7
- data/lib/decidim/coauthorable.rb +1 -1
- data/lib/decidim/command.rb +3 -3
- data/lib/decidim/commands/destroy_resource.rb +5 -1
- data/lib/decidim/commands/resource_handler.rb +2 -2
- data/lib/decidim/commands/restore_resource.rb +45 -0
- data/lib/decidim/commands/soft_delete_resource.rb +63 -0
- data/lib/decidim/component_manifest.rb +7 -0
- data/lib/decidim/core/api.rb +2 -0
- data/lib/decidim/core/engine.rb +21 -7
- data/lib/decidim/core/menu.rb +0 -5
- data/lib/decidim/core/seeds.rb +42 -2
- data/lib/decidim/core/test/factories.rb +105 -2
- data/lib/decidim/core/test/shared_examples/admin_resource_gallery_examples.rb +85 -0
- data/lib/decidim/core/test/shared_examples/comments_examples.rb +393 -38
- data/lib/decidim/core/test/shared_examples/components_controller_hide_shared_examples.rb +11 -0
- data/lib/decidim/core/test/shared_examples/components_controller_reorder_shared_examples.rb +21 -0
- data/lib/decidim/core/test/shared_examples/download_open_data_shared_context.rb +36 -0
- data/lib/decidim/core/test/shared_examples/download_open_data_shared_examples.rb +45 -0
- data/lib/decidim/core/test/shared_examples/download_your_data_shared_examples.rb +17 -0
- data/lib/decidim/core/test/shared_examples/etiquette_validator_examples.rb +25 -0
- data/lib/decidim/core/test/shared_examples/follows_examples.rb +43 -0
- data/lib/decidim/core/test/shared_examples/has_taxonomies.rb +94 -0
- data/lib/decidim/core/test/shared_examples/manage_share_tokens_examples.rb +237 -0
- data/lib/decidim/core/test/shared_examples/map_examples.rb +2 -0
- data/lib/decidim/core/test/shared_examples/open_data_exporter_examples.rb +102 -0
- data/lib/decidim/core/test/shared_examples/participatory_space_members_page_examples.rb +46 -0
- data/lib/decidim/core/test/shared_examples/participatory_space_search_examples.rb +98 -0
- data/lib/decidim/core/test/shared_examples/permissions.rb +7 -7
- data/lib/decidim/core/test/shared_examples/preview_with_share_token_examples.rb +94 -0
- data/lib/decidim/core/test/shared_examples/reports_examples.rb +60 -5
- data/lib/decidim/core/test/shared_examples/resource_endorsed_event_examples.rb +2 -2
- data/lib/decidim/core/test/shared_examples/resource_search_examples.rb +75 -69
- data/lib/decidim/core/test/shared_examples/searchable_resources_shared_context.rb +1 -1
- data/lib/decidim/core/test/shared_examples/simple_event.rb +33 -19
- data/lib/decidim/core/test/shared_examples/social_share_examples.rb +46 -0
- data/lib/decidim/core/test/shared_examples/softdeleteable_components_examples.rb +173 -0
- data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +54 -8
- data/lib/decidim/core/test/shared_examples/taxonomizable_interface_examples.rb +20 -0
- data/lib/decidim/core/test/shared_examples/taxonomizable_resource_examples.rb +37 -0
- data/lib/decidim/core/test/shared_examples/taxonomy_settings.rb +49 -0
- data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +2 -2
- data/lib/decidim/core/test/shared_examples/with_endorsable_permissions_examples.rb +1 -1
- data/lib/decidim/core/test.rb +9 -5
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/core.rb +58 -0
- data/lib/decidim/download_your_data_serializers/download_your_data_identity_serializer.rb +0 -4
- data/lib/decidim/download_your_data_serializers/download_your_data_participatory_space_private_user_serializer.rb +3 -1
- data/lib/decidim/download_your_data_serializers/download_your_data_report_serializer.rb +2 -1
- data/lib/decidim/download_your_data_serializers/download_your_data_user_serializer.rb +6 -7
- data/lib/decidim/download_your_data_serializers.rb +19 -0
- data/lib/decidim/exporters/csv.rb +6 -0
- data/lib/decidim/exporters/export_manifest.rb +14 -0
- data/lib/decidim/exporters/pdf.rb +26 -22
- data/lib/decidim/filter_form_builder.rb +12 -15
- data/lib/decidim/form_builder.rb +6 -129
- data/lib/decidim/has_category.rb +5 -1
- data/lib/decidim/has_private_users.rb +4 -0
- data/lib/decidim/has_taxonomy_settings.rb +47 -0
- data/lib/decidim/has_upload_validations.rb +1 -1
- data/lib/decidim/legacy_form_builder.rb +118 -0
- data/lib/decidim/maintenance/import_models/application_record.rb +93 -0
- data/lib/decidim/maintenance/import_models/area.rb +82 -0
- data/lib/decidim/maintenance/import_models/area_type.rb +12 -0
- data/lib/decidim/maintenance/import_models/assembly_type.rb +49 -0
- data/lib/decidim/maintenance/import_models/categorization.rb +14 -0
- data/lib/decidim/maintenance/import_models/category.rb +139 -0
- data/lib/decidim/maintenance/import_models/participatory_process_type.rb +21 -0
- data/lib/decidim/maintenance/import_models/scope.rb +163 -0
- data/lib/decidim/maintenance/import_models.rb +19 -0
- data/lib/decidim/maintenance/taxonomy_importer.rb +142 -0
- data/lib/decidim/maintenance/taxonomy_plan.rb +78 -0
- data/lib/decidim/maintenance.rb +12 -0
- data/lib/decidim/map/autocomplete.rb +52 -8
- data/lib/decidim/map/dynamic_map.rb +1 -1
- data/lib/decidim/map/provider/dynamic_map/here.rb +1 -40
- data/lib/decidim/map/provider/geocoding/here.rb +9 -3
- data/lib/decidim/map.rb +3 -6
- data/lib/decidim/moderation_tools.rb +29 -5
- data/lib/decidim/newsletter_encryptor.rb +1 -1
- data/lib/decidim/paddable.rb +1 -1
- data/lib/decidim/participable.rb +10 -10
- data/lib/decidim/participatory_space_user.rb +10 -0
- data/lib/decidim/private_download_helper.rb +15 -0
- data/lib/decidim/record_encryptor.rb +51 -46
- data/lib/decidim/resourceable.rb +16 -0
- data/lib/decidim/seeds.rb +18 -20
- data/lib/decidim/settings_manifest.rb +34 -1
- data/lib/decidim/soft_deletable.rb +17 -0
- data/lib/decidim/taxonomizable.rb +72 -0
- data/lib/decidim/view_model.rb +0 -1
- data/lib/tasks/decidim_download_your_data_tasks.rake +2 -4
- data/lib/tasks/decidim_procfile.rake +6 -0
- data/lib/tasks/decidim_tasks.rake +1 -0
- data/lib/tasks/decidim_taxonomies.rake +160 -0
- data/lib/tasks/upgrade/{decidim_fix_categorization.rake → clean.rake} +25 -18
- data/lib/tasks/upgrade/clean_hidden_resources.rake +33 -0
- data/lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake +1 -1
- data/lib/tasks/upgrade/migrations.rake +94 -0
- metadata +198 -103
- data/app/cells/decidim/amendable/amenders_list/show.erb +0 -0
- data/app/cells/decidim/content_blocks/base/content.erb +0 -0
- data/app/cells/decidim/endorsers_list/full_endorsers_list.erb +0 -3
- data/app/cells/decidim/endorsers_list_button/content.erb +0 -1
- data/app/cells/decidim/endorsers_list_button_cell.rb +0 -15
- data/app/cells/decidim/scopes_picker/scope_picker_prompt.erb +0 -3
- data/app/cells/decidim/scopes_picker/scope_picker_values.erb +0 -5
- data/app/cells/decidim/scopes_picker/show.erb +0 -14
- data/app/cells/decidim/scopes_picker_cell.rb +0 -92
- data/app/commands/decidim/update_user_interests.rb +0 -41
- data/app/controllers/decidim/scopes_controller.rb +0 -84
- data/app/controllers/decidim/user_interests_controller.rb +0 -30
- data/app/forms/decidim/user_interest_scope_form.rb +0 -25
- data/app/forms/decidim/user_interests_form.rb +0 -17
- data/app/helpers/decidim/categories_helper.rb +0 -26
- data/app/helpers/decidim/scopes_helper.rb +0 -105
- data/app/packs/images/decidim/vendor/leaflet/layers-2x.png +0 -0
- data/app/packs/images/decidim/vendor/leaflet/layers.png +0 -0
- data/app/packs/images/decidim/vendor/leaflet/marker-icon-2x.png +0 -0
- data/app/packs/images/decidim/vendor/leaflet/marker-icon.png +0 -0
- data/app/packs/images/decidim/vendor/leaflet/marker-shadow.png +0 -0
- data/app/packs/src/decidim/vendor/leaflet-tilelayer-here.js +0 -212
- data/app/packs/stylesheets/decidim/legacy/MarkerCluster.Default.scss +0 -67
- data/app/packs/stylesheets/decidim/legacy/MarkerCluster.scss +0 -18
- data/app/packs/stylesheets/decidim/legacy/leaflet.scss +0 -705
- data/app/validators/scope_belongs_to_component_validator.rb +0 -16
- data/app/views/decidim/account/_user_groups.html.erb +0 -0
- data/app/views/decidim/scopes/_scopes_picker_input.html.erb +0 -19
- data/app/views/decidim/scopes/picker.html.erb +0 -53
- data/app/views/decidim/shared/_comments.html.erb +0 -0
- data/app/views/decidim/shared/_share_modal.html.erb +0 -26
- data/app/views/decidim/shared/_tags.html.erb +0 -1
- data/app/views/decidim/user_interests/_areas.html.erb +0 -14
- data/app/views/decidim/user_interests/_scopes.html.erb +0 -22
- data/app/views/decidim/user_interests/show.html.erb +0 -22
- data/config/initializers/foundation_rails_helper.rb +0 -4
- data/lib/decidim/core/test/shared_examples/has_category.rb +0 -38
- data/lib/decidim/core/test/shared_examples/has_scope.rb +0 -11
- data/lib/decidim/core/test/shared_examples/manage_component_share_tokens.rb +0 -83
- data/lib/decidim/core/test/shared_examples/preview_component_with_share_token_examples.rb +0 -49
- data/lib/decidim/core/test/shared_examples/scope_helper_examples.rb +0 -93
- data/lib/decidim/seven_zip_wrapper.rb +0 -29
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
class ResourceHistoryCell < Decidim::ViewModel
|
5
|
+
def show
|
6
|
+
render
|
7
|
+
end
|
8
|
+
|
9
|
+
def history_items
|
10
|
+
return @history_items if @history_items.present?
|
11
|
+
|
12
|
+
@history_items = []
|
13
|
+
linked_resources_items.each do |item|
|
14
|
+
add_linked_resources_items(item[:resources], item)
|
15
|
+
end
|
16
|
+
|
17
|
+
@history_items << creation_item if @history_items.any?
|
18
|
+
|
19
|
+
@history_items.sort_by! { |item| item[:date] }
|
20
|
+
end
|
21
|
+
|
22
|
+
# return an unique id to identify the type of history cell
|
23
|
+
def history_cell_id
|
24
|
+
raise NotImplementedError
|
25
|
+
end
|
26
|
+
|
27
|
+
# return an array of linked resources to show in the history
|
28
|
+
def linked_resources_items
|
29
|
+
raise NotImplementedError
|
30
|
+
end
|
31
|
+
|
32
|
+
# return the creation item to show in the history, it will be added only if there are linked resources
|
33
|
+
def creation_item
|
34
|
+
raise NotImplementedError
|
35
|
+
end
|
36
|
+
|
37
|
+
def render?
|
38
|
+
linked_resources_items.any? { |item| item[:resources].present? }
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def add_linked_resources_items(resources, options)
|
44
|
+
return if resources.blank?
|
45
|
+
|
46
|
+
resources.each do |resource|
|
47
|
+
title = decidim_sanitize_translated(resource.title)
|
48
|
+
url = resource_locator(resource).path
|
49
|
+
link = link_to(title, url, class: "underline decoration-current text-secondary font-semibold")
|
50
|
+
|
51
|
+
@history_items << {
|
52
|
+
id: "#{options[:link_name]}_#{resource.id}",
|
53
|
+
date: resource.updated_at,
|
54
|
+
text: t(options[:text_key], scope: "activerecord.models", link:),
|
55
|
+
icon: resource_type_icon_key(options[:icon_key])
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def history_items_contains?(link_name)
|
61
|
+
return false if @history_items.blank?
|
62
|
+
|
63
|
+
@history_items.any? { |item| item[:id].include?(link_name.to_s) }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<%= decidim_modal id: "socialShare", class: "share-modal" do %>
|
2
|
+
<div data-dialog-container>
|
3
|
+
<%= icon "share-line" %>
|
4
|
+
<h2 id="dialog-title-socialShare" tabindex="-1" data-dialog-title><%= t("share", scope: "decidim.shared.share_modal") %></h2>
|
5
|
+
<div>
|
6
|
+
<%= social_share_button_tag(decidim_page_title,
|
7
|
+
url: decidim_meta_url,
|
8
|
+
image: decidim_meta_image_url,
|
9
|
+
desc: decidim_html_escape(decidim_meta_description || ""),
|
10
|
+
via: decidim_meta_twitter_handler) %>
|
11
|
+
|
12
|
+
<div class="share-modal__input">
|
13
|
+
<input id="urlShareLink" type="text" title="<%= t("share_link" , scope: "decidim.shared.share_modal") %>" value="<%= resource_name ? short_url(route_name: resource_name, params:) : decidim_meta_url %>" readonly>
|
14
|
+
<button type="button"
|
15
|
+
class="button button__sm button__text-secondary"
|
16
|
+
data-clipboard-copy="#urlShareLink"
|
17
|
+
data-clipboard-copy-label="<%= t("copy_share_link_copied", scope: "decidim.shared.share_modal") %>"
|
18
|
+
data-clipboard-copy-message="<%= t("copy_share_link_message", scope: "decidim.shared.share_modal") %>"
|
19
|
+
title="<%= t("copy_share_link_clarification", scope: "decidim.shared.share_modal") %>">
|
20
|
+
<span><%= t("copy_share_link", scope: "decidim.shared.share_modal") %></span>
|
21
|
+
<%= icon "file-copy-line" %>
|
22
|
+
</button>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
<% end %>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
class ShareWidgetCell < Decidim::ViewModel
|
5
|
+
include Decidim::ShortLinkHelper
|
6
|
+
include Decidim::SocialShareButtonHelper
|
7
|
+
|
8
|
+
def show
|
9
|
+
render
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def resource_name
|
15
|
+
return "budget_project" if model.is_a?(Decidim::Budgets::Project)
|
16
|
+
|
17
|
+
model.class.name.demodulize.underscore
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
2
|
-
<%= content_tag :
|
3
|
-
|
4
|
-
|
1
|
+
<section class="layout-main__section">
|
2
|
+
<%= content_tag :ul, class: tags_classes, data: { tags: "" } do %>
|
3
|
+
<% taxonomies.each do |tax| %>
|
4
|
+
<%= content_tag :li, link_to_tag(tax[:url], tax[:name], t("decidim.tags.filter_results_for_taxonomy", resource: tax[:name])) %>
|
5
|
+
<% end %>
|
6
|
+
<% end %>
|
7
|
+
</section>
|
@@ -1,24 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Decidim
|
4
|
-
# This cell renders the
|
4
|
+
# This cell renders the taxonomies of a resource
|
5
5
|
# shown with the translated name and links to
|
6
6
|
# the resource parent `component` and `participatory space` index.
|
7
7
|
# The context `resource` must be present
|
8
8
|
# example use inside another `cell`:
|
9
|
-
# <%= cell("decidim/
|
9
|
+
# <%= cell("decidim/tags", model.taxonomies, context: {resource: model}) %>
|
10
10
|
#
|
11
11
|
class TagsCell < Decidim::ViewModel
|
12
12
|
def show
|
13
|
-
render if
|
14
|
-
end
|
15
|
-
|
16
|
-
def category
|
17
|
-
render if category?
|
18
|
-
end
|
19
|
-
|
20
|
-
def scope
|
21
|
-
render if scope?
|
13
|
+
render if taxonomies.any?
|
22
14
|
end
|
23
15
|
|
24
16
|
private
|
@@ -27,27 +19,14 @@ module Decidim
|
|
27
19
|
(["tag-container"] + context[:extra_classes].to_a).join(" ")
|
28
20
|
end
|
29
21
|
|
30
|
-
def
|
31
|
-
model.
|
32
|
-
end
|
33
|
-
|
34
|
-
# deprecated
|
35
|
-
def link_to_category
|
36
|
-
accessible_title = t("decidim.tags.filter_results_for_category", resource: category_name)
|
22
|
+
def taxonomies
|
23
|
+
return [] unless model.respond_to?(:taxonomies)
|
37
24
|
|
38
|
-
|
39
|
-
|
40
|
-
:
|
41
|
-
|
42
|
-
|
43
|
-
)
|
44
|
-
display_title = content_tag(
|
45
|
-
:span,
|
46
|
-
category_name,
|
47
|
-
"aria-hidden": true
|
48
|
-
)
|
49
|
-
|
50
|
-
sr_title + display_title
|
25
|
+
@taxonomies ||= model.taxonomies.map do |taxonomy|
|
26
|
+
{
|
27
|
+
name: decidim_sanitize_translated(taxonomy.name),
|
28
|
+
url: resource_locator(model).index(filter: { "with_any_taxonomies[#{taxonomy.root_taxonomy.id}]" => [taxonomy.id.to_s] })
|
29
|
+
}
|
51
30
|
end
|
52
31
|
end
|
53
32
|
|
@@ -68,48 +47,8 @@ module Decidim
|
|
68
47
|
end
|
69
48
|
end
|
70
49
|
|
71
|
-
def category_name
|
72
|
-
decidim_html_escape model.category.translated_name
|
73
|
-
end
|
74
|
-
|
75
|
-
def category_path
|
76
|
-
resource_locator(model).index(filter: { filter_param(:category) => [model.category.id.to_s] })
|
77
|
-
end
|
78
|
-
|
79
|
-
def scope?
|
80
|
-
has_visible_scopes?(model)
|
81
|
-
end
|
82
|
-
|
83
|
-
# deprecated
|
84
|
-
def link_to_scope
|
85
|
-
accessible_title = t("decidim.tags.filter_results_for_scope", resource: scope_name)
|
86
|
-
|
87
|
-
link_to scope_path, title: accessible_title, class: "tag" do
|
88
|
-
sr_title = content_tag(
|
89
|
-
:span,
|
90
|
-
accessible_title,
|
91
|
-
class: "sr-only"
|
92
|
-
)
|
93
|
-
display_title = content_tag(
|
94
|
-
:span,
|
95
|
-
scope_name,
|
96
|
-
"aria-hidden": true
|
97
|
-
)
|
98
|
-
|
99
|
-
sr_title + display_title
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def scope_name
|
104
|
-
translated_attribute model.scope.name
|
105
|
-
end
|
106
|
-
|
107
|
-
def scope_path
|
108
|
-
resource_locator(model).index(filter: { filter_param(:scope) => [model.scope.id] })
|
109
|
-
end
|
110
|
-
|
111
50
|
def filter_param(name)
|
112
|
-
candidates = ["with_any_#{name}"
|
51
|
+
candidates = [:"with_any_#{name}", :"with_#{name}"]
|
113
52
|
return candidates.first unless controller.respond_to?(:default_filter_params, true)
|
114
53
|
|
115
54
|
available_params = controller.send(:default_filter_params)
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Amendable
|
5
5
|
# A command with all the business logic when a user starts amending a resource.
|
6
6
|
class CreateDraft < Decidim::Command
|
7
|
-
delegate :current_user, to: :form
|
7
|
+
delegate :current_user, :current_organization, to: :form
|
8
8
|
|
9
9
|
# Public: Initializes the command.
|
10
10
|
#
|
@@ -53,8 +53,8 @@ module Decidim
|
|
53
53
|
emendation.title = { I18n.locale => form.emendation_params.with_indifferent_access[:title] }
|
54
54
|
emendation.body = { I18n.locale => form.emendation_params.with_indifferent_access[:body] }
|
55
55
|
emendation.component = amendable.component
|
56
|
+
emendation.taxonomies = amendable.taxonomies if amendable.respond_to?(:taxonomies)
|
56
57
|
emendation.add_author(current_user, user_group)
|
57
|
-
emendation.category = amendable.category if amendable.respond_to?(:category)
|
58
58
|
emendation.save!
|
59
59
|
emendation
|
60
60
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
# A command with all the business logic to create an ephemeral user.
|
5
|
+
class CreateEphemeralUser < Decidim::Command
|
6
|
+
# Public: Initializes the command.
|
7
|
+
#
|
8
|
+
# form - A form object with the params.
|
9
|
+
def initialize(form)
|
10
|
+
@form = form
|
11
|
+
end
|
12
|
+
|
13
|
+
# Executes the command. Broadcasts these events:
|
14
|
+
#
|
15
|
+
# - :ok when everything is valid.
|
16
|
+
# - :invalid if the form was not valid and we could not proceed.
|
17
|
+
#
|
18
|
+
# Returns nothing.
|
19
|
+
def call
|
20
|
+
return broadcast(:invalid) if form.invalid?
|
21
|
+
|
22
|
+
create_user!
|
23
|
+
confirm_user
|
24
|
+
|
25
|
+
broadcast(:ok, @user)
|
26
|
+
rescue ActiveRecord::RecordInvalid
|
27
|
+
broadcast(:invalid)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
attr_reader :form
|
33
|
+
|
34
|
+
def create_user!
|
35
|
+
# The user is saved with tos_agreement to true but in the verification
|
36
|
+
# phase the tos_agreement will be mandatory for ephemeral users
|
37
|
+
@user = User.create!(
|
38
|
+
name: form.name,
|
39
|
+
nickname: form.nickname,
|
40
|
+
organization: form.organization,
|
41
|
+
locale: form.locale,
|
42
|
+
tos_agreement: true,
|
43
|
+
managed: true,
|
44
|
+
extended_data: { ephemeral: true, verified: form.verified }
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
def confirm_user
|
49
|
+
@user.confirm
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -36,6 +36,8 @@ module Decidim
|
|
36
36
|
trigger_omniauth_registration
|
37
37
|
|
38
38
|
broadcast(:ok, @user)
|
39
|
+
rescue NeedTosAcceptance
|
40
|
+
broadcast(:add_tos_errors, @user)
|
39
41
|
rescue ActiveRecord::RecordInvalid => e
|
40
42
|
broadcast(:error, e.record)
|
41
43
|
end
|
@@ -73,10 +75,12 @@ module Decidim
|
|
73
75
|
file = url.open
|
74
76
|
@user.avatar.attach(io: file, filename:)
|
75
77
|
end
|
78
|
+
@user.tos_agreement = form.tos_agreement
|
79
|
+
@user.accepted_tos_version = Time.current
|
80
|
+
raise NeedTosAcceptance if @user.tos_agreement.blank?
|
81
|
+
|
76
82
|
@user.skip_confirmation! if verified_email
|
77
|
-
@user.tos_agreement = "1"
|
78
83
|
@user.save!
|
79
|
-
|
80
84
|
@user.after_confirmation if verified_email
|
81
85
|
end
|
82
86
|
end
|
@@ -129,11 +133,17 @@ module Decidim
|
|
129
133
|
name: form.name,
|
130
134
|
nickname: form.normalized_nickname,
|
131
135
|
avatar_url: form.avatar_url,
|
132
|
-
raw_data: form.raw_data
|
136
|
+
raw_data: form.raw_data,
|
137
|
+
tos_agreement: form.tos_agreement,
|
138
|
+
newsletter_notifications_at: form.newsletter_at,
|
139
|
+
accepted_tos_version: form.current_organization.tos_version
|
133
140
|
)
|
134
141
|
end
|
135
142
|
end
|
136
143
|
|
144
|
+
class NeedTosAcceptance < StandardError
|
145
|
+
end
|
146
|
+
|
137
147
|
class InvalidOauthSignature < StandardError
|
138
148
|
end
|
139
149
|
end
|
@@ -53,7 +53,7 @@ module Decidim
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def participatory_space_moderators
|
56
|
-
@participatory_space_moderators ||= participatory_space.moderators
|
56
|
+
@participatory_space_moderators ||= participatory_space.respond_to?(:moderators) ? participatory_space.moderators : []
|
57
57
|
end
|
58
58
|
|
59
59
|
def send_report_notification_to_moderators
|
@@ -84,9 +84,5 @@ module Decidim
|
|
84
84
|
ReportedMailer.hide(moderator, @report).deliver_later
|
85
85
|
end
|
86
86
|
end
|
87
|
-
|
88
|
-
def participatory_space
|
89
|
-
@participatory_space ||= @reportable.component&.participatory_space || @reportable.try(:participatory_space)
|
90
|
-
end
|
91
87
|
end
|
92
88
|
end
|
@@ -19,7 +19,7 @@ module Decidim
|
|
19
19
|
def call
|
20
20
|
return broadcast(:invalid) if form.invalid?
|
21
21
|
|
22
|
-
|
22
|
+
with_events(with_transaction: true) do
|
23
23
|
create_user_group
|
24
24
|
create_membership
|
25
25
|
end
|
@@ -30,7 +30,11 @@ module Decidim
|
|
30
30
|
|
31
31
|
private
|
32
32
|
|
33
|
-
attr_reader :form
|
33
|
+
attr_reader :form, :user_group
|
34
|
+
|
35
|
+
def event_arguments
|
36
|
+
{ resource: user_group }
|
37
|
+
end
|
34
38
|
|
35
39
|
def create_user_group
|
36
40
|
@user_group = UserGroup.create!(
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
# A command with all the business logic to create an ephemeral user.
|
5
|
+
class DestroyEphemeralUser < Decidim::Command
|
6
|
+
# Public: Initializes the command.
|
7
|
+
#
|
8
|
+
# user - An ephemeral user.
|
9
|
+
def initialize(user)
|
10
|
+
@user = user
|
11
|
+
end
|
12
|
+
|
13
|
+
# Executes the command. Broadcasts these events:
|
14
|
+
#
|
15
|
+
# - :ok when everything is valid.
|
16
|
+
# - :invalid if the user is not ephemeral
|
17
|
+
#
|
18
|
+
# Returns nothing.
|
19
|
+
def call
|
20
|
+
return broadcast(:invalid) unless user.ephemeral?
|
21
|
+
|
22
|
+
destroy_pending_authorizations!
|
23
|
+
destroy_account!
|
24
|
+
|
25
|
+
broadcast(:ok)
|
26
|
+
rescue ActiveRecord::RecordInvalid
|
27
|
+
broadcast(:invalid)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
attr_reader :user
|
33
|
+
|
34
|
+
def destroy_pending_authorizations!
|
35
|
+
Decidim::Authorization.where(user:, granted_at: nil).destroy_all
|
36
|
+
end
|
37
|
+
|
38
|
+
def destroy_account!
|
39
|
+
user.invalidate_all_sessions!
|
40
|
+
|
41
|
+
user.delete_reason = "Ephemeral user session expired"
|
42
|
+
user.deleted_at = Time.current
|
43
|
+
user.skip_reconfirmation!
|
44
|
+
user.save!
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -20,10 +20,12 @@ module Decidim
|
|
20
20
|
update_password
|
21
21
|
|
22
22
|
if current_user.valid?
|
23
|
-
|
24
|
-
|
23
|
+
with_events do
|
24
|
+
changes = current_user.changed
|
25
|
+
current_user.save!
|
26
|
+
send_update_summary!(changes)
|
27
|
+
end
|
25
28
|
notify_followers
|
26
|
-
send_update_summary!(changes)
|
27
29
|
broadcast(:ok, current_user.unconfirmed_email.present?)
|
28
30
|
else
|
29
31
|
[:avatar, :password].each do |key|
|
@@ -33,6 +35,12 @@ module Decidim
|
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
38
|
+
protected
|
39
|
+
|
40
|
+
def event_arguments
|
41
|
+
{ resource: current_user }
|
42
|
+
end
|
43
|
+
|
36
44
|
private
|
37
45
|
|
38
46
|
attr_reader :form
|
@@ -30,6 +30,7 @@ module Decidim
|
|
30
30
|
current_user.notification_types = @form.notification_types
|
31
31
|
current_user.direct_message_types = @form.direct_message_types
|
32
32
|
current_user.email_on_moderations = @form.email_on_moderations
|
33
|
+
current_user.email_on_assigned_proposals = @form.email_on_assigned_proposals
|
33
34
|
current_user.notification_settings = current_user.notification_settings.merge(@form.notification_settings)
|
34
35
|
current_user.notifications_sending_frequency = @form.notifications_sending_frequency
|
35
36
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
# A command with all the business logic when an admin batch updates taxonomies on several resources.
|
5
|
+
class UpdateResourcesTaxonomies < Decidim::Command
|
6
|
+
# Public: Initializes the command.
|
7
|
+
#
|
8
|
+
# taxonomy_ids - the taxonomy ids to update
|
9
|
+
# resources - an ApplicationRecord collection of resources to update.
|
10
|
+
def initialize(taxonomy_ids, resources, organization)
|
11
|
+
@organization = organization
|
12
|
+
@taxonomies = Decidim::Taxonomy.non_roots.where(organization:, id: taxonomy_ids)
|
13
|
+
@resources = resources
|
14
|
+
@response = { taxonomies: [], successful: [], errored: [] }
|
15
|
+
end
|
16
|
+
|
17
|
+
# Executes the command. Broadcasts these events:
|
18
|
+
#
|
19
|
+
# - :update_resources_taxonomies - when everything is ok, returns @response.
|
20
|
+
# - :invalid_taxonomies - if the taxonomy is blank.
|
21
|
+
# - :invalid_resources - if the resource_ids is blank.
|
22
|
+
#
|
23
|
+
# Returns @response hash:
|
24
|
+
#
|
25
|
+
# - :taxonomies - Array of the updated taxonomies
|
26
|
+
# - :successful - Array of the updated resources
|
27
|
+
# - :errored - Array of the resources not updated because they already had the taxonomies assigned
|
28
|
+
def call
|
29
|
+
return broadcast(:invalid_taxonomies) if @taxonomies.blank?
|
30
|
+
return broadcast(:invalid_resources) if @resources.blank? || !@resources.respond_to?(:find_each)
|
31
|
+
|
32
|
+
update_resources_taxonomies
|
33
|
+
|
34
|
+
broadcast(:update_resources_taxonomies, @response)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Useful for running any code that you may want to execute before updating taxonomies on each resource.
|
38
|
+
def run_before_hooks(resource); end
|
39
|
+
|
40
|
+
# Useful for running any code that you may want to execute after updating taxonomies on each resource.
|
41
|
+
def run_after_hooks(resource); end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
attr_reader :taxonomies, :resources, :organization
|
46
|
+
|
47
|
+
def update_resources_taxonomies
|
48
|
+
@response[:taxonomies] = taxonomies
|
49
|
+
resources.find_each do |resource|
|
50
|
+
if taxonomies == resource.taxonomies
|
51
|
+
@response[:errored] << resource
|
52
|
+
else
|
53
|
+
update_resource_taxonomies!(resource)
|
54
|
+
@response[:successful] << resource
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def update_resource_taxonomies!(resource)
|
60
|
+
transaction do
|
61
|
+
run_before_hooks(resource)
|
62
|
+
resource.update!(taxonomies:)
|
63
|
+
run_after_hooks(resource)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -22,7 +22,9 @@ module Decidim
|
|
22
22
|
return broadcast(:invalid) if form.invalid?
|
23
23
|
|
24
24
|
was_verified = user_group.verified?
|
25
|
-
|
25
|
+
with_events do
|
26
|
+
update_user_group
|
27
|
+
end
|
26
28
|
notify_admins if was_verified
|
27
29
|
|
28
30
|
broadcast(:ok, user_group)
|
@@ -32,6 +34,10 @@ module Decidim
|
|
32
34
|
|
33
35
|
attr_reader :form, :user_group
|
34
36
|
|
37
|
+
def event_arguments
|
38
|
+
{ resource: user_group }
|
39
|
+
end
|
40
|
+
|
35
41
|
def update_user_group
|
36
42
|
user_group_attributes = attributes
|
37
43
|
user_group_attributes.delete(:avatar) if form.avatar.blank?
|
@@ -33,7 +33,7 @@ module Decidim
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def detect_current_component(params)
|
36
|
-
@participatory_space.components.find do |component|
|
36
|
+
@participatory_space.components.with_deleted.find do |component|
|
37
37
|
params["component_id"] == component.id.to_s && component.manifest_name == @manifest.name.to_s
|
38
38
|
end
|
39
39
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/concern"
|
4
|
+
|
5
|
+
module Decidim
|
6
|
+
module AjaxPermissionHandler
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
rescue_from Decidim::ActionForbidden, with: :ajax_user_has_no_permission
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def ajax_user_has_no_permission
|
16
|
+
return user_has_no_permission unless request.xhr?
|
17
|
+
|
18
|
+
render json: { message: I18n.t("actions.unauthorized", scope: "decidim.core") }, status: :unprocessable_entity
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -6,6 +6,7 @@ module Decidim
|
|
6
6
|
module DeviseAuthenticationMethods
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
include Decidim::UserBlockedChecker
|
9
|
+
include Decidim::OnboardingActionMethods
|
9
10
|
|
10
11
|
included do
|
11
12
|
def after_sign_in_path_for(user)
|
@@ -13,8 +14,8 @@ module Decidim
|
|
13
14
|
check_user_block_status(user)
|
14
15
|
elsif user.needs_password_update?
|
15
16
|
decidim.change_password_path
|
16
|
-
elsif
|
17
|
-
decidim_verifications.
|
17
|
+
elsif pending_onboarding_action?(user)
|
18
|
+
decidim_verifications.onboarding_pending_authorizations_path
|
18
19
|
else
|
19
20
|
super
|
20
21
|
end
|
@@ -27,10 +28,6 @@ module Decidim
|
|
27
28
|
def pending_redirect?(user)
|
28
29
|
store_location_for(user, stored_location_for(user))
|
29
30
|
end
|
30
|
-
|
31
|
-
def first_login_and_not_authorized?(user)
|
32
|
-
user.is_a?(User) && user.sign_in_count == 1 && current_organization.available_authorizations.any? && user.verifiable?
|
33
|
-
end
|
34
31
|
end
|
35
32
|
end
|
36
33
|
end
|
@@ -22,6 +22,7 @@ module Decidim
|
|
22
22
|
include NeedsSnippets
|
23
23
|
include UserBlockedChecker
|
24
24
|
include ActiveStorage::SetCurrent
|
25
|
+
include Decidim::OnboardingActionMethods
|
25
26
|
|
26
27
|
helper Decidim::TranslationsHelper
|
27
28
|
helper Decidim::MetaTagsHelper
|
@@ -36,6 +37,7 @@ module Decidim
|
|
36
37
|
helper Decidim::SocialShareButtonHelper
|
37
38
|
helper Decidim::SanitizeHelper
|
38
39
|
helper Decidim::ApplicationHelper
|
40
|
+
helper Decidim::OnboardingActionHelper
|
39
41
|
|
40
42
|
layout "layouts/decidim/application"
|
41
43
|
|
@@ -8,7 +8,7 @@ module Decidim
|
|
8
8
|
|
9
9
|
included do
|
10
10
|
def redirect_back(fallback_location:, allow_other_host: true, **args) # rubocop:disable Lint/UnusedMethodArgument
|
11
|
-
super
|
11
|
+
super(fallback_location:, allow_other_host: Decidim.allow_open_redirects, **args)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|