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,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class AddNamesAndSpaceBooleanToTaxonomyFilters < ActiveRecord::Migration[7.0]
|
4
|
+
def change
|
5
|
+
add_column :decidim_taxonomy_filters, :name, :jsonb, default: {}
|
6
|
+
add_column :decidim_taxonomy_filters, :internal_name, :jsonb, default: {}
|
7
|
+
add_column :decidim_taxonomy_filters, :space_filter, :boolean, null: false, default: false
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class AddParticipatorySpaceManifestsFromTaxonomyFilters < ActiveRecord::Migration[7.0]
|
4
|
+
def change
|
5
|
+
remove_column :decidim_taxonomy_filters, :space_manifest
|
6
|
+
remove_column :decidim_taxonomy_filters, :space_filter
|
7
|
+
add_column :decidim_taxonomy_filters, :participatory_space_manifests, :string, array: true, default: [], null: false
|
8
|
+
end
|
9
|
+
end
|
data/decidim-core.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.summary = "The core of the Decidim framework."
|
23
23
|
s.description = "Adds core features so other engines can hook into the framework."
|
24
24
|
s.license = "AGPL-3.0-or-later"
|
25
|
-
s.required_ruby_version = "~> 3.
|
25
|
+
s.required_ruby_version = "~> 3.3.0"
|
26
26
|
|
27
27
|
s.files = Dir.chdir(__dir__) do
|
28
28
|
`git ls-files -z`.split("\x0").select do |f|
|
@@ -36,57 +36,54 @@ Gem::Specification.new do |s|
|
|
36
36
|
|
37
37
|
s.add_dependency "active_link_to", "~> 1.0"
|
38
38
|
s.add_dependency "acts_as_list", "~> 1.0"
|
39
|
-
s.add_dependency "batch-loader", "~>
|
40
|
-
s.add_dependency "browser", "~> 2.
|
39
|
+
s.add_dependency "batch-loader", "~> 2.0"
|
40
|
+
s.add_dependency "browser", "~> 6.2.0"
|
41
41
|
s.add_dependency "cells-erb", "~> 0.1.0"
|
42
42
|
s.add_dependency "cells-rails", "~> 0.1.3"
|
43
43
|
s.add_dependency "charlock_holmes", "~> 0.7"
|
44
|
+
s.add_dependency "chartkick", "~> 5.1.2"
|
44
45
|
s.add_dependency "date_validator", "~> 0.12.0"
|
45
46
|
s.add_dependency "devise", "~> 4.7"
|
46
|
-
s.add_dependency "devise-i18n", "~> 1.2"
|
47
|
+
s.add_dependency "devise-i18n", "~> 1.2"
|
47
48
|
s.add_dependency "diffy", "~> 3.3"
|
48
49
|
s.add_dependency "doorkeeper", "~> 5.6", ">= 5.6.6"
|
49
50
|
s.add_dependency "doorkeeper-i18n", "~> 4.0"
|
50
51
|
s.add_dependency "file_validators", "~> 3.0"
|
51
52
|
s.add_dependency "fog-local", "~> 0.6"
|
52
|
-
s.add_dependency "foundation_rails_helper", "~> 4.0"
|
53
53
|
s.add_dependency "geocoder", "~> 1.8"
|
54
54
|
s.add_dependency "hashdiff", ">= 0.4.0", "< 2.0.0"
|
55
|
+
s.add_dependency "hexapdf", "~> 1.1.0"
|
55
56
|
s.add_dependency "image_processing", "~> 1.2"
|
56
57
|
s.add_dependency "invisible_captcha", "~> 0.12"
|
57
58
|
s.add_dependency "kaminari", "~> 1.2", ">= 1.2.1"
|
58
59
|
s.add_dependency "loofah", "~> 2.19", ">= 2.19.1"
|
59
60
|
s.add_dependency "mime-types", ">= 1.16", "< 4.0"
|
60
61
|
s.add_dependency "mini_magick", "~> 4.9"
|
61
|
-
s.add_dependency "net-smtp", "~> 0.
|
62
|
+
s.add_dependency "net-smtp", "~> 0.5.0"
|
62
63
|
s.add_dependency "nokogiri", "~> 1.16", ">= 1.16.2"
|
63
64
|
s.add_dependency "omniauth", "~> 2.0"
|
64
65
|
s.add_dependency "omniauth-facebook", "~> 5.0"
|
65
66
|
s.add_dependency "omniauth-google-oauth2", "~> 1.0"
|
66
67
|
s.add_dependency "omniauth-rails_csrf_protection", "~> 1.0"
|
67
68
|
s.add_dependency "omniauth-twitter", "~> 1.4"
|
68
|
-
s.add_dependency "paper_trail", "~>
|
69
|
-
s.add_dependency "
|
69
|
+
s.add_dependency "paper_trail", "~> 16.0"
|
70
|
+
s.add_dependency "paranoia", "~> 3.0.0"
|
71
|
+
s.add_dependency "pg", "~> 1.5.0", "< 2"
|
70
72
|
s.add_dependency "pg_search", "~> 2.2"
|
71
73
|
s.add_dependency "premailer-rails", "~> 1.10"
|
72
|
-
# We need psych 4+ in order to use the `aliases: true` option,
|
73
|
-
# see https://stackoverflow.com/questions/71191685/visit-psych-nodes-alias-unknown-alias-default-psychbadalias
|
74
|
-
# Also note that we need Rails 6.1.5+,
|
75
|
-
# see https://gist.github.com/yahonda/2776d8d7b6ea7045359f38c10449937b
|
76
|
-
s.add_dependency "psych", "~> 4.0"
|
77
74
|
s.add_dependency "rack", "~> 2.2", ">= 2.2.8.1"
|
78
75
|
s.add_dependency "rack-attack", "~> 6.0"
|
79
76
|
s.add_dependency "rails", "~> 7.0.8"
|
80
77
|
s.add_dependency "rails-i18n", "~> 7.0"
|
81
|
-
s.add_dependency "ransack", "~>
|
78
|
+
s.add_dependency "ransack", "~> 4.2.0"
|
82
79
|
s.add_dependency "redis", "~> 4.1"
|
83
|
-
s.add_dependency "request_store", "~> 1.
|
80
|
+
s.add_dependency "request_store", "~> 1.7.0"
|
84
81
|
s.add_dependency "rubyXL", "~> 3.4"
|
85
82
|
s.add_dependency "rubyzip", "~> 2.0"
|
86
83
|
s.add_dependency "shakapacker", "~> 7.1.0"
|
87
|
-
s.add_dependency "valid_email2", "~>
|
84
|
+
s.add_dependency "valid_email2", "~> 7.0"
|
88
85
|
s.add_dependency "web-push", "~> 3.0"
|
89
|
-
s.add_dependency "wisper", "~>
|
86
|
+
s.add_dependency "wisper", "~> 3.0"
|
90
87
|
|
91
88
|
s.add_development_dependency "decidim-api", Decidim::Core.version
|
92
89
|
s.add_development_dependency "decidim-dev", Decidim::Core.version
|
@@ -14,7 +14,7 @@ module Decidim
|
|
14
14
|
|
15
15
|
def action_authorized_to(action, resource: nil, permissions_holder: nil)
|
16
16
|
action_authorization_cache[action_authorization_cache_key(action, resource, permissions_holder)] ||=
|
17
|
-
::Decidim::ActionAuthorizer.new(current_user, action, permissions_holder || resource
|
17
|
+
::Decidim::ActionAuthorizer.new(current_user, action, permissions_holder || resource.try(:component) || current_component, resource).authorize
|
18
18
|
end
|
19
19
|
|
20
20
|
def action_authorization_cache
|
@@ -29,7 +29,8 @@ module Decidim
|
|
29
29
|
elsif permissions_holder
|
30
30
|
"#{action}-#{permissions_holder.class.name}-#{permissions_holder.id}"
|
31
31
|
else
|
32
|
-
|
32
|
+
component = resource.try(:component) || current_component
|
33
|
+
"#{action}-#{component.id}"
|
33
34
|
end
|
34
35
|
end
|
35
36
|
end
|
data/lib/decidim/amendable.rb
CHANGED
@@ -57,7 +57,7 @@ module Decidim
|
|
57
57
|
when "participants"
|
58
58
|
return only_amendables unless user
|
59
59
|
|
60
|
-
where.not(id: joins(:amendable).where.not(
|
60
|
+
where.not(id: joins(:amendable).where.not(decidim_amendments: { decidim_user_id: user.id }))
|
61
61
|
else # Assume 'all'
|
62
62
|
all
|
63
63
|
end
|
@@ -10,9 +10,11 @@ module Decidim
|
|
10
10
|
type: [ID, { null: true }],
|
11
11
|
description: "Returns the sub-categories for the given parent category or top-level categories if set to `null`",
|
12
12
|
required: false,
|
13
|
-
prepare:
|
14
|
-
|
15
|
-
|
13
|
+
prepare: :prepare_parent_id
|
14
|
+
|
15
|
+
def self.prepare_parent_id(parent_id, _ctx)
|
16
|
+
{ parent_id: }
|
17
|
+
end
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
@@ -9,40 +9,53 @@ module Decidim
|
|
9
9
|
graphql_name "ComponentFilter"
|
10
10
|
description "A type used for filtering any component parent objects"
|
11
11
|
|
12
|
-
argument :type,
|
13
|
-
type: GraphQL::Types::String,
|
14
|
-
description: "Filters by type of component",
|
15
|
-
required: false,
|
16
|
-
prepare: lambda { |value, _ctx|
|
17
|
-
{ manifest_name: value.downcase }
|
18
|
-
}
|
19
12
|
argument :name,
|
20
13
|
type: GraphQL::Types::String,
|
21
14
|
description: "Filters by name of the component, additional locale parameter can be provided to specify in which to search",
|
22
15
|
required: false,
|
23
|
-
prepare:
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
16
|
+
prepare: :prepare_name
|
17
|
+
|
18
|
+
argument :type,
|
19
|
+
type: GraphQL::Types::String,
|
20
|
+
description: "Filters by type of component",
|
21
|
+
required: false,
|
22
|
+
prepare: :prepare_type
|
30
23
|
|
31
24
|
argument :with_geolocation_enabled,
|
32
25
|
type: GraphQL::Types::Boolean,
|
33
26
|
description: "Returns components with geolocation activated (may be Proposals or Meetings)",
|
34
27
|
required: false,
|
35
|
-
prepare:
|
36
|
-
->(_model_name, _locale) { ["(settings->'global'->>'geocoding_enabled')::boolean is ? or manifest_name='meetings'", active] }
|
37
|
-
}
|
28
|
+
prepare: :prepare_geolocation_enabled
|
38
29
|
|
39
30
|
argument :with_comments_enabled,
|
40
31
|
type: GraphQL::Types::Boolean,
|
41
32
|
description: "Returns components with comments enabled globally (can still be deactivated in the current step if the component has steps)",
|
42
33
|
required: false,
|
43
|
-
prepare:
|
44
|
-
|
45
|
-
|
34
|
+
prepare: :prepare_comments_enabled
|
35
|
+
|
36
|
+
def self.prepare_comments_enabled(active, _ctx)
|
37
|
+
lambda do |_model_name, _locale|
|
38
|
+
["(settings->'global'->>'comments_enabled')::boolean is ?", active]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.prepare_geolocation_enabled(active, _ctx)
|
43
|
+
lambda do |_model_name, _locale|
|
44
|
+
["(settings->'global'->>'geocoding_enabled')::boolean is ? or manifest_name='meetings'", active]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.prepare_name(search, ctx)
|
49
|
+
lambda do |model_name, locale|
|
50
|
+
locale = ctx[:current_organization].default_locale if locale.blank?
|
51
|
+
op = Arel::Nodes::InfixOperation.new("->>", model_name.arel_table[:name], Arel::Nodes.build_quoted(locale))
|
52
|
+
op.matches("%#{search}%")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.prepare_type(value, _ctx)
|
57
|
+
{ manifest_name: value.downcase }
|
58
|
+
end
|
46
59
|
end
|
47
60
|
end
|
48
61
|
end
|
@@ -27,63 +27,72 @@ module Decidim
|
|
27
27
|
```
|
28
28
|
"
|
29
29
|
|
30
|
-
argument :
|
31
|
-
type:
|
32
|
-
description: "
|
30
|
+
argument :exclude_ids,
|
31
|
+
type: [ID],
|
32
|
+
description: "Excludes users contained in given ids. Valid values are one or more IDs (passed as an array)",
|
33
33
|
required: false,
|
34
|
-
prepare:
|
35
|
-
type = value.downcase.camelcase
|
36
|
-
type = "UserGroup" if %w(Group Usergroup).include?(type)
|
37
|
-
{ type: "Decidim::#{type}" }
|
38
|
-
}
|
34
|
+
prepare: :prepare_exclude_ids
|
39
35
|
argument :name,
|
40
36
|
type: String,
|
41
37
|
description: "Filters by name of the user entity. Searches (case-insensitive) any fragment of the provided string",
|
42
38
|
required: false,
|
43
|
-
prepare:
|
44
|
-
[
|
45
|
-
lambda { |model_class, _locale|
|
46
|
-
model_class.arel_table[:name].matches("%#{value}%")
|
47
|
-
}
|
48
|
-
]
|
49
|
-
}
|
39
|
+
prepare: :prepare_name
|
50
40
|
argument :nickname,
|
51
41
|
type: String,
|
52
42
|
description: "Filters by nickname of the user entity. Searches (case-insensitive) any fragment of the provided string",
|
53
43
|
required: false,
|
54
|
-
prepare:
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
]
|
61
|
-
}
|
44
|
+
prepare: :prepare_nickname
|
45
|
+
argument :type,
|
46
|
+
type: String,
|
47
|
+
description: "Filters by type of entity (User or UserGroup)",
|
48
|
+
required: false,
|
49
|
+
prepare: :prepare_type
|
62
50
|
argument :wildcard,
|
63
51
|
type: String,
|
64
52
|
description: "Filters by nickname or name of the user entity. Searches (case-insensitive) any fragment of the provided string",
|
65
53
|
required: false,
|
66
|
-
prepare:
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
54
|
+
prepare: :prepare_wildcard
|
55
|
+
def self.prepare_nickname(value, _ctx)
|
56
|
+
value = value[1..-1] if value.starts_with? "@"
|
57
|
+
[
|
58
|
+
lambda do |model_class, _locale|
|
59
|
+
model_class.arel_table[:nickname].matches("%#{value}%")
|
60
|
+
end
|
61
|
+
]
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.prepare_name(value, _ctx)
|
65
|
+
[
|
66
|
+
lambda do |model_class, _locale|
|
67
|
+
model_class.arel_table[:name].matches("%#{value}%")
|
68
|
+
end
|
69
|
+
]
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.prepare_exclude_ids(value, _ctx)
|
73
|
+
[
|
74
|
+
lambda do |model_class, _locale|
|
75
|
+
model_class.arel_table[:id].not_in(value)
|
76
|
+
end
|
77
|
+
]
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.prepare_type(value, _ctx)
|
81
|
+
type = value.downcase.camelcase
|
82
|
+
type = "UserGroup" if %w(Group Usergroup).include?(type)
|
83
|
+
{ type: "Decidim::#{type}" }
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.prepare_wildcard(value, _ctx)
|
87
|
+
value = value[1..-1] if value.starts_with? "@"
|
88
|
+
[
|
89
|
+
lambda do |model_class, _locale|
|
90
|
+
op_name = model_class.arel_table[:name].matches("%#{value}%")
|
91
|
+
op_nick = model_class.arel_table[:nickname].matches("%#{value}%")
|
92
|
+
op_name.or(op_nick)
|
93
|
+
end
|
94
|
+
]
|
95
|
+
end
|
87
96
|
end
|
88
97
|
end
|
89
98
|
end
|
@@ -9,24 +9,26 @@ module Decidim
|
|
9
9
|
description "A type used for sorting any component parent objects"
|
10
10
|
|
11
11
|
argument :id, GraphQL::Types::String, "Sort by ID, valid values are ASC or DESC", required: false
|
12
|
-
argument :weight, GraphQL::Types::String, "Sort by weight (order in the website), valid values are ASC or DESC", required: false
|
13
|
-
argument :type,
|
14
|
-
type: GraphQL::Types::String,
|
15
|
-
description: "Sort by type of component, alphabetically, valid values are ASC or DESC",
|
16
|
-
required: false,
|
17
|
-
as: :manifest_name
|
18
12
|
argument :name,
|
19
13
|
type: GraphQL::Types::String,
|
20
14
|
description: "Sort by name of the component, alphabetically, valid values are ASC or DESC",
|
21
15
|
required: false,
|
22
16
|
as: :name,
|
23
|
-
prepare:
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
17
|
+
prepare: :prepared_name
|
18
|
+
argument :type,
|
19
|
+
type: GraphQL::Types::String,
|
20
|
+
description: "Sort by type of component, alphabetically, valid values are ASC or DESC",
|
21
|
+
required: false,
|
22
|
+
as: :manifest_name
|
23
|
+
argument :weight, GraphQL::Types::String, "Sort by weight (order in the website), valid values are ASC or DESC", required: false
|
24
|
+
|
25
|
+
def self.prepared_name(direction, ctx)
|
26
|
+
lambda do |locale|
|
27
|
+
locale = ctx[:current_organization].default_locale if locale.blank?
|
28
|
+
field = Arel::Nodes::InfixOperation.new("->", Arel.sql("name"), Arel::Nodes.build_quoted(locale))
|
29
|
+
Arel::Nodes::InfixOperation.new("", field, Arel.sql(direction.upcase))
|
30
|
+
end
|
31
|
+
end
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
@@ -7,10 +7,6 @@ module Decidim
|
|
7
7
|
description "A type used for sorting any component parent objects"
|
8
8
|
|
9
9
|
argument :id, GraphQL::Types::String, "Sort by ID, valid values are ASC or DESC", required: false
|
10
|
-
argument :type,
|
11
|
-
type: GraphQL::Types::String,
|
12
|
-
description: "Sort by type of user entity (user or group), alphabetically, valid values are ASC or DESC",
|
13
|
-
required: false
|
14
10
|
argument :name,
|
15
11
|
type: GraphQL::Types::String,
|
16
12
|
description: "Sort by name of the user entity (user or group), alphabetically, valid values are ASC or DESC",
|
@@ -19,6 +15,10 @@ module Decidim
|
|
19
15
|
type: GraphQL::Types::String,
|
20
16
|
description: "Sort by nickname of the user entity (user or group), alphabetically, valid values are ASC or DESC",
|
21
17
|
required: false
|
18
|
+
argument :type,
|
19
|
+
type: GraphQL::Types::String,
|
20
|
+
description: "Sort by type of user entity (user or group), alphabetically, valid values are ASC or DESC",
|
21
|
+
required: false
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -9,6 +9,9 @@ module Decidim
|
|
9
9
|
description "An author"
|
10
10
|
|
11
11
|
field :id, ID, "The author ID", null: false
|
12
|
+
|
13
|
+
field :deleted, Boolean, "Whether the author's account has been deleted or not", null: false
|
14
|
+
|
12
15
|
field :name, String, "The author's name", null: false
|
13
16
|
field :nickname, String, "The author's nickname", null: false
|
14
17
|
|
@@ -21,8 +24,6 @@ module Decidim
|
|
21
24
|
object.organization.name
|
22
25
|
end
|
23
26
|
|
24
|
-
field :deleted, Boolean, "Whether the author's account has been deleted or not", null: false
|
25
|
-
|
26
27
|
def self.resolve_type(obj, _ctx)
|
27
28
|
return Decidim::Core::UserType if obj.is_a? Decidim::User
|
28
29
|
return Decidim::Core::UserGroupType if obj.is_a? Decidim::UserGroup
|
@@ -12,6 +12,11 @@ module Decidim
|
|
12
12
|
description: "The total amount of co-authors that contributed to the entity. Note that this field may include also non-user authors like meetings or the organization",
|
13
13
|
null: true
|
14
14
|
|
15
|
+
field :authors, [Decidim::Core::AuthorInterface, { null: true }],
|
16
|
+
method: :user_identities,
|
17
|
+
description: "The resource co-authors. Include only users or groups of users",
|
18
|
+
null: false
|
19
|
+
|
15
20
|
field :author, Decidim::Core::AuthorInterface,
|
16
21
|
description: "The resource author. Note that this can be null on official proposals or meeting-proposals",
|
17
22
|
null: true
|
@@ -20,11 +25,6 @@ module Decidim
|
|
20
25
|
author = object.creator_identity
|
21
26
|
author if author.is_a?(Decidim::User) || author.is_a?(Decidim::UserGroup)
|
22
27
|
end
|
23
|
-
|
24
|
-
field :authors, [Decidim::Core::AuthorInterface, { null: true }],
|
25
|
-
method: :user_identities,
|
26
|
-
description: "The resource co-authors. Include only users or groups of users",
|
27
|
-
null: false
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -9,11 +9,11 @@ module Decidim
|
|
9
9
|
|
10
10
|
field :endorsements, [Decidim::Core::AuthorInterface, { null: true }], "The endorsements of this object.", null: false
|
11
11
|
|
12
|
+
field :endorsements_count, Integer, description: "The total amount of endorsements the object has received", null: true
|
13
|
+
|
12
14
|
def endorsements
|
13
15
|
object.endorsements.map(&:normalized_author)
|
14
16
|
end
|
15
|
-
|
16
|
-
field :endorsements_count, Integer, description: "The total amount of endorsements the object has received", null: true
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -8,11 +8,13 @@ module Decidim
|
|
8
8
|
description "The interface that all participatory spaces should implement."
|
9
9
|
|
10
10
|
field :id, GraphQL::Types::ID, "The participatory space's unique ID", null: false
|
11
|
-
|
11
|
+
field :components, [ComponentInterface, { null: true }], null: true, description: "Lists the components this space contains." do
|
12
|
+
argument :filter, ComponentInputFilter, "Provides several methods to filter the results", required: false
|
13
|
+
argument :order, ComponentInputSort, "Provides several methods to order the results", required: false
|
14
|
+
end
|
15
|
+
field :stats, [Decidim::Core::StatisticType, { null: true }], "The statistics collection of this participatory space", null: true
|
12
16
|
field :title, TranslatedFieldType, "The graphql_name of this participatory space.", null: false
|
13
|
-
|
14
17
|
field :type, String, description: "The participatory space class name. i.e. Decidim::ParticipatoryProcess", null: false
|
15
|
-
|
16
18
|
field :manifest, Decidim::Core::ParticipatorySpaceManifestType, description: "The manifest information for the participatory space.", null: false
|
17
19
|
|
18
20
|
def type
|
@@ -23,17 +25,10 @@ module Decidim
|
|
23
25
|
ParticipatorySpaceManifestPresenter.new(object.manifest, object.organization)
|
24
26
|
end
|
25
27
|
|
26
|
-
field :components, [ComponentInterface, { null: true }], null: true, description: "Lists the components this space contains." do
|
27
|
-
argument :filter, ComponentInputFilter, "Provides several methods to filter the results", required: false
|
28
|
-
argument :order, ComponentInputSort, "Provides several methods to order the results", required: false
|
29
|
-
end
|
30
|
-
|
31
28
|
def components(filter: {}, order: {})
|
32
29
|
ComponentList.new.call(object, { filter:, order: }, context)
|
33
30
|
end
|
34
31
|
|
35
|
-
field :stats, [Decidim::Core::StatisticType, { null: true }], null: true
|
36
|
-
|
37
32
|
def stats
|
38
33
|
return if object.respond_to?(:show_statistics) && !object.show_statistics
|
39
34
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Core
|
5
|
+
# This interface represents a categorizable object.
|
6
|
+
module TaxonomizableInterface
|
7
|
+
include Decidim::Api::Types::BaseInterface
|
8
|
+
description "An interface that can be used in taxonomizable objects."
|
9
|
+
|
10
|
+
field :taxonomies, [Decidim::Core::TaxonomyType], "The object's taxonomies", null: true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -5,15 +5,13 @@ module Decidim
|
|
5
5
|
class AmendmentType < Decidim::Api::Types::BaseObject
|
6
6
|
description "An amendment"
|
7
7
|
|
8
|
-
field :id, GraphQL::Types::ID, "The id of this amendment", null: false
|
9
|
-
field :state, GraphQL::Types::String, "The status of this amendment", null: false
|
10
|
-
field :amender, Decidim::Core::AuthorInterface, "The author of this amendment", null: false
|
11
|
-
|
12
|
-
field :amendable_type, GraphQL::Types::String, method: :decidim_amendable_type, description: "Type of the amendable object", null: false
|
13
|
-
field :emendation_type, GraphQL::Types::String, method: :decidim_emendation_type, description: "Type of the emendation object", null: false
|
14
|
-
|
15
8
|
field :amendable, AmendableEntityInterface, "The original amended resource (currently, a proposal only)", null: false
|
9
|
+
field :amendable_type, GraphQL::Types::String, method: :decidim_amendable_type, description: "Type of the amendable object", null: false
|
10
|
+
field :amender, Decidim::Core::AuthorInterface, "The author of this amendment", null: false
|
16
11
|
field :emendation, AmendableEntityInterface, "The emendation (currently, a proposal only)", null: false
|
12
|
+
field :emendation_type, GraphQL::Types::String, method: :decidim_emendation_type, description: "Type of the emendation object", null: false
|
13
|
+
field :id, GraphQL::Types::ID, "The id of this amendment", null: false
|
14
|
+
field :state, GraphQL::Types::String, "The status of this amendment", null: false
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
@@ -3,14 +3,14 @@
|
|
3
3
|
module Decidim
|
4
4
|
module Core
|
5
5
|
class AreaApiType < Decidim::Api::Types::BaseObject
|
6
|
+
implements Decidim::Core::TimestampsInterface
|
7
|
+
|
6
8
|
graphql_name "Area"
|
7
9
|
description "An area."
|
8
10
|
|
11
|
+
field :area_type, Decidim::Core::AreaTypeType, "The area type of this area", null: true
|
9
12
|
field :id, GraphQL::Types::ID, "Internal ID for this area", null: false
|
10
13
|
field :name, Decidim::Core::TranslatedFieldType, "The graphql_name of this area.", null: false
|
11
|
-
field :area_type, Decidim::Core::AreaTypeType, "The area type of this area", null: true
|
12
|
-
field :created_at, Decidim::Core::DateTimeType, "The time this assembly was created", null: false
|
13
|
-
field :updated_at, Decidim::Core::DateTimeType, "The time this assembly was updated", null: false
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -5,11 +5,11 @@ module Decidim
|
|
5
5
|
class AttachmentType < Decidim::Api::Types::BaseObject
|
6
6
|
description "A file attachment"
|
7
7
|
|
8
|
-
field :title, Decidim::Core::TranslatedFieldType, "The title of this attachment.", null: false
|
9
8
|
field :description, Decidim::Core::TranslatedFieldType, "The description of this attachment.", null: false
|
10
|
-
field :url, GraphQL::Types::String, "The url of this attachment", null: false
|
11
|
-
field :type, GraphQL::Types::String, "The type of this attachment", method: :file_type, null: false
|
12
9
|
field :thumbnail, GraphQL::Types::String, "A thumbnail of this attachment, if it is an image.", method: :thumbnail_url, null: true
|
10
|
+
field :title, Decidim::Core::TranslatedFieldType, "The title of this attachment.", null: false
|
11
|
+
field :type, GraphQL::Types::String, "The type of this attachment", method: :file_type, null: false
|
12
|
+
field :url, GraphQL::Types::String, "The url of this attachment", null: false
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
@@ -5,10 +5,10 @@ module Decidim
|
|
5
5
|
class CategoryType < Decidim::Api::Types::BaseObject
|
6
6
|
description "A category that can be applied to other resources."
|
7
7
|
|
8
|
-
field :id, GraphQL::Types::ID, null: false
|
8
|
+
field :id, GraphQL::Types::ID, "The id for this category", null: false
|
9
9
|
field :name, Decidim::Core::TranslatedFieldType, "The name of this category.", null: false
|
10
|
-
field :subcategories, [Decidim::Core::CategoryType, { null: true }], "Subcategories of this category.", null: false
|
11
10
|
field :parent, Decidim::Core::CategoryType, "This category's parent category.", null: true
|
11
|
+
field :subcategories, [Decidim::Core::CategoryType, { null: true }], "Subcategories of this category.", null: false
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -6,8 +6,12 @@ module Decidim
|
|
6
6
|
class DecidimType < Decidim::Api::Types::BaseObject
|
7
7
|
description "Decidim's framework-related properties."
|
8
8
|
|
9
|
-
field :version, GraphQL::Types::String, "The current decidim's version of this deployment.", null: false
|
10
9
|
field :application_name, GraphQL::Types::String, "The current installation's name.", null: false
|
10
|
+
field :version, GraphQL::Types::String, "The current decidim's version of this deployment.", null: true
|
11
|
+
|
12
|
+
def version
|
13
|
+
object.version if Decidim::Api.disclose_system_version
|
14
|
+
end
|
11
15
|
end
|
12
16
|
end
|
13
17
|
end
|
@@ -5,8 +5,8 @@ module Decidim
|
|
5
5
|
class FingerprintType < Decidim::Api::Types::BaseObject
|
6
6
|
description "A fingerprint object"
|
7
7
|
|
8
|
-
field :value, GraphQL::Types::String, "The the hash value for the fingerprint", null: false
|
9
8
|
field :source, GraphQL::Types::String, description: "Returns the source String (usually a json) from which the fingerprint is generated.", null: false
|
9
|
+
field :value, GraphQL::Types::String, "The the hash value for the fingerprint", null: false
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -7,8 +7,8 @@ module Decidim
|
|
7
7
|
description "Represents a particular translation of a LocalizedStringType"
|
8
8
|
|
9
9
|
field :locale, GraphQL::Types::String, "The standard locale of this translation.", null: false
|
10
|
-
field :text, GraphQL::Types::String, "The content of this translation.", null: true
|
11
10
|
field :machine_translated, GraphQL::Types::Boolean, "Whether this string is machine translated or not.", null: false
|
11
|
+
field :text, GraphQL::Types::String, "The content of this translation.", null: true
|
12
12
|
|
13
13
|
def machine_translated
|
14
14
|
if object.respond_to?(:machine_translated)
|