decidim-admin 0.23.0 → 0.24.0.rc1
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/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
@@ -32,7 +32,7 @@ module Decidim
|
|
32
32
|
on(:ok) do |user|
|
33
33
|
notice = I18n.t("officializations.create.success", scope: "decidim.admin")
|
34
34
|
|
35
|
-
redirect_to officializations_path(q: user.name), notice: notice
|
35
|
+
redirect_to officializations_path(q: { name_or_nickname_or_email_cont: user.name }), notice: notice
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -44,7 +44,7 @@ module Decidim
|
|
44
44
|
on(:ok) do
|
45
45
|
notice = I18n.t("officializations.destroy.success", scope: "decidim.admin")
|
46
46
|
|
47
|
-
redirect_to officializations_path(q: user.name), notice: notice
|
47
|
+
redirect_to officializations_path(q: { name_or_nickname_or_email_cont: user.name }), notice: notice
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
@@ -60,7 +60,7 @@ module Decidim
|
|
60
60
|
private
|
61
61
|
|
62
62
|
def collection
|
63
|
-
@collection ||= current_organization.users.not_deleted
|
63
|
+
@collection ||= current_organization.users.not_deleted.left_outer_joins(:user_moderation)
|
64
64
|
end
|
65
65
|
|
66
66
|
def user
|
@@ -31,11 +31,15 @@ module Decidim
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def active_blocks
|
34
|
-
@active_blocks ||= content_blocks.published
|
34
|
+
@active_blocks ||= content_blocks.published.where(manifest_name: Decidim.content_blocks.for(:homepage).map(&:name))
|
35
|
+
end
|
36
|
+
|
37
|
+
def unpublished_blocks
|
38
|
+
@unpublished_blocks ||= content_blocks.unpublished.where(manifest_name: Decidim.content_blocks.for(:homepage).map(&:name))
|
35
39
|
end
|
36
40
|
|
37
41
|
def inactive_blocks
|
38
|
-
@inactive_blocks ||=
|
42
|
+
@inactive_blocks ||= unpublished_blocks + unused_manifests
|
39
43
|
end
|
40
44
|
|
41
45
|
def used_manifests
|
@@ -82,6 +82,13 @@ module Decidim
|
|
82
82
|
form_params = params.to_unsafe_hash
|
83
83
|
form_params["static_page"] ||= {}
|
84
84
|
form_params["static_page"]["organization"] = current_organization
|
85
|
+
form_params["static_page"]["allow_public_access"] ||= begin
|
86
|
+
if page
|
87
|
+
page.allow_public_access
|
88
|
+
else
|
89
|
+
false
|
90
|
+
end
|
91
|
+
end
|
85
92
|
|
86
93
|
return form_params unless page
|
87
94
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen-string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
class ResourceHiddenEvent < Decidim::Events::SimpleEvent
|
5
|
+
i18n_attributes :resource_path, :report_reasons, :resource_type, :resource_content
|
6
|
+
|
7
|
+
def resource_path
|
8
|
+
@resource.reported_content_url
|
9
|
+
end
|
10
|
+
|
11
|
+
def resource_url
|
12
|
+
@resource.reported_content_url
|
13
|
+
end
|
14
|
+
|
15
|
+
def report_reasons
|
16
|
+
extra["report_reasons"].map do |reason|
|
17
|
+
I18n.t("decidim.admin.moderations.report.reasons.#{reason}").downcase
|
18
|
+
end.join(", ")
|
19
|
+
end
|
20
|
+
|
21
|
+
def resource_title
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def resource_content
|
26
|
+
translated_attribute(@resource[@resource.reported_attributes.first]).truncate(100, separator: " ")
|
27
|
+
end
|
28
|
+
|
29
|
+
def resource_text
|
30
|
+
"<i>#{resource_content}</i>"
|
31
|
+
end
|
32
|
+
|
33
|
+
def resource_type
|
34
|
+
@resource.model_name.human.downcase
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
# A form object used to officialize users from the admin dashboard.
|
6
|
+
class BlockUserForm < Form
|
7
|
+
attribute :user_id, Integer
|
8
|
+
attribute :justification, String
|
9
|
+
|
10
|
+
validates :user, presence: true
|
11
|
+
validates :justification, presence: true, length: { minimum: UserBlock::MINIMUM_JUSTIFICATION_LENGTH }
|
12
|
+
|
13
|
+
def map_model(user)
|
14
|
+
self.user_id = user.id
|
15
|
+
end
|
16
|
+
|
17
|
+
def user
|
18
|
+
@user ||= Decidim::User.find_by(
|
19
|
+
id: user_id,
|
20
|
+
organization: current_organization
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
class ImportForm < Form
|
6
|
+
ACCEPTED_MIME_TYPES = Decidim::Admin::Import::Readers::ACCEPTED_MIME_TYPES
|
7
|
+
|
8
|
+
attribute :creator, String, default: ->(form, _attribute) { form.creators.first[:creator].to_s }
|
9
|
+
attribute :file
|
10
|
+
attribute :user_group_id, Integer
|
11
|
+
|
12
|
+
validates :file, presence: true
|
13
|
+
validates :creator, presence: true
|
14
|
+
validate :accepted_mime_type
|
15
|
+
validate :check_invalid_lines
|
16
|
+
|
17
|
+
def check_invalid_lines
|
18
|
+
return if file.blank? || !accepted_mime_type
|
19
|
+
|
20
|
+
importer.prepare
|
21
|
+
invalid_lines = importer.invalid_lines
|
22
|
+
errors.add(:file, I18n.t("decidim.admin.imports.invalid_lines", invalid_lines: invalid_lines.join(","))) unless invalid_lines.empty?
|
23
|
+
end
|
24
|
+
|
25
|
+
def file_path
|
26
|
+
file&.path
|
27
|
+
end
|
28
|
+
|
29
|
+
def mime_type
|
30
|
+
file&.content_type
|
31
|
+
end
|
32
|
+
|
33
|
+
def accepted_mime_type
|
34
|
+
accepted_mime_types = ACCEPTED_MIME_TYPES.values
|
35
|
+
return true if accepted_mime_types.include?(mime_type)
|
36
|
+
# Avoid duplicating error messages
|
37
|
+
return false if errors[:file].present?
|
38
|
+
|
39
|
+
errors.add(
|
40
|
+
:file,
|
41
|
+
I18n.t(
|
42
|
+
"activemodel.errors.new_import.attributes.file.invalid_mime_type",
|
43
|
+
valid_mime_types: ACCEPTED_MIME_TYPES.keys.map do |m|
|
44
|
+
I18n.t("decidim.admin.new_import.accepted_mime_types.#{m}")
|
45
|
+
end.join(", ")
|
46
|
+
)
|
47
|
+
)
|
48
|
+
false
|
49
|
+
end
|
50
|
+
|
51
|
+
def creators
|
52
|
+
@creators ||= current_component.manifest.import_manifests.map do |manifest|
|
53
|
+
{ creator: manifest.creator, name: manifest.creator.to_s.split("::").last.downcase }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def creator_class
|
58
|
+
return creator.constantize if creator.is_a?(String)
|
59
|
+
|
60
|
+
creator
|
61
|
+
end
|
62
|
+
|
63
|
+
def user_group
|
64
|
+
@user_group ||= Decidim::UserGroup.find_by(
|
65
|
+
organization: current_organization,
|
66
|
+
id: user_group_id.to_i
|
67
|
+
)
|
68
|
+
end
|
69
|
+
|
70
|
+
def importer
|
71
|
+
@importer ||= importer_for(file_path, mime_type)
|
72
|
+
end
|
73
|
+
|
74
|
+
def importer_for(filepath, mime_type)
|
75
|
+
context[:user_group] = user_group
|
76
|
+
Import::ImporterFactory.build(
|
77
|
+
filepath,
|
78
|
+
mime_type,
|
79
|
+
context: context,
|
80
|
+
creator: creator_class
|
81
|
+
)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -20,7 +20,6 @@ module Decidim
|
|
20
20
|
attribute :official_img_footer
|
21
21
|
attribute :remove_official_img_footer
|
22
22
|
attribute :official_url
|
23
|
-
attribute :show_statistics, Boolean
|
24
23
|
attribute :header_snippets, String
|
25
24
|
attribute :cta_button_path, String
|
26
25
|
attribute :highlighted_content_banner_enabled, Boolean, default: false
|
@@ -47,7 +46,7 @@ module Decidim
|
|
47
46
|
translatable_attribute :omnipresent_banner_title, String
|
48
47
|
translatable_attribute :omnipresent_banner_short_description, String
|
49
48
|
|
50
|
-
validates :cta_button_path, format: { with: %r{\A[a-zA-Z]+[a-zA-Z0-9
|
49
|
+
validates :cta_button_path, format: { with: %r{\A[a-zA-Z]+[a-zA-Z0-9\-_/]+\z} }, allow_blank: true
|
51
50
|
validates :official_img_header,
|
52
51
|
:official_img_footer,
|
53
52
|
:logo,
|
@@ -15,11 +15,10 @@ module Decidim
|
|
15
15
|
validate :validate_csv
|
16
16
|
|
17
17
|
def validate_csv
|
18
|
-
if file.
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
18
|
+
return if file.blank?
|
19
|
+
|
20
|
+
CSV.foreach(file.path) do |_email, user_name|
|
21
|
+
errors.add(:user_name, :invalid) unless user_name.match?(UserBaseEntity::REGEXP_NAME)
|
23
22
|
end
|
24
23
|
end
|
25
24
|
end
|
@@ -14,11 +14,6 @@ module Decidim
|
|
14
14
|
validates :name, :email, presence: true
|
15
15
|
|
16
16
|
validates :name, format: { with: UserBaseEntity::REGEXP_NAME }
|
17
|
-
validate :admin_uniqueness
|
18
|
-
|
19
|
-
def admin_uniqueness
|
20
|
-
errors.add(:email, :taken) if context && context.current_organization && context.current_organization.admins.where(email: email).exists?
|
21
|
-
end
|
22
17
|
end
|
23
18
|
end
|
24
19
|
end
|
@@ -24,6 +24,12 @@ module Decidim
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
# Make sure the empty scope is not passed because then some logic could
|
28
|
+
# assume erroneously that some scope is selected.
|
29
|
+
def scope_ids
|
30
|
+
super.select(&:presence)
|
31
|
+
end
|
32
|
+
|
27
33
|
private
|
28
34
|
|
29
35
|
def at_least_one_participatory_space_selected
|
@@ -11,6 +11,7 @@ module Decidim
|
|
11
11
|
translatable_attribute :content, String
|
12
12
|
attribute :changed_notably, Boolean
|
13
13
|
attribute :show_in_footer, Boolean
|
14
|
+
attribute :allow_public_access, Boolean
|
14
15
|
attribute :weight, Integer
|
15
16
|
attribute :topic_id, Integer
|
16
17
|
|
@@ -18,7 +19,7 @@ module Decidim
|
|
18
19
|
|
19
20
|
validates :slug, presence: true
|
20
21
|
validates :title, :content, translatable_presence: true
|
21
|
-
validates :slug, format: { with: %r{\A[a-zA-Z]+[a-zA-Z0-9
|
22
|
+
validates :slug, format: { with: %r{\A[a-zA-Z]+[a-zA-Z0-9\-_/]+\z} }, allow_blank: true
|
22
23
|
|
23
24
|
validate :slug, :slug_uniqueness
|
24
25
|
|
@@ -41,6 +42,10 @@ module Decidim
|
|
41
42
|
)
|
42
43
|
end
|
43
44
|
|
45
|
+
def control_public_access?
|
46
|
+
current_organization.force_users_to_authenticate_before_access_organization?
|
47
|
+
end
|
48
|
+
|
44
49
|
private
|
45
50
|
|
46
51
|
def slug_uniqueness
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
# A form object used to transfer conflicted users from the admin dashboard.
|
6
|
+
#
|
7
|
+
# This form will contain a dynamic attribute for the user authorization.
|
8
|
+
# This authorization will be selected by the admin user if more than one exists.
|
9
|
+
class TransferUserForm < Form
|
10
|
+
attribute :email, String
|
11
|
+
attribute :reason, String
|
12
|
+
attribute :current_user, Decidim::User
|
13
|
+
attribute :conflict, Decidim::Verifications::Conflict
|
14
|
+
|
15
|
+
validates :current_user, presence: true
|
16
|
+
validates :conflict, presence: true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -15,10 +15,6 @@ module Decidim
|
|
15
15
|
include Decidim::Admin::UserRolesHelper
|
16
16
|
include Decidim::Admin::ResourceScopeHelper
|
17
17
|
|
18
|
-
def title
|
19
|
-
current_organization.name
|
20
|
-
end
|
21
|
-
|
22
18
|
# Adds a link to the secondary navigation so admins can easily access the public page of the
|
23
19
|
# element their working on.
|
24
20
|
#
|
@@ -32,6 +28,11 @@ module Decidim
|
|
32
28
|
end
|
33
29
|
end
|
34
30
|
end
|
31
|
+
|
32
|
+
def participatory_space_active_link?(component)
|
33
|
+
endpoints = component.manifest.admin_engine.try(:participatory_space_endpoints)
|
34
|
+
endpoints && is_active_link?(decidim_admin_participatory_processes.components_path(current_participatory_space), %r{/\d+/manage/(#{endpoints.join("|")})\b})
|
35
|
+
end
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
@@ -10,8 +10,8 @@ module Decidim
|
|
10
10
|
# current component.
|
11
11
|
#
|
12
12
|
# Returns a rendered dropdown.
|
13
|
-
def export_dropdown(component = current_component)
|
14
|
-
render partial: "decidim/admin/exports/dropdown", locals: { component: component }
|
13
|
+
def export_dropdown(component = current_component, resource_id = nil)
|
14
|
+
render partial: "decidim/admin/exports/dropdown", locals: { component: component, resource_id: resource_id }
|
15
15
|
end
|
16
16
|
|
17
17
|
# Routes to the correct exporter for a component.
|
@@ -15,9 +15,10 @@ module Decidim
|
|
15
15
|
|
16
16
|
filters_with_values.each_with_object({}) do |(filter, values), hash|
|
17
17
|
link = filter_link_label(filter, i18n_scope)
|
18
|
-
hash[link] =
|
18
|
+
hash[link] = case values
|
19
|
+
when Array
|
19
20
|
build_submenu_options_tree_from_array(filter, values, i18n_scope)
|
20
|
-
|
21
|
+
when Hash
|
21
22
|
build_submenu_options_tree_from_hash(filter, values, i18n_scope)
|
22
23
|
end
|
23
24
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
module ImportsHelper
|
6
|
+
# Renders an import dropdown for the provided component. Additional dropdown items
|
7
|
+
# can be given as block.
|
8
|
+
#
|
9
|
+
# component - The component to render the export dropdown for. Defaults to the
|
10
|
+
# current component.
|
11
|
+
#
|
12
|
+
# resource_id - The resource id that is passed to route.
|
13
|
+
#
|
14
|
+
# Returns a rendered dropdown.
|
15
|
+
def import_dropdown(component = current_component, resource_id = nil)
|
16
|
+
locals = { component: component, resource_id: resource_id }
|
17
|
+
locals[:block] = yield if block_given?
|
18
|
+
render partial: "decidim/admin/imports/dropdown", locals: locals
|
19
|
+
end
|
20
|
+
|
21
|
+
# Routes to the correct importer for a component.
|
22
|
+
#
|
23
|
+
# component - The component to be routed.
|
24
|
+
# options - Extra options that need to be passed to the route.
|
25
|
+
#
|
26
|
+
# Returns the path to the component importer.
|
27
|
+
def admin_imports_path(component, options)
|
28
|
+
EngineRouter.admin_proxy(component.participatory_space).new_component_import_path(options.merge(component_id: component))
|
29
|
+
end
|
30
|
+
|
31
|
+
# Public: A formatted collection of mime_type to be used in forms.
|
32
|
+
def mime_types
|
33
|
+
accepted_mime_types = Decidim::Admin::Import::Readers::ACCEPTED_MIME_TYPES.keys
|
34
|
+
accepted_mime_types.map { |mime_type| t("decidim.admin.imports.new.accepted_mime_types.#{mime_type}") }.join(", ")
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns verified user groups of current user
|
38
|
+
def user_groups
|
39
|
+
Decidim::UserGroups::ManageableUserGroups.for(current_user).verified
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -4,6 +4,8 @@ module Decidim
|
|
4
4
|
module Admin
|
5
5
|
# This module includes helpers to manage menus in admin layout
|
6
6
|
module MenuHelper
|
7
|
+
include Decidim::Admin::SidebarMenuHelper
|
8
|
+
|
7
9
|
# Public: Returns the main menu presenter object
|
8
10
|
def main_menu
|
9
11
|
@main_menu ||= ::Decidim::MenuPresenter.new(
|
@@ -12,6 +14,14 @@ module Decidim
|
|
12
14
|
active_class: "is-active"
|
13
15
|
)
|
14
16
|
end
|
17
|
+
|
18
|
+
def global_moderation_menu
|
19
|
+
@global_moderation_menu ||= sidebar_menu(:admin_global_moderation_menu)
|
20
|
+
end
|
21
|
+
|
22
|
+
def organization_settings_menu
|
23
|
+
@organization_settings_menu ||= sidebar_menu(:admin_settings_menu)
|
24
|
+
end
|
15
25
|
end
|
16
26
|
end
|
17
27
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
module Moderations
|
6
|
+
# This module includes helpers to show moderation reports in admin
|
7
|
+
module ReportsHelper
|
8
|
+
include Decidim::Messaging::ConversationHelper
|
9
|
+
|
10
|
+
# Public: Returns the reportable's author names separated by commas.
|
11
|
+
def reportable_author_name(reportable)
|
12
|
+
reportable_authors = reportable.try(:authors) || [reportable.try(:normalized_author)]
|
13
|
+
content_tag :ul, class: "reportable-authors" do
|
14
|
+
reportable_authors.select(&:present?).map do |author|
|
15
|
+
if author.is_a? User
|
16
|
+
content_tag :li do
|
17
|
+
link_to current_or_new_conversation_path_with(author), target: "_blank", rel: "noopener" do
|
18
|
+
"#{author.name} #{icon "envelope-closed"}".html_safe
|
19
|
+
end
|
20
|
+
end
|
21
|
+
else
|
22
|
+
content_tag(:li, author.name)
|
23
|
+
end
|
24
|
+
end.join("").html_safe
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Public: Renders a small preview of the content reported.
|
29
|
+
def reported_content_for(reportable, options = {})
|
30
|
+
cell "decidim/reported_content", reportable, options
|
31
|
+
end
|
32
|
+
|
33
|
+
# Public: Whether the resource has some translated attribute or not.
|
34
|
+
def translatable_resource?(reportable)
|
35
|
+
reportable.respond_to?(:content_original_language)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|