decidim-participatory_processes 0.20.1 → 0.21.0
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/decidim/participatory_processes/admin/participatory_processes.js.es6 +6 -0
- data/app/cells/decidim/participatory_processes/statistic/show.erb +9 -0
- data/app/cells/decidim/participatory_processes/statistic_cell.rb +20 -0
- data/app/cells/decidim/participatory_processes/statistics/show.erb +17 -0
- data/app/cells/decidim/participatory_processes/statistics_cell.rb +18 -0
- data/app/commands/decidim/participatory_processes/admin/create_participatory_process.rb +13 -3
- data/app/commands/decidim/participatory_processes/admin/update_participatory_process.rb +16 -5
- data/app/controllers/concerns/decidim/participatory_processes/admin/filterable.rb +27 -0
- data/app/controllers/decidim/participatory_processes/admin/participatory_processes_controller.rb +6 -16
- data/app/controllers/decidim/participatory_processes/participatory_processes_controller.rb +17 -3
- data/app/forms/decidim/participatory_processes/admin/participatory_process_form.rb +13 -0
- data/app/functions/decidim/participatory_processes/participatory_process_finder.rb +10 -0
- data/app/functions/decidim/participatory_processes/participatory_process_list.rb +11 -0
- data/app/helpers/decidim/participatory_processes/admin/participatory_process_helper.rb +23 -0
- data/app/models/decidim/participatory_process.rb +12 -1
- data/app/models/decidim/participatory_process_user_role.rb +32 -0
- data/app/permissions/decidim/participatory_processes/permissions.rb +9 -0
- data/app/presenters/decidim/participatory_processes/participatory_process_stats_presenter.rb +32 -22
- data/app/queries/decidim/participatory_processes/stats_followers_count.rb +46 -0
- data/app/queries/decidim/participatory_processes/stats_participants_count.rb +98 -0
- data/app/serializers/decidim/participatory_processes/participatory_process_importer.rb +2 -0
- data/app/serializers/decidim/participatory_processes/participatory_process_serializer.rb +1 -0
- data/app/types/decidim/participatory_processes/participatory_process_group_type.rb +20 -0
- data/app/types/decidim/participatory_processes/participatory_process_input_filter.rb +13 -0
- data/app/types/decidim/participatory_processes/participatory_process_input_sort.rb +15 -0
- data/app/types/decidim/participatory_processes/participatory_process_step_type.rb +7 -4
- data/app/types/decidim/participatory_processes/participatory_process_type.rb +8 -4
- data/app/views/decidim/participatory_processes/admin/participatory_processes/_form.html.erb +31 -0
- data/app/views/decidim/participatory_processes/admin/participatory_processes/index.html.erb +18 -15
- data/app/views/decidim/participatory_processes/participatory_processes/_metrics.html.erb +1 -1
- data/app/views/decidim/participatory_processes/participatory_processes/{statistics.html.erb → all_metrics.html.erb} +0 -0
- data/app/views/decidim/participatory_processes/participatory_processes/show.html.erb +15 -1
- data/app/views/layouts/decidim/_process_navigation.html.erb +1 -1
- data/app/views/layouts/decidim/admin/participatory_process.html.erb +2 -2
- data/config/locales/ar.yml +9 -4
- data/config/locales/ca.yml +15 -5
- data/config/locales/cs.yml +15 -5
- data/config/locales/de.yml +6 -4
- data/config/locales/el.yml +1 -0
- data/config/locales/en.yml +15 -5
- data/config/locales/es-MX.yml +14 -4
- data/config/locales/es-PY.yml +14 -4
- data/config/locales/es.yml +15 -5
- data/config/locales/eu.yml +6 -4
- data/config/locales/fi-plain.yml +14 -4
- data/config/locales/fi.yml +14 -4
- data/config/locales/fr.yml +6 -4
- data/config/locales/gl.yml +6 -4
- data/config/locales/hu.yml +14 -4
- data/config/locales/id-ID.yml +6 -4
- data/config/locales/is-IS.yml +4 -0
- data/config/locales/it.yml +6 -4
- data/config/locales/nl.yml +6 -4
- data/config/locales/no.yml +11 -4
- data/config/locales/pl.yml +6 -4
- data/config/locales/pt-BR.yml +6 -4
- data/config/locales/pt.yml +6 -4
- data/config/locales/ru.yml +5 -3
- data/config/locales/sv.yml +6 -4
- data/config/locales/tr-TR.yml +6 -4
- data/config/locales/uk.yml +5 -3
- data/db/migrate/20200114142253_add_scope_type_to_participatory_processes.rb +7 -0
- data/db/migrate/20200204154917_add_show_metrics_to_participatory_processes.rb +7 -0
- data/lib/decidim/participatory_processes/engine.rb +21 -4
- data/lib/decidim/participatory_processes/participatory_space.rb +6 -0
- data/lib/decidim/participatory_processes/query_extensions.rb +40 -0
- data/lib/decidim/participatory_processes/test/factories.rb +20 -0
- data/lib/decidim/participatory_processes/version.rb +1 -1
- metadata +27 -11
- data/app/views/decidim/participatory_processes/participatory_process_widgets/show.html.erb +0 -17
- data/app/views/decidim/participatory_processes/participatory_processes/_statistics.html.erb +0 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2d739759631aca0408a7ae0aba4ff332eae1e0f2f0da9687baa753fdecfb1882
|
|
4
|
+
data.tar.gz: 5db3ca8acfbc423b83176a45dd67bc6b24083824264b367ccdc7b603b1b8bb68
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 71fd380d50a0bf51fac1e84ee82de34dae3c8412ddac11e7f102d91809f928af6c6d62e58c2809649067aeabcdbf8fb4992831a37876567f372901d177809b06
|
|
7
|
+
data.tar.gz: c33eca9c58ce8cb093178232584a70916ccc314920de56443475abf129363d94e0f8cd86840ad1ae29536cbadbb8252b490ddaa93ce88002e613fd6432d00e97
|
data/app/assets/javascripts/decidim/participatory_processes/admin/participatory_processes.js.es6
CHANGED
|
@@ -2,11 +2,17 @@ $(() => {
|
|
|
2
2
|
((exports) => {
|
|
3
3
|
const $participatoryProcessScopeEnabled = $("#participatory_process_scopes_enabled");
|
|
4
4
|
const $participatoryProcessScopeId = $("#participatory_process_scope_id");
|
|
5
|
+
const $participatoryProcessScopeTypeId = $("#participatory_process_scope_type_max_depth_id");
|
|
5
6
|
|
|
6
7
|
if ($(".edit_participatory_process, .new_participatory_process").length > 0) {
|
|
7
8
|
$participatoryProcessScopeEnabled.on("change", (event) => {
|
|
8
9
|
const checked = event.target.checked;
|
|
9
10
|
exports.theDataPicker.enabled($participatoryProcessScopeId, checked);
|
|
11
|
+
if (checked === true) {
|
|
12
|
+
$participatoryProcessScopeTypeId.removeAttr("disabled");
|
|
13
|
+
} else {
|
|
14
|
+
$participatoryProcessScopeTypeId.attr("disabled", true)
|
|
15
|
+
}
|
|
10
16
|
})
|
|
11
17
|
exports.theDataPicker.enabled($participatoryProcessScopeId, $participatoryProcessScopeEnabled.prop("checked"));
|
|
12
18
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module ParticipatoryProcesses
|
|
5
|
+
# This cell renders a Statistic of a ParticipatoryProcesses
|
|
6
|
+
class StatisticCell < Decidim::ViewModel
|
|
7
|
+
include ActionView::Helpers::NumberHelper
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def stat_number
|
|
12
|
+
number_with_delimiter(model[:stat_number])
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def stat_title
|
|
16
|
+
t(model[:stat_title], scope: "decidim.participatory_processes.statistics")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<section class="row statistics" id="participatory_process-statistics">
|
|
2
|
+
<div class="columns large-8">
|
|
3
|
+
<div class="row column">
|
|
4
|
+
<h4 class="section-heading">
|
|
5
|
+
<%= stats_heading %>
|
|
6
|
+
</h4>
|
|
7
|
+
|
|
8
|
+
<div class="process-stats">
|
|
9
|
+
<% if model.present? %>
|
|
10
|
+
<%= cell("decidim/participatory_processes/statistic", collection: model) %>
|
|
11
|
+
<% else %>
|
|
12
|
+
<span class="muted"><%= no_stats %></span>
|
|
13
|
+
<% end %>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
</section>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module ParticipatoryProcesses
|
|
5
|
+
# This cell renders the Statistics of a ParticipatoryProcesses
|
|
6
|
+
class StatisticsCell < Decidim::ViewModel
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def stats_heading
|
|
10
|
+
t("statistics.headline", scope: "decidim.participatory_processes")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def no_stats
|
|
14
|
+
t("statistics.no_stats", scope: "decidim.participatory_processes")
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -22,10 +22,11 @@ module Decidim
|
|
|
22
22
|
def call
|
|
23
23
|
return broadcast(:invalid) if form.invalid?
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
create_participatory_process
|
|
26
26
|
|
|
27
27
|
if process.persisted?
|
|
28
28
|
add_admins_as_followers(process)
|
|
29
|
+
link_related_processes
|
|
29
30
|
broadcast(:ok, process)
|
|
30
31
|
else
|
|
31
32
|
form.errors.add(:hero_image, process.errors[:hero_image]) if process.errors.include? :hero_image
|
|
@@ -36,10 +37,10 @@ module Decidim
|
|
|
36
37
|
|
|
37
38
|
private
|
|
38
39
|
|
|
39
|
-
attr_reader :form
|
|
40
|
+
attr_reader :form, :process
|
|
40
41
|
|
|
41
42
|
def create_participatory_process
|
|
42
|
-
process = ParticipatoryProcess.new(
|
|
43
|
+
@process = ParticipatoryProcess.new(
|
|
43
44
|
organization: form.current_organization,
|
|
44
45
|
title: form.title,
|
|
45
46
|
subtitle: form.subtitle,
|
|
@@ -52,6 +53,7 @@ module Decidim
|
|
|
52
53
|
promoted: form.promoted,
|
|
53
54
|
scopes_enabled: form.scopes_enabled,
|
|
54
55
|
scope: form.scope,
|
|
56
|
+
scope_type_max_depth: form.scope_type_max_depth,
|
|
55
57
|
private_space: form.private_space,
|
|
56
58
|
developer_group: form.developer_group,
|
|
57
59
|
local_area: form.local_area,
|
|
@@ -105,6 +107,14 @@ module Decidim
|
|
|
105
107
|
Decidim::CreateFollow.new(form, admin).call
|
|
106
108
|
end
|
|
107
109
|
end
|
|
110
|
+
|
|
111
|
+
def related_processes
|
|
112
|
+
@related_processes ||= Decidim::ParticipatoryProcess.where(id: form.related_process_ids)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def link_related_processes
|
|
116
|
+
process.link_participatory_space_resources(related_processes, "related_processes")
|
|
117
|
+
end
|
|
108
118
|
end
|
|
109
119
|
end
|
|
110
120
|
end
|
|
@@ -41,13 +41,14 @@ module Decidim
|
|
|
41
41
|
|
|
42
42
|
def update_participatory_process
|
|
43
43
|
@participatory_process.assign_attributes(attributes)
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
return unless @participatory_process.valid?
|
|
45
|
+
|
|
46
|
+
@participatory_process.save!
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
end
|
|
48
|
+
Decidim.traceability.perform_action!(:update, @participatory_process, form.current_user) do
|
|
49
|
+
@participatory_process
|
|
50
50
|
end
|
|
51
|
+
link_related_processes
|
|
51
52
|
end
|
|
52
53
|
|
|
53
54
|
def attributes
|
|
@@ -65,6 +66,7 @@ module Decidim
|
|
|
65
66
|
short_description: form.short_description,
|
|
66
67
|
scopes_enabled: form.scopes_enabled,
|
|
67
68
|
scope: form.scope,
|
|
69
|
+
scope_type_max_depth: form.scope_type_max_depth,
|
|
68
70
|
private_space: form.private_space,
|
|
69
71
|
developer_group: form.developer_group,
|
|
70
72
|
local_area: form.local_area,
|
|
@@ -76,10 +78,19 @@ module Decidim
|
|
|
76
78
|
start_date: form.start_date,
|
|
77
79
|
end_date: form.end_date,
|
|
78
80
|
participatory_process_group: form.participatory_process_group,
|
|
81
|
+
show_metrics: form.show_metrics,
|
|
79
82
|
show_statistics: form.show_statistics,
|
|
80
83
|
announcement: form.announcement
|
|
81
84
|
}
|
|
82
85
|
end
|
|
86
|
+
|
|
87
|
+
def related_processes
|
|
88
|
+
@related_processes ||= Decidim::ParticipatoryProcess.where(id: form.related_process_ids)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def link_related_processes
|
|
92
|
+
@participatory_process.link_participatory_space_resources(related_processes, "related_processes")
|
|
93
|
+
end
|
|
83
94
|
end
|
|
84
95
|
end
|
|
85
96
|
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_support/concern"
|
|
4
|
+
|
|
5
|
+
module Decidim
|
|
6
|
+
module ParticipatoryProcesses
|
|
7
|
+
module Admin
|
|
8
|
+
module Filterable
|
|
9
|
+
extend ActiveSupport::Concern
|
|
10
|
+
|
|
11
|
+
included do
|
|
12
|
+
include Decidim::Admin::Filterable
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def base_query
|
|
17
|
+
collection
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def extra_filters
|
|
21
|
+
[:decidim_participatory_process_group_id_eq]
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/app/controllers/decidim/participatory_processes/admin/participatory_processes_controller.rb
CHANGED
|
@@ -7,18 +7,19 @@ module Decidim
|
|
|
7
7
|
#
|
|
8
8
|
class ParticipatoryProcessesController < Decidim::ParticipatoryProcesses::Admin::ApplicationController
|
|
9
9
|
include Decidim::Admin::ParticipatorySpaceAdminContext
|
|
10
|
+
include Decidim::ParticipatoryProcesses::Admin::Filterable
|
|
10
11
|
participatory_space_admin_layout only: [:edit]
|
|
11
|
-
include Decidim::Paginable
|
|
12
12
|
|
|
13
13
|
helper ProcessGroupsForSelectHelper
|
|
14
|
+
helper Decidim::ParticipatoryProcesses::Admin::ParticipatoryProcessHelper
|
|
14
15
|
|
|
15
|
-
helper_method :current_participatory_process, :current_participatory_space, :
|
|
16
|
+
helper_method :current_participatory_process, :current_participatory_space, :process_group
|
|
16
17
|
|
|
17
18
|
layout "decidim/admin/participatory_processes"
|
|
18
19
|
|
|
19
20
|
def index
|
|
20
21
|
enforce_permission_to :read, :process_list
|
|
21
|
-
@participatory_processes =
|
|
22
|
+
@participatory_processes = filtered_collection
|
|
22
23
|
end
|
|
23
24
|
|
|
24
25
|
def new
|
|
@@ -76,22 +77,11 @@ module Decidim
|
|
|
76
77
|
private
|
|
77
78
|
|
|
78
79
|
def process_group
|
|
79
|
-
@process_group ||= ParticipatoryProcessGroup.find_by(id:
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
def participatory_processes
|
|
83
|
-
@participatory_processes ||= Rectify::Query.merge(
|
|
84
|
-
ParticipatoryProcessesWithUserRole.for(current_user),
|
|
85
|
-
ParticipatoryProcessesByGroup.for(process_group)
|
|
86
|
-
)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def query
|
|
90
|
-
@query ||= participatory_processes.ransack(params[:q])
|
|
80
|
+
@process_group ||= ParticipatoryProcessGroup.find_by(id: ransack_params[:decidim_participatory_process_group_id_eq])
|
|
91
81
|
end
|
|
92
82
|
|
|
93
83
|
def collection
|
|
94
|
-
@collection ||=
|
|
84
|
+
@collection ||= ParticipatoryProcessesWithUserRole.for(current_user)
|
|
95
85
|
end
|
|
96
86
|
|
|
97
87
|
def current_participatory_process
|
|
@@ -6,10 +6,16 @@ module Decidim
|
|
|
6
6
|
# public layout.
|
|
7
7
|
class ParticipatoryProcessesController < Decidim::ParticipatoryProcesses::ApplicationController
|
|
8
8
|
include ParticipatorySpaceContext
|
|
9
|
-
participatory_space_layout only: [:show, :
|
|
9
|
+
participatory_space_layout only: [:show, :all_metrics]
|
|
10
10
|
include FilterResource
|
|
11
11
|
|
|
12
|
-
helper_method :collection,
|
|
12
|
+
helper_method :collection,
|
|
13
|
+
:promoted_participatory_processes,
|
|
14
|
+
:participatory_processes,
|
|
15
|
+
:stats,
|
|
16
|
+
:metrics,
|
|
17
|
+
:default_date_filter,
|
|
18
|
+
:related_processes
|
|
13
19
|
|
|
14
20
|
def index
|
|
15
21
|
raise ActionController::RoutingError, "Not Found" if published_processes.none?
|
|
@@ -22,7 +28,7 @@ module Decidim
|
|
|
22
28
|
enforce_permission_to :read, :process, process: current_participatory_space
|
|
23
29
|
end
|
|
24
30
|
|
|
25
|
-
def
|
|
31
|
+
def all_metrics
|
|
26
32
|
enforce_permission_to :read, :process, process: current_participatory_space
|
|
27
33
|
end
|
|
28
34
|
|
|
@@ -92,6 +98,14 @@ module Decidim
|
|
|
92
98
|
|
|
93
99
|
"all"
|
|
94
100
|
end
|
|
101
|
+
|
|
102
|
+
def related_processes
|
|
103
|
+
@related_processes ||=
|
|
104
|
+
current_participatory_space
|
|
105
|
+
.linked_participatory_space_resources(:participatory_processes, "related_processes")
|
|
106
|
+
.published
|
|
107
|
+
.all
|
|
108
|
+
end
|
|
95
109
|
end
|
|
96
110
|
end
|
|
97
111
|
end
|
|
@@ -29,10 +29,13 @@ module Decidim
|
|
|
29
29
|
attribute :area_id, Integer
|
|
30
30
|
attribute :participatory_process_group_id, Integer
|
|
31
31
|
attribute :scope_id, Integer
|
|
32
|
+
attribute :related_process_ids, Array[Integer]
|
|
33
|
+
attribute :scope_type_max_depth_id, Integer
|
|
32
34
|
|
|
33
35
|
attribute :private_space, Boolean
|
|
34
36
|
attribute :promoted, Boolean
|
|
35
37
|
attribute :scopes_enabled, Boolean
|
|
38
|
+
attribute :show_metrics, Boolean
|
|
36
39
|
attribute :show_statistics, Boolean
|
|
37
40
|
|
|
38
41
|
attribute :end_date, Decidim::Attributes::LocalizedDate
|
|
@@ -61,12 +64,18 @@ module Decidim
|
|
|
61
64
|
def map_model(model)
|
|
62
65
|
self.scope_id = model.decidim_scope_id
|
|
63
66
|
self.participatory_process_group_id = model.decidim_participatory_process_group_id
|
|
67
|
+
self.related_process_ids = model.linked_participatory_space_resources(:participatory_process, "related_processes").pluck(:id)
|
|
68
|
+
@processes = Decidim::ParticipatoryProcess.where(organization: model.organization).where.not(id: model.id)
|
|
64
69
|
end
|
|
65
70
|
|
|
66
71
|
def scope
|
|
67
72
|
@scope ||= current_organization.scopes.find_by(id: scope_id)
|
|
68
73
|
end
|
|
69
74
|
|
|
75
|
+
def scope_type_max_depth
|
|
76
|
+
@scope_type_max_depth ||= current_organization.scope_types.find_by(id: scope_type_max_depth_id)
|
|
77
|
+
end
|
|
78
|
+
|
|
70
79
|
def area
|
|
71
80
|
@area ||= current_organization.areas.find_by(id: area_id)
|
|
72
81
|
end
|
|
@@ -75,6 +84,10 @@ module Decidim
|
|
|
75
84
|
Decidim::ParticipatoryProcessGroup.find_by(id: participatory_process_group_id)
|
|
76
85
|
end
|
|
77
86
|
|
|
87
|
+
def processes
|
|
88
|
+
@processes ||= Decidim::ParticipatoryProcess.where(organization: current_organization)
|
|
89
|
+
end
|
|
90
|
+
|
|
78
91
|
private
|
|
79
92
|
|
|
80
93
|
def organization_participatory_processes
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module ParticipatoryProcesses
|
|
5
|
+
# Adds slug finder for participatory_processes
|
|
6
|
+
class ParticipatoryProcessFinder < Decidim::Core::ParticipatorySpaceFinder
|
|
7
|
+
argument :slug, types.String, "The slug of the participatory process"
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module ParticipatoryProcesses
|
|
5
|
+
# Adds some filter values for participatory_processes
|
|
6
|
+
class ParticipatoryProcessList < Decidim::Core::ParticipatorySpaceListBase
|
|
7
|
+
argument :filter, ParticipatoryProcessInputFilter, "This argument let's you filter the results"
|
|
8
|
+
argument :order, ParticipatoryProcessInputSort, "This argument let's you order the results"
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module ParticipatoryProcesses
|
|
5
|
+
module Admin
|
|
6
|
+
# Helpers related to the Admin of Participatory Process layout.
|
|
7
|
+
module ParticipatoryProcessHelper
|
|
8
|
+
def scope_type_depth_select_options
|
|
9
|
+
{
|
|
10
|
+
include_blank: true,
|
|
11
|
+
selected: current_participatory_process.try(:decidim_scope_type_id)
|
|
12
|
+
}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def scope_type_depth_select_html_options
|
|
16
|
+
html_options = {}
|
|
17
|
+
html_options[:disabled] = "disabled" unless current_participatory_process.try(:scopes_enabled)
|
|
18
|
+
html_options
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -49,6 +49,10 @@ module Decidim
|
|
|
49
49
|
foreign_type: "decidim_participatory_space_type",
|
|
50
50
|
dependent: :destroy,
|
|
51
51
|
as: :participatory_space
|
|
52
|
+
belongs_to :scope_type_max_depth,
|
|
53
|
+
foreign_key: "decidim_scope_type_id",
|
|
54
|
+
class_name: "Decidim::ScopeType",
|
|
55
|
+
optional: true
|
|
52
56
|
|
|
53
57
|
has_many :components, as: :participatory_space, dependent: :destroy
|
|
54
58
|
|
|
@@ -149,9 +153,16 @@ module Decidim
|
|
|
149
153
|
"#{admin_module_name}::Moderators".constantize.for(self)
|
|
150
154
|
end
|
|
151
155
|
|
|
156
|
+
def user_roles(role_name = nil)
|
|
157
|
+
roles = Decidim::ParticipatoryProcessUserRole.where(participatory_process: self)
|
|
158
|
+
return roles if role_name.blank?
|
|
159
|
+
|
|
160
|
+
roles.where(role: role_name)
|
|
161
|
+
end
|
|
162
|
+
|
|
152
163
|
# Allow ransacker to search for a key in a hstore column (`title`.`en`)
|
|
153
164
|
ransacker :title do |parent|
|
|
154
|
-
Arel::Nodes::InfixOperation.new("
|
|
165
|
+
Arel::Nodes::InfixOperation.new("->>", parent.table[:title], Arel::Nodes.build_quoted(I18n.locale.to_s))
|
|
155
166
|
end
|
|
156
167
|
end
|
|
157
168
|
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
# Defines a relation between a user and a participatory process, and what
|
|
5
|
+
# kind of relation does the user has.
|
|
6
|
+
class ParticipatoryProcessUserRole < ApplicationRecord
|
|
7
|
+
include Traceable
|
|
8
|
+
include Loggable
|
|
9
|
+
|
|
10
|
+
belongs_to :user, foreign_key: "decidim_user_id", class_name: "Decidim::User", optional: true
|
|
11
|
+
belongs_to :participatory_process, foreign_key: "decidim_participatory_process_id", class_name: "Decidim::ParticipatoryProcess", optional: true
|
|
12
|
+
|
|
13
|
+
alias participatory_space participatory_process
|
|
14
|
+
|
|
15
|
+
ROLES = %w(admin collaborator moderator valuator).freeze
|
|
16
|
+
validates :role, inclusion: { in: ROLES }, uniqueness: { scope: [:user, :participatory_process] }
|
|
17
|
+
validate :user_and_participatory_process_same_organization
|
|
18
|
+
|
|
19
|
+
def self.log_presenter_class_for(_log)
|
|
20
|
+
Decidim::ParticipatoryProcesses::AdminLog::ParticipatoryProcessUserRolePresenter
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
# Private: check if the process and the user have the same organization
|
|
26
|
+
def user_and_participatory_process_same_organization
|
|
27
|
+
return if !participatory_process || !user
|
|
28
|
+
|
|
29
|
+
errors.add(:participatory_process, :invalid) unless user.organization == participatory_process.organization
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|