decidim-assemblies 0.17.2 → 0.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/cells/decidim/assemblies/assembly_m/footer.erb +1 -1
- data/app/cells/decidim/assemblies/assembly_m_cell.rb +24 -1
- data/app/commands/decidim/assemblies/admin/copy_assembly.rb +1 -0
- data/app/controllers/decidim/assemblies/admin/application_controller.rb +5 -4
- data/app/controllers/decidim/assemblies/admin/assemblies_controller.rb +20 -10
- data/app/controllers/decidim/assemblies/admin/concerns/assembly_admin.rb +6 -4
- data/app/controllers/decidim/assemblies/application_controller.rb +6 -5
- data/app/controllers/decidim/assemblies/assemblies_controller.rb +18 -22
- data/app/forms/decidim/assemblies/admin/assembly_member_form.rb +1 -1
- data/app/helpers/decidim/assemblies/assemblies_helper.rb +6 -0
- data/app/helpers/decidim/assemblies/filter_assemblies_helper.rb +18 -7
- data/app/models/decidim/assembly.rb +36 -10
- data/app/permissions/decidim/assemblies/permissions.rb +1 -1
- data/app/queries/decidim/assemblies/admin/admin_users.rb +8 -1
- data/app/queries/decidim/assemblies/organization_published_assemblies.rb +2 -2
- data/app/queries/decidim/assemblies/visible_assemblies.rb +1 -8
- data/app/services/decidim/assemblies/assembly_search.rb +18 -0
- data/app/views/decidim/assemblies/_filter_by_type.html.erb +13 -12
- data/app/views/decidim/assemblies/admin/assemblies/_form.html.erb +133 -73
- data/app/views/decidim/assemblies/admin/assemblies/index.html.erb +29 -10
- data/app/views/decidim/assemblies/assemblies/_count.html.erb +1 -1
- data/app/views/decidim/assemblies/assemblies/_parent_assemblies.html.erb +2 -1
- data/app/views/decidim/assemblies/assemblies/_promoted_assembly.html.erb +1 -1
- data/app/views/decidim/assemblies/assemblies/index.html.erb +1 -0
- data/app/views/decidim/assemblies/assemblies/index.js.erb +2 -1
- data/app/views/decidim/assemblies/assemblies/show.html.erb +42 -36
- data/config/locales/ar-SA.yml +9 -2
- data/config/locales/ar.yml +386 -0
- data/config/locales/ca.yml +9 -2
- data/config/locales/cs.yml +8 -2
- data/config/locales/de.yml +8 -2
- data/config/locales/en.yml +9 -2
- data/config/locales/es-MX.yml +9 -2
- data/config/locales/es-PY.yml +9 -2
- data/config/locales/es.yml +9 -2
- data/config/locales/eu.yml +8 -2
- data/config/locales/fi-plain.yml +9 -2
- data/config/locales/fi.yml +9 -2
- data/config/locales/fr.yml +8 -2
- data/config/locales/gl.yml +8 -2
- data/config/locales/hu.yml +9 -2
- data/config/locales/id-ID.yml +8 -2
- data/config/locales/it.yml +9 -2
- data/config/locales/nl.yml +8 -2
- data/config/locales/pl.yml +8 -2
- data/config/locales/pt-BR.yml +8 -2
- data/config/locales/pt.yml +8 -2
- data/config/locales/ru.yml +1 -2
- data/config/locales/sv.yml +8 -2
- data/config/locales/tr-TR.yml +9 -2
- data/config/locales/uk.yml +1 -2
- data/lib/decidim/assemblies/version.rb +1 -1
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99efc61ca1742e63f78a52fa33da8866b60669bbeca04b039814da09cfa148c4
|
4
|
+
data.tar.gz: 7ab6f6d231c564795a4319ddb527824f728108b7ee43f057ed86f68e277d682b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bfc9691a80e376d750ca2aef2895d8b1eb4aa60fbd5059498676e6c5fcb7815b46dd62ab3e2059e20c38d5ed9fa6b5acd409a07478cd982f43838d7d9c4f26f
|
7
|
+
data.tar.gz: bc458c5c4ef271e1ffa85d988849111d0002d6e362b2c55b0df0da105d88b4bd9ae18d92b480c91c485553fc6c6ba99100f7c5564bd8f4ba31b71569c5e2e385
|
@@ -18,6 +18,10 @@ module Decidim
|
|
18
18
|
true
|
19
19
|
end
|
20
20
|
|
21
|
+
def has_children?
|
22
|
+
model.children.any?
|
23
|
+
end
|
24
|
+
|
21
25
|
def resource_path
|
22
26
|
Decidim::Assemblies::Engine.routes.url_helpers.assembly_path(model)
|
23
27
|
end
|
@@ -27,7 +31,26 @@ module Decidim
|
|
27
31
|
end
|
28
32
|
|
29
33
|
def statuses
|
30
|
-
|
34
|
+
return super unless has_children?
|
35
|
+
[:creation_date, :follow, :children_count]
|
36
|
+
end
|
37
|
+
|
38
|
+
def children_count_status
|
39
|
+
content_tag(
|
40
|
+
:strong,
|
41
|
+
t("layouts.decidim.assemblies.index.children")
|
42
|
+
) + " " + children_assemblies_visible_for_user
|
43
|
+
end
|
44
|
+
|
45
|
+
def children_assemblies_visible_for_user
|
46
|
+
assemblies = model.children.published
|
47
|
+
|
48
|
+
if current_user
|
49
|
+
return assemblies.count.to_s if current_user.admin
|
50
|
+
assemblies.visible_for(current_user).count.to_s
|
51
|
+
else
|
52
|
+
assemblies.public_spaces.count.to_s
|
53
|
+
end
|
31
54
|
end
|
32
55
|
|
33
56
|
def resource_icon
|
@@ -53,6 +53,7 @@ module Decidim
|
|
53
53
|
parent: @assembly.parent,
|
54
54
|
developer_group: @assembly.developer_group,
|
55
55
|
local_area: @assembly.local_area,
|
56
|
+
area: @assembly.area,
|
56
57
|
target: @assembly.target,
|
57
58
|
participatory_scope: @assembly.participatory_scope,
|
58
59
|
participatory_structure: @assembly.participatory_structure,
|
@@ -5,6 +5,10 @@ module Decidim
|
|
5
5
|
module Admin
|
6
6
|
# The main admin application controller for assemblies
|
7
7
|
class ApplicationController < Decidim::Admin::ApplicationController
|
8
|
+
register_permissions(::Decidim::Assemblies::Admin::ApplicationController,
|
9
|
+
Decidim::Assemblies::Permissions,
|
10
|
+
Decidim::Admin::Permissions)
|
11
|
+
|
8
12
|
private
|
9
13
|
|
10
14
|
def permissions_context
|
@@ -14,10 +18,7 @@ module Decidim
|
|
14
18
|
end
|
15
19
|
|
16
20
|
def permission_class_chain
|
17
|
-
|
18
|
-
Decidim::Assemblies::Permissions,
|
19
|
-
Decidim::Admin::Permissions
|
20
|
-
]
|
21
|
+
::Decidim.permissions_registry.chain_for(::Decidim::Assemblies::Admin::ApplicationController)
|
21
22
|
end
|
22
23
|
end
|
23
24
|
end
|
@@ -6,7 +6,8 @@ module Decidim
|
|
6
6
|
# Controller that allows managing assemblies.
|
7
7
|
#
|
8
8
|
class AssembliesController < Decidim::Assemblies::Admin::ApplicationController
|
9
|
-
|
9
|
+
include Decidim::Paginable
|
10
|
+
helper_method :current_assembly, :parent_assembly, :parent_assemblies, :current_participatory_space, :query
|
10
11
|
layout "decidim/admin/assemblies"
|
11
12
|
|
12
13
|
before_action :set_all_assemblies, except: [:index]
|
@@ -71,12 +72,26 @@ module Decidim
|
|
71
72
|
|
72
73
|
private
|
73
74
|
|
75
|
+
def organization_assemblies
|
76
|
+
@organization_assemblies ||= OrganizationAssemblies.new(current_user.organization).query
|
77
|
+
end
|
78
|
+
|
79
|
+
def query
|
80
|
+
organization_assemblies
|
81
|
+
.where(parent_id: params[:parent_id])
|
82
|
+
.ransack(params[:q])
|
83
|
+
end
|
84
|
+
|
85
|
+
def collection
|
86
|
+
@collection ||= paginate(query.result)
|
87
|
+
end
|
88
|
+
|
74
89
|
def set_all_assemblies
|
75
|
-
@all_assemblies =
|
90
|
+
@all_assemblies = organization_assemblies
|
76
91
|
end
|
77
92
|
|
78
93
|
def current_assembly
|
79
|
-
scope =
|
94
|
+
scope = organization_assemblies
|
80
95
|
@current_assembly ||= scope.where(slug: params[:slug]).or(
|
81
96
|
scope.where(id: params[:slug])
|
82
97
|
).first
|
@@ -85,16 +100,11 @@ module Decidim
|
|
85
100
|
alias current_participatory_space current_assembly
|
86
101
|
|
87
102
|
def parent_assembly
|
88
|
-
@parent_assembly ||=
|
103
|
+
@parent_assembly ||= organization_assemblies.find_by(id: params[:parent_id])
|
89
104
|
end
|
90
105
|
|
91
106
|
def parent_assemblies
|
92
|
-
@parent_assemblies ||=
|
93
|
-
end
|
94
|
-
|
95
|
-
def collection
|
96
|
-
parent_id = params[:parent_id].presence
|
97
|
-
@collection ||= OrganizationAssemblies.new(current_user.organization).query.where(parent_id: parent_id)
|
107
|
+
@parent_assemblies ||= organization_assemblies.where(parent_id: nil)
|
98
108
|
end
|
99
109
|
|
100
110
|
def assembly_params
|
@@ -12,6 +12,11 @@ module Decidim
|
|
12
12
|
module AssemblyAdmin
|
13
13
|
extend ActiveSupport::Concern
|
14
14
|
|
15
|
+
RegistersPermissions
|
16
|
+
.register_permissions(::Decidim::Assemblies::Admin::Concerns::AssemblyAdmin,
|
17
|
+
Decidim::Assemblies::Permissions,
|
18
|
+
Decidim::Admin::Permissions)
|
19
|
+
|
15
20
|
included do
|
16
21
|
include Decidim::Admin::ParticipatorySpaceAdminContext
|
17
22
|
participatory_space_admin_layout
|
@@ -35,10 +40,7 @@ module Decidim
|
|
35
40
|
end
|
36
41
|
|
37
42
|
def permission_class_chain
|
38
|
-
|
39
|
-
Decidim::Assemblies::Permissions,
|
40
|
-
Decidim::Admin::Permissions
|
41
|
-
]
|
43
|
+
PermissionsRegistry.chain_for(AssemblyAdmin)
|
42
44
|
end
|
43
45
|
end
|
44
46
|
end
|
@@ -8,6 +8,11 @@ module Decidim
|
|
8
8
|
helper Decidim::Assemblies::AssembliesHelper
|
9
9
|
include NeedsPermission
|
10
10
|
|
11
|
+
register_permissions(Decidim::Assemblies::ApplicationController,
|
12
|
+
::Decidim::Assemblies::Permissions,
|
13
|
+
::Decidim::Admin::Permissions,
|
14
|
+
::Decidim::Permissions)
|
15
|
+
|
11
16
|
private
|
12
17
|
|
13
18
|
def permissions_context
|
@@ -17,11 +22,7 @@ module Decidim
|
|
17
22
|
end
|
18
23
|
|
19
24
|
def permission_class_chain
|
20
|
-
|
21
|
-
Decidim::Assemblies::Permissions,
|
22
|
-
Decidim::Admin::Permissions,
|
23
|
-
Decidim::Permissions
|
24
|
-
]
|
25
|
+
::Decidim.permissions_registry.chain_for(::Decidim::Assemblies::ApplicationController)
|
25
26
|
end
|
26
27
|
|
27
28
|
def permission_scope
|
@@ -2,19 +2,13 @@
|
|
2
2
|
|
3
3
|
module Decidim
|
4
4
|
module Assemblies
|
5
|
-
# A controller that holds the logic to show Assemblies in a
|
6
|
-
# public layout.
|
5
|
+
# A controller that holds the logic to show Assemblies in a public layout.
|
7
6
|
class AssembliesController < Decidim::Assemblies::ApplicationController
|
8
7
|
include ParticipatorySpaceContext
|
9
8
|
participatory_space_layout only: :show
|
9
|
+
include FilterResource
|
10
10
|
|
11
|
-
|
12
|
-
helper Decidim::IconHelper
|
13
|
-
helper Decidim::WidgetUrlsHelper
|
14
|
-
helper Decidim::SanitizeHelper
|
15
|
-
helper Decidim::ResourceReferenceHelper
|
16
|
-
|
17
|
-
helper_method :collection, :parent_assemblies, :promoted_assemblies, :assemblies, :stats, :assembly_participatory_processes
|
11
|
+
helper_method :parent_assemblies, :promoted_assemblies, :stats, :assembly_participatory_processes
|
18
12
|
|
19
13
|
def index
|
20
14
|
enforce_permission_to :list, :assembly
|
@@ -54,6 +48,18 @@ module Decidim
|
|
54
48
|
|
55
49
|
private
|
56
50
|
|
51
|
+
def search_klass
|
52
|
+
AssemblySearch
|
53
|
+
end
|
54
|
+
|
55
|
+
def default_filter_params
|
56
|
+
{
|
57
|
+
scope_id: nil,
|
58
|
+
area_id: nil,
|
59
|
+
assembly_type: "all"
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
57
63
|
def current_participatory_space
|
58
64
|
return unless params[:slug]
|
59
65
|
|
@@ -66,18 +72,12 @@ module Decidim
|
|
66
72
|
@published_assemblies ||= OrganizationPublishedAssemblies.new(current_organization, current_user)
|
67
73
|
end
|
68
74
|
|
69
|
-
def
|
70
|
-
@
|
75
|
+
def promoted_assemblies
|
76
|
+
@promoted_assemblies ||= published_assemblies | PromotedAssemblies.new
|
71
77
|
end
|
72
78
|
|
73
79
|
def parent_assemblies
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
alias collection parent_assemblies
|
78
|
-
|
79
|
-
def promoted_assemblies
|
80
|
-
@promoted_assemblies ||= assemblies | PromotedAssemblies.new
|
80
|
+
search.results.parent_assemblies.order(promoted: :desc)
|
81
81
|
end
|
82
82
|
|
83
83
|
def stats
|
@@ -87,10 +87,6 @@ module Decidim
|
|
87
87
|
def assembly_participatory_processes
|
88
88
|
@assembly_participatory_processes ||= @current_participatory_space.linked_participatory_space_resources(:participatory_processes, "included_participatory_processes")
|
89
89
|
end
|
90
|
-
|
91
|
-
def current_filter
|
92
|
-
params[:filter] || "all"
|
93
|
-
end
|
94
90
|
end
|
95
91
|
end
|
96
92
|
end
|
@@ -23,7 +23,7 @@ module Decidim
|
|
23
23
|
|
24
24
|
validates :designation_date, presence: true
|
25
25
|
validates :full_name, presence: true, unless: proc { |object| object.existing_user }
|
26
|
-
validates :position, inclusion: { in: Decidim::AssemblyMember::POSITIONS }
|
26
|
+
validates :position, presence: true, inclusion: { in: Decidim::AssemblyMember::POSITIONS }
|
27
27
|
validates :position_other, presence: true, if: ->(form) { form.position == "other" }
|
28
28
|
validates :ceased_date, date: { after: :designation_date, allow_blank: true }
|
29
29
|
validates :user, presence: true, if: proc { |object| object.existing_user }
|
@@ -5,6 +5,12 @@ module Decidim
|
|
5
5
|
# Helpers related to the Assemblies layout.
|
6
6
|
module AssembliesHelper
|
7
7
|
include Decidim::ResourceHelper
|
8
|
+
include Decidim::AttachmentsHelper
|
9
|
+
include Decidim::IconHelper
|
10
|
+
include Decidim::WidgetUrlsHelper
|
11
|
+
include Decidim::SanitizeHelper
|
12
|
+
include Decidim::ResourceReferenceHelper
|
13
|
+
include Decidim::FiltersHelper
|
8
14
|
include FilterAssembliesHelper
|
9
15
|
|
10
16
|
# Public: Returns the characteristics of an assembly in a readable format like
|
@@ -3,25 +3,36 @@
|
|
3
3
|
module Decidim
|
4
4
|
module Assemblies
|
5
5
|
# Helpers related to the Assemblies filter by type.
|
6
|
+
#
|
7
|
+
# `filter` returns a Filter object from Decidim::FilterResource
|
6
8
|
module FilterAssembliesHelper
|
7
9
|
def available_filters
|
8
|
-
%w(all
|
10
|
+
%w(all) + Assembly::ASSEMBLY_TYPES
|
9
11
|
end
|
10
12
|
|
11
|
-
def filter_link(
|
12
|
-
|
13
|
+
def filter_link(filter_name)
|
14
|
+
Decidim::Assemblies::Engine
|
15
|
+
.routes
|
16
|
+
.url_helpers
|
17
|
+
.assemblies_path(
|
18
|
+
filter: {
|
19
|
+
scope_id: filter.scope_id,
|
20
|
+
area_id: filter.area_id,
|
21
|
+
assembly_type: filter_name
|
22
|
+
}
|
23
|
+
)
|
13
24
|
end
|
14
25
|
|
15
26
|
def help_text
|
16
27
|
t("help", scope: "decidim.assemblies.filter")
|
17
28
|
end
|
18
29
|
|
19
|
-
def
|
20
|
-
|
30
|
+
def filter_name(filter_key)
|
31
|
+
t(filter_key, scope: "decidim.assemblies.filter")
|
21
32
|
end
|
22
33
|
|
23
|
-
def
|
24
|
-
|
34
|
+
def current_filter_name
|
35
|
+
filter_name(filter.assembly_type)
|
25
36
|
end
|
26
37
|
end
|
27
38
|
end
|
@@ -68,12 +68,25 @@ module Decidim
|
|
68
68
|
after_create :set_parents_path
|
69
69
|
after_update :set_parents_path, :update_children_paths, if: :saved_change_to_parent_id?
|
70
70
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
71
|
+
# Overwriting existing method Decidim::HasPrivateUsers.visible_for
|
72
|
+
def self.visible_for(user)
|
73
|
+
if user
|
74
|
+
return all if user.admin?
|
75
|
+
|
76
|
+
left_outer_joins(:participatory_space_private_users).where(
|
77
|
+
%{private_space = false OR
|
78
|
+
(private_space = true AND is_transparent = true) OR
|
79
|
+
decidim_participatory_space_private_users.decidim_user_id = ?}, user.id
|
80
|
+
).distinct
|
81
|
+
else
|
82
|
+
public_spaces
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# Overwriting existing method Decidim::HasPrivateUsers.public_spaces
|
87
|
+
def self.public_spaces
|
88
|
+
where(private_space: false).or(where(private_space: true).where(is_transparent: true))
|
89
|
+
end
|
77
90
|
|
78
91
|
# Scope to return only the promoted assemblies.
|
79
92
|
#
|
@@ -82,12 +95,14 @@ module Decidim
|
|
82
95
|
where(promoted: true)
|
83
96
|
end
|
84
97
|
|
85
|
-
|
86
|
-
|
98
|
+
# Return parent assemblies.
|
99
|
+
def self.parent_assemblies
|
100
|
+
where(parent_id: nil)
|
87
101
|
end
|
88
102
|
|
89
|
-
|
90
|
-
|
103
|
+
# Return child assemblies.
|
104
|
+
def self.child_assemblies
|
105
|
+
where.not(parent_id: nil)
|
91
106
|
end
|
92
107
|
|
93
108
|
def self.log_presenter_class_for(_log)
|
@@ -121,6 +136,12 @@ module Decidim
|
|
121
136
|
Decidim::AssemblyPresenter.new(self).translated_title
|
122
137
|
end
|
123
138
|
|
139
|
+
def closed?
|
140
|
+
return false if closing_date.blank?
|
141
|
+
|
142
|
+
closing_date < Date.current
|
143
|
+
end
|
144
|
+
|
124
145
|
private
|
125
146
|
|
126
147
|
# When an assembly changes their parent, we need to update the parents_path attribute
|
@@ -171,5 +192,10 @@ module Decidim
|
|
171
192
|
)
|
172
193
|
end
|
173
194
|
# rubocop:enable Rails/SkipsModelValidations
|
195
|
+
|
196
|
+
# Allow ransacker to search for a key in a hstore column (`title`.`en`)
|
197
|
+
ransacker :title do |parent|
|
198
|
+
Arel::Nodes::InfixOperation.new("->", parent.table[:title], Arel::Nodes.build_quoted(I18n.locale.to_s))
|
199
|
+
end
|
174
200
|
end
|
175
201
|
end
|
@@ -171,7 +171,7 @@ module Decidim
|
|
171
171
|
allow! if permission_action.action == :read || permission_action.action == :preview
|
172
172
|
end
|
173
173
|
|
174
|
-
# Process admins can
|
174
|
+
# Process admins can perform everything *inside* that assembly. They cannot
|
175
175
|
# create a assembly or perform actions on assembly groups or other
|
176
176
|
# assemblies.
|
177
177
|
def assembly_admin_action?
|
@@ -23,7 +23,7 @@ module Decidim
|
|
23
23
|
#
|
24
24
|
# Returns an ActiveRecord::Relation.
|
25
25
|
def query
|
26
|
-
Decidim::User.where(id: organization_admins)
|
26
|
+
Decidim::User.where(id: organization_admins).or(assembly_user_admins)
|
27
27
|
end
|
28
28
|
|
29
29
|
private
|
@@ -33,6 +33,13 @@ module Decidim
|
|
33
33
|
def organization_admins
|
34
34
|
assembly.organization.admins
|
35
35
|
end
|
36
|
+
|
37
|
+
def assembly_user_admins
|
38
|
+
assembly_user_admin_ids = Decidim::AssemblyUserRole
|
39
|
+
.where(assembly: assembly, role: :admin)
|
40
|
+
.pluck(:decidim_user_id)
|
41
|
+
Decidim::User.where(id: assembly_user_admin_ids)
|
42
|
+
end
|
36
43
|
end
|
37
44
|
end
|
38
45
|
end
|