decidim-core 0.15.2 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of decidim-core might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +14 -1
- data/app/assets/config/decidim_core_manifest.js +14 -12
- data/app/assets/images/decidim/pattern.png +0 -0
- data/app/assets/javascripts/decidim.js.es6 +4 -0
- data/app/assets/javascripts/decidim/floating_help.js.es6 +40 -0
- data/app/assets/javascripts/decidim/input_hashtags.js.es6 +6 -4
- data/app/assets/javascripts/decidim/notifications.js.es6 +1 -1
- data/app/assets/javascripts/decidim/tooltip_keep_on_hover.js.es6 +18 -0
- data/app/assets/javascripts/decidim/vizzs/areachart.js.es6 +52 -10
- data/app/assets/javascripts/decidim/vizzs/metrics.js.es6 +68 -22
- data/app/assets/javascripts/decidim/vizzs/orgchart.js.es6 +10 -13
- data/app/assets/stylesheets/decidim/conference-diploma.css.scss +61 -0
- data/app/assets/stylesheets/decidim/layouts/_home.scss +1 -1
- data/app/assets/stylesheets/decidim/modules/_buttons.scss +4 -0
- data/app/assets/stylesheets/decidim/modules/_cards.scss +17 -1
- data/app/assets/stylesheets/decidim/modules/_conference-programme.scss +0 -4
- data/app/assets/stylesheets/decidim/modules/_filters.scss +37 -2
- data/app/assets/stylesheets/decidim/modules/_floating-helper.scss +106 -0
- data/app/assets/stylesheets/decidim/modules/_forms.scss +22 -0
- data/app/assets/stylesheets/decidim/modules/_help.scss +4 -0
- data/app/assets/stylesheets/decidim/modules/_layout.scss +1 -0
- data/app/assets/stylesheets/decidim/modules/_margins.scss +1 -0
- data/app/assets/stylesheets/decidim/modules/_modules.scss +1 -1
- data/app/assets/stylesheets/decidim/modules/_navbar.scss +5 -1
- data/app/assets/stylesheets/decidim/modules/_order-by.scss +11 -1
- data/app/assets/stylesheets/decidim/modules/_process-header.scss +36 -38
- data/app/assets/stylesheets/decidim/modules/_process-nav.scss +61 -10
- data/app/assets/stylesheets/decidim/modules/_process-phase.scss +63 -30
- data/app/assets/stylesheets/decidim/modules/_share.scss +4 -0
- data/app/assets/stylesheets/decidim/modules/_typography.scss +17 -0
- data/app/assets/stylesheets/decidim/{modules → vizzs}/_orgchart.scss +2 -10
- data/app/cells/decidim/activities_cell.rb +6 -2
- data/app/cells/decidim/activity/show.erb +22 -19
- data/app/cells/decidim/activity_cell.rb +35 -5
- data/app/cells/decidim/amendable/amend_button_card/show.erb +9 -0
- data/app/cells/decidim/amendable/amend_button_card_cell.rb +43 -0
- data/app/cells/decidim/amendable/amenders_list/show.erb +18 -0
- data/app/cells/decidim/amendable/amenders_list_cell.rb +7 -0
- data/app/cells/decidim/amendable/announcement_cell.rb +58 -0
- data/app/cells/decidim/amendable/emendation_actions/show.erb +13 -0
- data/app/cells/decidim/amendable/emendation_actions_cell.rb +52 -0
- data/app/cells/decidim/amendable/promote_button_card/show.erb +9 -0
- data/app/cells/decidim/amendable/promote_button_card_cell.rb +47 -0
- data/app/cells/decidim/author/profile_inline.erb +23 -4
- data/app/cells/decidim/author/profile_minicard.erb +25 -0
- data/app/cells/decidim/author/show.erb +0 -1
- data/app/cells/decidim/author_cell.rb +6 -0
- data/app/cells/decidim/card_cell.rb +2 -4
- data/app/cells/decidim/card_m/top.erb +1 -1
- data/app/cells/decidim/card_m_cell.rb +3 -0
- data/app/cells/decidim/content_blocks/last_activity_cell.rb +1 -1
- data/app/cells/decidim/follow_button/show.erb +0 -1
- data/app/cells/decidim/follow_button_cell.rb +10 -0
- data/app/cells/decidim/following/show.erb +1 -1
- data/app/cells/decidim/following_cell.rb +1 -1
- data/app/cells/decidim/notifications/show.erb +1 -0
- data/app/cells/decidim/pad_iframe/show.erb +14 -0
- data/app/cells/decidim/pad_iframe_cell.rb +57 -0
- data/app/cells/decidim/profile/user_tabs.erb +8 -6
- data/app/cells/decidim/profile_cell.rb +1 -1
- data/app/cells/decidim/profile_sidebar/show.erb +58 -42
- data/app/cells/decidim/profile_sidebar_cell.rb +6 -0
- data/app/cells/decidim/search_results/show.erb +8 -0
- data/app/cells/decidim/search_results_cell.rb +38 -0
- data/app/cells/decidim/search_results_section/show.erb +24 -0
- data/app/cells/decidim/search_results_section_cell.rb +35 -0
- data/app/cells/decidim/user_activity/show.erb +15 -0
- data/app/cells/decidim/user_activity_cell.rb +17 -0
- data/app/cells/decidim/user_profile/header.erb +1 -16
- data/app/cells/decidim/user_profile/user_data.erb +16 -0
- data/app/cells/decidim/user_profile_cell.rb +4 -0
- data/app/cells/decidim/user_timeline/show.erb +15 -0
- data/app/cells/decidim/user_timeline_cell.rb +17 -0
- data/app/commands/decidim/accept_user_group_join_request.rb +1 -1
- data/app/commands/decidim/amendable/accept.rb +84 -0
- data/app/commands/decidim/amendable/create.rb +103 -0
- data/app/commands/decidim/amendable/promote.rb +79 -0
- data/app/commands/decidim/amendable/reject.rb +60 -0
- data/app/commands/decidim/amendable/withdraw.rb +46 -0
- data/app/commands/decidim/create_omniauth_registration.rb +17 -1
- data/app/commands/decidim/create_registration.rb +2 -0
- data/app/commands/decidim/demote_membership.rb +1 -1
- data/app/commands/decidim/invite_user.rb +1 -1
- data/app/commands/decidim/invite_user_to_group.rb +1 -1
- data/app/commands/decidim/join_user_group.rb +1 -7
- data/app/commands/decidim/messaging/reply_to_conversation.rb +1 -1
- data/app/commands/decidim/promote_membership.rb +1 -1
- data/app/commands/decidim/reject_user_group_join_request.rb +1 -1
- data/app/commands/decidim/remove_user_from_group.rb +1 -1
- data/app/commands/decidim/search.rb +65 -16
- data/app/commands/decidim/update_account.rb +1 -1
- data/app/commands/decidim/update_notifications_settings.rb +2 -1
- data/app/commands/decidim/update_user_interests.rb +35 -0
- data/app/controllers/concerns/decidim/amendments_controller.rb +104 -0
- data/app/controllers/concerns/decidim/participatory_space_context.rb +28 -6
- data/app/controllers/concerns/decidim/user_groups.rb +23 -0
- data/app/controllers/concerns/decidim/user_profile.rb +2 -4
- data/app/controllers/decidim/components/base_controller.rb +1 -0
- data/app/controllers/decidim/devise/confirmations_controller.rb +9 -0
- data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +2 -1
- data/app/controllers/decidim/devise/passwords_controller.rb +6 -0
- data/app/controllers/decidim/devise/registrations_controller.rb +5 -0
- data/app/controllers/decidim/devise/sessions_controller.rb +12 -0
- data/app/controllers/decidim/group_admins_controller.rb +3 -0
- data/app/controllers/decidim/group_email_confirmations_controller.rb +32 -0
- data/app/controllers/decidim/group_invites_controller.rb +3 -0
- data/app/controllers/decidim/group_members_controller.rb +3 -0
- data/app/controllers/decidim/groups_controller.rb +3 -0
- data/app/controllers/decidim/homepage_controller.rb +10 -0
- data/app/controllers/decidim/last_activities_controller.rb +1 -1
- data/app/controllers/decidim/messaging/conversations_controller.rb +11 -2
- data/app/controllers/decidim/open_data_controller.rb +31 -0
- data/app/controllers/decidim/own_user_groups_controller.rb +3 -1
- data/app/controllers/decidim/pages_controller.rb +7 -15
- data/app/controllers/decidim/profiles_controller.rb +13 -2
- data/app/controllers/decidim/searches_controller.rb +11 -2
- data/app/controllers/decidim/user_activities_controller.rb +28 -0
- data/app/controllers/decidim/user_group_join_requests_controller.rb +3 -0
- data/app/controllers/decidim/user_interests_controller.rb +32 -0
- data/app/controllers/decidim/user_timeline_controller.rb +40 -0
- data/app/events/decidim/amendable/amendment_accepted_event.rb +23 -0
- data/app/events/decidim/amendable/amendment_base_event.rb +39 -0
- data/app/events/decidim/amendable/amendment_created_event.rb +23 -0
- data/app/events/decidim/amendable/amendment_rejected_event.rb +23 -0
- data/app/events/decidim/amendable/emendation_promoted_event.rb +23 -0
- data/app/events/decidim/welcome_notification_event.rb +58 -0
- data/app/forms/decidim/amendable/create_form.rb +54 -0
- data/app/forms/decidim/amendable/form.rb +22 -0
- data/app/forms/decidim/amendable/promote_form.rb +26 -0
- data/app/forms/decidim/amendable/reject_form.rb +14 -0
- data/app/forms/decidim/amendable/review_form.rb +35 -0
- data/app/forms/decidim/notifications_settings_form.rb +19 -6
- data/app/forms/decidim/omniauth_registration_form.rb +2 -1
- data/app/forms/decidim/user_group_form.rb +1 -2
- data/app/forms/decidim/user_interest_scope_form.rb +25 -0
- data/app/forms/decidim/user_interests_form.rb +22 -0
- data/app/helpers/decidim/amendments_helper.rb +130 -0
- data/app/helpers/decidim/application_helper.rb +19 -2
- data/app/helpers/decidim/card_helper.rb +0 -2
- data/app/helpers/decidim/cells_paginate_helper.rb +4 -0
- data/app/helpers/decidim/contextual_help_helper.rb +10 -0
- data/app/helpers/decidim/cta_button_helper.rb +3 -1
- data/app/helpers/decidim/decidim_form_helper.rb +1 -1
- data/app/helpers/decidim/layout_helper.rb +13 -0
- data/app/helpers/decidim/multi_translation_helper.rb +0 -0
- data/app/helpers/decidim/omniauth_helper.rb +9 -1
- data/app/helpers/decidim/pad_helper.rb +16 -0
- data/app/helpers/decidim/participatory_space_helpers.rb +15 -0
- data/app/helpers/decidim/searches_helper.rb +50 -6
- data/app/helpers/decidim/translations_helper.rb +3 -2
- data/app/jobs/decidim/email_notification_generator_job.rb +4 -2
- data/app/jobs/decidim/metric_job.rb +1 -1
- data/app/jobs/decidim/notification_generator_for_recipient_job.rb +2 -2
- data/app/jobs/decidim/notification_generator_job.rb +4 -2
- data/app/jobs/decidim/open_data_job.rb +16 -0
- data/app/mailers/decidim/messaging/conversation_mailer.rb +5 -2
- data/app/mailers/decidim/newsletter_mailer.rb +6 -2
- data/app/mailers/decidim/notification_mailer.rb +2 -2
- data/app/models/decidim/action_log.rb +7 -0
- data/app/models/decidim/amendment.rb +17 -0
- data/app/models/decidim/component.rb +8 -0
- data/app/models/decidim/contextual_help_section.rb +41 -0
- data/app/models/decidim/follow.rb +30 -0
- data/app/models/decidim/notification.rb +11 -1
- data/app/models/decidim/organization.rb +41 -0
- data/app/models/decidim/searchable_resource.rb +3 -0
- data/app/models/decidim/static_page.rb +11 -0
- data/app/models/decidim/static_page_topic.rb +12 -0
- data/app/models/decidim/user.rb +25 -2
- data/app/models/decidim/user_base_entity.rb +0 -6
- data/app/models/decidim/user_group.rb +29 -3
- data/app/permissions/decidim/permissions.rb +12 -0
- data/app/presenters/decidim/admin_log/organization_presenter.rb +13 -0
- data/app/presenters/decidim/admin_log/user_group_presenter.rb +1 -1
- data/app/presenters/decidim/admin_log/user_presenter.rb +1 -1
- data/app/presenters/decidim/hashtag_presenter.rb +7 -2
- data/app/presenters/decidim/metric_charts_presenter.rb +54 -21
- data/app/presenters/decidim/user_presenter.rb +4 -8
- data/app/queries/decidim/messaging/user_conversations.rb +1 -1
- data/app/queries/decidim/metric_manage.rb +16 -2
- data/app/queries/decidim/metric_measure.rb +35 -0
- data/app/queries/decidim/metrics/followers_metric_manage.rb +64 -0
- data/app/queries/decidim/metrics/participants_metric_manage.rb +72 -0
- data/app/queries/decidim/metrics/users_metric_manage.rb +1 -1
- data/app/queries/decidim/public_components.rb +32 -0
- data/app/resolvers/decidim/core/metric_resolver.rb +43 -11
- data/app/services/decidim/action_logger.rb +10 -0
- data/app/services/decidim/activity_search.rb +88 -13
- data/app/services/decidim/email_notification_generator.rb +23 -8
- data/app/services/decidim/events_manager.rb +9 -3
- data/app/services/decidim/home_activity_search.rb +80 -0
- data/app/services/decidim/log/diff_changeset_calculator.rb +3 -1
- data/app/services/decidim/notification_generator.rb +19 -7
- data/app/services/decidim/notification_generator_for_recipient.rb +6 -9
- data/app/services/decidim/open_data_exporter.rb +55 -0
- data/app/uploaders/decidim/open_data_uploader.rb +17 -0
- data/app/views/decidim/amendments/_form.html.erb +30 -0
- data/app/views/decidim/amendments/_review_form.html.erb +19 -0
- data/app/views/decidim/amendments/new.html.erb +29 -0
- data/app/views/decidim/amendments/review.html.erb +33 -0
- data/app/views/decidim/devise/registrations/new.html.erb +2 -2
- data/app/views/decidim/devise/sessions/new.html.erb +42 -29
- data/app/views/decidim/devise/shared/_links.html.erb +3 -3
- data/app/views/decidim/devise/shared/_omniauth_buttons.html.erb +7 -5
- data/app/views/decidim/follows/update_button.js.erb +1 -1
- data/app/views/decidim/group_members/index.html.erb +1 -1
- data/app/views/decidim/groups/_form.html.erb +9 -8
- data/app/views/decidim/groups/new.html.erb +3 -0
- data/app/views/decidim/{pages/home.html.erb → homepage/show.html.erb} +0 -0
- data/app/views/decidim/messaging/conversation_mailer/new_conversation.html.erb +6 -0
- data/app/views/decidim/messaging/conversation_mailer/new_message.html.erb +6 -0
- data/app/views/decidim/messaging/conversations/_message.html.erb +14 -0
- data/app/views/decidim/messaging/conversations/_reply.html.erb +11 -0
- data/app/views/decidim/messaging/conversations/_show.html.erb +21 -0
- data/app/views/decidim/messaging/conversations/_start.html.erb +12 -0
- data/app/views/decidim/messaging/conversations/create.js.erb +1 -1
- data/app/views/decidim/messaging/conversations/index.html.erb +51 -1
- data/app/views/decidim/messaging/conversations/new.html.erb +5 -1
- data/app/views/decidim/messaging/conversations/show.html.erb +9 -1
- data/app/views/decidim/messaging/conversations/update.js.erb +1 -1
- data/app/views/decidim/notification_mailer/event_received.html.erb +13 -3
- data/app/views/decidim/notifications/index.html.erb +5 -1
- data/app/views/decidim/notifications_settings/show.html.erb +19 -0
- data/app/views/decidim/pages/_standalone.html.erb +21 -0
- data/app/views/decidim/pages/_tabbed.html.erb +45 -0
- data/app/views/decidim/pages/index.html.erb +68 -29
- data/app/views/decidim/pages/show.html.erb +28 -0
- data/app/views/decidim/profiles/show.html.erb +1 -1
- data/app/views/decidim/searches/_count.html.erb +26 -1
- data/app/views/decidim/searches/_filters.html.erb +40 -17
- data/app/views/decidim/searches/index.html.erb +5 -16
- data/app/views/decidim/searches/index.js.erb +5 -3
- data/app/views/decidim/shared/_extended_navigation_bar.html.erb +50 -0
- data/app/views/decidim/shared/_floating_help.html.erb +30 -0
- data/app/views/decidim/shared/_follow_button.html.erb +1 -1
- data/app/views/decidim/shared/_login_modal.html.erb +35 -22
- data/app/views/decidim/shared/_results_per_page.html.erb +1 -1
- data/app/views/decidim/shared/_share_modal.html.erb +1 -1
- data/app/views/decidim/user_activities/index.html.erb +5 -0
- data/app/views/decidim/user_interests/_areas.html.erb +14 -0
- data/app/views/decidim/user_interests/_scopes.html.erb +15 -0
- data/app/views/decidim/user_interests/show.html.erb +12 -0
- data/app/views/decidim/user_timeline/index.html.erb +4 -0
- data/app/views/layouts/decidim/_user_menu.html.erb +1 -1
- data/app/views/layouts/decidim/_wrapper.html.erb +12 -5
- data/config/locales/ca.yml +199 -13
- data/config/locales/de.yml +200 -13
- data/config/locales/en.yml +200 -13
- data/config/locales/es-PY.yml +200 -13
- data/config/locales/es.yml +200 -13
- data/config/locales/eu.yml +200 -13
- data/config/locales/fi-pl.yml +200 -13
- data/config/locales/fi.yml +200 -13
- data/config/locales/fr.yml +200 -13
- data/config/locales/gl.yml +200 -13
- data/config/locales/hu.yml +200 -13
- data/config/locales/id-ID.yml +198 -13
- data/config/locales/it.yml +200 -13
- data/config/locales/nl.yml +200 -13
- data/config/locales/pl.yml +204 -13
- data/config/locales/pt-BR.yml +200 -13
- data/config/locales/pt.yml +200 -13
- data/config/locales/ru.yml +2 -16
- data/config/locales/sv.yml +200 -13
- data/config/locales/tr-TR.yml +200 -13
- data/config/locales/uk.yml +2 -16
- data/config/routes.rb +27 -1
- data/db/migrate/20171212103803_create_unique_nicknames.rb +1 -1
- data/db/migrate/20180221101934_fix_nickname_index.rb +1 -1
- data/db/migrate/20180706104107_add_nickname_to_managed_users.rb +1 -1
- data/db/migrate/20180720114847_create_decidim_amendments.rb +21 -0
- data/db/migrate/20181001124950_move_users_groups_to_users_table.rb +1 -1
- data/db/migrate/20181022090732_add_columns_to_pages.rb +20 -0
- data/db/migrate/20181023104416_add_static_page_topics.rb +15 -0
- data/db/migrate/20181025082245_add_timestamps_to_components.rb +12 -0
- data/db/migrate/20181029121244_add_welcome_notification.rb +13 -0
- data/db/migrate/20181108131058_add_users_registration_mode_to_organizations.rb +7 -0
- data/db/migrate/20181113101935_create_decidim_contextual_help_sections.rb +11 -0
- data/db/migrate/20181115102958_add_following_and_followers_counters_to_users.rb +26 -0
- data/db/migrate/20181119140636_add_columns_to_static_page_topic.rb +10 -0
- data/db/migrate/20181126145142_add_id_documents_fields_to_org.rb +13 -0
- data/db/migrate/20181204110723_remove_following_users_count_from_users.rb +17 -0
- data/db/migrate/20181211080834_add_scope_to_action_logs.rb +7 -0
- data/db/migrate/20181211090933_add_area_to_action_logs.rb +7 -0
- data/db/migrate/20181214101250_add_notification_types_to_users.rb +12 -0
- data/db/migrate/20181218171503_add_user_groups_switch_to_organizations.rb +8 -0
- data/db/seeds.rb +6 -1
- data/lib/decidim/amendable.rb +86 -0
- data/lib/decidim/api/component_interface.rb +4 -0
- data/lib/decidim/api/participatory_space_interface.rb +7 -0
- data/lib/decidim/api/scopable_interface.rb +1 -1
- data/lib/decidim/coauthorable.rb +16 -7
- data/lib/decidim/component_manifest.rb +3 -2
- data/lib/decidim/components/export_manifest.rb +13 -2
- data/lib/decidim/content_parsers/hashtag_parser.rb +48 -15
- data/lib/decidim/content_parsers/user_parser.rb +26 -10
- data/lib/decidim/content_renderers/hashtag_renderer.rb +46 -23
- data/lib/decidim/core.rb +40 -2
- data/lib/decidim/core/engine.rb +46 -12
- data/lib/decidim/core/test.rb +11 -0
- data/lib/decidim/core/test/factories.rb +44 -15
- data/lib/decidim/core/test/shared_examples/amendable/accept_amendment_examples.rb +57 -0
- data/lib/decidim/core/test/shared_examples/amendable/amendment_accepted_event_examples.rb +43 -0
- data/lib/decidim/core/test/shared_examples/amendable/amendment_created_event_examples.rb +48 -0
- data/lib/decidim/core/test/shared_examples/amendable/amendment_form_examples.rb +45 -0
- data/lib/decidim/core/test/shared_examples/amendable/amendment_promoted_event_examples.rb +43 -0
- data/lib/decidim/core/test/shared_examples/amendable/amendment_rejected_event_examples.rb +43 -0
- data/lib/decidim/core/test/shared_examples/amendable/create_amendment_examples.rb +78 -0
- data/lib/decidim/core/test/shared_examples/amendable/promote_amendment_examples.rb +43 -0
- data/lib/decidim/core/test/shared_examples/amendable/reject_amendment_examples.rb +41 -0
- data/lib/decidim/core/test/shared_examples/amendable/withdraw_amendment_examples.rb +29 -0
- data/lib/decidim/core/test/shared_examples/has_contextual_help.rb +30 -0
- data/lib/decidim/core/test/shared_examples/resourceable.rb +17 -0
- data/lib/decidim/core/test/shared_examples/searchable_results_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/simple_event.rb +24 -2
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/events/base_event.rb +17 -12
- data/lib/decidim/events/simple_event.rb +21 -2
- data/lib/decidim/form_builder.rb +8 -0
- data/lib/decidim/gamification/badge_scorer.rb +3 -3
- data/lib/decidim/has_component.rb +1 -1
- data/lib/decidim/hashtag.rb +0 -2
- data/lib/decidim/hashtaggable.rb +2 -2
- data/lib/decidim/metric_manifest.rb +17 -2
- data/lib/decidim/metric_operation.rb +59 -0
- data/lib/decidim/metric_operation_manifest.rb +20 -0
- data/lib/decidim/metric_registry.rb +57 -19
- data/lib/decidim/paddable.rb +82 -0
- data/lib/decidim/participable.rb +24 -0
- data/lib/decidim/participatory_space_resourceable.rb +12 -0
- data/lib/decidim/query_extensions.rb +8 -1
- data/lib/decidim/resource_manifest.rb +5 -1
- data/lib/decidim/resourceable.rb +12 -0
- data/lib/decidim/searchable.rb +13 -4
- data/lib/decidim/settings_manifest.rb +2 -1
- data/lib/tasks/decidim_data_portability_tasks.rake +86 -0
- data/lib/tasks/decidim_open_data_tasks.rake +12 -0
- data/lib/tasks/decidim_tasks.rake +1 -83
- data/vendor/assets/javascripts/tribute.js +307 -145
- metadata +156 -22
- data/app/cells/decidim/conversation/show.erb +0 -18
- data/app/cells/decidim/conversation_cell.rb +0 -23
- data/app/cells/decidim/conversation_header/show.erb +0 -17
- data/app/cells/decidim/conversation_header_cell.rb +0 -16
- data/app/cells/decidim/conversations/show.erb +0 -45
- data/app/cells/decidim/conversations_cell.rb +0 -24
- data/app/cells/decidim/message/show.erb +0 -15
- data/app/cells/decidim/message_cell.rb +0 -23
- data/app/cells/decidim/new_conversation/show.erb +0 -19
- data/app/cells/decidim/new_conversation_cell.rb +0 -19
- data/app/views/decidim/pages/decidim_page.html.erb +0 -31
- data/app/views/decidim/searches/_results.html.erb +0 -5
- data/app/views/decidim/shared/_author_reference.html.erb +0 -1
@@ -13,6 +13,7 @@ module Decidim
|
|
13
13
|
attribute :tos_agreement, Boolean
|
14
14
|
attribute :oauth_signature, String
|
15
15
|
attribute :avatar_url, String
|
16
|
+
attribute :raw_data, Hash
|
16
17
|
|
17
18
|
validates :email, presence: true
|
18
19
|
validates :name, presence: true
|
@@ -24,7 +25,7 @@ module Decidim
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def normalized_nickname
|
27
|
-
|
28
|
+
UserBaseEntity.nicknamize(nickname || name, organization: current_organization)
|
28
29
|
end
|
29
30
|
end
|
30
31
|
end
|
@@ -16,8 +16,6 @@ module Decidim
|
|
16
16
|
validates :name, presence: true
|
17
17
|
validates :email, presence: true, 'valid_email_2/email': { disposable: true }
|
18
18
|
validates :nickname, presence: true
|
19
|
-
validates :document_number, presence: true
|
20
|
-
validates :phone, presence: true
|
21
19
|
|
22
20
|
validates :nickname, length: { maximum: Decidim::User.nickname_max_length, allow_blank: true }
|
23
21
|
validates :avatar, file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_avatar_size } }
|
@@ -30,6 +28,7 @@ module Decidim
|
|
30
28
|
private
|
31
29
|
|
32
30
|
def unique_document_number
|
31
|
+
return if document_number.blank?
|
33
32
|
errors.add :document_number, :taken if UserGroup
|
34
33
|
.with_document_number(
|
35
34
|
context.current_organization,
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
# The form object that handles the data behind updating a user's
|
5
|
+
# interests in her profile page.
|
6
|
+
class UserInterestScopeForm < Form
|
7
|
+
mimic :scope
|
8
|
+
|
9
|
+
attribute :name, String
|
10
|
+
attribute :checked, Boolean
|
11
|
+
attribute :children, Array[UserInterestScopeForm]
|
12
|
+
|
13
|
+
def map_model(model_hash)
|
14
|
+
scope = model_hash[:scope]
|
15
|
+
user = model_hash[:user]
|
16
|
+
|
17
|
+
self.id = scope.id
|
18
|
+
self.name = scope.name
|
19
|
+
self.checked = user.interested_scopes_ids.include?(scope.id)
|
20
|
+
self.children = scope.children.map do |children_scope|
|
21
|
+
UserInterestScopeForm.from_model(scope: children_scope, user: user)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
# The form object that handles the data behind updating a user's
|
5
|
+
# interests in her profile page.
|
6
|
+
class UserInterestsForm < Form
|
7
|
+
mimic :user
|
8
|
+
|
9
|
+
attribute :scopes, Array[UserInterestScopeForm]
|
10
|
+
|
11
|
+
def newsletter_notifications_at
|
12
|
+
return nil unless newsletter_notifications
|
13
|
+
Time.current
|
14
|
+
end
|
15
|
+
|
16
|
+
def map_model(user)
|
17
|
+
self.scopes = user.organization.scopes.top_level.map do |scope|
|
18
|
+
UserInterestScopeForm.from_model(scope: scope, user: user)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
# A Helper to render and link amendments to resources.
|
5
|
+
module AmendmentsHelper
|
6
|
+
def amendments_enabled?
|
7
|
+
current_component.settings.amendments_enabled
|
8
|
+
end
|
9
|
+
|
10
|
+
def amend_button_for(amendable)
|
11
|
+
cell "decidim/amendable/amend_button_card", amendable if amendable.amendable?
|
12
|
+
end
|
13
|
+
|
14
|
+
# Renders the emendations of a amendable resource that includes the
|
15
|
+
# Amendable concern.
|
16
|
+
#
|
17
|
+
# amendable - The resource that has emendations.
|
18
|
+
#
|
19
|
+
# Returns Html grid of CardM.
|
20
|
+
def amendments_for(amendable)
|
21
|
+
return unless amendments_enabled? && amendable.emendations.count
|
22
|
+
return if amendable.emendation?
|
23
|
+
content = content_tag :h2, class: "section-heading", id: "amendments" do
|
24
|
+
t("section_heading", scope: "decidim.amendments.amendable", count: amendable.emendations.count)
|
25
|
+
end
|
26
|
+
|
27
|
+
content += if amendable.emendations.count.positive?
|
28
|
+
cell(
|
29
|
+
"decidim/collapsible_list",
|
30
|
+
amendable.emendations,
|
31
|
+
cell_options: { context: { current_user: current_user } },
|
32
|
+
list_class: "row small-up-1 medium-up-2 card-grid",
|
33
|
+
size: 4
|
34
|
+
).to_s
|
35
|
+
else
|
36
|
+
t("no_amendments", scope: "decidim.amendments.amendable", count: amendable.emendations.count)
|
37
|
+
end
|
38
|
+
|
39
|
+
content_tag :div, content.html_safe, class: "section"
|
40
|
+
end
|
41
|
+
|
42
|
+
def amenders_for(amendable)
|
43
|
+
amendable.amendments.map { |amendment| present(amendment.amender) }.uniq
|
44
|
+
end
|
45
|
+
|
46
|
+
def amenders_list_for(amendable)
|
47
|
+
cell "decidim/amendable/amenders_list", amenders_for(amendable), context: { current_user: current_user } if amendable.amendable?
|
48
|
+
end
|
49
|
+
|
50
|
+
# Renders the state of an emendation
|
51
|
+
#
|
52
|
+
# emendation - The resource that is an emendation.
|
53
|
+
#
|
54
|
+
# Returns Html callout.
|
55
|
+
def emendation_announcement_for(emendation)
|
56
|
+
cell "decidim/amendable/announcement", emendation if emendation.emendation?
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns Html action button cards: accept/reject or promote
|
60
|
+
#
|
61
|
+
# emendation - The resource that is an emendation.
|
62
|
+
def emendation_actions_for(emendation)
|
63
|
+
return unless allowed_to_react_to_emendation?(emendation)
|
64
|
+
return accept_and_reject_buttons_for(emendation) if allowed_to_accept_and_reject?(emendation)
|
65
|
+
return promote_button_for(emendation) if allowed_to_promote?(emendation)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Renders the buttons to accept/reject an emendation
|
69
|
+
def accept_and_reject_buttons_for(emendation)
|
70
|
+
cell("decidim/amendable/emendation_actions", emendation)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Renders the button to promote an emendation
|
74
|
+
def promote_button_for(emendation)
|
75
|
+
cell("decidim/amendable/promote_button_card", emendation)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Checks if current_user can react to the emendation
|
79
|
+
#
|
80
|
+
# Returns true or false
|
81
|
+
def allowed_to_react_to_emendation?(emendation)
|
82
|
+
return unless emendation.emendation?
|
83
|
+
return unless current_user
|
84
|
+
true
|
85
|
+
end
|
86
|
+
|
87
|
+
# Checks if current_user can accept and reject the emendation
|
88
|
+
#
|
89
|
+
# Returns true or false
|
90
|
+
def allowed_to_accept_and_reject?(emendation)
|
91
|
+
return unless emendation.amendment.evaluating?
|
92
|
+
emendation.amendable.created_by?(current_user) || current_user.admin
|
93
|
+
end
|
94
|
+
|
95
|
+
# Checks if current_user can promote the emendation
|
96
|
+
#
|
97
|
+
# Returns true or false
|
98
|
+
def allowed_to_promote?(emendation)
|
99
|
+
return unless emendation.state == "rejected"
|
100
|
+
return unless emendation.created_by?(current_user)
|
101
|
+
not_yet_promoted(emendation)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Checks whether the ActionLog created in the promote command exists.
|
105
|
+
#
|
106
|
+
# Returns true or false
|
107
|
+
def not_yet_promoted(emendation)
|
108
|
+
logs = Decidim::ActionLog.where(decidim_component_id: emendation.component)
|
109
|
+
.where(decidim_user_id: emendation.creator_author)
|
110
|
+
.where(action: "promote")
|
111
|
+
logs.select { |l| l.extra["promoted_from"] == emendation.id }.empty?
|
112
|
+
end
|
113
|
+
|
114
|
+
def user_group_select_field(form, name)
|
115
|
+
selected = @form.user_group_id.presence
|
116
|
+
form.select(
|
117
|
+
name,
|
118
|
+
current_user.user_groups.verified.map { |g| [g.name, g.id] },
|
119
|
+
selected: selected,
|
120
|
+
include_blank: current_user.name,
|
121
|
+
label: t("new.amendment_author", scope: "decidim.amendments")
|
122
|
+
)
|
123
|
+
end
|
124
|
+
|
125
|
+
def emendation_ignored_field_value(key)
|
126
|
+
0 if @form.emendation_type.constantize.columns_hash[key.to_s].type == :integer
|
127
|
+
nil if key == :id
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -5,6 +5,8 @@ module Decidim
|
|
5
5
|
module ApplicationHelper
|
6
6
|
include Decidim::OmniauthHelper
|
7
7
|
include Decidim::ScopesHelper
|
8
|
+
include Decidim::ContextualHelpHelper
|
9
|
+
include Decidim::AmendmentsHelper
|
8
10
|
|
9
11
|
# Truncates a given text respecting its HTML tags.
|
10
12
|
#
|
@@ -25,8 +27,9 @@ module Decidim
|
|
25
27
|
Truncato.truncate(text, options)
|
26
28
|
end
|
27
29
|
|
28
|
-
def present(object)
|
29
|
-
|
30
|
+
def present(object, presenter_class: nil)
|
31
|
+
presenter_class ||= "#{object.class.name}Presenter".constantize
|
32
|
+
presenter = presenter_class.new(object)
|
30
33
|
|
31
34
|
yield(presenter) if block_given?
|
32
35
|
|
@@ -50,5 +53,19 @@ module Decidim
|
|
50
53
|
|
51
54
|
content_for(:edit_link, link)
|
52
55
|
end
|
56
|
+
|
57
|
+
# Public: Overwrites the `cell` helper method to automatically set some
|
58
|
+
# common context.
|
59
|
+
#
|
60
|
+
# name - the name of the cell to render
|
61
|
+
# model - the cell model
|
62
|
+
# options - a Hash with options
|
63
|
+
#
|
64
|
+
# Renders the cell contents.
|
65
|
+
def cell(name, model, options = {}, &block)
|
66
|
+
options = { context: { current_user: current_user } }.deep_merge(options)
|
67
|
+
|
68
|
+
super(name, model, options, &block)
|
69
|
+
end
|
53
70
|
end
|
54
71
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
# Helper to print layout elements for the different help elements available on the pages.
|
5
|
+
module ContextualHelpHelper
|
6
|
+
def floating_help(id, &block)
|
7
|
+
render partial: "decidim/shared/floating_help", locals: { content: capture(&block), id: id }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -19,8 +19,10 @@ module Decidim
|
|
19
19
|
decidim_participatory_processes.participatory_processes_path
|
20
20
|
elsif current_user
|
21
21
|
decidim.account_path
|
22
|
-
|
22
|
+
elsif current_organization.sign_up_enabled?
|
23
23
|
decidim.new_user_registration_path
|
24
|
+
else
|
25
|
+
decidim.new_user_session_path
|
24
26
|
end
|
25
27
|
end
|
26
28
|
end
|
@@ -103,7 +103,7 @@ module Decidim
|
|
103
103
|
return safe_join [field_label, field_input]
|
104
104
|
end
|
105
105
|
|
106
|
-
tabs_id = options[:tabs_id] || "#{object_name}-#{name}-tabs"
|
106
|
+
tabs_id = options[:tabs_id] || "#{object_name}-#{name}-tabs".underscore
|
107
107
|
enabled_tabs = options[:enable_tabs].nil? ? true : options[:enable_tabs]
|
108
108
|
tabs_panels_data = enabled_tabs ? { tabs: true } : {}
|
109
109
|
|
@@ -66,5 +66,18 @@ module Decidim
|
|
66
66
|
classes += [options[:class]]
|
67
67
|
classes.compact
|
68
68
|
end
|
69
|
+
|
70
|
+
def extended_navigation_bar(items, max_items: 5)
|
71
|
+
return unless items.any?
|
72
|
+
extra_items = items.slice((max_items + 1)..-1) || []
|
73
|
+
active_item = items.find { |item| item[:active] }
|
74
|
+
|
75
|
+
render partial: "decidim/shared/extended_navigation_bar", locals: {
|
76
|
+
items: items,
|
77
|
+
extra_items: extra_items,
|
78
|
+
active_item: active_item,
|
79
|
+
max_items: max_items
|
80
|
+
}
|
81
|
+
end
|
69
82
|
end
|
70
83
|
end
|
File without changes
|
@@ -23,8 +23,16 @@ module Decidim
|
|
23
23
|
|
24
24
|
# Public: icon for omniauth buttons
|
25
25
|
def oauth_icon(provider)
|
26
|
-
|
26
|
+
info = Rails.application.secrets.dig(:omniauth, provider.to_sym)
|
27
27
|
|
28
|
+
if info
|
29
|
+
icon_path = info[:icon_path]
|
30
|
+
return external_icon(icon_path) if icon_path
|
31
|
+
|
32
|
+
name = info[:icon]
|
33
|
+
end
|
34
|
+
|
35
|
+
name ||= normalize_provider_name(provider)
|
28
36
|
icon(name)
|
29
37
|
end
|
30
38
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
# A Helper to render an Etherpad iframe.
|
5
|
+
module PadHelper
|
6
|
+
# Renders an iframe with the pad of a model that includes the
|
7
|
+
# Paddable concern.
|
8
|
+
#
|
9
|
+
# paddable - The model to render the pad from.
|
10
|
+
#
|
11
|
+
# Returns nothing.
|
12
|
+
def pad_iframe_for(paddable)
|
13
|
+
cell "decidim/pad_iframe", paddable
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -26,5 +26,20 @@ module Decidim
|
|
26
26
|
|
27
27
|
@participatory_space_helpers = klass.new(self)
|
28
28
|
end
|
29
|
+
|
30
|
+
def participatory_space_floating_help
|
31
|
+
return if help_section.blank?
|
32
|
+
|
33
|
+
content_tag "div", class: "row collapse" do
|
34
|
+
floating_help(help_id) { translated_attribute(help_section).html_safe }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def participatory_space_wrapper(&block)
|
39
|
+
content_tag :main, class: "wrapper" do
|
40
|
+
concat(participatory_space_floating_help)
|
41
|
+
concat(capture(&block))
|
42
|
+
end
|
43
|
+
end
|
29
44
|
end
|
30
45
|
end
|
@@ -3,15 +3,59 @@
|
|
3
3
|
module Decidim
|
4
4
|
# A Helper to render and link to searchables.
|
5
5
|
module SearchesHelper
|
6
|
-
#
|
7
|
-
|
6
|
+
# Renders the human name of the given class name.
|
7
|
+
#
|
8
|
+
# klass_name - a String representing the class name of the resource to render
|
9
|
+
# count - (optional) the number of resources so that the I18n backend
|
10
|
+
# can decide to translate into singluar or plural form.
|
11
|
+
def searchable_resource_human_name(resource, count: 5)
|
12
|
+
resource = if resource.is_a?(String)
|
13
|
+
resource.constantize
|
14
|
+
else
|
15
|
+
resource
|
16
|
+
end
|
17
|
+
|
8
18
|
resource.model_name.human(count: count)
|
9
19
|
end
|
10
20
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
21
|
+
# Generates a link to filter the current search by the given type. If no
|
22
|
+
# type is given, it generates a link to the main results page.
|
23
|
+
#
|
24
|
+
# resource_type - An optional String with the name of the model class to filter
|
25
|
+
# space_state - An optional String with the name of the state of the space
|
26
|
+
def search_path_by(resource_type: nil, space_state: nil)
|
27
|
+
new_params = {
|
28
|
+
utf8: params[:utf8],
|
29
|
+
filter: {
|
30
|
+
decidim_scope_id: params.dig(:filter, :decidim_scope_id),
|
31
|
+
term: params[:term] || params.dig(:filter, :term)
|
32
|
+
}
|
33
|
+
}
|
34
|
+
new_params[:filter][:resource_type] = resource_type if resource_type.present?
|
35
|
+
new_params[:filter][:space_state] = space_state if space_state.present?
|
36
|
+
decidim.search_path(new_params)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Generates the path to the main results page (the one without any filter
|
40
|
+
# active), only the `term` one.
|
41
|
+
def main_search_path
|
42
|
+
search_path_by
|
43
|
+
end
|
44
|
+
|
45
|
+
# Generates the path to filter by resource type, considering the other filters.
|
46
|
+
def search_path_by_resource_type(resource_type)
|
47
|
+
search_path_by(space_state: params.dig(:filter, :space_state), resource_type: resource_type)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Generates the path and link to filter by space state, taking into account
|
51
|
+
# the other filters applied.
|
52
|
+
def search_path_by_state_link(state)
|
53
|
+
path = search_path_by(resource_type: params.dig(:filter, :resource_type), space_state: state)
|
54
|
+
is_active = params.dig(:filter, :space_state).to_s == state.to_s
|
55
|
+
|
56
|
+
link_to path, class: "order-by__tab#{" is-active" if is_active}" do
|
57
|
+
content_tag(:strong, t(state || :all, scope: "decidim.searches.filters.state"))
|
58
|
+
end
|
15
59
|
end
|
16
60
|
end
|
17
61
|
end
|