decidim-admin 0.21.0 → 0.23.2
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/javascripts/decidim/admin/application.js.es6 +7 -0
- data/app/assets/javascripts/decidim/admin/budget_rule_toggler.component.js.es6 +52 -0
- data/app/assets/javascripts/decidim/admin/bundle.js +26 -32
- data/app/assets/javascripts/decidim/admin/bundle.js.map +1 -1
- data/app/assets/javascripts/decidim/admin/choose_language.js +12 -0
- data/app/assets/javascripts/decidim/admin/dynamic_fields.component.js.es6 +24 -5
- data/app/assets/javascripts/decidim/admin/form.js.es6 +24 -10
- data/app/assets/javascripts/decidim/admin/gallery.js.es6 +5 -0
- data/app/assets/javascripts/decidim/admin/newsletters.js.es6 +4 -0
- data/app/assets/javascripts/decidim/admin/officializations.js.es6 +20 -0
- data/app/assets/javascripts/decidim/admin/scope_picker_enabler.component.js.es6 +14 -0
- data/app/assets/stylesheets/decidim/admin/_decidim.scss +2 -0
- data/app/assets/stylesheets/decidim/admin/_variables.scss +1 -1
- data/app/assets/stylesheets/decidim/admin/extra/_newsletter-templates-gallery.scss +3 -0
- data/app/assets/stylesheets/decidim/admin/extra/_organization-appearance.scss +141 -0
- data/app/assets/stylesheets/decidim/admin/extra/_show_email.scss +31 -0
- data/app/assets/stylesheets/decidim/admin/extra/_title_bar.scss +4 -0
- data/app/assets/stylesheets/decidim/admin/modules/_buttons.scss +11 -1
- data/app/assets/stylesheets/decidim/admin/modules/_callouts.scss +11 -0
- data/app/assets/stylesheets/decidim/admin/modules/_cards.scss +2 -2
- data/app/assets/stylesheets/decidim/admin/modules/_filters.scss +2 -2
- data/app/assets/stylesheets/decidim/admin/modules/_forms.scss +16 -2
- data/app/assets/stylesheets/decidim/admin/modules/_import_result.scss +10 -0
- data/app/assets/stylesheets/decidim/admin/modules/_loading-spinner.scss +19 -0
- data/app/assets/stylesheets/decidim/admin/modules/_main-nav.scss +0 -1
- data/app/assets/stylesheets/decidim/admin/modules/_modules.scss +5 -1
- data/app/assets/stylesheets/decidim/admin/modules/_process-header.scss +0 -1
- data/app/assets/stylesheets/decidim/admin/modules/_secondary-nav.scss +0 -1
- data/app/assets/stylesheets/decidim/admin/modules/_table-list.scss +0 -5
- data/app/assets/stylesheets/decidim/admin/modules/_tabs.scss +7 -0
- data/app/assets/stylesheets/decidim/admin/modules/_users_statistics.scss +18 -0
- data/app/assets/stylesheets/decidim/admin/utils/_mixins.scss +42 -0
- data/app/assets/stylesheets/decidim/admin/utils/_settings.scss +4 -1
- data/app/cells/decidim/admin/content_block/show.erb +2 -2
- data/app/commands/decidim/admin/create_attachment.rb +2 -2
- data/app/commands/decidim/admin/create_newsletter.rb +34 -9
- data/app/commands/decidim/admin/destroy_share_token.rb +46 -0
- data/app/commands/decidim/admin/reorder_content_blocks.rb +1 -1
- data/app/commands/decidim/admin/update_component.rb +27 -3
- data/app/commands/decidim/admin/update_content_block.rb +25 -1
- data/app/commands/decidim/admin/update_newsletter.rb +31 -9
- data/app/commands/decidim/admin/update_organization.rb +11 -0
- data/app/commands/decidim/admin/update_organization_appearance.rb +3 -1
- data/app/controllers/concerns/decidim/admin/participatory_space_export.rb +8 -2
- data/app/controllers/decidim/admin/application_controller.rb +1 -0
- data/app/controllers/decidim/admin/authorization_workflows_controller.rb +6 -0
- data/app/controllers/decidim/admin/components_controller.rb +17 -6
- data/app/controllers/decidim/admin/dashboard_controller.rb +33 -1
- data/app/controllers/decidim/admin/metrics_controller.rb +22 -0
- data/app/controllers/decidim/admin/newsletter_templates_controller.rb +41 -0
- data/app/controllers/decidim/admin/newsletters_controller.rb +32 -4
- data/app/controllers/decidim/admin/officializations_controller.rb +8 -0
- data/app/controllers/decidim/admin/organization_appearance_controller.rb +1 -0
- data/app/controllers/decidim/admin/organization_controller.rb +4 -3
- data/app/controllers/decidim/admin/organization_homepage_content_blocks_controller.rb +2 -1
- data/app/controllers/decidim/admin/share_tokens_controller.rb +30 -0
- data/app/forms/decidim/admin/attachment_form.rb +3 -0
- data/app/forms/decidim/admin/component_form.rb +5 -22
- data/app/forms/decidim/admin/newsletter_form.rb +15 -3
- data/app/forms/decidim/admin/organization_appearance_form.rb +7 -4
- data/app/forms/decidim/admin/organization_form.rb +20 -0
- data/app/forms/decidim/admin/participatory_space_private_user_csv_import_form.rb +13 -0
- data/app/forms/decidim/admin/participatory_space_private_user_form.rb +3 -2
- data/app/forms/decidim/admin/selective_newsletter_form.rb +6 -0
- data/app/frontend/components/autocomplete.component.test.tsx +2 -1
- data/app/frontend/components/autocomplete.component.tsx +29 -0
- data/app/helpers/decidim/admin/application_helper.rb +1 -0
- data/app/helpers/decidim/admin/filterable_helper.rb +35 -27
- data/app/helpers/decidim/admin/icon_link_helper.rb +1 -1
- data/app/helpers/decidim/admin/newsletters_helper.rb +3 -1
- data/app/helpers/decidim/admin/resource_scope_helper.rb +43 -0
- data/app/helpers/decidim/admin/settings_helper.rb +52 -59
- data/app/helpers/decidim/admin/uploader_image_dimensions_helper.rb +30 -0
- data/app/models/decidim/admin/fake_newsletter.rb +49 -0
- data/app/permissions/decidim/admin/permissions.rb +7 -1
- data/app/presenters/decidim/admin/dashboard_metric_charts_presenter.rb +57 -0
- data/app/queries/decidim/admin/active_users_counter.rb +35 -0
- data/app/queries/decidim/admin/newsletter_recipients.rb +5 -8
- data/app/views/decidim/admin/attachment_collections/index.html.erb +1 -1
- data/app/views/decidim/admin/authorization_workflows/index.html.erb +1 -0
- data/app/views/decidim/admin/categories/index.html.erb +1 -1
- data/app/views/decidim/admin/components/_component.html.erb +5 -0
- data/app/views/decidim/admin/components/_form.html.erb +4 -0
- data/app/views/decidim/admin/components/_settings_fields.html.erb +2 -2
- data/app/views/decidim/admin/components/index.html.erb +1 -0
- data/app/views/decidim/admin/dashboard/show.html.erb +35 -10
- data/app/views/decidim/admin/exports/_dropdown.html.erb +6 -2
- data/app/views/decidim/admin/impersonatable_users/index.html.erb +2 -2
- data/app/views/decidim/admin/metrics/_metrics.html.erb +21 -0
- data/app/views/decidim/admin/metrics/index.html.erb +7 -0
- data/app/views/decidim/admin/newsletter_templates/index.html.erb +28 -0
- data/app/views/decidim/admin/newsletter_templates/show.html.erb +12 -0
- data/app/views/decidim/admin/newsletters/_form.html.erb +1 -7
- data/app/views/decidim/admin/newsletters/edit.html.erb +1 -1
- data/app/views/decidim/admin/newsletters/index.html.erb +1 -1
- data/app/views/decidim/admin/newsletters/new.html.erb +1 -1
- data/app/views/decidim/admin/officializations/_show_email_modal.html.erb +31 -0
- data/app/views/decidim/admin/officializations/index.html.erb +7 -3
- data/app/views/decidim/admin/officializations/show_email.html.erb +2 -0
- data/app/views/decidim/admin/organization/_form.html.erb +21 -0
- data/app/views/decidim/admin/organization_appearance/_form.html.erb +2 -72
- data/app/views/decidim/admin/organization_appearance/form/_colors.html.erb +23 -0
- data/app/views/decidim/admin/organization_appearance/form/_images.html.erb +38 -0
- data/app/views/decidim/admin/organization_appearance/form/_minimap.html.erb +46 -0
- data/app/views/decidim/admin/resource_permissions/_options_form.html.erb +1 -1
- data/app/views/decidim/admin/share_tokens/_share_tokens.html.erb +57 -0
- data/app/views/decidim/admin/shared/_filters.html.erb +3 -3
- data/app/views/decidim/admin/shared/_gallery.html.erb +21 -0
- data/app/views/decidim/admin/static_pages/_form.html.erb +1 -1
- data/app/views/decidim/admin/user_groups/index.html.erb +4 -4
- data/app/views/decidim/admin/users_statistics/_users_count.html.erb +39 -0
- data/app/views/layouts/decidim/admin/_application.html.erb +1 -0
- data/app/views/layouts/decidim/admin/_header.html.erb +3 -0
- data/app/views/layouts/decidim/admin/_title_bar.html.erb +20 -10
- data/app/views/layouts/decidim/admin/newsletters.erb +1 -1
- data/config/locales/am-ET.yml +1 -0
- data/config/locales/ar.yml +12 -45
- data/config/locales/bg-BG.yml +16 -0
- data/config/locales/bg.yml +131 -0
- data/config/locales/ca.yml +84 -46
- data/config/locales/cs.yml +175 -137
- data/config/locales/da-DK.yml +1 -0
- data/config/locales/da.yml +1 -0
- data/config/locales/de.yml +150 -56
- data/config/locales/el.yml +814 -0
- data/config/locales/en.yml +84 -46
- data/config/locales/eo-UY.yml +0 -1
- data/config/locales/eo.yml +51 -0
- data/config/locales/es-MX.yml +84 -46
- data/config/locales/es-PY.yml +84 -46
- data/config/locales/es.yml +84 -46
- data/config/locales/et-EE.yml +1 -0
- data/config/locales/et.yml +1 -0
- data/config/locales/eu.yml +30 -59
- data/config/locales/fi-plain.yml +84 -46
- data/config/locales/fi.yml +98 -60
- data/config/locales/fr-CA.yml +847 -0
- data/config/locales/fr.yml +126 -51
- data/config/locales/ga-IE.yml +1 -0
- data/config/locales/gl.yml +156 -42
- data/config/locales/hr-HR.yml +1 -0
- data/config/locales/hr.yml +1 -0
- data/config/locales/hu.yml +55 -46
- data/config/locales/id-ID.yml +12 -41
- data/config/locales/is-IS.yml +10 -42
- data/config/locales/is.yml +568 -0
- data/config/locales/it.yml +106 -85
- data/config/locales/ja-JP.yml +855 -0
- data/config/locales/ja.yml +847 -0
- data/config/locales/ko-KR.yml +1 -0
- data/config/locales/ko.yml +1 -0
- data/config/locales/lt-LT.yml +1 -0
- data/config/locales/lt.yml +1 -0
- data/config/locales/lv.yml +795 -0
- data/config/locales/mt-MT.yml +1 -0
- data/config/locales/mt.yml +1 -0
- data/config/locales/nl.yml +74 -46
- data/config/locales/no.yml +108 -83
- data/config/locales/om-ET.yml +1 -0
- data/config/locales/pl.yml +354 -233
- data/config/locales/pt-BR.yml +13 -42
- data/config/locales/pt.yml +321 -231
- data/config/locales/ro-RO.yml +810 -0
- data/config/locales/ru.yml +11 -44
- data/config/locales/si-LK.yml +1 -0
- data/config/locales/sk-SK.yml +823 -0
- data/config/locales/sk.yml +802 -0
- data/config/locales/sl.yml +162 -0
- data/config/locales/so-SO.yml +1 -0
- data/config/locales/sr-CS.yml +586 -0
- data/config/locales/sv.yml +134 -54
- data/config/locales/sw-KE.yml +1 -0
- data/config/locales/ti-ER.yml +1 -0
- data/config/locales/tr-TR.yml +139 -50
- data/config/locales/uk.yml +10 -42
- data/config/locales/vi-VN.yml +1 -0
- data/config/locales/vi.yml +1 -0
- data/config/locales/zh-CN.yml +845 -0
- data/config/locales/zh-TW.yml +1 -0
- data/config/routes.rb +14 -3
- data/lib/decidim/admin/engine.rb +12 -9
- data/lib/decidim/admin/form_builder.rb +2 -2
- data/lib/decidim/admin/test/manage_attachment_collections_examples.rb +1 -1
- data/lib/decidim/admin/test/manage_component_permissions_examples.rb +15 -15
- data/lib/decidim/admin/version.rb +1 -1
- metadata +85 -33
- data/app/commands/decidim/admin/create_oauth_application.rb +0 -36
- data/app/commands/decidim/admin/destroy_oauth_application.rb +0 -39
- data/app/commands/decidim/admin/update_oauth_application.rb +0 -39
- data/app/controllers/decidim/admin/oauth_applications_controller.rb +0 -90
- data/app/forms/decidim/admin/oauth_application_form.rb +0 -32
- data/app/views/decidim/admin/oauth_applications/_form.html.erb +0 -19
- data/app/views/decidim/admin/oauth_applications/edit.html.erb +0 -13
- data/app/views/decidim/admin/oauth_applications/index.html.erb +0 -40
- data/app/views/decidim/admin/oauth_applications/new.html.erb +0 -13
- data/app/views/decidim/admin/oauth_applications/show.html.erb +0 -27
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
# A command with all the business logic to destroy a share token.
|
6
|
+
class DestroyShareToken < Rectify::Command
|
7
|
+
# Public: Initializes the command.
|
8
|
+
#
|
9
|
+
# share_token - The share_token to destroy
|
10
|
+
# current_user - the user performing the action
|
11
|
+
def initialize(share_token, current_user)
|
12
|
+
@share_token = share_token
|
13
|
+
@current_user = current_user
|
14
|
+
end
|
15
|
+
|
16
|
+
# Executes the command. Broadcasts these events:
|
17
|
+
#
|
18
|
+
# - :ok when everything is valid.
|
19
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
20
|
+
#
|
21
|
+
# Returns nothing.
|
22
|
+
def call
|
23
|
+
begin
|
24
|
+
destroy_share_token
|
25
|
+
rescue StandardError
|
26
|
+
broadcast(:invalid)
|
27
|
+
end
|
28
|
+
broadcast(:ok)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
attr_reader :current_user
|
34
|
+
|
35
|
+
def destroy_share_token
|
36
|
+
Decidim.traceability.perform_action!(
|
37
|
+
"delete",
|
38
|
+
@share_token,
|
39
|
+
current_user
|
40
|
+
) do
|
41
|
+
@share_token.destroy!
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -33,13 +33,15 @@ module Decidim
|
|
33
33
|
private
|
34
34
|
|
35
35
|
def update_component
|
36
|
-
@previous_settings = @component.attributes["settings"].
|
37
|
-
|
36
|
+
@previous_settings = @component.attributes["settings"].with_indifferent_access
|
38
37
|
@component.name = form.name
|
38
|
+
@component.weight = form.weight
|
39
|
+
|
40
|
+
restore_readonly_settings!
|
41
|
+
|
39
42
|
@component.settings = form.settings
|
40
43
|
@component.default_step_settings = form.default_step_settings
|
41
44
|
@component.step_settings = form.step_settings
|
42
|
-
@component.weight = form.weight
|
43
45
|
|
44
46
|
@settings_changed = @component.settings_changed?
|
45
47
|
|
@@ -57,6 +59,28 @@ module Decidim
|
|
57
59
|
def current_settings
|
58
60
|
@component.attributes["settings"]
|
59
61
|
end
|
62
|
+
|
63
|
+
# Keep previous values for readonly settings
|
64
|
+
def restore_readonly_settings!
|
65
|
+
browse_readonly_settings("global") do |attribute|
|
66
|
+
form.settings[attribute] = @previous_settings.dig("global", attribute)
|
67
|
+
end
|
68
|
+
|
69
|
+
browse_readonly_settings("step") do |attribute|
|
70
|
+
form.default_step_settings[attribute] = @previous_settings.dig("default_step", attribute) if form.default_step_settings.present?
|
71
|
+
if form.step_settings.present?
|
72
|
+
form.step_settings.each do |step_name, step|
|
73
|
+
step[attribute] = @previous_settings.dig("steps", step_name, attribute)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def browse_readonly_settings(settings_name)
|
80
|
+
@component.manifest.settings(settings_name).attributes
|
81
|
+
.select { |_attribute, obj| obj.readonly?(component: @component) }
|
82
|
+
.each { |attribute, _obj| yield(attribute) }
|
83
|
+
end
|
60
84
|
end
|
61
85
|
end
|
62
86
|
end
|
@@ -24,13 +24,37 @@ module Decidim
|
|
24
24
|
def call
|
25
25
|
return broadcast(:invalid) if form.invalid?
|
26
26
|
|
27
|
+
images_valid = true
|
28
|
+
|
27
29
|
transaction do
|
28
30
|
update_content_block_settings
|
31
|
+
content_block.save!
|
32
|
+
|
33
|
+
# Saving the images will cause the image file validations to run
|
34
|
+
# according to their uploader settings and the organization settings.
|
35
|
+
# The content block validation will fail in case there are processing
|
36
|
+
# errors on the image files.
|
37
|
+
#
|
38
|
+
# NOTE:
|
39
|
+
# The images can be only stored correctly if the content block is
|
40
|
+
# already persisted. This is not the case e.g. when creating a new
|
41
|
+
# newsletter which uses the content blocks through newsletter
|
42
|
+
# templates. This is why this needs to happen after the initial
|
43
|
+
# `content_block.save!` call.
|
29
44
|
update_content_block_images
|
45
|
+
unless content_block.valid?
|
46
|
+
images_valid = false
|
47
|
+
raise ActiveRecord::Rollback
|
48
|
+
end
|
49
|
+
|
50
|
+
# The save method needs to be called another time in order to store
|
51
|
+
# the image information.
|
30
52
|
content_block.save!
|
31
53
|
end
|
32
54
|
|
33
|
-
broadcast(:
|
55
|
+
return broadcast(:invalid) unless images_valid
|
56
|
+
|
57
|
+
broadcast(:ok, content_block)
|
34
58
|
end
|
35
59
|
|
36
60
|
private
|
@@ -11,25 +11,47 @@ module Decidim
|
|
11
11
|
# user - The user that updates the newsletter.
|
12
12
|
def initialize(newsletter, form, user)
|
13
13
|
@newsletter = newsletter
|
14
|
+
@content_block = newsletter.template
|
14
15
|
@form = form
|
15
16
|
@user = user
|
16
17
|
@organization = user.organization
|
17
18
|
end
|
18
19
|
|
19
20
|
def call
|
20
|
-
return broadcast(:invalid) unless
|
21
|
-
return broadcast(:invalid) if
|
22
|
-
return broadcast(:invalid) unless
|
21
|
+
return broadcast(:invalid) unless form.valid?
|
22
|
+
return broadcast(:invalid) if newsletter.sent?
|
23
|
+
return broadcast(:invalid) unless organization == newsletter.organization
|
23
24
|
|
25
|
+
transaction do
|
26
|
+
update_newsletter
|
27
|
+
update_content_block
|
28
|
+
end
|
29
|
+
|
30
|
+
broadcast(:ok, newsletter)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
attr_reader :user, :newsletter, :content_block, :organization, :form
|
36
|
+
|
37
|
+
def update_newsletter
|
24
38
|
@newsletter = Decidim.traceability.update!(
|
25
|
-
|
26
|
-
|
27
|
-
subject:
|
28
|
-
|
29
|
-
author: @user
|
39
|
+
newsletter,
|
40
|
+
user,
|
41
|
+
subject: form.subject,
|
42
|
+
author: user
|
30
43
|
)
|
44
|
+
end
|
31
45
|
|
32
|
-
|
46
|
+
def update_content_block
|
47
|
+
UpdateContentBlock.call(form, content_block, user) do
|
48
|
+
on(:ok) do |content_block|
|
49
|
+
@content_block = content_block
|
50
|
+
end
|
51
|
+
on(:invalid) do
|
52
|
+
raise "There was a problem persisting the changes to the content block"
|
53
|
+
end
|
54
|
+
end
|
33
55
|
end
|
34
56
|
end
|
35
57
|
end
|
@@ -53,9 +53,12 @@ module Decidim
|
|
53
53
|
github_handler: form.github_handler,
|
54
54
|
badges_enabled: form.badges_enabled,
|
55
55
|
user_groups_enabled: form.user_groups_enabled,
|
56
|
+
comments_max_length: form.comments_max_length,
|
57
|
+
enable_machine_translations: form.enable_machine_translations,
|
56
58
|
admin_terms_of_use_body: form.admin_terms_of_use_body,
|
57
59
|
rich_text_editor_in_public_views: form.rich_text_editor_in_public_views
|
58
60
|
}.merge(welcome_notification_attributes)
|
61
|
+
.merge(machine_translation_attributes || {})
|
59
62
|
end
|
60
63
|
|
61
64
|
def welcome_notification_attributes
|
@@ -65,6 +68,14 @@ module Decidim
|
|
65
68
|
welcome_notification_body: form.customize_welcome_notification ? form.welcome_notification_body : nil
|
66
69
|
}
|
67
70
|
end
|
71
|
+
|
72
|
+
def machine_translation_attributes
|
73
|
+
return unless Decidim.config.enable_machine_translations
|
74
|
+
|
75
|
+
{
|
76
|
+
machine_translation_display_priority: form.machine_translation_display_priority
|
77
|
+
}
|
78
|
+
end
|
68
79
|
end
|
69
80
|
end
|
70
81
|
end
|
@@ -102,7 +102,9 @@ module Decidim
|
|
102
102
|
secondary: form.secondary_color,
|
103
103
|
success: form.success_color,
|
104
104
|
warning: form.warning_color,
|
105
|
-
alert: form.alert_color
|
105
|
+
alert: form.alert_color,
|
106
|
+
highlight: form.highlight_color,
|
107
|
+
"highlight-alternative": form.highlight_alternative_color
|
106
108
|
}
|
107
109
|
}
|
108
110
|
end
|
@@ -11,19 +11,25 @@ module Decidim
|
|
11
11
|
def create
|
12
12
|
enforce_permission_to :create, :export_space, participatory_space: exportable_space
|
13
13
|
|
14
|
-
ExportParticipatorySpaceJob.perform_later(current_user, exportable_space,
|
14
|
+
ExportParticipatorySpaceJob.perform_later(current_user, exportable_space, manifest_name, default_format)
|
15
15
|
|
16
16
|
flash[:notice] = t("decidim.admin.exports.notice")
|
17
17
|
|
18
18
|
redirect_back(fallback_location: after_export_path)
|
19
19
|
end
|
20
20
|
|
21
|
-
# Public:
|
21
|
+
# Public: To be implemented at the controller. You need to
|
22
22
|
# return the space that will be exported.
|
23
23
|
def exportable_space
|
24
24
|
raise NotImplementedError
|
25
25
|
end
|
26
26
|
|
27
|
+
# Public: To be implemented at the controller. You need to
|
28
|
+
# return the plural of the name of the space that will be exported.
|
29
|
+
def manifest_name
|
30
|
+
raise NotImplementedError
|
31
|
+
end
|
32
|
+
|
27
33
|
# Public: Returns a String or Object that will be passed to `redirect_to` after
|
28
34
|
# exporing a space. By default it redirects to the root_path.
|
29
35
|
#
|
@@ -9,6 +9,12 @@ module Decidim
|
|
9
9
|
enforce_permission_to :index, :authorization_workflow
|
10
10
|
|
11
11
|
@workflows = Decidim::Verifications.admin_workflows
|
12
|
+
|
13
|
+
# Decidim::Verifications::Authorizations Query
|
14
|
+
@authorizations = Decidim::Verifications::Authorizations.new(
|
15
|
+
organization: current_organization,
|
16
|
+
granted: true
|
17
|
+
).query
|
12
18
|
end
|
13
19
|
end
|
14
20
|
end
|
@@ -20,14 +20,17 @@ module Decidim
|
|
20
20
|
@component = Component.new(
|
21
21
|
name: default_name(manifest),
|
22
22
|
manifest_name: params[:type],
|
23
|
-
participatory_space: current_participatory_space
|
23
|
+
participatory_space: current_participatory_space,
|
24
|
+
settings: {
|
25
|
+
scope_id: current_participatory_space.scope.try(:id)
|
26
|
+
}
|
24
27
|
)
|
25
28
|
|
26
|
-
@form = form(
|
29
|
+
@form = form(@component.form_class).from_model(@component)
|
27
30
|
end
|
28
31
|
|
29
32
|
def create
|
30
|
-
@form = form(
|
33
|
+
@form = form(manifest.component_form_class).from_params(component_params)
|
31
34
|
enforce_permission_to :create, :component
|
32
35
|
|
33
36
|
CreateComponent.call(@form) do
|
@@ -47,12 +50,12 @@ module Decidim
|
|
47
50
|
@component = query_scope.find(params[:id])
|
48
51
|
enforce_permission_to :update, :component, component: @component
|
49
52
|
|
50
|
-
@form = form(
|
53
|
+
@form = form(@component.form_class).from_model(@component)
|
51
54
|
end
|
52
55
|
|
53
56
|
def update
|
54
57
|
@component = query_scope.find(params[:id])
|
55
|
-
@form = form(
|
58
|
+
@form = form(@component.form_class).from_params(component_params)
|
56
59
|
enforce_permission_to :update, :component, component: @component
|
57
60
|
|
58
61
|
UpdateComponent.call(@form, @component) do
|
@@ -111,9 +114,16 @@ module Decidim
|
|
111
114
|
end
|
112
115
|
end
|
113
116
|
|
117
|
+
def share
|
118
|
+
@component = query_scope.find(params[:id])
|
119
|
+
share_token = @component.share_tokens.create!(user: current_user, organization: current_organization)
|
120
|
+
|
121
|
+
redirect_to share_token.url
|
122
|
+
end
|
123
|
+
|
114
124
|
private
|
115
125
|
|
116
|
-
# Processes the component params so
|
126
|
+
# Processes the component params so the form object defined in the manifest (component_form_class_name)
|
117
127
|
# can assign and validate the attributes when using #from_params.
|
118
128
|
def component_params
|
119
129
|
new_settings = proc { |name, data| Component.build_settings(manifest, name, data, current_organization) }
|
@@ -126,6 +136,7 @@ module Decidim
|
|
126
136
|
if hsh[:default_step_settings]
|
127
137
|
hsh[:default_step_settings] = new_settings.call(:step, hsh[:default_step_settings])
|
128
138
|
else
|
139
|
+
hsh[:step_settings] ||= {}
|
129
140
|
hsh[:step_settings].each do |key, value|
|
130
141
|
hsh[:step_settings][key] = new_settings.call(:step, value)
|
131
142
|
end
|
@@ -6,6 +6,8 @@ module Decidim
|
|
6
6
|
#
|
7
7
|
class DashboardController < Decidim::Admin::ApplicationController
|
8
8
|
helper_method :latest_action_logs
|
9
|
+
helper_method :users_counter
|
10
|
+
helper_method :metrics_presenter
|
9
11
|
|
10
12
|
def show
|
11
13
|
enforce_permission_to :read, :admin_dashboard
|
@@ -19,7 +21,37 @@ module Decidim
|
|
19
21
|
.includes(:participatory_space, :user, :resource, :component, :version)
|
20
22
|
.for_admin
|
21
23
|
.order(created_at: :desc)
|
22
|
-
.first(
|
24
|
+
.first(5)
|
25
|
+
end
|
26
|
+
|
27
|
+
def metrics_presenter
|
28
|
+
@metrics_presenter ||= Decidim::Admin::DashboardMetricChartsPresenter.new(
|
29
|
+
summary: true,
|
30
|
+
organization: current_organization
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
def users_counter
|
35
|
+
last_day = Time.zone.yesterday
|
36
|
+
last_week = Time.zone.today.prev_week
|
37
|
+
last_month = Time.zone.today.prev_month
|
38
|
+
|
39
|
+
{
|
40
|
+
total_admins_last_24: users_count(last_day, true),
|
41
|
+
total_admins_last_week: users_count(last_week, true),
|
42
|
+
total_admins_last_month: users_count(last_month, true),
|
43
|
+
total_participants_last_24: users_count(last_day, false),
|
44
|
+
total_participants_last_week: users_count(last_week, false),
|
45
|
+
total_participants_last_month: users_count(last_month, false)
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def users_count(date, admin)
|
50
|
+
@users_count = Decidim::Admin::ActiveUsersCounter.new(
|
51
|
+
organization: current_organization,
|
52
|
+
date: date,
|
53
|
+
admin: admin
|
54
|
+
).query.count
|
23
55
|
end
|
24
56
|
end
|
25
57
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
class MetricsController < Decidim::Admin::ApplicationController
|
6
|
+
helper_method :metrics_presenter
|
7
|
+
|
8
|
+
def index
|
9
|
+
enforce_permission_to :read, :metrics
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def metrics_presenter
|
15
|
+
@metrics_presenter ||= Decidim::Admin::DashboardMetricChartsPresenter.new(
|
16
|
+
summary: false,
|
17
|
+
organization: current_organization
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
# Controller that allows managing newsletters.
|
6
|
+
class NewsletterTemplatesController < Decidim::Admin::ApplicationController
|
7
|
+
helper_method :templates, :template_manifest
|
8
|
+
|
9
|
+
layout "decidim/admin/newsletters"
|
10
|
+
|
11
|
+
def index
|
12
|
+
enforce_permission_to :index, :newsletter
|
13
|
+
end
|
14
|
+
|
15
|
+
def show; end
|
16
|
+
|
17
|
+
def preview
|
18
|
+
email = NewsletterMailer.newsletter(current_user, fake_newsletter)
|
19
|
+
Premailer::Rails::Hook.perform(email)
|
20
|
+
render html: email.html_part.body.decoded.html_safe
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def templates
|
26
|
+
@templates ||= Decidim.content_blocks.for(:newsletter_template)
|
27
|
+
end
|
28
|
+
|
29
|
+
def template_manifest
|
30
|
+
@template_manifest ||= Decidim
|
31
|
+
.content_blocks
|
32
|
+
.for(:newsletter_template)
|
33
|
+
.find { |manifest| manifest.name.to_s == params[:id] }
|
34
|
+
end
|
35
|
+
|
36
|
+
def fake_newsletter
|
37
|
+
@fake_newsletter ||= Decidim::Admin::FakeNewsletter.new(current_organization, template_manifest)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|