decidim-admin 0.23.1 → 0.24.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.
Potentially problematic release.
This version of decidim-admin might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/assets/config/decidim_admin_manifest.js +1 -0
- data/app/assets/javascripts/decidim/admin/application.js.es6 +2 -0
- data/app/assets/javascripts/decidim/admin/budget_rule_toggler.component.js.es6 +23 -20
- data/app/assets/javascripts/decidim/admin/bundle.js +10 -17
- data/app/assets/javascripts/decidim/admin/bundle.js.map +1 -1
- data/app/assets/javascripts/decidim/admin/form.js.es6 +1 -0
- data/app/assets/javascripts/decidim/admin/import_guidance.js.es6 +29 -0
- data/app/assets/javascripts/decidim/admin/moderations.js.es6 +24 -0
- data/app/assets/javascripts/decidim/admin/proposal_infinite_edit.js.es6 +20 -0
- data/app/assets/javascripts/decidim/admin/subform_multi_toggler.component.js.es6 +2 -2
- data/app/assets/javascripts/decidim/admin/subform_toggler.component.js.es6 +2 -2
- data/app/assets/javascripts/decidim/admin/user_moderations.js +2 -0
- data/app/assets/stylesheets/decidim/admin/_variables.scss +9 -0
- data/app/assets/stylesheets/decidim/admin/components/_dropdown-menu.scss +3 -0
- data/app/assets/stylesheets/decidim/admin/extra/_action-icon.scss +13 -0
- data/app/assets/stylesheets/decidim/admin/extra/_block_user.scss +5 -0
- data/app/assets/stylesheets/decidim/admin/extra/_title_bar.scss +1 -0
- data/app/assets/stylesheets/decidim/admin/modules/_buttons.scss +1 -0
- data/app/assets/stylesheets/decidim/admin/modules/_moderations.scss +39 -0
- data/app/assets/stylesheets/decidim/admin/modules/_modules.scss +2 -0
- data/app/assets/stylesheets/decidim/admin/modules/_reveal.scss +5 -0
- data/app/assets/stylesheets/decidim/admin/modules/_secondary-nav.scss +6 -3
- data/app/assets/stylesheets/decidim/admin/modules/_user-login.scss +2 -2
- data/app/assets/stylesheets/decidim/admin/user_moderations.scss +3 -0
- data/app/assets/stylesheets/decidim/admin/utils/_settings.scss +1 -0
- data/app/cells/decidim/admin/content_block/show.erb +1 -1
- data/app/cells/decidim/admin/content_block_cell.rb +4 -0
- data/app/commands/decidim/admin/block_user.rb +70 -0
- data/app/commands/decidim/admin/create_import.rb +29 -0
- data/app/commands/decidim/admin/create_participatory_space_admin_user_actions.rb +98 -0
- data/app/commands/decidim/admin/create_participatory_space_private_user.rb +1 -1
- data/app/commands/decidim/admin/create_static_page.rb +2 -1
- data/app/commands/decidim/admin/hide_resource.rb +21 -0
- data/app/commands/decidim/admin/impersonate_user.rb +17 -1
- data/app/commands/decidim/admin/promote_managed_user.rb +10 -0
- data/app/commands/decidim/admin/reorder_content_blocks.rb +6 -3
- data/app/commands/decidim/admin/transfer_user.rb +78 -0
- data/app/commands/decidim/admin/unblock_user.rb +48 -0
- data/app/commands/decidim/admin/unreport_user.rb +46 -0
- data/app/commands/decidim/admin/update_organization_appearance.rb +12 -4
- data/app/commands/decidim/admin/update_static_page.rb +2 -1
- data/app/commands/decidim/admin/verify_user_group.rb +1 -1
- data/app/controllers/concerns/decidim/admin/filterable.rb +1 -1
- data/app/controllers/concerns/decidim/admin/global_moderation_context.rb +51 -0
- data/app/controllers/concerns/decidim/admin/landing_page.rb +105 -0
- data/app/controllers/concerns/decidim/admin/landing_page_content_blocks.rb +118 -0
- data/app/controllers/concerns/decidim/moderations/admin/filterable.rb +54 -0
- data/app/controllers/decidim/admin/block_user_controller.rb +60 -0
- data/app/controllers/decidim/admin/components/base_controller.rb +1 -0
- data/app/controllers/decidim/admin/conflicts_controller.rb +46 -0
- data/app/controllers/decidim/admin/exports_controller.rb +1 -2
- data/app/controllers/decidim/admin/global_moderations/reports_controller.rb +18 -0
- data/app/controllers/decidim/admin/global_moderations_controller.rb +32 -0
- data/app/controllers/decidim/admin/impersonations_controller.rb +1 -1
- data/app/controllers/decidim/admin/imports_controller.rb +52 -0
- data/app/controllers/decidim/admin/moderated_users_controller.rb +44 -0
- data/app/controllers/decidim/admin/moderations/reports_controller.rb +39 -0
- data/app/controllers/decidim/admin/moderations_controller.rb +31 -7
- data/app/controllers/decidim/admin/officializations_controller.rb +3 -3
- data/app/controllers/decidim/admin/organization_homepage_controller.rb +6 -2
- data/app/controllers/decidim/admin/static_pages_controller.rb +7 -0
- data/app/events/decidim/resource_hidden_event.rb +37 -0
- data/app/forms/decidim/admin/block_user_form.rb +25 -0
- data/app/forms/decidim/admin/import_form.rb +85 -0
- data/app/forms/decidim/admin/organization_appearance_form.rb +1 -2
- data/app/forms/decidim/admin/participatory_space_private_user_csv_import_form.rb +4 -5
- data/app/forms/decidim/admin/participatory_space_private_user_form.rb +0 -5
- data/app/forms/decidim/admin/selective_newsletter_form.rb +6 -0
- data/app/forms/decidim/admin/static_page_form.rb +6 -1
- data/app/forms/decidim/admin/transfer_user_form.rb +19 -0
- data/app/helpers/decidim/admin/admin_terms_helper.rb +0 -7
- data/app/helpers/decidim/admin/application_helper.rb +5 -4
- data/app/helpers/decidim/admin/exports_helper.rb +2 -2
- data/app/helpers/decidim/admin/filterable_helper.rb +3 -2
- data/app/helpers/decidim/admin/imports_helper.rb +43 -0
- data/app/helpers/decidim/admin/menu_helper.rb +10 -0
- data/app/helpers/decidim/admin/moderations/reports_helper.rb +40 -0
- data/app/helpers/decidim/admin/moderations_helper.rb +36 -0
- data/app/helpers/decidim/admin/newsletters_helper.rb +4 -10
- data/app/helpers/decidim/admin/settings_helper.rb +2 -1
- data/app/helpers/decidim/admin/sidebar_menu_helper.rb +13 -0
- data/app/helpers/decidim/admin/user_moderations_helper.rb +6 -0
- data/app/jobs/decidim/admin/import_participatory_space_private_user_csv_job.rb +1 -1
- data/app/jobs/decidim/admin/verify_user_group_from_csv_job.rb +1 -1
- data/app/permissions/decidim/admin/permissions.rb +7 -6
- data/app/presenters/decidim/admin/dashboard_metric_charts_presenter.rb +1 -1
- data/app/presenters/decidim/admin/secondary_menu_presenter.rb +26 -0
- data/app/queries/decidim/admin/active_users_counter.rb +1 -2
- data/app/queries/decidim/admin/newsletter_recipients.rb +0 -7
- data/app/queries/decidim/admin/user_filter.rb +1 -2
- data/app/views/decidim/admin/admin_terms/show.html.erb +1 -1
- data/app/views/decidim/admin/attachment_collections/index.html.erb +1 -1
- data/app/views/decidim/admin/attachments/index.html.erb +1 -1
- data/app/views/decidim/admin/block_user/new.html.erb +22 -0
- data/app/views/decidim/admin/categories/index.html.erb +1 -1
- data/app/views/decidim/admin/components/_component.html.erb +12 -0
- data/app/views/decidim/admin/components/_form.html.erb +1 -1
- data/app/views/decidim/admin/conflicts/edit.html.erb +46 -0
- data/app/views/decidim/admin/conflicts/index.html.erb +34 -0
- data/app/views/decidim/admin/dashboard/show.html.erb +2 -1
- data/app/views/decidim/admin/exports/_dropdown.html.erb +1 -1
- data/app/views/decidim/admin/imports/_dropdown.html.erb +9 -0
- data/app/views/decidim/admin/imports/new.html.erb +57 -0
- data/app/views/decidim/admin/moderated_users/_report.html.erb +10 -0
- data/app/views/decidim/admin/moderated_users/index.html.erb +78 -0
- data/app/views/decidim/admin/moderations/_report.html.erb +1 -1
- data/app/views/decidim/admin/moderations/index.html.erb +27 -9
- data/app/views/decidim/admin/moderations/reports/index.html.erb +102 -0
- data/app/views/decidim/admin/moderations/reports/show.html.erb +62 -0
- data/app/views/decidim/admin/newsletters/index.html.erb +1 -1
- data/app/views/decidim/admin/newsletters/select_recipients_to_deliver.html.erb +2 -2
- data/app/views/decidim/admin/officializations/index.html.erb +13 -4
- data/app/views/decidim/admin/organization_appearance/_form.html.erb +0 -4
- data/app/views/decidim/admin/organization_appearance/form/_colors.html.erb +1 -1
- data/app/views/decidim/admin/organization_appearance/form/_images.html.erb +4 -4
- data/app/views/decidim/admin/participatory_space_private_users/index.html.erb +1 -1
- data/app/views/decidim/admin/shared/_gallery.html.erb +1 -1
- data/app/views/decidim/admin/shared/landing_page/edit.html.erb +47 -0
- data/app/views/decidim/admin/shared/landing_page_content_blocks/edit.html.erb +15 -0
- data/app/views/decidim/admin/static_pages/_form.html.erb +6 -0
- data/app/views/decidim/admin/users/index.html.erb +1 -1
- data/app/views/layouts/decidim/admin/_application.html.erb +5 -1
- data/app/views/layouts/decidim/admin/_title_bar.html.erb +2 -2
- data/app/views/layouts/decidim/admin/global_moderations.html.erb +7 -0
- data/app/views/layouts/decidim/admin/newsletters.erb +1 -1
- data/app/views/layouts/decidim/admin/settings.html.erb +2 -33
- data/app/views/layouts/decidim/admin/users.html.erb +11 -0
- data/config/locales/ar.yml +0 -9
- data/config/locales/bg.yml +0 -5
- data/config/locales/ca.yml +151 -8
- data/config/locales/cs.yml +194 -51
- data/config/locales/de.yml +172 -28
- data/config/locales/el.yml +62 -9
- data/config/locales/en.yml +152 -9
- data/config/locales/es-MX.yml +150 -7
- data/config/locales/es-PY.yml +150 -7
- data/config/locales/es.yml +150 -7
- data/config/locales/eu.yml +18 -21
- data/config/locales/fi-plain.yml +150 -7
- data/config/locales/fi.yml +150 -7
- data/config/locales/fr-CA.yml +141 -8
- data/config/locales/fr.yml +142 -9
- data/config/locales/gl.yml +225 -4
- data/config/locales/hu.yml +13 -9
- data/config/locales/id-ID.yml +0 -3
- data/config/locales/is-IS.yml +36 -6
- data/config/locales/it.yml +74 -9
- data/config/locales/ja.yml +43 -12
- data/config/locales/lv.yml +0 -9
- data/config/locales/nl.yml +120 -11
- data/config/locales/no.yml +16 -9
- data/config/locales/pl.yml +168 -24
- data/config/locales/pt-BR.yml +0 -3
- data/config/locales/pt.yml +0 -9
- data/config/locales/ro-RO.yml +21 -9
- data/config/locales/ru.yml +0 -7
- data/config/locales/si-LK.yml +1 -0
- data/config/locales/sk.yml +0 -9
- data/config/locales/sl.yml +0 -5
- data/config/locales/sr-CS.yml +0 -7
- data/config/locales/sv.yml +53 -9
- data/config/locales/sw-KE.yml +1 -0
- data/config/locales/tr-TR.yml +206 -11
- data/config/locales/uk.yml +0 -3
- data/config/locales/zh-CN.yml +0 -9
- data/config/routes.rb +21 -1
- data/lib/decidim/admin.rb +6 -0
- data/lib/decidim/admin/engine.rb +76 -1
- data/lib/decidim/admin/import.rb +12 -0
- data/lib/decidim/admin/import/creator.rb +82 -0
- data/lib/decidim/admin/import/importer.rb +82 -0
- data/lib/decidim/admin/import/importer_factory.rb +17 -0
- data/lib/decidim/admin/import/readers.rb +39 -0
- data/lib/decidim/admin/import/readers/base.rb +31 -0
- data/lib/decidim/admin/import/readers/csv.rb +23 -0
- data/lib/decidim/admin/import/readers/json.rb +25 -0
- data/lib/decidim/admin/import/readers/xls.rb +25 -0
- data/lib/decidim/admin/test/commands/create_attachment_collection_examples.rb +6 -6
- data/lib/decidim/admin/test/commands/create_category_examples.rb +6 -6
- data/lib/decidim/admin/test/filterable_examples.rb +1 -8
- data/lib/decidim/admin/test/manage_moderations_examples.rb +49 -4
- data/lib/decidim/admin/version.rb +1 -1
- metadata +78 -19
@@ -3,7 +3,7 @@
|
|
3
3
|
<%= t(public_name_key) %>
|
4
4
|
<div>
|
5
5
|
<% if has_settings? %>
|
6
|
-
<%= link_to
|
6
|
+
<%= link_to edit_content_block_path, class: "mr-s text-muted" do %>
|
7
7
|
<%= icon "pencil", role: "img" %>
|
8
8
|
<% end %>
|
9
9
|
<% end %>
|
@@ -11,6 +11,10 @@ module Decidim
|
|
11
11
|
model.try(:manifest_name) || model.name
|
12
12
|
end
|
13
13
|
|
14
|
+
def edit_content_block_path
|
15
|
+
decidim_admin.edit_organization_homepage_content_block_path(manifest_name)
|
16
|
+
end
|
17
|
+
|
14
18
|
def decidim_admin
|
15
19
|
Decidim::Admin::Engine.routes.url_helpers
|
16
20
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
class BlockUser < Rectify::Command
|
6
|
+
# Public: Initializes the command.
|
7
|
+
#
|
8
|
+
# form - BlockUserForm
|
9
|
+
def initialize(form)
|
10
|
+
@form = form
|
11
|
+
end
|
12
|
+
|
13
|
+
# Executes the command. Broadcasts these events:
|
14
|
+
#
|
15
|
+
# - :ok when everything is valid, together with the resource.
|
16
|
+
# - :invalid if the resource is not reported
|
17
|
+
#
|
18
|
+
# Returns nothing.
|
19
|
+
def call
|
20
|
+
return broadcast(:invalid) unless form.valid?
|
21
|
+
|
22
|
+
transaction do
|
23
|
+
block!
|
24
|
+
register_justification!
|
25
|
+
notify_user!
|
26
|
+
end
|
27
|
+
|
28
|
+
broadcast(:ok, form.user)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
attr_reader :form
|
34
|
+
|
35
|
+
def register_justification!
|
36
|
+
@current_blocking = UserBlock.create!(
|
37
|
+
justification: form.justification,
|
38
|
+
user: form.user,
|
39
|
+
blocking_user: form.current_user
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
def notify_user!
|
44
|
+
Decidim::BlockUserJob.perform_later(
|
45
|
+
@current_blocking.user,
|
46
|
+
@current_blocking.justification
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
def block!
|
51
|
+
Decidim.traceability.perform_action!(
|
52
|
+
"block",
|
53
|
+
form.user,
|
54
|
+
form.current_user,
|
55
|
+
extra: {
|
56
|
+
reportable_type: form.user.class.name,
|
57
|
+
current_justification: form.justification
|
58
|
+
}
|
59
|
+
) do
|
60
|
+
form.user.blocked = true
|
61
|
+
form.user.blocked_at = Time.current
|
62
|
+
form.user.blocking = @current_blocking
|
63
|
+
form.user.extended_data["user_name"] = form.user.name
|
64
|
+
form.user.name = "Blocked user"
|
65
|
+
form.user.save!
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
class CreateImport < Rectify::Command
|
6
|
+
def initialize(form)
|
7
|
+
@form = form
|
8
|
+
end
|
9
|
+
|
10
|
+
def call
|
11
|
+
return broadcast(:invalid) if form.invalid?
|
12
|
+
|
13
|
+
imported_data = form.importer.prepare
|
14
|
+
transaction do
|
15
|
+
form.importer.import!
|
16
|
+
|
17
|
+
return broadcast(:ok, imported_data)
|
18
|
+
rescue StandardError
|
19
|
+
raise ActiveRecord::Rollback
|
20
|
+
end
|
21
|
+
|
22
|
+
# Something went wrong with import/finish
|
23
|
+
broadcast(:invalid)
|
24
|
+
end
|
25
|
+
|
26
|
+
attr_reader :form
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
# This is not a Command but an abstration of reusable methods by commands in participatory spaces that create space admins.
|
6
|
+
# Expects the command to have a `participatory_space` attribute.
|
7
|
+
module CreateParticipatorySpaceAdminUserActions
|
8
|
+
# Executes the command. Broadcasts these events:
|
9
|
+
#
|
10
|
+
# - :ok when everything is valid.
|
11
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
12
|
+
#
|
13
|
+
# Returns nothing.
|
14
|
+
def call
|
15
|
+
return broadcast(:invalid) if form.invalid?
|
16
|
+
|
17
|
+
ActiveRecord::Base.transaction do
|
18
|
+
@user ||= existing_user || new_user
|
19
|
+
existing_role || create_role
|
20
|
+
add_admin_as_follower
|
21
|
+
end
|
22
|
+
|
23
|
+
broadcast(:ok)
|
24
|
+
rescue ActiveRecord::RecordInvalid
|
25
|
+
form.errors.add(:email, :taken)
|
26
|
+
broadcast(:invalid)
|
27
|
+
end
|
28
|
+
|
29
|
+
# This is command specific
|
30
|
+
# It is expected to find if a UserRole for the same user, role and participatory_process already exist
|
31
|
+
# Return a boolean, or some object equally evaluable
|
32
|
+
def existing_role
|
33
|
+
raise NotImplementedError
|
34
|
+
end
|
35
|
+
|
36
|
+
# This is command specific
|
37
|
+
# It is expected to
|
38
|
+
# - create a XxxUserRole using `Decidim.traceability`
|
39
|
+
# - send a notification to the user telling she has been invited to manage the participatory space
|
40
|
+
def create_role
|
41
|
+
raise NotImplementedError
|
42
|
+
end
|
43
|
+
|
44
|
+
def existing_user
|
45
|
+
return @existing_user if defined?(@existing_user)
|
46
|
+
|
47
|
+
@existing_user = User.find_by(
|
48
|
+
email: form.email,
|
49
|
+
organization: @participatory_space.organization
|
50
|
+
)
|
51
|
+
|
52
|
+
InviteUserAgain.call(@existing_user, invitation_instructions) if @existing_user && invitation_pending?(@existing_user)
|
53
|
+
|
54
|
+
@existing_user
|
55
|
+
end
|
56
|
+
|
57
|
+
def invitation_pending?(user)
|
58
|
+
user.invited_to_sign_up? && !user.invitation_accepted?
|
59
|
+
end
|
60
|
+
|
61
|
+
def new_user
|
62
|
+
@new_user ||= InviteUser.call(user_form) do
|
63
|
+
on(:ok) do |user|
|
64
|
+
return user
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def user_form
|
70
|
+
OpenStruct.new(name: form.name,
|
71
|
+
email: form.email.downcase,
|
72
|
+
organization: @participatory_space.organization,
|
73
|
+
admin: false,
|
74
|
+
invited_by: current_user,
|
75
|
+
invitation_instructions: invitation_instructions)
|
76
|
+
end
|
77
|
+
|
78
|
+
def invitation_instructions
|
79
|
+
return "invite_admin" if form.role == "admin"
|
80
|
+
|
81
|
+
"invite_collaborator"
|
82
|
+
end
|
83
|
+
|
84
|
+
def add_admin_as_follower
|
85
|
+
return if user.follows?(@participatory_space)
|
86
|
+
|
87
|
+
form = Decidim::FollowForm
|
88
|
+
.from_params(followable_gid: @participatory_space.to_signed_global_id.to_s)
|
89
|
+
.with_context(
|
90
|
+
current_organization: @participatory_space.organization,
|
91
|
+
current_user: user
|
92
|
+
)
|
93
|
+
|
94
|
+
Decidim::CreateFollow.new(form, user).call
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -10,7 +10,7 @@ module Decidim
|
|
10
10
|
# form - A form object with the params.
|
11
11
|
# private_user_to - The private_user_to that will hold the
|
12
12
|
# user role
|
13
|
-
def initialize(form, current_user, private_user_to, via_csv
|
13
|
+
def initialize(form, current_user, private_user_to, via_csv: false)
|
14
14
|
@form = form
|
15
15
|
@current_user = current_user
|
16
16
|
@private_user_to = private_user_to
|
@@ -23,6 +23,9 @@ module Decidim
|
|
23
23
|
return broadcast(:invalid) unless hideable?
|
24
24
|
|
25
25
|
hide!
|
26
|
+
|
27
|
+
send_hide_notification_to_author
|
28
|
+
|
26
29
|
broadcast(:ok, @reportable)
|
27
30
|
end
|
28
31
|
|
@@ -44,6 +47,24 @@ module Decidim
|
|
44
47
|
@reportable.moderation.update!(hidden_at: Time.current)
|
45
48
|
end
|
46
49
|
end
|
50
|
+
|
51
|
+
def send_hide_notification_to_author
|
52
|
+
data = {
|
53
|
+
event: "decidim.events.reports.resource_hidden",
|
54
|
+
event_class: Decidim::ResourceHiddenEvent,
|
55
|
+
resource: @reportable,
|
56
|
+
extra: {
|
57
|
+
report_reasons: report_reasons
|
58
|
+
},
|
59
|
+
affected_users: @reportable.try(:authors) || [@reportable.try(:normalized_author)]
|
60
|
+
}
|
61
|
+
|
62
|
+
Decidim::EventsManager.publish(data)
|
63
|
+
end
|
64
|
+
|
65
|
+
def report_reasons
|
66
|
+
@reportable.moderation.reports.pluck(:reason).uniq
|
67
|
+
end
|
47
68
|
end
|
48
69
|
end
|
49
70
|
end
|
@@ -26,7 +26,8 @@ module Decidim
|
|
26
26
|
|
27
27
|
create_authorization
|
28
28
|
|
29
|
-
create_impersonation_log
|
29
|
+
impersonation_log = create_impersonation_log
|
30
|
+
create_action_log(impersonation_log)
|
30
31
|
end
|
31
32
|
|
32
33
|
enqueue_expire_job
|
@@ -60,6 +61,21 @@ module Decidim
|
|
60
61
|
.set(wait: Decidim::ImpersonationLog::SESSION_TIME_IN_MINUTES.minutes)
|
61
62
|
.perform_later(user, form.current_user)
|
62
63
|
end
|
64
|
+
|
65
|
+
def create_action_log(impersonation_log)
|
66
|
+
Decidim.traceability.perform_action!(
|
67
|
+
"manage",
|
68
|
+
impersonation_log,
|
69
|
+
form.current_user,
|
70
|
+
resource: {
|
71
|
+
name: user.name,
|
72
|
+
id: user.id,
|
73
|
+
nickname: user.nickname
|
74
|
+
},
|
75
|
+
visibility: "admin-only",
|
76
|
+
reason: form.reason
|
77
|
+
)
|
78
|
+
end
|
63
79
|
end
|
64
80
|
end
|
65
81
|
end
|
@@ -30,6 +30,7 @@ module Decidim
|
|
30
30
|
|
31
31
|
promote_user
|
32
32
|
invite_user
|
33
|
+
create_action_log
|
33
34
|
|
34
35
|
broadcast(:ok)
|
35
36
|
end
|
@@ -51,6 +52,15 @@ module Decidim
|
|
51
52
|
def email_already_exists?
|
52
53
|
Decidim::User.where(email: form.email.downcase).any?
|
53
54
|
end
|
55
|
+
|
56
|
+
def create_action_log
|
57
|
+
Decidim.traceability.perform_action!(
|
58
|
+
"promote",
|
59
|
+
user,
|
60
|
+
form.current_user,
|
61
|
+
visibility: "admin-only"
|
62
|
+
)
|
63
|
+
end
|
54
64
|
end
|
55
65
|
end
|
56
66
|
end
|
@@ -10,10 +10,12 @@ module Decidim
|
|
10
10
|
# organization - the Organization where the content blocks reside
|
11
11
|
# scope - the scope applied to the content blocks
|
12
12
|
# order - an Array holding the order of IDs of published content blocks.
|
13
|
-
|
13
|
+
# scoped_resource_id - (optional) The id of the resource the content blocks belongs to.
|
14
|
+
def initialize(organization, scope, order, scoped_resource_id = nil)
|
14
15
|
@organization = organization
|
15
16
|
@scope = scope
|
16
17
|
@order = order
|
18
|
+
@scoped_resource_id = scoped_resource_id
|
17
19
|
end
|
18
20
|
|
19
21
|
# Executes the command. Broadcasts these events:
|
@@ -31,7 +33,7 @@ module Decidim
|
|
31
33
|
|
32
34
|
private
|
33
35
|
|
34
|
-
attr_reader :organization, :scope
|
36
|
+
attr_reader :organization, :scope, :scoped_resource_id
|
35
37
|
|
36
38
|
def reorder_steps
|
37
39
|
transaction do
|
@@ -78,6 +80,7 @@ module Decidim
|
|
78
80
|
Decidim::ContentBlock.create!(
|
79
81
|
organization: organization,
|
80
82
|
scope_name: scope,
|
83
|
+
scoped_resource_id: scoped_resource_id.presence,
|
81
84
|
weight: weight,
|
82
85
|
manifest_name: manifest_name
|
83
86
|
)
|
@@ -90,7 +93,7 @@ module Decidim
|
|
90
93
|
end
|
91
94
|
|
92
95
|
def collection
|
93
|
-
@collection ||= Decidim::ContentBlock.for_scope(scope, organization: organization)
|
96
|
+
@collection ||= Decidim::ContentBlock.for_scope(scope, organization: organization).where(scoped_resource_id: scoped_resource_id)
|
94
97
|
end
|
95
98
|
end
|
96
99
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
# A command with all the business logic to transfer a managed user.
|
6
|
+
class TransferUser < Rectify::Command
|
7
|
+
# Public: Initializes the command.
|
8
|
+
#
|
9
|
+
# form
|
10
|
+
# user - The current user
|
11
|
+
# managed_user - The managed User
|
12
|
+
def initialize(form)
|
13
|
+
@form = form
|
14
|
+
end
|
15
|
+
|
16
|
+
# Executes the command. Broadcasts these events:
|
17
|
+
#
|
18
|
+
# - :ok when everything is valid.
|
19
|
+
# - :invalid if the impersonation is not valid.
|
20
|
+
#
|
21
|
+
# Returns nothing.
|
22
|
+
def call
|
23
|
+
return broadcast(:invalid) unless form.valid?
|
24
|
+
|
25
|
+
transaction do
|
26
|
+
update_managed_user
|
27
|
+
mark_conflict_as_solved
|
28
|
+
create_action_log
|
29
|
+
end
|
30
|
+
|
31
|
+
broadcast(:ok)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
attr_reader :form
|
37
|
+
|
38
|
+
def new_user
|
39
|
+
form.conflict.current_user
|
40
|
+
end
|
41
|
+
|
42
|
+
def managed_user
|
43
|
+
form.conflict.managed_user
|
44
|
+
end
|
45
|
+
|
46
|
+
def current_user
|
47
|
+
form.current_user
|
48
|
+
end
|
49
|
+
|
50
|
+
def update_managed_user
|
51
|
+
clean_email_and_delete_new_user if form.email == new_user.email
|
52
|
+
managed_user.email = form.email
|
53
|
+
managed_user.encrypted_password = new_user.encrypted_password
|
54
|
+
managed_user.confirmed_at = new_user.confirmed_at
|
55
|
+
managed_user.managed = false
|
56
|
+
managed_user.skip_reconfirmation!
|
57
|
+
managed_user.save!
|
58
|
+
end
|
59
|
+
|
60
|
+
def clean_email_and_delete_new_user
|
61
|
+
new_user.update(deleted_at: Time.now.utc, email: "")
|
62
|
+
end
|
63
|
+
|
64
|
+
def mark_conflict_as_solved
|
65
|
+
form.conflict.update(solved: true)
|
66
|
+
end
|
67
|
+
|
68
|
+
def create_action_log
|
69
|
+
Decidim.traceability.perform_action!(
|
70
|
+
"transfer",
|
71
|
+
form.conflict.managed_user,
|
72
|
+
current_user,
|
73
|
+
visibility: "admin-only"
|
74
|
+
)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|