decidim-admin 0.23.0 → 0.24.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
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/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/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/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 +1 -0
- 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 +33 -9
- data/config/locales/cs.yml +193 -50
- 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 +42 -9
- data/config/locales/es-PY.yml +42 -9
- data/config/locales/es.yml +42 -9
- 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 +148 -15
- 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 +159 -15
- data/config/locales/pt-BR.yml +0 -3
- data/config/locales/pt.yml +0 -9
- data/config/locales/ro-RO.yml +8 -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 +59 -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
|