decidim-admin 0.23.5 → 0.24.2
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 +4 -1
- 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/_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_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 +47 -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/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/user_filter.rb +1 -2
- data/app/views/decidim/admin/admin_terms/show.html.erb +1 -1
- data/app/views/decidim/admin/area_types/index.html.erb +2 -2
- data/app/views/decidim/admin/areas/index.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/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 +28 -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 +3 -3
- data/app/views/decidim/admin/newsletters/show.html.erb +1 -1
- 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/scopes/index.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/static_pages/_topic.html.erb +3 -3
- data/app/views/decidim/admin/users/index.html.erb +2 -2
- data/app/views/layouts/decidim/admin/_application.html.erb +6 -1
- data/app/views/layouts/decidim/admin/_js_configuration.html.erb +26 -0
- 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/pages.html.erb +2 -2
- 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 -5
- data/config/locales/bg.yml +0 -1
- data/config/locales/ca.yml +150 -4
- data/config/locales/cs.yml +151 -5
- data/config/locales/de.yml +150 -5
- data/config/locales/el.yml +55 -5
- data/config/locales/en.yml +151 -5
- data/config/locales/es-MX.yml +149 -3
- data/config/locales/es-PY.yml +149 -3
- data/config/locales/es.yml +149 -3
- data/config/locales/eu.yml +0 -3
- data/config/locales/fi-plain.yml +149 -3
- data/config/locales/fi.yml +149 -3
- data/config/locales/fr-CA.yml +146 -4
- data/config/locales/fr.yml +146 -4
- data/config/locales/gl.yml +120 -5
- data/config/locales/hu.yml +13 -5
- data/config/locales/id-ID.yml +0 -3
- data/config/locales/is-IS.yml +19 -3
- data/config/locales/it.yml +59 -5
- data/config/locales/ja.yml +59 -5
- data/config/locales/lv.yml +0 -5
- data/config/locales/nl.yml +113 -4
- data/config/locales/no.yml +11 -5
- data/config/locales/pl.yml +150 -5
- data/config/locales/pt-BR.yml +0 -3
- data/config/locales/pt.yml +0 -5
- data/config/locales/ro-RO.yml +102 -5
- data/config/locales/ru.yml +0 -3
- data/config/locales/sk.yml +0 -5
- data/config/locales/sl.yml +0 -1
- data/config/locales/sr-CS.yml +0 -3
- data/config/locales/sv.yml +149 -4
- data/config/locales/tr-TR.yml +81 -4
- data/config/locales/uk.yml +0 -3
- data/config/locales/zh-CN.yml +0 -5
- 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 +68 -4
- data/lib/decidim/admin/version.rb +1 -1
- metadata +71 -15
- data/app/assets/javascripts/decidim/admin/gallery.js.es6 +0 -5
@@ -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,
|
@@ -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
|
@@ -8,13 +8,6 @@ module Decidim
|
|
8
8
|
current_organization.admin_terms_of_use_body.symbolize_keys[I18n.locale].html_safe
|
9
9
|
end
|
10
10
|
|
11
|
-
def admin_terms_announcement_args
|
12
|
-
{
|
13
|
-
callout_class: current_user.admin_terms_accepted? ? "success" : "warning",
|
14
|
-
announcement: announcement_body
|
15
|
-
}
|
16
|
-
end
|
17
|
-
|
18
11
|
def announcement_body
|
19
12
|
if current_user.admin_terms_accepted?
|
20
13
|
t("accept.success", scope: "decidim.admin.admin_terms_of_use")
|
@@ -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
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
# This module includes helpers to show moderation in admin
|
6
|
+
module ModerationsHelper
|
7
|
+
# Public: Renders an extract of the content reported in a text format.
|
8
|
+
def reported_content_excerpt_for(reportable, options = {})
|
9
|
+
I18n.with_locale(options.fetch(:locale, I18n.locale)) do
|
10
|
+
reportable_content = reportable.reported_attributes.map do |attribute_name|
|
11
|
+
attribute_value = reportable.attributes.with_indifferent_access[attribute_name]
|
12
|
+
next translated_attribute(attribute_value) if attribute_value.is_a? Hash
|
13
|
+
|
14
|
+
attribute_value
|
15
|
+
end
|
16
|
+
reportable_content.filter(&:present?).join(". ").truncate(options.fetch(:limit, 100))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Public: Finds the type and name of the participatory space the given
|
21
|
+
# `reportable` object is associated to.
|
22
|
+
#
|
23
|
+
# Returns a String, or `nil` if the space is not found.
|
24
|
+
def participatory_space_title_for(reportable, options = {})
|
25
|
+
space = reportable.try(:participatory_space)
|
26
|
+
return unless space
|
27
|
+
|
28
|
+
I18n.with_locale(options.fetch(:locale, I18n.locale)) do
|
29
|
+
title = translated_attribute(space.try(:title) || space.try(:name))
|
30
|
+
type = space.class.model_name.human
|
31
|
+
[type, title].compact.join(": ").truncate(options.fetch(:limit, 100))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -131,23 +131,17 @@ module Decidim
|
|
131
131
|
]
|
132
132
|
end
|
133
133
|
|
134
|
-
def
|
134
|
+
def newsletter_attention_callout_announcement
|
135
135
|
{
|
136
|
-
|
137
|
-
body: t("warning", scope: "decidim.admin.newsletters.select_recipients_to_deliver").html_safe
|
138
|
-
},
|
139
|
-
callout_class: "warning"
|
136
|
+
body: t("warning", scope: "decidim.admin.newsletters.select_recipients_to_deliver").html_safe
|
140
137
|
}
|
141
138
|
end
|
142
139
|
|
143
|
-
def
|
140
|
+
def newsletter_recipients_count_callout_announcement
|
144
141
|
spinner = "<span id='recipients_count_spinner' class='loading-spinner hide'></span>"
|
145
142
|
body = "#{t("recipients_count", scope: "decidim.admin.newsletters.select_recipients_to_deliver", count: recipients_count_query)} #{spinner}"
|
146
143
|
{
|
147
|
-
|
148
|
-
body: body
|
149
|
-
},
|
150
|
-
callout_class: "warning"
|
144
|
+
body: body
|
151
145
|
}
|
152
146
|
end
|
153
147
|
end
|
@@ -13,7 +13,8 @@ module Decidim
|
|
13
13
|
string: :text_field,
|
14
14
|
text: :text_area,
|
15
15
|
scope: :scope_field,
|
16
|
-
enum: :collection_radio_buttons
|
16
|
+
enum: :collection_radio_buttons,
|
17
|
+
time: :datetime_field
|
17
18
|
}.freeze
|
18
19
|
|
19
20
|
# Public: Renders a form field that matches a settings attribute's
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
module SidebarMenuHelper
|
6
|
+
protected
|
7
|
+
|
8
|
+
def sidebar_menu(target_menu)
|
9
|
+
::Decidim::Admin::SecondaryMenuPresenter.new(target_menu, self, active_class: "is-active")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|