decidim-participatory_processes 0.26.0 → 0.27.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +0 -4
- data/app/cells/decidim/participatory_process_groups/content_blocks/highlighted_participatory_processes/filters.erb +3 -3
- data/app/cells/decidim/participatory_process_groups/content_blocks/highlighted_participatory_processes/show.erb +1 -0
- data/app/cells/decidim/participatory_process_groups/content_blocks/highlighted_participatory_processes_cell.rb +6 -11
- data/app/cells/decidim/participatory_process_groups/content_blocks/title/show.erb +3 -3
- data/app/cells/decidim/participatory_process_groups/content_blocks/title_cell.rb +1 -0
- data/app/cells/decidim/participatory_process_groups/process_filters_cell.rb +15 -18
- data/app/cells/decidim/participatory_processes/content_blocks/highlighted_processes/show.erb +1 -1
- data/app/cells/decidim/participatory_processes/content_blocks/highlighted_processes_cell.rb +1 -1
- data/app/cells/decidim/participatory_processes/filtered_participatory_processes_cell.rb +11 -7
- data/app/cells/decidim/participatory_processes/process_filters/show.erb +13 -9
- data/app/cells/decidim/participatory_processes/process_filters/type_filter.erb +17 -0
- data/app/cells/decidim/participatory_processes/process_filters_cell.rb +50 -16
- data/app/cells/decidim/participatory_processes/process_m/tags.erb +1 -1
- data/app/cells/decidim/participatory_processes/process_m_cell.rb +1 -0
- data/app/commands/decidim/participatory_processes/admin/activate_participatory_process_step.rb +1 -1
- data/app/commands/decidim/participatory_processes/admin/copy_participatory_process.rb +11 -8
- data/app/commands/decidim/participatory_processes/admin/create_participatory_process.rb +6 -2
- data/app/commands/decidim/participatory_processes/admin/create_participatory_process_group.rb +1 -1
- data/app/commands/decidim/participatory_processes/admin/create_participatory_process_step.rb +1 -1
- data/app/commands/decidim/participatory_processes/admin/create_participatory_process_type.rb +47 -0
- data/app/commands/decidim/participatory_processes/admin/destroy_participatory_process_admin.rb +1 -1
- data/app/commands/decidim/participatory_processes/admin/destroy_participatory_process_group.rb +1 -1
- data/app/commands/decidim/participatory_processes/admin/destroy_participatory_process_step.rb +1 -1
- data/app/commands/decidim/participatory_processes/admin/destroy_participatory_process_type.rb +49 -0
- data/app/commands/decidim/participatory_processes/admin/import_participatory_process.rb +9 -6
- data/app/commands/decidim/participatory_processes/admin/notify_role_assigned_to_participatory_process.rb +1 -1
- data/app/commands/decidim/participatory_processes/admin/publish_participatory_process.rb +1 -1
- data/app/commands/decidim/participatory_processes/admin/reorder_participatory_process_steps.rb +1 -1
- data/app/commands/decidim/participatory_processes/admin/unpublish_participatory_process.rb +1 -1
- data/app/commands/decidim/participatory_processes/admin/update_participatory_process.rb +2 -1
- data/app/commands/decidim/participatory_processes/admin/update_participatory_process_group.rb +1 -1
- data/app/commands/decidim/participatory_processes/admin/update_participatory_process_step.rb +1 -1
- data/app/commands/decidim/participatory_processes/admin/update_participatory_process_type.rb +49 -0
- data/app/controllers/decidim/participatory_processes/admin/participatory_process_copies_controller.rb +1 -1
- data/app/controllers/decidim/participatory_processes/admin/participatory_process_types_controller.rb +98 -0
- data/app/controllers/decidim/participatory_processes/admin/reminders_controller.rb +14 -0
- data/app/controllers/decidim/participatory_processes/participatory_processes_controller.rb +8 -7
- data/app/events/decidim/participatory_process_role_assigned_event.rb +1 -1
- data/app/forms/decidim/participatory_processes/admin/participatory_process_form.rb +16 -0
- data/app/forms/decidim/participatory_processes/admin/participatory_process_import_form.rb +5 -7
- data/app/forms/decidim/participatory_processes/admin/participatory_process_type_form.rb +20 -0
- data/app/models/decidim/participatory_process.rb +35 -6
- data/app/models/decidim/participatory_process_type.rb +27 -0
- data/app/permissions/decidim/participatory_processes/permissions.rb +14 -0
- data/app/presenters/decidim/log/value_types/participatory_process_type_presenter.rb +27 -0
- data/app/presenters/decidim/participatory_processes/admin_log/participatory_process_presenter.rb +3 -2
- data/app/presenters/decidim/participatory_processes/admin_log/participatory_process_type_presenter.rb +38 -0
- data/app/presenters/decidim/participatory_processes/participatory_process_group_stats_presenter.rb +4 -1
- data/app/presenters/decidim/participatory_processes/participatory_process_metric_charts_presenter.rb +5 -1
- data/app/presenters/decidim/participatory_processes/participatory_process_stats_presenter.rb +4 -1
- data/app/queries/decidim/participatory_processes/admin/admin_users.rb +1 -1
- data/app/queries/decidim/participatory_processes/admin/moderators.rb +1 -1
- data/app/queries/decidim/participatory_processes/filtered_participatory_process_groups.rb +1 -1
- data/app/queries/decidim/participatory_processes/filtered_participatory_processes.rb +1 -1
- data/app/queries/decidim/participatory_processes/group_participatory_processes.rb +1 -1
- data/app/queries/decidim/participatory_processes/group_published_participatory_processes.rb +2 -2
- data/app/queries/decidim/participatory_processes/highlighted_participatory_processes.rb +1 -1
- data/app/queries/decidim/participatory_processes/organization_participatory_process_groups.rb +1 -1
- data/app/queries/decidim/participatory_processes/organization_participatory_processes.rb +1 -1
- data/app/queries/decidim/participatory_processes/organization_prioritized_participatory_process_groups.rb +2 -2
- data/app/queries/decidim/participatory_processes/organization_prioritized_participatory_processes.rb +2 -2
- data/app/queries/decidim/participatory_processes/organization_promoted_participatory_process_groups.rb +1 -1
- data/app/queries/decidim/participatory_processes/organization_published_participatory_processes.rb +2 -2
- data/app/queries/decidim/participatory_processes/participatory_processes_by_group.rb +1 -1
- data/app/queries/decidim/participatory_processes/prioritized_participatory_processes.rb +1 -1
- data/app/queries/decidim/participatory_processes/promoted_participatory_process_groups.rb +1 -1
- data/app/queries/decidim/participatory_processes/promoted_participatory_processes.rb +1 -1
- data/app/queries/decidim/participatory_processes/published_participatory_processes.rb +1 -1
- data/app/queries/decidim/participatory_processes/stats_followers_count.rb +2 -2
- data/app/queries/decidim/participatory_processes/stats_participants_count.rb +2 -2
- data/app/queries/decidim/participatory_processes/visible_participatory_process_groups.rb +1 -1
- data/app/queries/decidim/participatory_processes/visible_participatory_processes.rb +1 -1
- data/app/serializers/decidim/participatory_processes/participatory_process_importer.rb +1 -1
- data/app/views/decidim/participatory_process_steps/_participatory_process_step.html.erb +1 -1
- data/app/views/decidim/participatory_processes/admin/participatory_process_types/_form.html.erb +11 -0
- data/app/views/decidim/participatory_processes/admin/participatory_process_types/edit.html.erb +9 -0
- data/app/views/decidim/participatory_processes/admin/participatory_process_types/index.html.erb +60 -0
- data/app/views/decidim/participatory_processes/admin/participatory_process_types/new.html.erb +9 -0
- data/app/views/decidim/participatory_processes/admin/participatory_processes/_form.html.erb +10 -0
- data/app/views/decidim/participatory_processes/participatory_process_groups/show.html.erb +3 -1
- data/app/views/decidim/participatory_processes/participatory_process_groups/show.js.erb +9 -6
- data/app/views/decidim/participatory_processes/participatory_process_steps/index.html.erb +1 -1
- data/app/views/decidim/participatory_processes/participatory_processes/index.html.erb +3 -1
- data/app/views/decidim/participatory_processes/participatory_processes/index.js.erb +3 -1
- data/app/views/decidim/participatory_processes/participatory_processes/show.html.erb +1 -0
- data/app/views/layouts/decidim/_process_header.html.erb +3 -3
- data/app/views/layouts/decidim/admin/participatory_process_type.html.erb +15 -0
- data/config/locales/am-ET.yml +1 -0
- data/config/locales/ar.yml +1 -0
- data/config/locales/bg.yml +1 -0
- data/config/locales/ca.yml +45 -1
- data/config/locales/cs.yml +45 -1
- data/config/locales/da.yml +1 -0
- data/config/locales/de.yml +4 -7
- data/config/locales/el.yml +1 -6
- data/config/locales/en.yml +44 -1
- data/config/locales/eo.yml +1 -0
- data/config/locales/es-MX.yml +45 -1
- data/config/locales/es-PY.yml +45 -1
- data/config/locales/es.yml +45 -1
- data/config/locales/et.yml +1 -0
- data/config/locales/eu.yml +1 -6
- data/config/locales/fi-plain.yml +45 -1
- data/config/locales/fi.yml +45 -1
- data/config/locales/fr-CA.yml +45 -1
- data/config/locales/fr.yml +48 -4
- data/config/locales/ga-IE.yml +1 -0
- data/config/locales/gl.yml +3 -6
- data/config/locales/hr.yml +1 -0
- data/config/locales/hu.yml +3 -6
- data/config/locales/id-ID.yml +1 -0
- data/config/locales/is-IS.yml +2 -1
- data/config/locales/it.yml +3 -6
- data/config/locales/ja.yml +48 -4
- data/config/locales/ko.yml +1 -0
- data/config/locales/lb.yml +1 -6
- data/config/locales/lt.yml +1 -0
- data/config/locales/lv.yml +1 -6
- data/config/locales/mt.yml +1 -0
- data/config/locales/nl.yml +1 -6
- data/config/locales/no.yml +20 -7
- data/config/locales/om-ET.yml +1 -0
- data/config/locales/pl.yml +7 -6
- data/config/locales/pt-BR.yml +2 -7
- data/config/locales/pt.yml +1 -6
- data/config/locales/ro-RO.yml +1 -6
- data/config/locales/ru.yml +1 -0
- data/config/locales/si-LK.yml +1 -0
- data/config/locales/sk.yml +1 -6
- data/config/locales/sl.yml +1 -0
- data/config/locales/so-SO.yml +1 -0
- data/config/locales/sr-CS.yml +1 -0
- data/config/locales/sv.yml +15 -6
- data/config/locales/sw-KE.yml +1 -0
- data/config/locales/ti-ER.yml +1 -0
- data/config/locales/tr-TR.yml +1 -6
- data/config/locales/uk.yml +1 -0
- data/config/locales/val-ES.yml +1 -0
- data/config/locales/vi.yml +1 -0
- data/config/locales/zh-CN.yml +1 -6
- data/config/locales/zh-TW.yml +1 -0
- data/db/migrate/20211125202008_create_decidim_participatory_process_types.rb +22 -0
- data/lib/decidim/api/participatory_process_type_type.rb +17 -0
- data/lib/decidim/participatory_processes/admin_engine.rb +12 -1
- data/lib/decidim/participatory_processes/api.rb +1 -0
- data/lib/decidim/participatory_processes/participatory_space.rb +17 -8
- data/lib/decidim/participatory_processes/query_extensions.rb +22 -0
- data/lib/decidim/participatory_processes/test/factories.rb +17 -0
- data/lib/decidim/participatory_processes/version.rb +1 -1
- metadata +31 -15
- data/app/services/decidim/participatory_processes/participatory_process_search.rb +0 -27
@@ -5,7 +5,7 @@ module Decidim
|
|
5
5
|
module Admin
|
6
6
|
# A command with all the business logic when copying a new participatory
|
7
7
|
# process in the system.
|
8
|
-
class ImportParticipatoryProcess <
|
8
|
+
class ImportParticipatoryProcess < Decidim::Command
|
9
9
|
# Public: Initializes the command.
|
10
10
|
#
|
11
11
|
# form - A form object with the params.
|
@@ -38,11 +38,14 @@ module Decidim
|
|
38
38
|
def import_participatory_process
|
39
39
|
importer = Decidim::ParticipatoryProcesses::ParticipatoryProcessImporter.new(form.current_organization, form.current_user)
|
40
40
|
participatory_processes.each do |original_process|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
Decidim.traceability.perform_action!("import", Decidim::ParticipatoryProcess, form.current_user) do
|
42
|
+
@imported_process = importer.import(original_process, form.current_user, title: form.title, slug: form.slug)
|
43
|
+
importer.import_participatory_process_steps(original_process["participatory_process_steps"]) if form.import_steps?
|
44
|
+
importer.import_categories(original_process["participatory_process_categories"]) if form.import_categories?
|
45
|
+
importer.import_folders_and_attachments(original_process["attachments"]) if form.import_attachments?
|
46
|
+
importer.import_components(original_process["components"]) if form.import_components?
|
47
|
+
@imported_process
|
48
|
+
end
|
46
49
|
end
|
47
50
|
end
|
48
51
|
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module ParticipatoryProcesses
|
5
5
|
module Admin
|
6
6
|
# A command to notify users when a role is assigned for a participatory process
|
7
|
-
class NotifyRoleAssignedToParticipatoryProcess <
|
7
|
+
class NotifyRoleAssignedToParticipatoryProcess < Decidim::Command
|
8
8
|
def send_notification(user)
|
9
9
|
Decidim::EventsManager.publish(
|
10
10
|
event: "decidim.events.participatory_process.role_assigned",
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module ParticipatoryProcesses
|
5
5
|
module Admin
|
6
6
|
# A command that sets a participatory process as published.
|
7
|
-
class PublishParticipatoryProcess <
|
7
|
+
class PublishParticipatoryProcess < Decidim::Command
|
8
8
|
# Public: Initializes the command.
|
9
9
|
#
|
10
10
|
# process - A ParticipatoryProcess that will be published
|
data/app/commands/decidim/participatory_processes/admin/reorder_participatory_process_steps.rb
CHANGED
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module ParticipatoryProcesses
|
5
5
|
module Admin
|
6
6
|
# A command that reorders the steps in a participatory process.
|
7
|
-
class ReorderParticipatoryProcessSteps <
|
7
|
+
class ReorderParticipatoryProcessSteps < Decidim::Command
|
8
8
|
# Public: Initializes the command.
|
9
9
|
#
|
10
10
|
# collection - an ActiveRecord::Relation of steps
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module ParticipatoryProcesses
|
5
5
|
module Admin
|
6
6
|
# A command that sets a participatory process as unpublished.
|
7
|
-
class UnpublishParticipatoryProcess <
|
7
|
+
class UnpublishParticipatoryProcess < Decidim::Command
|
8
8
|
# Public: Initializes the command.
|
9
9
|
#
|
10
10
|
# process - A ParticipatoryProcess that will be unpublished
|
@@ -5,7 +5,7 @@ module Decidim
|
|
5
5
|
module Admin
|
6
6
|
# A command with all the business logic when creating a new participatory
|
7
7
|
# process in the system.
|
8
|
-
class UpdateParticipatoryProcess <
|
8
|
+
class UpdateParticipatoryProcess < Decidim::Command
|
9
9
|
include ::Decidim::AttachmentAttributesMethods
|
10
10
|
|
11
11
|
# Public: Initializes the command.
|
@@ -77,6 +77,7 @@ module Decidim
|
|
77
77
|
start_date: form.start_date,
|
78
78
|
end_date: form.end_date,
|
79
79
|
participatory_process_group: form.participatory_process_group,
|
80
|
+
participatory_process_type: form.participatory_process_type,
|
80
81
|
show_metrics: form.show_metrics,
|
81
82
|
show_statistics: form.show_statistics,
|
82
83
|
announcement: form.announcement
|
data/app/commands/decidim/participatory_processes/admin/update_participatory_process_group.rb
CHANGED
@@ -5,7 +5,7 @@ module Decidim
|
|
5
5
|
module Admin
|
6
6
|
# A command with all the business logic when creating a new participatory
|
7
7
|
# process group in the system.
|
8
|
-
class UpdateParticipatoryProcessGroup <
|
8
|
+
class UpdateParticipatoryProcessGroup < Decidim::Command
|
9
9
|
include ::Decidim::AttachmentAttributesMethods
|
10
10
|
|
11
11
|
# Public: Initializes the command.
|
data/app/commands/decidim/participatory_processes/admin/update_participatory_process_step.rb
CHANGED
@@ -5,7 +5,7 @@ module Decidim
|
|
5
5
|
module Admin
|
6
6
|
# A command with all the business logic when creating a new participatory
|
7
7
|
# process in the system.
|
8
|
-
class UpdateParticipatoryProcessStep <
|
8
|
+
class UpdateParticipatoryProcessStep < Decidim::Command
|
9
9
|
attr_reader :step
|
10
10
|
|
11
11
|
# Public: Initializes the command.
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ParticipatoryProcesses
|
5
|
+
module Admin
|
6
|
+
# A command with all the business logic when updating a participatory
|
7
|
+
# process type in the system.
|
8
|
+
class UpdateParticipatoryProcessType < Decidim::Command
|
9
|
+
# Public: Initializes the command.
|
10
|
+
#
|
11
|
+
# participatory_process_type - A participatory_process_type object to
|
12
|
+
# update
|
13
|
+
# form - A form object with the params.
|
14
|
+
def initialize(participatory_process_type, form)
|
15
|
+
@participatory_process_type = participatory_process_type
|
16
|
+
@form = form
|
17
|
+
end
|
18
|
+
|
19
|
+
# Executes the command. Broadcasts these events:
|
20
|
+
#
|
21
|
+
# - :ok when everything is valid.
|
22
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
23
|
+
#
|
24
|
+
# Returns nothing.
|
25
|
+
def call
|
26
|
+
return broadcast(:invalid) if form.invalid?
|
27
|
+
|
28
|
+
update_participatory_process_type!
|
29
|
+
|
30
|
+
broadcast(:ok)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
attr_reader :form, :participatory_process_type
|
36
|
+
|
37
|
+
def update_participatory_process_type!
|
38
|
+
transaction do
|
39
|
+
Decidim.traceability.update!(
|
40
|
+
participatory_process_type,
|
41
|
+
form.current_user,
|
42
|
+
title: form.title
|
43
|
+
)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -17,7 +17,7 @@ module Decidim
|
|
17
17
|
enforce_permission_to :create, :process
|
18
18
|
@form = form(ParticipatoryProcessCopyForm).from_params(params)
|
19
19
|
|
20
|
-
CopyParticipatoryProcess.call(@form, current_participatory_process) do
|
20
|
+
CopyParticipatoryProcess.call(@form, current_participatory_process, current_user) do
|
21
21
|
on(:ok) do
|
22
22
|
flash[:notice] = I18n.t("participatory_processes_copies.create.success", scope: "decidim.admin")
|
23
23
|
redirect_to participatory_processes_path
|
data/app/controllers/decidim/participatory_processes/admin/participatory_process_types_controller.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ParticipatoryProcesses
|
5
|
+
module Admin
|
6
|
+
# Controller used to manage participatory process types for the current
|
7
|
+
# organization
|
8
|
+
class ParticipatoryProcessTypesController < Decidim::ParticipatoryProcesses::Admin::ApplicationController
|
9
|
+
helper_method :collection, :current_participatory_process_type
|
10
|
+
layout "decidim/admin/participatory_process_type"
|
11
|
+
|
12
|
+
# GET /admin/participatory_process_types
|
13
|
+
def index
|
14
|
+
enforce_permission_to :index, :participatory_process_type
|
15
|
+
end
|
16
|
+
|
17
|
+
# GET /admin/participatory_process_types/new
|
18
|
+
def new
|
19
|
+
enforce_permission_to :create, :participatory_process_type
|
20
|
+
@form = participatory_process_type_form.instance
|
21
|
+
end
|
22
|
+
|
23
|
+
# POST /admin/participatory_process_types
|
24
|
+
def create
|
25
|
+
enforce_permission_to :create, :participatory_process_type
|
26
|
+
@form = participatory_process_type_form.from_params(params)
|
27
|
+
|
28
|
+
CreateParticipatoryProcessType.call(@form) do
|
29
|
+
on(:ok) do |_process_type|
|
30
|
+
flash[:notice] = I18n.t("participatory_process_types.create.success", scope: "decidim.admin")
|
31
|
+
redirect_to participatory_process_types_path
|
32
|
+
end
|
33
|
+
|
34
|
+
on(:invalid) do
|
35
|
+
flash.now[:alert] = I18n.t("participatory_process_types.create.error", scope: "decidim.admin")
|
36
|
+
render :new
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# GET /admin/participatory_process_types/:id/edit
|
42
|
+
def edit
|
43
|
+
enforce_permission_to :edit, :participatory_process_type, participatory_process_type: current_participatory_process_type
|
44
|
+
@form = participatory_process_type_form.from_model(
|
45
|
+
current_participatory_process_type,
|
46
|
+
participatory_process_type: current_participatory_process_type
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
# PUT /admin/participatory_process_types/:id
|
51
|
+
def update
|
52
|
+
enforce_permission_to :update, :participatory_process_type, participatory_process_type: current_participatory_process_type
|
53
|
+
|
54
|
+
@form = participatory_process_type_form
|
55
|
+
.from_params(params, participatory_process_type: current_participatory_process_type)
|
56
|
+
|
57
|
+
UpdateParticipatoryProcessType.call(current_participatory_process_type, @form) do
|
58
|
+
on(:ok) do
|
59
|
+
flash[:notice] = I18n.t("participatory_process_types.update.success", scope: "decidim.admin")
|
60
|
+
redirect_to participatory_process_types_path
|
61
|
+
end
|
62
|
+
|
63
|
+
on(:invalid) do
|
64
|
+
flash.now[:alert] = I18n.t("participatory_process_types.update.error", scope: "decidim.admin")
|
65
|
+
render :edit
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# DELETE /admin/participatory_process_types/:id
|
71
|
+
def destroy
|
72
|
+
enforce_permission_to :destroy, :participatory_process_type, participatory_process_type: current_participatory_process_type
|
73
|
+
|
74
|
+
DestroyParticipatoryProcessType.call(current_participatory_process_type, current_user) do
|
75
|
+
on(:ok) do
|
76
|
+
flash[:notice] = I18n.t("participatory_process_types.destroy.success", scope: "decidim.admin")
|
77
|
+
redirect_to participatory_process_types_path
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
def participatory_process_type_form
|
85
|
+
form(Decidim::ParticipatoryProcesses::Admin::ParticipatoryProcessTypeForm)
|
86
|
+
end
|
87
|
+
|
88
|
+
def current_participatory_process_type
|
89
|
+
@current_participatory_process_type ||= Decidim::ParticipatoryProcessType.find(params[:id])
|
90
|
+
end
|
91
|
+
|
92
|
+
def collection
|
93
|
+
@collection ||= Decidim::ParticipatoryProcessType.where(organization: current_organization)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ParticipatoryProcesses
|
5
|
+
module Admin
|
6
|
+
# This controller allows to send reminders.
|
7
|
+
# It is targeted for customizations for reminder things that lives under
|
8
|
+
# a participatory process.
|
9
|
+
class RemindersController < Decidim::Admin::RemindersController
|
10
|
+
include Concerns::ParticipatoryProcessAdmin
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -40,15 +40,16 @@ module Decidim
|
|
40
40
|
|
41
41
|
private
|
42
42
|
|
43
|
-
def
|
44
|
-
|
43
|
+
def search_collection
|
44
|
+
ParticipatoryProcess.where(organization: current_organization).published.visible_for(current_user).includes(:area)
|
45
45
|
end
|
46
46
|
|
47
47
|
def default_filter_params
|
48
48
|
{
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
with_scope: nil,
|
50
|
+
with_area: nil,
|
51
|
+
with_type: nil,
|
52
|
+
with_date: default_date_filter
|
52
53
|
}
|
53
54
|
end
|
54
55
|
|
@@ -85,7 +86,7 @@ module Decidim
|
|
85
86
|
end
|
86
87
|
|
87
88
|
def filtered_processes
|
88
|
-
search.
|
89
|
+
search.result
|
89
90
|
end
|
90
91
|
|
91
92
|
def participatory_processes
|
@@ -102,7 +103,7 @@ module Decidim
|
|
102
103
|
end
|
103
104
|
|
104
105
|
def metrics
|
105
|
-
@metrics ||= ParticipatoryProcessMetricChartsPresenter.new(participatory_process: current_participatory_space)
|
106
|
+
@metrics ||= ParticipatoryProcessMetricChartsPresenter.new(participatory_process: current_participatory_space, view_context: view_context)
|
106
107
|
end
|
107
108
|
|
108
109
|
def participatory_process_group
|
@@ -39,6 +39,7 @@ module Decidim
|
|
39
39
|
attribute :scopes_enabled, Boolean
|
40
40
|
attribute :show_metrics, Boolean
|
41
41
|
attribute :show_statistics, Boolean
|
42
|
+
attribute :participatory_process_type_id, Integer
|
42
43
|
|
43
44
|
attribute :end_date, Decidim::Attributes::LocalizedDate
|
44
45
|
attribute :start_date, Decidim::Attributes::LocalizedDate
|
@@ -66,6 +67,7 @@ module Decidim
|
|
66
67
|
def map_model(model)
|
67
68
|
self.scope_id = model.decidim_scope_id
|
68
69
|
self.participatory_process_group_id = model.decidim_participatory_process_group_id
|
70
|
+
self.participatory_process_type_id = model.decidim_participatory_process_type_id
|
69
71
|
self.related_process_ids = model.linked_participatory_space_resources(:participatory_process, "related_processes").pluck(:id)
|
70
72
|
@processes = Decidim::ParticipatoryProcess.where(organization: model.organization).where.not(id: model.id)
|
71
73
|
end
|
@@ -86,12 +88,26 @@ module Decidim
|
|
86
88
|
Decidim::ParticipatoryProcessGroup.find_by(id: participatory_process_group_id)
|
87
89
|
end
|
88
90
|
|
91
|
+
def participatory_process_type
|
92
|
+
Decidim::ParticipatoryProcessType.find_by(id: participatory_process_type_id)
|
93
|
+
end
|
94
|
+
|
89
95
|
def processes
|
90
96
|
@processes ||= Decidim::ParticipatoryProcess.where(organization: current_organization)
|
91
97
|
end
|
92
98
|
|
99
|
+
def participatory_process_types_for_select
|
100
|
+
@participatory_process_types_for_select ||= participatory_process_types.map do |type|
|
101
|
+
[translated_attribute(type.title), type.id]
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
93
105
|
private
|
94
106
|
|
107
|
+
def participatory_process_types
|
108
|
+
Decidim::ParticipatoryProcessType.where(organization: current_organization)
|
109
|
+
end
|
110
|
+
|
95
111
|
def organization_participatory_processes
|
96
112
|
OrganizationParticipatoryProcesses.new(current_organization).query
|
97
113
|
end
|
@@ -8,7 +8,6 @@ module Decidim
|
|
8
8
|
#
|
9
9
|
class ParticipatoryProcessImportForm < Form
|
10
10
|
include TranslatableAttributes
|
11
|
-
include Decidim::HasUploadValidations
|
12
11
|
|
13
12
|
JSON_MIME_TYPE = "application/json"
|
14
13
|
# Accepted mime types
|
@@ -30,10 +29,9 @@ module Decidim
|
|
30
29
|
attribute :import_categories, Boolean, default: true
|
31
30
|
attribute :import_attachments, Boolean, default: true
|
32
31
|
attribute :import_components, Boolean, default: true
|
33
|
-
attribute :document
|
34
|
-
|
35
|
-
validates :document, presence: true
|
32
|
+
attribute :document, Decidim::Attributes::Blob
|
36
33
|
|
34
|
+
validates :document, file_content_type: { allow: ACCEPTED_TYPES.values }
|
37
35
|
validates :slug, presence: true, format: { with: Decidim::ParticipatoryProcess.slug_format }
|
38
36
|
validates :title, translatable_presence: true
|
39
37
|
validate :slug_uniqueness
|
@@ -41,7 +39,7 @@ module Decidim
|
|
41
39
|
validate :document_type_must_be_valid, if: :document
|
42
40
|
|
43
41
|
def document_text
|
44
|
-
@document_text ||= document&.
|
42
|
+
@document_text ||= document&.download
|
45
43
|
end
|
46
44
|
|
47
45
|
def document_type_must_be_valid
|
@@ -60,9 +58,9 @@ module Decidim
|
|
60
58
|
end
|
61
59
|
|
62
60
|
def i18n_invalid_document_type_text
|
63
|
-
I18n.t("
|
61
|
+
I18n.t("allowed_file_content_types",
|
64
62
|
scope: "activemodel.errors.models.participatory_process.attributes.document",
|
65
|
-
|
63
|
+
types: i18n_valid_mime_types_text)
|
66
64
|
end
|
67
65
|
|
68
66
|
def i18n_valid_mime_types_text
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ParticipatoryProcesses
|
5
|
+
module Admin
|
6
|
+
# A form object used to create participatory process types from the admin
|
7
|
+
# dashboard.
|
8
|
+
#
|
9
|
+
class ParticipatoryProcessTypeForm < Form
|
10
|
+
include TranslatableAttributes
|
11
|
+
|
12
|
+
mimic :participatory_process_type
|
13
|
+
|
14
|
+
translatable_attribute :title, String
|
15
|
+
|
16
|
+
validates :title, translatable_presence: true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -21,6 +21,8 @@ module Decidim
|
|
21
21
|
include Decidim::Searchable
|
22
22
|
include Decidim::HasUploadValidations
|
23
23
|
include Decidim::TranslatableResource
|
24
|
+
include Decidim::HasArea
|
25
|
+
include Decidim::FilterableResource
|
24
26
|
|
25
27
|
translatable_fields :title, :subtitle, :short_description, :description, :developer_group, :meta_scope, :local_area,
|
26
28
|
:target, :participatory_scope, :participatory_structure, :announcement
|
@@ -28,10 +30,6 @@ module Decidim
|
|
28
30
|
belongs_to :organization,
|
29
31
|
foreign_key: "decidim_organization_id",
|
30
32
|
class_name: "Decidim::Organization"
|
31
|
-
belongs_to :area,
|
32
|
-
foreign_key: "decidim_area_id",
|
33
|
-
class_name: "Decidim::Area",
|
34
|
-
optional: true
|
35
33
|
belongs_to :participatory_process_group,
|
36
34
|
foreign_key: "decidim_participatory_process_group_id",
|
37
35
|
class_name: "Decidim::ParticipatoryProcessGroup",
|
@@ -58,6 +56,10 @@ module Decidim
|
|
58
56
|
foreign_key: "decidim_scope_type_id",
|
59
57
|
class_name: "Decidim::ScopeType",
|
60
58
|
optional: true
|
59
|
+
belongs_to :participatory_process_type,
|
60
|
+
foreign_key: "decidim_participatory_process_type_id",
|
61
|
+
class_name: "Decidim::ParticipatoryProcessType",
|
62
|
+
optional: true
|
61
63
|
|
62
64
|
has_many :components, as: :participatory_space, dependent: :destroy
|
63
65
|
|
@@ -76,6 +78,31 @@ module Decidim
|
|
76
78
|
scope :upcoming, -> { where(arel_table[:start_date].gt(Date.current)) }
|
77
79
|
scope :active, -> { where(arel_table[:start_date].lteq(Date.current).and(arel_table[:end_date].gteq(Date.current).or(arel_table[:end_date].eq(nil)))) }
|
78
80
|
|
81
|
+
scope :with_date, lambda { |date_key|
|
82
|
+
case date_key
|
83
|
+
when "active"
|
84
|
+
active.order(start_date: :desc)
|
85
|
+
when "past"
|
86
|
+
past.order(end_date: :desc)
|
87
|
+
when "upcoming"
|
88
|
+
upcoming.order(start_date: :asc)
|
89
|
+
else # Assume 'all'
|
90
|
+
timezone = ActiveSupport::TimeZone.find_tzinfo(Time.zone.name).identifier
|
91
|
+
order(
|
92
|
+
Arel.sql(
|
93
|
+
sanitize_sql_array(
|
94
|
+
[
|
95
|
+
"ABS(start_date - (CURRENT_DATE at time zone :timezone)::date)",
|
96
|
+
{ timezone: timezone }
|
97
|
+
]
|
98
|
+
)
|
99
|
+
)
|
100
|
+
)
|
101
|
+
end
|
102
|
+
}
|
103
|
+
|
104
|
+
scope :with_type, ->(type_id) { where(decidim_participatory_process_type_id: type_id) }
|
105
|
+
|
79
106
|
searchable_fields({
|
80
107
|
scope_id: :decidim_scope_id,
|
81
108
|
participatory_space: :itself,
|
@@ -177,8 +204,10 @@ module Decidim
|
|
177
204
|
end
|
178
205
|
|
179
206
|
# Allow ransacker to search for a key in a hstore column (`title`.`en`)
|
180
|
-
|
181
|
-
|
207
|
+
ransacker_i18n :title
|
208
|
+
|
209
|
+
def self.ransackable_scopes(_auth_object = nil)
|
210
|
+
[:with_date, :with_area, :with_scope, :with_type]
|
182
211
|
end
|
183
212
|
end
|
184
213
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
class ParticipatoryProcessType < ApplicationRecord
|
5
|
+
include Decidim::Traceable
|
6
|
+
include Decidim::Loggable
|
7
|
+
include Decidim::TranslatableResource
|
8
|
+
|
9
|
+
translatable_fields :title
|
10
|
+
|
11
|
+
belongs_to :organization,
|
12
|
+
foreign_key: "decidim_organization_id",
|
13
|
+
class_name: "Decidim::Organization"
|
14
|
+
|
15
|
+
has_many :processes,
|
16
|
+
foreign_key: "decidim_participatory_process_type_id",
|
17
|
+
class_name: "Decidim::ParticipatoryProcess",
|
18
|
+
inverse_of: :participatory_process_type,
|
19
|
+
dependent: :nullify
|
20
|
+
|
21
|
+
validates :title, presence: true
|
22
|
+
|
23
|
+
def self.log_presenter_class_for(_log)
|
24
|
+
Decidim::ParticipatoryProcesses::AdminLog::ParticipatoryProcessTypePresenter
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -38,6 +38,7 @@ module Decidim
|
|
38
38
|
|
39
39
|
# org admins and space admins can do everything in the admin section
|
40
40
|
org_admin_action?
|
41
|
+
participatory_process_type_action?
|
41
42
|
|
42
43
|
return permission_action unless process
|
43
44
|
|
@@ -252,6 +253,19 @@ module Decidim
|
|
252
253
|
allow! if is_allowed
|
253
254
|
end
|
254
255
|
|
256
|
+
def participatory_process_type_action?
|
257
|
+
return unless permission_action.subject == :participatory_process_type
|
258
|
+
return disallow! unless user.admin?
|
259
|
+
|
260
|
+
participatory_process_type = context.fetch(:participatory_process_type, nil)
|
261
|
+
case permission_action.action
|
262
|
+
when :destroy
|
263
|
+
toggle_allow(participatory_process_type&.processes&.none?)
|
264
|
+
else
|
265
|
+
allow!
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
255
269
|
# Checks if the permission_action is to read the admin processes list or
|
256
270
|
# not.
|
257
271
|
def read_process_list_permission_action?
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Log
|
5
|
+
module ValueTypes
|
6
|
+
# This class presents the given value as a
|
7
|
+
# Decidim::ParticipatoryProcessType. If the type can be found, it shows
|
8
|
+
# its title. Otherwise it shows its ID.
|
9
|
+
#
|
10
|
+
# Returns an HTML-safe String
|
11
|
+
class ParticipatoryProcessTypePresenter < Decidim::Log::ValueTypes::DefaultPresenter
|
12
|
+
def present
|
13
|
+
return unless value
|
14
|
+
return h.translated_attribute(type.title) if type
|
15
|
+
|
16
|
+
I18n.t("not_found", id: value, scope: "decidim.log.value_types.participatory_process_type_presenter")
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def type
|
22
|
+
@type ||= Decidim::ParticipatoryProcessType.find_by(id: value)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/app/presenters/decidim/participatory_processes/admin_log/participatory_process_presenter.rb
CHANGED
@@ -31,13 +31,14 @@ module Decidim
|
|
31
31
|
slug: :string,
|
32
32
|
subtitle: :i18n,
|
33
33
|
target: :i18n,
|
34
|
-
title: :i18n
|
34
|
+
title: :i18n,
|
35
|
+
decidim_participatory_process_type_id: :participatory_process_type
|
35
36
|
}
|
36
37
|
end
|
37
38
|
|
38
39
|
def action_string
|
39
40
|
case action
|
40
|
-
when "create", "publish", "unpublish", "update"
|
41
|
+
when "create", "publish", "unpublish", "update", "import", "export", "duplicate"
|
41
42
|
"decidim.admin_log.participatory_process.#{action}"
|
42
43
|
else
|
43
44
|
super
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ParticipatoryProcesses
|
5
|
+
module AdminLog
|
6
|
+
# This class holds the logic to present a
|
7
|
+
# `Decidim::ParticipatoryProcessType`
|
8
|
+
# for the `AdminLog` log.
|
9
|
+
#
|
10
|
+
# Usage should be automatic and you shouldn't need to call this class
|
11
|
+
# directly, but here's an example:
|
12
|
+
#
|
13
|
+
# action_log = Decidim::ActionLog.last
|
14
|
+
# view_helpers # => this comes from the views
|
15
|
+
# ParticipatoryProcessTypePresenter.new(action_log, view_helpers).present
|
16
|
+
class ParticipatoryProcessTypePresenter < Decidim::Log::BasePresenter
|
17
|
+
private
|
18
|
+
|
19
|
+
def diff_fields_mapping
|
20
|
+
{ title: :i18n }
|
21
|
+
end
|
22
|
+
|
23
|
+
def action_string
|
24
|
+
case action
|
25
|
+
when "create", "update"
|
26
|
+
"decidim.admin_log.participatory_process_type.#{action}"
|
27
|
+
else
|
28
|
+
super
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def i18n_labels_scope
|
33
|
+
"activemodel.attributes.participatory_process_type"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/app/presenters/decidim/participatory_processes/participatory_process_group_stats_presenter.rb
CHANGED
@@ -4,9 +4,12 @@ module Decidim
|
|
4
4
|
module ParticipatoryProcesses
|
5
5
|
# A presenter to render statistics in the homepage.
|
6
6
|
class ParticipatoryProcessGroupStatsPresenter < Decidim::StatsPresenter
|
7
|
-
attribute :participatory_process_group, Decidim::ParticipatoryProcessGroup
|
8
7
|
include Decidim::IconHelper
|
9
8
|
|
9
|
+
def participatory_process_group
|
10
|
+
__getobj__.fetch(:participatory_process_group)
|
11
|
+
end
|
12
|
+
|
10
13
|
# Public: returns a collection of stats (Hash) for the participatory
|
11
14
|
# process group landing page.
|
12
15
|
def collection
|