decidim-core 0.18.1 → 0.19.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/app/assets/config/decidim_core_manifest.js +3 -0
- data/app/assets/javascripts/decidim/social_share.js +2 -0
- data/app/assets/stylesheets/decidim/extras/_social_share.css.scss +36 -0
- data/app/assets/stylesheets/decidim/modules/_input-gallery.scss +24 -0
- data/app/assets/stylesheets/decidim/modules/_navbar.scss +1 -1
- data/app/cells/decidim/activities_cell.rb +13 -8
- data/app/cells/decidim/activity_cell.rb +19 -5
- data/app/cells/decidim/address/details.erb +2 -2
- data/app/cells/decidim/amendable/amenders_list/show.erb +1 -1
- data/app/cells/decidim/amendable/amenders_list_cell.rb +5 -1
- data/app/cells/decidim/amendable/announcement_cell.rb +22 -9
- data/app/cells/decidim/amendable/wizard_step_form_cell.rb +121 -0
- data/app/cells/decidim/announcement_cell.rb +1 -0
- data/app/cells/decidim/author_cell.rb +7 -0
- data/app/cells/decidim/card_m_cell.rb +3 -1
- data/app/cells/decidim/coauthorships_cell.rb +3 -1
- data/app/cells/decidim/collapsible_authors_cell.rb +1 -0
- data/app/cells/decidim/collapsible_list_cell.rb +1 -0
- data/app/cells/decidim/content_blocks/highlighted_content_banner_cell.rb +1 -0
- data/app/cells/decidim/content_blocks/last_activity_cell.rb +3 -2
- data/app/cells/decidim/content_blocks/metrics_cell.rb +1 -0
- data/app/cells/decidim/content_blocks/stats_cell.rb +1 -0
- data/app/cells/decidim/content_blocks/sub_hero_cell.rb +1 -0
- data/app/cells/decidim/diff_cell.rb +1 -1
- data/app/cells/decidim/fingerprint/show.erb +1 -1
- data/app/cells/decidim/follow_button_cell.rb +3 -0
- data/app/cells/decidim/members_cell.rb +1 -0
- data/app/cells/decidim/notifications/show.erb +1 -1
- data/app/cells/decidim/profile_cell.rb +1 -0
- data/app/cells/decidim/profile_sidebar_cell.rb +4 -0
- data/app/cells/decidim/search_results_cell.rb +1 -0
- data/app/cells/decidim/search_results_section/show.erb +1 -1
- data/app/cells/decidim/tos_page_cell.rb +1 -0
- data/app/cells/decidim/user_group_pending_invitations_list_cell.rb +1 -0
- data/app/cells/decidim/user_group_pending_requests_list_cell.rb +1 -0
- data/app/cells/decidim/wizard_step_form/wizard_aside.erb +14 -0
- data/app/cells/decidim/wizard_step_form/wizard_header.erb +18 -0
- data/app/cells/decidim/wizard_step_form_cell.rb +112 -0
- data/app/commands/decidim/amendable/accept.rb +1 -1
- data/app/commands/decidim/amendable/create_draft.rb +70 -0
- data/app/commands/decidim/amendable/destroy_draft.rb +40 -0
- data/app/commands/decidim/amendable/promote.rb +13 -11
- data/app/commands/decidim/amendable/publish_draft.rb +76 -0
- data/app/commands/decidim/amendable/update_draft.rb +54 -0
- data/app/commands/decidim/amendable/withdraw.rb +31 -15
- data/app/commands/decidim/create_follow.rb +1 -0
- data/app/commands/decidim/create_omniauth_registration.rb +22 -4
- data/app/commands/decidim/create_registration.rb +5 -0
- data/app/commands/decidim/delete_follow.rb +1 -0
- data/app/commands/decidim/search.rb +1 -0
- data/app/controllers/concerns/decidim/action_authorization.rb +2 -0
- data/app/controllers/concerns/decidim/amendments_controller.rb +148 -28
- data/app/controllers/concerns/decidim/devise_controllers.rb +3 -2
- data/app/controllers/concerns/decidim/force_authentication.rb +38 -0
- data/app/controllers/concerns/decidim/impersonate_users.rb +1 -0
- data/app/controllers/concerns/decidim/locale_switcher.rb +44 -17
- data/app/controllers/concerns/decidim/needs_tos_accepted.rb +8 -0
- data/app/controllers/concerns/decidim/orderable.rb +36 -0
- data/app/controllers/concerns/decidim/participatory_space_context.rb +2 -0
- data/app/controllers/concerns/decidim/safe_redirect.rb +24 -0
- data/app/controllers/decidim/application_controller.rb +19 -2
- data/app/controllers/decidim/devise/confirmations_controller.rb +6 -0
- data/app/controllers/decidim/devise/invitations_controller.rb +8 -4
- data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +4 -1
- data/app/controllers/decidim/errors_controller.rb +3 -0
- data/app/controllers/decidim/follows_controller.rb +2 -2
- data/app/controllers/decidim/messaging/conversations_controller.rb +2 -2
- data/app/controllers/decidim/profiles_controller.rb +4 -1
- data/app/controllers/decidim/scopes_controller.rb +16 -4
- data/app/events/decidim/amendable/amendment_base_event.rb +4 -0
- data/app/forms/decidim/account_form.rb +1 -1
- data/app/forms/decidim/amendable/create_form.rb +3 -19
- data/app/forms/decidim/amendable/edit_form.rb +22 -0
- data/app/forms/decidim/amendable/form.rb +42 -20
- data/app/forms/decidim/amendable/promote_form.rb +4 -7
- data/app/forms/decidim/amendable/publish_form.rb +21 -0
- data/app/forms/decidim/amendable/reject_form.rb +1 -1
- data/app/forms/decidim/amendable/review_form.rb +9 -4
- data/app/forms/decidim/invite_user_form.rb +1 -0
- data/app/forms/decidim/notifications_settings_form.rb +1 -0
- data/app/forms/decidim/registration_form.rb +4 -3
- data/app/forms/decidim/user_group_form.rb +1 -0
- data/app/forms/decidim/user_interests_form.rb +1 -0
- data/app/helpers/decidim/amendments_helper.rb +33 -19
- data/app/helpers/decidim/cells_helper.rb +2 -0
- data/app/helpers/decidim/layout_helper.rb +1 -0
- data/app/helpers/decidim/map_helper.rb +1 -1
- data/app/helpers/decidim/meta_tags_helper.rb +1 -0
- data/app/helpers/decidim/resource_reference_helper.rb +1 -0
- data/app/jobs/decidim/event_publisher_job.rb +60 -0
- data/app/jobs/decidim/metric_job.rb +1 -0
- data/app/models/decidim/action_log.rb +12 -0
- data/app/models/decidim/amendment.rb +31 -2
- data/app/models/decidim/attachment.rb +2 -0
- data/app/models/decidim/authorization.rb +1 -0
- data/app/models/decidim/category.rb +1 -0
- data/app/models/decidim/component.rb +7 -0
- data/app/models/decidim/content_block.rb +1 -0
- data/app/models/decidim/follow.rb +3 -0
- data/app/models/decidim/identity.rb +1 -0
- data/app/models/decidim/impersonation_log.rb +2 -0
- data/app/models/decidim/newsletter.rb +1 -0
- data/app/models/decidim/participatory_process_user_role.rb +1 -0
- data/app/models/decidim/participatory_space_private_user.rb +1 -0
- data/app/models/decidim/permission_action.rb +2 -0
- data/app/models/decidim/report.rb +1 -0
- data/app/models/decidim/scope.rb +1 -0
- data/app/models/decidim/searchable_resource.rb +1 -1
- data/app/models/decidim/static_page.rb +1 -0
- data/app/models/decidim/user.rb +2 -0
- data/app/permissions/decidim/permissions.rb +18 -14
- data/app/permissions/decidim/user_manager_permissions.rb +9 -2
- data/app/presenters/decidim/admin_log/organization_presenter.rb +1 -0
- data/app/presenters/decidim/admin_log/participatory_space_private_user_presenter.rb +1 -1
- data/app/presenters/decidim/admin_log/user_presenter.rb +1 -1
- data/app/presenters/decidim/hashtag_presenter.rb +1 -1
- data/app/presenters/decidim/log/base_presenter.rb +1 -0
- data/app/presenters/decidim/log/diff_presenter.rb +1 -1
- data/app/presenters/decidim/log/value_types/area_presenter.rb +1 -0
- data/app/presenters/decidim/log/value_types/area_type_presenter.rb +1 -0
- data/app/presenters/decidim/log/value_types/currency_presenter.rb +1 -0
- data/app/presenters/decidim/log/value_types/date_presenter.rb +1 -0
- data/app/presenters/decidim/log/value_types/locale_presenter.rb +1 -0
- data/app/presenters/decidim/log/value_types/percentage_presenter.rb +1 -0
- data/app/presenters/decidim/log/value_types/scope_presenter.rb +1 -0
- data/app/presenters/decidim/log/value_types/scope_type_presenter.rb +1 -0
- data/app/presenters/decidim/metric_charts_presenter.rb +1 -0
- data/app/presenters/decidim/metric_object_presenter.rb +4 -0
- data/app/queries/decidim/metric_manage.rb +3 -0
- data/app/queries/decidim/metric_measure.rb +1 -0
- data/app/queries/decidim/metrics/followers_metric_manage.rb +3 -0
- data/app/queries/decidim/metrics/participants_metric_manage.rb +4 -0
- data/app/queries/decidim/similar_emendations.rb +56 -0
- data/app/resolvers/decidim/core/metric_resolver.rb +1 -0
- data/app/services/decidim/action_authorizer.rb +1 -0
- data/app/services/decidim/action_logger.rb +1 -0
- data/app/services/decidim/activity_search.rb +1 -0
- data/app/services/decidim/email_notification_generator.rb +4 -0
- data/app/services/decidim/notification_generator.rb +2 -0
- data/app/services/decidim/notification_generator_for_recipient.rb +0 -1
- data/app/services/decidim/resource_search.rb +1 -1
- data/app/services/decidim/traceability.rb +1 -0
- data/app/uploaders/decidim/application_uploader.rb +1 -0
- data/app/uploaders/decidim/attachment_uploader.rb +16 -0
- data/app/uploaders/decidim/avatar_uploader.rb +0 -2
- data/app/uploaders/decidim/data_portability_uploader.rb +1 -0
- data/app/uploaders/decidim/homepage_image_uploader.rb +0 -2
- data/app/uploaders/decidim/image_uploader.rb +15 -1
- data/app/uploaders/decidim/oauth_application_logo_uploader.rb +0 -1
- data/app/uploaders/decidim/official_image_footer_uploader.rb +0 -1
- data/app/uploaders/decidim/official_image_header_uploader.rb +0 -1
- data/app/uploaders/decidim/open_data_uploader.rb +1 -0
- data/app/validators/etiquette_validator.rb +5 -0
- data/app/views/decidim/account/delete.html.erb +2 -2
- data/app/views/decidim/account/show.html.erb +1 -1
- data/app/views/decidim/amendments/_edit_form_fields.html.erb +16 -13
- data/app/views/decidim/amendments/_similar_emendation.html.erb +24 -0
- data/app/views/decidim/amendments/compare_draft.html.erb +21 -0
- data/app/views/decidim/amendments/edit_draft.html.erb +31 -0
- data/app/views/decidim/amendments/new.html.erb +5 -17
- data/app/views/decidim/amendments/preview_draft.html.erb +32 -0
- data/app/views/decidim/amendments/review.html.erb +5 -3
- data/app/views/decidim/application/_document.html.erb +1 -1
- data/app/views/decidim/application/_photos.html.erb +1 -1
- data/app/views/decidim/data_portability/show.html.erb +1 -1
- data/app/views/decidim/devise/invitations/edit.html.erb +2 -2
- data/app/views/decidim/devise/sessions/new.html.erb +1 -1
- data/app/views/decidim/doorkeeper/authorizations/new.html.erb +3 -3
- data/app/views/decidim/export_mailer/data_portability_export.html.erb +1 -1
- data/app/views/decidim/searches/index.js.erb +6 -0
- data/app/views/decidim/shared/_address_details.html.erb +2 -2
- data/app/views/decidim/shared/_embed_modal.html.erb +1 -1
- data/app/views/decidim/shared/_share_modal.html.erb +7 -4
- data/app/views/layouts/decidim/_application.html.erb +0 -1
- data/app/views/layouts/decidim/_head.html.erb +13 -12
- data/app/views/layouts/decidim/_logo.html.erb +1 -1
- data/app/views/layouts/decidim/_social_media_links.html.erb +5 -5
- data/app/views/layouts/decidim/_user_menu.html.erb +1 -1
- data/app/views/layouts/decidim/_wrapper.html.erb +2 -2
- data/app/views/layouts/decidim/mailer.html.erb +2 -2
- data/config/locales/ar.yml +27 -17
- data/config/locales/ca.yml +79 -15
- data/config/locales/cs.yml +73 -14
- data/config/locales/de.yml +62 -12
- data/config/locales/en.yml +80 -16
- data/config/locales/eo-UY.yml +16 -0
- data/config/locales/es-MX.yml +73 -11
- data/config/locales/es-PY.yml +73 -11
- data/config/locales/es.yml +79 -15
- data/config/locales/eu.yml +6 -13
- data/config/locales/fi-plain.yml +75 -11
- data/config/locales/fi.yml +80 -16
- data/config/locales/fr.yml +70 -16
- data/config/locales/gl.yml +6 -13
- data/config/locales/hu.yml +80 -17
- data/config/locales/id-ID.yml +6 -12
- data/config/locales/it.yml +56 -14
- data/config/locales/nl.yml +76 -12
- data/config/locales/no.yml +11 -2
- data/config/locales/pl.yml +6 -15
- data/config/locales/pt-BR.yml +6 -13
- data/config/locales/pt.yml +6 -13
- data/config/locales/ru.yml +7 -2
- data/config/locales/sv.yml +34 -18
- data/config/locales/tr-TR.yml +15 -12
- data/config/locales/uk.yml +7 -2
- data/config/routes.rb +7 -0
- data/db/migrate/20180226140756_add_version_to_action_logs.rb +1 -0
- data/db/migrate/20180305132906_rename_features_to_components.rb +1 -0
- data/db/migrate/20190412131728_fix_user_names.rb +1 -1
- data/db/migrate/20190610093742_add_force_users_to_authenticate_before_access_organization.rb +10 -0
- data/db/migrate/20190618075906_add_confidential_to_doorkeeper_application.rb +13 -0
- data/db/migrate/{20190925091507_add_uniq_index_to_decidim_metrics.rb → 20190829092826_add_uniq_index_to_decidim_metrics.rb} +0 -0
- data/lib/decidim/amendable.rb +87 -13
- data/lib/decidim/attributes/localized_date.rb +5 -0
- data/lib/decidim/attributes/time_with_zone.rb +5 -0
- data/lib/decidim/authorable.rb +3 -0
- data/lib/decidim/authorization_form_builder.rb +2 -2
- data/lib/decidim/component_manifest.rb +2 -0
- data/lib/decidim/content_parsers.rb +2 -0
- data/lib/decidim/content_parsers/hashtag_parser.rb +1 -1
- data/lib/decidim/content_parsers/link_parser.rb +10 -0
- data/lib/decidim/content_parsers/newline_parser.rb +20 -0
- data/lib/decidim/content_parsers/user_parser.rb +1 -1
- data/lib/decidim/content_processor.rb +2 -0
- data/lib/decidim/content_renderers.rb +1 -0
- data/lib/decidim/content_renderers/hashtag_renderer.rb +1 -1
- data/lib/decidim/content_renderers/link_renderer.rb +24 -0
- data/lib/decidim/content_renderers/user_renderer.rb +2 -2
- data/lib/decidim/core.rb +11 -0
- data/lib/decidim/core/engine.rb +2 -28
- data/lib/decidim/core/test.rb +4 -1
- data/lib/decidim/core/test/factories.rb +35 -8
- data/lib/decidim/core/test/shared_examples/amendable/create_amendment_draft_examples.rb +50 -0
- data/lib/decidim/core/test/shared_examples/amendable/destroy_amendment_draft_examples.rb +39 -0
- data/lib/decidim/core/test/shared_examples/amendable/promote_amendment_examples.rb +27 -3
- data/lib/decidim/core/test/shared_examples/amendable/{create_amendment_examples.rb → publish_amendment_draft_examples.rb} +26 -17
- data/lib/decidim/core/test/shared_examples/amendable/update_amendment_draft_examples.rb +42 -0
- data/lib/decidim/core/test/shared_examples/amendable/withdraw_amendment_examples.rb +19 -11
- data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +1 -1
- data/lib/decidim/core/test/shared_examples/has_attachments.rb +1 -1
- data/lib/decidim/core/test/shared_examples/simple_event.rb +4 -0
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/data_portability_file_zipper.rb +3 -0
- data/lib/decidim/events/author_event.rb +1 -0
- data/lib/decidim/events/base_event.rb +12 -22
- data/lib/decidim/events/coauthor_event.rb +1 -0
- data/lib/decidim/events/simple_event.rb +3 -0
- data/lib/decidim/exporters/csv.rb +1 -0
- data/lib/decidim/fingerprintable.rb +1 -0
- data/lib/decidim/followable.rb +8 -0
- data/lib/decidim/form_builder.rb +24 -3
- data/lib/decidim/gamification.rb +4 -0
- data/lib/decidim/gamification/badge_status.rb +1 -0
- data/lib/decidim/has_category.rb +2 -0
- data/lib/decidim/has_component.rb +2 -7
- data/lib/decidim/has_private_users.rb +8 -1
- data/lib/decidim/has_settings.rb +12 -8
- data/lib/decidim/hashtaggable.rb +4 -0
- data/lib/decidim/metric_operation_manifest.rb +1 -0
- data/lib/decidim/nicknamizable.rb +1 -0
- data/lib/decidim/participable.rb +1 -0
- data/lib/decidim/participatory_space_resourceable.rb +1 -0
- data/lib/decidim/randomable.rb +20 -0
- data/lib/decidim/search_resource_fields_mapper.rb +2 -0
- data/lib/decidim/searchable.rb +2 -0
- data/lib/decidim/settings_manifest.rb +10 -1
- data/lib/decidim/stats_registry.rb +1 -0
- data/lib/decidim/view_model.rb +1 -1
- data/lib/tasks/decidim_data_portability_tasks.rake +1 -0
- data/lib/tasks/decidim_metrics_tasks.rake +2 -0
- data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.no.js +12 -12
- metadata +140 -82
- data/app/commands/decidim/amendable/create.rb +0 -80
@@ -18,7 +18,7 @@ module Decidim
|
|
18
18
|
|
19
19
|
map_url = "https://www.openstreetmap.org/?mlat=#{latitude}&mlon=#{longitude}#map=#{zoom}/#{latitude}/#{longitude}"
|
20
20
|
|
21
|
-
link_to map_url, target: "_blank" do
|
21
|
+
link_to map_url, target: "_blank", rel: "noopener" do
|
22
22
|
image_tag decidim.static_map_path(sgid: resource.to_sgid.to_s)
|
23
23
|
end
|
24
24
|
end
|
@@ -12,6 +12,7 @@ module Decidim
|
|
12
12
|
# Returns a String.
|
13
13
|
def resource_reference(resource, options = {})
|
14
14
|
return unless resource.respond_to?(:reference) && resource.reference.present?
|
15
|
+
|
15
16
|
"<div class='tech-info #{options[:class]}'>#{localized_reference(resource.reference)}</div>".html_safe
|
16
17
|
end
|
17
18
|
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
class EventPublisherJob < ApplicationJob
|
5
|
+
queue_as :events
|
6
|
+
|
7
|
+
attr_reader :resource
|
8
|
+
|
9
|
+
def perform(event_name, data)
|
10
|
+
@resource = data[:resource]
|
11
|
+
|
12
|
+
return unless notifiable?
|
13
|
+
|
14
|
+
EmailNotificationGeneratorJob.perform_later(
|
15
|
+
event_name,
|
16
|
+
data[:event_class],
|
17
|
+
data[:resource],
|
18
|
+
data[:followers],
|
19
|
+
data[:affected_users],
|
20
|
+
data[:extra]
|
21
|
+
)
|
22
|
+
|
23
|
+
NotificationGeneratorJob.perform_later(
|
24
|
+
event_name,
|
25
|
+
data[:event_class],
|
26
|
+
data[:resource],
|
27
|
+
data[:followers],
|
28
|
+
data[:affected_users],
|
29
|
+
data[:extra]
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
# Whether this event should be notified or not. Useful when you want the
|
36
|
+
# event to decide based on the params.
|
37
|
+
#
|
38
|
+
# It returns false when the resource or any element in the chain is a
|
39
|
+
# `Decidim::Publicable` and it isn't published or participatory_space
|
40
|
+
# is a `Decidim::Participable` and the user can't participate.
|
41
|
+
def notifiable?
|
42
|
+
return false if resource.is_a?(Decidim::Publicable) && !resource.published?
|
43
|
+
return false if participatory_space.is_a?(Decidim::Publicable) && !participatory_space&.published?
|
44
|
+
return false if component && !component.published?
|
45
|
+
|
46
|
+
true
|
47
|
+
end
|
48
|
+
|
49
|
+
def component
|
50
|
+
return resource.component if resource.is_a?(Decidim::HasComponent)
|
51
|
+
return resource if resource.is_a?(Decidim::Component)
|
52
|
+
end
|
53
|
+
|
54
|
+
def participatory_space
|
55
|
+
return resource if resource.is_a?(Decidim::ParticipatorySpaceResourceable)
|
56
|
+
|
57
|
+
component&.participatory_space
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -7,6 +7,7 @@ module Decidim
|
|
7
7
|
def perform(manager_class, organization_id, day = nil)
|
8
8
|
organization = Decidim::Organization.find_by(id: organization_id)
|
9
9
|
return unless organization
|
10
|
+
|
10
11
|
metric = manager_class.constantize.new(day, organization)
|
11
12
|
metric.save if metric.valid?
|
12
13
|
end
|
@@ -128,5 +128,17 @@ module Decidim
|
|
128
128
|
scope.each { |relation| loader.call(relation.id, relation) }
|
129
129
|
end
|
130
130
|
end
|
131
|
+
|
132
|
+
# Whether this activity or log is visible for a given user (can also be nil)
|
133
|
+
#
|
134
|
+
# Returns a True/False.
|
135
|
+
def visible_for?(user)
|
136
|
+
return false if resource_lazy.blank?
|
137
|
+
return false if participatory_space_lazy.blank?
|
138
|
+
return false if resource_lazy.respond_to?(:hidden?) && resource_lazy.hidden?
|
139
|
+
return false if resource_lazy.respond_to?(:can_participate?) && !resource_lazy.can_participate?(user)
|
140
|
+
|
141
|
+
true
|
142
|
+
end
|
131
143
|
end
|
132
144
|
end
|
@@ -2,11 +2,18 @@
|
|
2
2
|
|
3
3
|
module Decidim
|
4
4
|
class Amendment < ApplicationRecord
|
5
|
+
STATES = %w(draft evaluating accepted rejected withdrawn).freeze
|
6
|
+
|
5
7
|
belongs_to :amendable, foreign_key: "decidim_amendable_id", foreign_type: "decidim_amendable_type", polymorphic: true
|
6
8
|
belongs_to :amender, foreign_key: "decidim_user_id", class_name: "Decidim::User"
|
7
9
|
belongs_to :emendation, foreign_key: "decidim_emendation_id", foreign_type: "decidim_emendation_type", polymorphic: true
|
8
10
|
|
9
|
-
|
11
|
+
validates :amendable, :amender, :emendation, presence: true
|
12
|
+
validates :state, presence: true, inclusion: { in: STATES }
|
13
|
+
|
14
|
+
def draft?
|
15
|
+
state == "draft"
|
16
|
+
end
|
10
17
|
|
11
18
|
def evaluating?
|
12
19
|
state == "evaluating"
|
@@ -16,6 +23,28 @@ module Decidim
|
|
16
23
|
state == "rejected"
|
17
24
|
end
|
18
25
|
|
19
|
-
|
26
|
+
def promoted?
|
27
|
+
return false unless rejected?
|
28
|
+
|
29
|
+
emendation.linked_promoted_resource.present?
|
30
|
+
end
|
31
|
+
|
32
|
+
# VisibilityStepSetting::options can be expanded via config setting.
|
33
|
+
#
|
34
|
+
# For new options, add the missing locales in `decidim-core/config/locales/en.yml` and
|
35
|
+
# change the logic of the filtering methods in the Amendable concern to fit your needs:
|
36
|
+
# - Decidim::Amendable::only_visible_emendations_for(user, component)
|
37
|
+
# - Decidim::Amendable::amendables_and_visible_emendations_for(user, component)
|
38
|
+
# - Decidim::Amendable#visible_emendations_for(user)
|
39
|
+
#
|
40
|
+
# Returns an Array of Arrays of translation, value:
|
41
|
+
# i.e. [["All amendments are visible", "all"], ...]
|
42
|
+
class VisibilityStepSetting
|
43
|
+
def self.options
|
44
|
+
Decidim.config.amendments_visibility_options.map do |option|
|
45
|
+
[I18n.t(option, scope: "decidim.amendments.visibility_options"), option]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
20
49
|
end
|
21
50
|
end
|
@@ -73,6 +73,13 @@ module Decidim
|
|
73
73
|
# Public: Returns an empty description
|
74
74
|
def resource_description; end
|
75
75
|
|
76
|
+
def can_participate_in_space?(user)
|
77
|
+
return true unless participatory_space.try(:private_space?)
|
78
|
+
return false unless user
|
79
|
+
|
80
|
+
participatory_space.can_participate?(user)
|
81
|
+
end
|
82
|
+
|
76
83
|
private
|
77
84
|
|
78
85
|
def participatory_space_name
|
@@ -36,17 +36,20 @@ module Decidim
|
|
36
36
|
|
37
37
|
def increase_followers_counter
|
38
38
|
return unless followable.is_a?(Decidim::UserBaseEntity)
|
39
|
+
|
39
40
|
followable.increment!(:followers_count)
|
40
41
|
end
|
41
42
|
|
42
43
|
def decrease_following_counters
|
43
44
|
return unless user
|
45
|
+
|
44
46
|
user.decrement!(:following_count)
|
45
47
|
end
|
46
48
|
|
47
49
|
def decrease_followers_counter
|
48
50
|
return unless followable.is_a?(Decidim::UserBaseEntity)
|
49
51
|
return unless user
|
52
|
+
|
50
53
|
followable.decrement!(:followers_count)
|
51
54
|
end
|
52
55
|
# rubocop:enable Rails/SkipsModelValidations
|
@@ -25,11 +25,13 @@ module Decidim
|
|
25
25
|
|
26
26
|
def same_organization
|
27
27
|
return if admin&.organization == user&.organization
|
28
|
+
|
28
29
|
errors.add(:admin, :invalid)
|
29
30
|
end
|
30
31
|
|
31
32
|
def non_active_impersonation
|
32
33
|
return if ended? || expired?
|
34
|
+
|
33
35
|
errors.add(:admin, :invalid) if Decidim::ImpersonationLog.where(admin: admin).active.any?
|
34
36
|
end
|
35
37
|
end
|
@@ -25,6 +25,7 @@ module Decidim
|
|
25
25
|
# Private: check if the process and the user have the same organization
|
26
26
|
def user_and_participatory_process_same_organization
|
27
27
|
return if !participatory_process || !user
|
28
|
+
|
28
29
|
errors.add(:participatory_process, :invalid) unless user.organization == participatory_process.organization
|
29
30
|
end
|
30
31
|
end
|
@@ -27,6 +27,7 @@ module Decidim
|
|
27
27
|
# Private: check if the participatory space and the user have the same organization
|
28
28
|
def user_and_participatory_space_same_organization
|
29
29
|
return if !privatable_to || !user
|
30
|
+
|
30
31
|
errors.add(:privatable_to, :invalid) unless user.organization == privatable_to.organization
|
31
32
|
end
|
32
33
|
end
|
@@ -23,6 +23,7 @@ module Decidim
|
|
23
23
|
|
24
24
|
def allow!
|
25
25
|
raise PermissionCannotBeDisallowedError, "Allowing a previously disallowed action is not permitted: #{inspect}" if @state == :disallowed
|
26
|
+
|
26
27
|
@state = :allowed
|
27
28
|
end
|
28
29
|
|
@@ -32,6 +33,7 @@ module Decidim
|
|
32
33
|
|
33
34
|
def allowed?
|
34
35
|
raise PermissionNotSetError, "Permission hasn't been allowed or disallowed yet: #{inspect}" if @state.blank?
|
36
|
+
|
35
37
|
@state == :allowed
|
36
38
|
end
|
37
39
|
|
@@ -28,6 +28,7 @@ module Decidim
|
|
28
28
|
# Private: check if the moderation and the user have the same organization
|
29
29
|
def user_and_moderation_same_organization
|
30
30
|
return if !moderation || !user
|
31
|
+
|
31
32
|
errors.add(:moderation, :invalid) unless user.organization == moderation.organization
|
32
33
|
end
|
33
34
|
end
|
data/app/models/decidim/scope.rb
CHANGED
@@ -16,7 +16,7 @@ module Decidim
|
|
16
16
|
# - datetime: The timestamp that places this resource in the line of time. Used as second criteria (first is text relevance) for sorting.
|
17
17
|
#
|
18
18
|
class SearchableResource < ApplicationRecord
|
19
|
-
include PgSearch
|
19
|
+
include PgSearch::Model
|
20
20
|
|
21
21
|
belongs_to :organization,
|
22
22
|
foreign_key: "decidim_organization_id",
|
data/app/models/decidim/user.rb
CHANGED
@@ -182,6 +182,7 @@ module Decidim
|
|
182
182
|
# If the user has been deleted or it is managed the email field is not required anymore.
|
183
183
|
def email_required?
|
184
184
|
return false if deleted? || managed?
|
185
|
+
|
185
186
|
super
|
186
187
|
end
|
187
188
|
|
@@ -189,6 +190,7 @@ module Decidim
|
|
189
190
|
# If the user is managed the password field is not required anymore.
|
190
191
|
def password_required?
|
191
192
|
return false if managed?
|
193
|
+
|
192
194
|
super
|
193
195
|
end
|
194
196
|
|
@@ -11,8 +11,8 @@ module Decidim
|
|
11
11
|
search_scope_action?
|
12
12
|
|
13
13
|
return permission_action unless user
|
14
|
-
return user_manager_permissions if not_admin? && user_manager?
|
15
14
|
|
15
|
+
user_manager_permissions
|
16
16
|
manage_self_user_action?
|
17
17
|
authorization_action?
|
18
18
|
follow_action?
|
@@ -30,11 +30,13 @@ module Decidim
|
|
30
30
|
def read_public_pages_action?
|
31
31
|
return unless permission_action.subject == :public_page &&
|
32
32
|
permission_action.action == :read
|
33
|
+
|
33
34
|
allow!
|
34
35
|
end
|
35
36
|
|
36
37
|
def locales_action?
|
37
38
|
return unless permission_action.subject == :locales
|
39
|
+
|
38
40
|
allow!
|
39
41
|
end
|
40
42
|
|
@@ -45,21 +47,25 @@ module Decidim
|
|
45
47
|
return allow! if component.published?
|
46
48
|
return allow! if user_can_admin_component?
|
47
49
|
return allow! if user_can_admin_component_via_space?
|
50
|
+
|
48
51
|
disallow!
|
49
52
|
end
|
50
53
|
|
51
54
|
def search_scope_action?
|
52
55
|
return unless permission_action.subject == :scope
|
56
|
+
|
53
57
|
toggle_allow([:search, :pick].include?(permission_action.action))
|
54
58
|
end
|
55
59
|
|
56
60
|
def manage_self_user_action?
|
57
61
|
return unless permission_action.subject == :user
|
62
|
+
|
58
63
|
toggle_allow(context.fetch(:current_user, nil) == user)
|
59
64
|
end
|
60
65
|
|
61
66
|
def authorization_action?
|
62
67
|
return unless permission_action.subject == :authorization
|
68
|
+
|
63
69
|
authorization = context.fetch(:authorization, nil)
|
64
70
|
|
65
71
|
case permission_action.action
|
@@ -82,10 +88,17 @@ module Decidim
|
|
82
88
|
|
83
89
|
def amend_action?
|
84
90
|
return unless permission_action.subject == :amendment
|
85
|
-
return
|
86
|
-
|
87
|
-
|
88
|
-
|
91
|
+
return disallow! unless component.settings.amendments_enabled
|
92
|
+
|
93
|
+
case permission_action.action
|
94
|
+
when :create
|
95
|
+
return allow! if component.current_settings.amendment_creation_enabled
|
96
|
+
when :accept,
|
97
|
+
:reject
|
98
|
+
return allow! if component.current_settings.amendment_reaction_enabled
|
99
|
+
when :promote
|
100
|
+
return allow! if component.current_settings.amendment_promotion_enabled
|
101
|
+
end
|
89
102
|
|
90
103
|
amendment = context.fetch(:amendment, nil)
|
91
104
|
toggle_allow(amendment&.amender == user)
|
@@ -158,14 +171,5 @@ module Decidim
|
|
158
171
|
def user_manager_permissions
|
159
172
|
Decidim::UserManagerPermissions.new(user, permission_action, context).permissions
|
160
173
|
end
|
161
|
-
|
162
|
-
def not_admin?
|
163
|
-
!user.admin?
|
164
|
-
end
|
165
|
-
|
166
|
-
# Whether the user has the user_manager role or not.
|
167
|
-
def user_manager?
|
168
|
-
user.role? "user_manager"
|
169
|
-
end
|
170
174
|
end
|
171
175
|
end
|