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
@@ -3,6 +3,8 @@
|
|
3
3
|
module Decidim
|
4
4
|
module Core
|
5
5
|
class MetricHistoryType < Decidim::Api::Types::BaseObject
|
6
|
+
description "A metric history"
|
7
|
+
|
6
8
|
field :key, GraphQL::Types::String, "The key value", null: false
|
7
9
|
field :value, GraphQL::Types::Int, "The value for each key", null: false
|
8
10
|
|
@@ -5,9 +5,9 @@ module Decidim
|
|
5
5
|
class MetricType < Decidim::Api::Types::BaseObject
|
6
6
|
description "Metric data"
|
7
7
|
|
8
|
-
field :name, GraphQL::Types::String, "The graphql_name of the metric", null: false
|
9
8
|
field :count, GraphQL::Types::Int, "The last value of the metric", null: false
|
10
9
|
field :history, [MetricHistoryType, { null: true }], "The historic values for this metric", null: false
|
10
|
+
field :name, GraphQL::Types::String, "The graphql_name of the metric", null: false
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -6,12 +6,17 @@ module Decidim
|
|
6
6
|
description "The current organization"
|
7
7
|
|
8
8
|
field :name, Decidim::Core::TranslatedFieldType, "The name of the current organization", null: true
|
9
|
+
field :taxonomies, [Decidim::Core::TaxonomyType, { null: true }], "The taxonomies associated to this organization", null: true
|
9
10
|
|
10
11
|
field :stats, [Core::StatisticType, { null: true }], description: "The statistics associated to this object", null: true
|
11
12
|
|
12
13
|
def stats
|
13
14
|
Decidim.stats.with_context(object)
|
14
15
|
end
|
16
|
+
|
17
|
+
def taxonomies
|
18
|
+
object.taxonomies.roots
|
19
|
+
end
|
15
20
|
end
|
16
21
|
end
|
17
22
|
end
|
@@ -5,11 +5,11 @@ module Decidim
|
|
5
5
|
class ParticipatorySpaceLinkType < Decidim::Api::Types::BaseObject
|
6
6
|
description "A link representation between participatory spaces"
|
7
7
|
|
8
|
-
field :id, GraphQL::Types::ID, "The id of this participatory space link", null: false
|
9
8
|
field :from_type, GraphQL::Types::String, "The origin participatory space type for this participatory space link", null: false
|
10
|
-
field :
|
9
|
+
field :id, GraphQL::Types::ID, "The id of this participatory space link", null: false
|
11
10
|
field :name, GraphQL::Types::String, "The name (purpose) of this participatory space link", null: false
|
12
11
|
field :participatory_space, ParticipatorySpaceInterface, description: "The linked participatory space (polymorphic)", null: false
|
12
|
+
field :to_type, GraphQL::Types::String, "The destination participatory space type for this participatory space link", null: false
|
13
13
|
|
14
14
|
def participatory_space
|
15
15
|
manifest_name = object.name.partition("included_").last
|
@@ -5,8 +5,8 @@ module Decidim
|
|
5
5
|
class ParticipatorySpaceManifestType < Decidim::Api::Types::BaseObject
|
6
6
|
description "A participatory manifest"
|
7
7
|
|
8
|
-
field :name, GraphQL::Types::String, "The name of the manifest", null: false
|
9
8
|
field :human_name, Decidim::Core::QuantifiableTranslatedFieldType, "The human readable name for the manifest", null: false
|
9
|
+
field :name, GraphQL::Types::String, "The name of the manifest", null: false
|
10
10
|
|
11
11
|
def human_name
|
12
12
|
{
|
@@ -5,8 +5,8 @@ module Decidim
|
|
5
5
|
class QuantifiableTranslatedFieldType < Decidim::Api::Types::BaseObject
|
6
6
|
description "A quantifiable translated field with singular and plural formats"
|
7
7
|
|
8
|
-
field :single, Decidim::Core::TranslatedFieldType, "The singular format.", null: false
|
9
8
|
field :plural, Decidim::Core::TranslatedFieldType, "The plural format.", null: false
|
9
|
+
field :single, Decidim::Core::TranslatedFieldType, "The singular format.", null: false
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -6,10 +6,9 @@ module Decidim
|
|
6
6
|
graphql_name "Scope"
|
7
7
|
description "A scope"
|
8
8
|
|
9
|
-
field :id, GraphQL::Types::ID, null: false
|
10
|
-
field :name, Decidim::Core::TranslatedFieldType, "The graphql_name of this scope.", null: false
|
11
|
-
|
12
9
|
field :children, [Decidim::Core::ScopeApiType, { null: true }], "Descendants of this scope", null: false
|
10
|
+
field :id, GraphQL::Types::ID, "The Id for this scope", null: false
|
11
|
+
field :name, Decidim::Core::TranslatedFieldType, "The graphql_name of this scope.", null: false
|
13
12
|
field :parent, Decidim::Core::ScopeApiType, "This scope's parent scope.", null: true
|
14
13
|
end
|
15
14
|
end
|
@@ -7,13 +7,12 @@ module Decidim
|
|
7
7
|
description "The current session"
|
8
8
|
|
9
9
|
field :user, UserType, "The current user", null: true
|
10
|
+
field :verified_user_groups, [UserGroupType], "The current user verified user groups", null: false
|
10
11
|
|
11
12
|
def user
|
12
13
|
object
|
13
14
|
end
|
14
15
|
|
15
|
-
field :verified_user_groups, [UserGroupType], "The current user verified user groups", null: false
|
16
|
-
|
17
16
|
def verified_user_groups
|
18
17
|
Decidim::UserGroups::ManageableUserGroups.for(object).verified
|
19
18
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
class TaxonomyType < Decidim::Api::Types::BaseObject
|
6
|
+
description "A taxonomy that can be applied to other resources."
|
7
|
+
|
8
|
+
field :children, [Decidim::Core::TaxonomyType], "The children of this taxonomy.", null: false
|
9
|
+
field :id, GraphQL::Types::ID, "The id of this taxonomy.", null: false
|
10
|
+
field :is_root, Boolean, "Whether this taxonomy is a root taxonomy (root taxonomies have no parents).", null: false, method: :root?
|
11
|
+
field :name, Decidim::Core::TranslatedFieldType, "The name of this taxonomy.", null: false
|
12
|
+
field :parent, Decidim::Core::TaxonomyType, "The parent of this taxonomy.", null: true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -5,15 +5,15 @@ module Decidim
|
|
5
5
|
class TraceVersionType < Decidim::Api::Types::BaseObject
|
6
6
|
description "A trace version type"
|
7
7
|
|
8
|
-
field :
|
8
|
+
field :changeset, GraphQL::Types::JSON, description: "Object with the changes in this version", null: true
|
9
9
|
field :created_at, Decidim::Core::DateTimeType, description: "The date and time this version was created", null: true
|
10
10
|
field :editor, Decidim::Core::AuthorInterface, description: "The editor/author of this version", null: true
|
11
|
+
field :id, GraphQL::Types::ID, "The ID of the version", null: false
|
11
12
|
|
12
13
|
def editor
|
13
14
|
author = Decidim.traceability.version_editor(object)
|
14
15
|
author if author.is_a?(Decidim::User) || author.is_a?(Decidim::UserGroup)
|
15
16
|
end
|
16
|
-
field :changeset, GraphQL::Types::JSON, description: "Object with the changes in this version", null: true
|
17
17
|
|
18
18
|
delegate :changeset, to: :object
|
19
19
|
end
|
@@ -7,14 +7,12 @@ module Decidim
|
|
7
7
|
description "A translated field"
|
8
8
|
|
9
9
|
field :locales, [GraphQL::Types::String, { null: true }], description: "Lists all the locales in which this translation is available", null: true
|
10
|
-
|
11
|
-
field :translations, [LocalizedStringType, { null: true }], description: "All the localized strings for this translation.", null: false do
|
12
|
-
argument :locales, [GraphQL::Types::String], description: "A list of locales to scope the translations to.", required: false
|
13
|
-
end
|
14
|
-
|
15
10
|
field :translation, GraphQL::Types::String, description: "Returns a single translation given a locale.", null: true do
|
16
11
|
argument :locale, GraphQL::Types::String, "A locale to search for", required: true
|
17
12
|
end
|
13
|
+
field :translations, [LocalizedStringType, { null: true }], description: "All the localized strings for this translation.", null: false do
|
14
|
+
argument :locales, [GraphQL::Types::String], description: "A list of locales to scope the translations to.", required: false
|
15
|
+
end
|
18
16
|
|
19
17
|
def locales
|
20
18
|
(defined_translations.keys + machine_translations.keys).uniq
|
@@ -8,54 +8,41 @@ module Decidim
|
|
8
8
|
|
9
9
|
implements Decidim::Core::AuthorInterface
|
10
10
|
|
11
|
+
field :avatar_url, GraphQL::Types::String, "The user's avatar url", null: false
|
12
|
+
field :badge, GraphQL::Types::String, "A badge for the user group", null: false
|
13
|
+
field :deleted, GraphQL::Types::Boolean, "Whether the user group's has been deleted or not", null: false
|
11
14
|
field :id, GraphQL::Types::ID, "The user group's id", null: false
|
12
|
-
|
15
|
+
field :members, [Decidim::Core::UserType, { null: true }], "Members of this group", null: false, method: :accepted_users
|
16
|
+
field :members_count, GraphQL::Types::Int, "Number of members in this group", null: false
|
13
17
|
field :name, GraphQL::Types::String, "The user group's name", null: false
|
14
|
-
|
15
18
|
field :nickname, GraphQL::Types::String, "The user group nickname", null: false
|
19
|
+
field :organization_name, Decidim::Core::TranslatedFieldType, "The user group's organization name", null: false
|
20
|
+
field :profile_path, GraphQL::Types::String, "The user group's profile url", null: false
|
16
21
|
|
17
22
|
def nickname
|
18
23
|
object.presenter.nickname
|
19
24
|
end
|
20
25
|
|
21
|
-
field :avatar_url, GraphQL::Types::String, "The user's avatar url", null: false
|
22
|
-
|
23
26
|
def avatar_url
|
24
27
|
object.presenter.avatar_url
|
25
28
|
end
|
26
29
|
|
27
|
-
field :profile_path, GraphQL::Types::String, "The user group's profile url", null: false
|
28
|
-
|
29
30
|
def profile_path
|
30
31
|
object.presenter.profile_path
|
31
32
|
end
|
32
33
|
|
33
|
-
field :organization_name, Decidim::Core::TranslatedFieldType, "The user group's organization name", null: false
|
34
|
-
|
35
34
|
def organization_name
|
36
35
|
object.organization.name
|
37
36
|
end
|
38
37
|
|
39
|
-
field :deleted, GraphQL::Types::Boolean, "Whether the user group's has been deleted or not", null: false
|
40
|
-
|
41
38
|
def deleted
|
42
39
|
object.presenter.deleted?
|
43
40
|
end
|
44
41
|
|
45
|
-
field :badge, GraphQL::Types::String, "A badge for the user group", null: false
|
46
|
-
|
47
42
|
def badge
|
48
43
|
object.presenter.badge
|
49
44
|
end
|
50
45
|
|
51
|
-
field :members, [Decidim::Core::UserType, { null: true }], "Members of this group", null: false
|
52
|
-
|
53
|
-
def members
|
54
|
-
object.accepted_users
|
55
|
-
end
|
56
|
-
|
57
|
-
field :members_count, GraphQL::Types::Int, "Number of members in this group", null: false
|
58
|
-
|
59
46
|
def members_count
|
60
47
|
object.accepted_memberships.count
|
61
48
|
end
|
@@ -8,28 +8,19 @@ module Decidim
|
|
8
8
|
|
9
9
|
implements Decidim::Core::AuthorInterface
|
10
10
|
|
11
|
-
field :id, GraphQL::Types::ID, "The user's id", null: false
|
12
|
-
|
13
|
-
field :name, GraphQL::Types::String, "The user's name", null: false
|
14
|
-
|
15
|
-
field :nickname, GraphQL::Types::String, "The user's nickname", null: false
|
16
|
-
|
17
11
|
field :avatar_url, GraphQL::Types::String, "The user's avatar url", null: false
|
18
|
-
|
19
|
-
field :
|
20
|
-
|
12
|
+
field :badge, GraphQL::Types::String, "A badge for the user group", null: false
|
13
|
+
field :deleted, GraphQL::Types::Boolean, "Whether the user's account has been deleted or not", null: false
|
21
14
|
field :direct_messages_enabled, GraphQL::Types::String,
|
22
15
|
null: false,
|
23
16
|
description: ["If the user making the request is logged in, it will return whether this recipient accepts a conversation or not.",
|
24
17
|
" It will return false for non-logged requests."].join
|
25
|
-
|
18
|
+
field :groups, [Decidim::Core::UserGroupType, { null: true }], "Groups where this user belongs", null: false, method: :accepted_user_groups
|
19
|
+
field :id, GraphQL::Types::ID, "The user's id", null: false
|
20
|
+
field :name, GraphQL::Types::String, "The user's name", null: false
|
21
|
+
field :nickname, GraphQL::Types::String, "The user's nickname", null: false
|
26
22
|
field :organization_name, Decidim::Core::TranslatedFieldType, "The user's organization name", null: false
|
27
|
-
|
28
|
-
field :deleted, GraphQL::Types::Boolean, "Whether the user's account has been deleted or not", null: false
|
29
|
-
|
30
|
-
field :badge, GraphQL::Types::String, "A badge for the user group", null: false
|
31
|
-
|
32
|
-
field :groups, [Decidim::Core::UserGroupType, { null: true }], "Groups where this user belongs", null: false
|
23
|
+
field :profile_path, GraphQL::Types::String, "The user's profile url", null: false
|
33
24
|
|
34
25
|
def nickname
|
35
26
|
object.presenter.nickname
|
@@ -59,10 +50,6 @@ module Decidim
|
|
59
50
|
object.presenter.badge
|
60
51
|
end
|
61
52
|
|
62
|
-
def groups
|
63
|
-
object.accepted_user_groups
|
64
|
-
end
|
65
|
-
|
66
53
|
def self.authorized?(object, context)
|
67
54
|
super && object.confirmed? && !object.blocked? && !object.deleted?
|
68
55
|
end
|
@@ -159,7 +159,7 @@ module Decidim
|
|
159
159
|
return unless blob
|
160
160
|
|
161
161
|
if options[:only_path] || remote? || !asset_url_available?
|
162
|
-
routes.rails_blob_url(blob, **default_options
|
162
|
+
routes.rails_blob_url(blob, **default_options, **options)
|
163
163
|
else
|
164
164
|
blob.url(**options)
|
165
165
|
end
|
@@ -184,7 +184,7 @@ module Decidim
|
|
184
184
|
if options[:host]
|
185
185
|
rails_representation_url(**options)
|
186
186
|
else
|
187
|
-
representation_url(**options
|
187
|
+
representation_url(**options, only_path: true)
|
188
188
|
end
|
189
189
|
end
|
190
190
|
|
@@ -207,10 +207,10 @@ module Decidim
|
|
207
207
|
# @param options The options for building the URL
|
208
208
|
# @return [String, nil] The converted representation URL or `nil` if the
|
209
209
|
# asset is not defined.
|
210
|
-
def rails_representation_url(**
|
210
|
+
def rails_representation_url(**)
|
211
211
|
return unless asset
|
212
212
|
|
213
|
-
representation_url = routes.rails_representation_url(asset, **default_options
|
213
|
+
representation_url = routes.rails_representation_url(asset, **default_options, **)
|
214
214
|
|
215
215
|
variation = asset.try(:variation)
|
216
216
|
return representation_url unless variation
|
@@ -28,7 +28,7 @@ module Decidim
|
|
28
28
|
# Returns nothing.
|
29
29
|
def attachments_attribute(name)
|
30
30
|
attribute name, Array[Integer]
|
31
|
-
attribute "add_#{name}"
|
31
|
+
attribute :"add_#{name}", Array
|
32
32
|
|
33
33
|
# Define the getter method that fetches the attachment records based on
|
34
34
|
# their types. For Strings and Integers, assumes they are IDs and will
|
@@ -21,7 +21,7 @@ module Decidim
|
|
21
21
|
def self.cryptor
|
22
22
|
@cryptor ||= begin
|
23
23
|
key = ActiveSupport::KeyGenerator.new("attribute").generate_key(
|
24
|
-
Rails.application.
|
24
|
+
Rails.application.secret_key_base, ActiveSupport::MessageEncryptor.key_len
|
25
25
|
)
|
26
26
|
ActiveSupport::MessageEncryptor.new(key)
|
27
27
|
end
|
@@ -7,7 +7,7 @@ module Decidim
|
|
7
7
|
value = value.values if value.is_a?(Hash)
|
8
8
|
return unless Array(value).reject { |r| valid_object?(r) }.any?
|
9
9
|
|
10
|
-
record.errors.add(attribute, :invalid, **options
|
10
|
+
record.errors.add(attribute, :invalid, **options, value:)
|
11
11
|
end
|
12
12
|
|
13
13
|
private
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Attributes
|
5
|
+
# Custom attributes value to represent an Integer with units.
|
6
|
+
class IntegerWithUnits < ActiveModel::Type::Value
|
7
|
+
def type
|
8
|
+
:"decidim/attributes/integer_with_units"
|
9
|
+
end
|
10
|
+
|
11
|
+
def cast(value)
|
12
|
+
return nil if value.nil?
|
13
|
+
|
14
|
+
case value
|
15
|
+
when ::Hash
|
16
|
+
[value["0"].to_i.abs, value["1"].to_s]
|
17
|
+
when ::Array
|
18
|
+
return value if value.size != 2
|
19
|
+
|
20
|
+
[value[0].to_i.abs, value[1].to_s]
|
21
|
+
else
|
22
|
+
value
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/decidim/attributes.rb
CHANGED
@@ -13,6 +13,7 @@ module Decidim
|
|
13
13
|
autoload :Model, "decidim/attributes/model"
|
14
14
|
autoload :Symbol, "decidim/attributes/symbol"
|
15
15
|
autoload :Integer, "decidim/attributes/integer"
|
16
|
+
autoload :IntegerWithUnits, "decidim/attributes/integer_with_units"
|
16
17
|
|
17
18
|
# Base types
|
18
19
|
ActiveModel::Type.register(:array, Decidim::Attributes::Array)
|
@@ -30,6 +31,7 @@ module Decidim
|
|
30
31
|
ActiveModel::Type.register(:"decidim/attributes/clean_string", Decidim::Attributes::CleanString)
|
31
32
|
ActiveModel::Type.register(:"decidim/attributes/rich_text", Decidim::Attributes::RichText)
|
32
33
|
ActiveModel::Type.register(:"decidim/attributes/blob", Decidim::Attributes::Blob)
|
34
|
+
ActiveModel::Type.register(:"decidim/attributes/integer_with_units", Decidim::Attributes::IntegerWithUnits)
|
33
35
|
|
34
36
|
ActiveModel::Type.register(:integer, Decidim::Attributes::Integer)
|
35
37
|
end
|
@@ -37,7 +37,6 @@ module Decidim
|
|
37
37
|
|
38
38
|
def input_field(name, type)
|
39
39
|
return hidden_field(name) if name.to_s == "handler_name"
|
40
|
-
return scopes_selector if name.to_s == "scope_id"
|
41
40
|
|
42
41
|
case type
|
43
42
|
when :date, :datetime, :time, :"decidim/attributes/localized_date"
|
@@ -47,12 +46,6 @@ module Decidim
|
|
47
46
|
end
|
48
47
|
end
|
49
48
|
|
50
|
-
def scopes_selector
|
51
|
-
return if object.user.blank?
|
52
|
-
|
53
|
-
collection_select :scope_id, object.user.organization.scopes, :id, ->(scope) { translated_attribute(scope.name) }
|
54
|
-
end
|
55
|
-
|
56
49
|
def find_input_type(name)
|
57
50
|
value_type = object.class.attribute_types[name]
|
58
51
|
|
data/lib/decidim/coauthorable.rb
CHANGED
@@ -70,7 +70,7 @@ module Decidim
|
|
70
70
|
def reload(options = nil)
|
71
71
|
remove_instance_variable(:@authors) if defined?(@authors)
|
72
72
|
remove_instance_variable(:@notifiable_identities) if defined?(@notifiable_identities)
|
73
|
-
super
|
73
|
+
super
|
74
74
|
end
|
75
75
|
|
76
76
|
# Returns all the authors of a coauthorable.
|
data/lib/decidim/command.rb
CHANGED
@@ -22,7 +22,7 @@ module Decidim
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def evaluate(&block)
|
25
|
-
@caller =
|
25
|
+
@caller = block.binding.receiver
|
26
26
|
instance_eval(&block)
|
27
27
|
end
|
28
28
|
|
@@ -42,10 +42,10 @@ module Decidim
|
|
42
42
|
@caller.respond_to?(method_name, include_private)
|
43
43
|
end
|
44
44
|
|
45
|
-
def with_events(with_transaction: false, &
|
45
|
+
def with_events(with_transaction: false, &)
|
46
46
|
ActiveSupport::Notifications.publish("#{event_namespace}:before", **event_arguments)
|
47
47
|
|
48
|
-
with_transaction ? transaction(&
|
48
|
+
with_transaction ? transaction(&) : yield
|
49
49
|
|
50
50
|
ActiveSupport::Notifications.publish("#{event_namespace}:after", **event_arguments)
|
51
51
|
end
|
@@ -22,7 +22,7 @@ module Decidim
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def form_attribute_values
|
25
|
-
raise "You need to define the list of attributes to be fetched from form object fetch_form_attributes"
|
25
|
+
raise "You need to define the list of attributes to be fetched from form object fetch_form_attributes" if form_attributes.empty?
|
26
26
|
|
27
27
|
form_attributes.index_with do |field|
|
28
28
|
form.send(field)
|
@@ -30,7 +30,7 @@ module Decidim
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def file_attribute_values
|
33
|
-
return {}
|
33
|
+
return {} if file_attributes.empty?
|
34
34
|
|
35
35
|
attachment_attributes(*file_attributes)
|
36
36
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Commands
|
5
|
+
class RestoreResource < ::Decidim::Command
|
6
|
+
# Initializes the command.
|
7
|
+
#
|
8
|
+
# @param resource [ActiveRecord::Base] the resource to restore.
|
9
|
+
# @param current_user [Decidim::User] the current user.
|
10
|
+
def initialize(resource, current_user)
|
11
|
+
@resource = resource
|
12
|
+
@current_user = current_user
|
13
|
+
end
|
14
|
+
|
15
|
+
# Restores the resource.
|
16
|
+
#
|
17
|
+
# Broadcasts :ok if successful, :invalid otherwise.
|
18
|
+
def call
|
19
|
+
return broadcast(:invalid) if invalid?
|
20
|
+
|
21
|
+
restore_resource
|
22
|
+
|
23
|
+
broadcast(:ok, resource)
|
24
|
+
rescue Decidim::Commands::HookError, StandardError
|
25
|
+
broadcast(:invalid)
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
|
30
|
+
attr_reader :resource, :current_user
|
31
|
+
|
32
|
+
def invalid? = false
|
33
|
+
|
34
|
+
def restore_resource
|
35
|
+
Decidim.traceability.perform_action!(
|
36
|
+
"restore",
|
37
|
+
resource,
|
38
|
+
current_user
|
39
|
+
) do
|
40
|
+
resource.restore
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Commands
|
5
|
+
class SoftDeleteResource < ::Decidim::Command
|
6
|
+
# Initializes the command.
|
7
|
+
#
|
8
|
+
# @param resource [ActiveRecord::Base] the resource to soft delete.
|
9
|
+
# @param current_user [Decidim::User] the current user.
|
10
|
+
def initialize(resource, current_user)
|
11
|
+
@resource = resource
|
12
|
+
@current_user = current_user
|
13
|
+
end
|
14
|
+
|
15
|
+
# Soft deletes the resource.
|
16
|
+
#
|
17
|
+
# Broadcasts :ok if successful, :invalid otherwise.
|
18
|
+
def call
|
19
|
+
return broadcast(:invalid) if invalid?
|
20
|
+
|
21
|
+
soft_delete_resource
|
22
|
+
send_notification_to_authors
|
23
|
+
|
24
|
+
broadcast(:ok, resource)
|
25
|
+
rescue Decidim::Commands::HookError, StandardError
|
26
|
+
broadcast(:invalid)
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
attr_reader :resource, :current_user
|
32
|
+
|
33
|
+
def invalid? = false
|
34
|
+
|
35
|
+
def soft_delete_resource
|
36
|
+
Decidim.traceability.perform_action!(
|
37
|
+
"soft_delete",
|
38
|
+
resource,
|
39
|
+
current_user
|
40
|
+
) do
|
41
|
+
resource.destroy!
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def send_notification_to_authors
|
46
|
+
coauthors = resource.try(:coauthorships)&.map do |coauthorship|
|
47
|
+
coauthorship.decidim_author_type.constantize.find(coauthorship.decidim_author_id)
|
48
|
+
end || []
|
49
|
+
|
50
|
+
recipients = (resource.try(:authors) || [resource.try(:author)]).compact + coauthors
|
51
|
+
|
52
|
+
return if recipients.empty?
|
53
|
+
|
54
|
+
Decidim::EventsManager.publish(
|
55
|
+
event: "decidim.events.resources.soft_deleted",
|
56
|
+
event_class: Decidim::SoftDeleteResourceEvent,
|
57
|
+
resource:,
|
58
|
+
affected_users: recipients.uniq
|
59
|
+
)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -142,6 +142,13 @@ module Decidim
|
|
142
142
|
@seeds&.call(participatory_space)
|
143
143
|
end
|
144
144
|
|
145
|
+
# The name of the named Rails route to create the url to the resource.
|
146
|
+
#
|
147
|
+
# Returns a String.
|
148
|
+
def route_name
|
149
|
+
"component"
|
150
|
+
end
|
151
|
+
|
145
152
|
# Public: Adds configurable attributes for this component, scoped to a name. It
|
146
153
|
# uses the DSL specified under `Decidim::SettingsManifest`.
|
147
154
|
#
|
data/lib/decidim/core/api.rb
CHANGED
@@ -18,6 +18,7 @@ module Decidim
|
|
18
18
|
autoload :AreaTypeType, "decidim/api/types/area_type_type"
|
19
19
|
autoload :AttachmentType, "decidim/api/types/attachment_type"
|
20
20
|
autoload :CategoryType, "decidim/api/types/category_type"
|
21
|
+
autoload :TaxonomyType, "decidim/api/types/taxonomy_type"
|
21
22
|
autoload :ComponentType, "decidim/api/types/component_type"
|
22
23
|
autoload :CoordinatesType, "decidim/api/types/coordinates_type"
|
23
24
|
autoload :DecidimType, "decidim/api/types/decidim_type"
|
@@ -64,6 +65,7 @@ module Decidim
|
|
64
65
|
autoload :AuthorableInterface, "decidim/api/interfaces/authorable_interface"
|
65
66
|
autoload :CoauthorableInterface, "decidim/api/interfaces/coauthorable_interface"
|
66
67
|
autoload :CategoriesContainerInterface, "decidim/api/interfaces/categories_container_interface"
|
68
|
+
autoload :TaxonomizableInterface, "decidim/api/interfaces/taxonomizable_interface"
|
67
69
|
autoload :CategorizableInterface, "decidim/api/interfaces/categorizable_interface"
|
68
70
|
autoload :ScopableInterface, "decidim/api/interfaces/scopable_interface"
|
69
71
|
autoload :AttachableInterface, "decidim/api/interfaces/attachable_interface"
|