decidim-assemblies 0.29.3 → 0.30.0.rc1
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/cells/decidim/assemblies/assembly_metadata_g_cell.rb +1 -14
- data/app/cells/decidim/assemblies/content_blocks/extra_data_cell.rb +2 -12
- data/app/cells/decidim/assemblies/content_blocks/highlighted_assemblies_settings_form/show.erb +1 -1
- data/app/commands/decidim/assemblies/admin/copy_assembly.rb +2 -14
- data/app/commands/decidim/assemblies/admin/create_assembly.rb +2 -2
- data/app/commands/decidim/assemblies/admin/import_assembly.rb +0 -2
- data/app/commands/decidim/assemblies/admin/update_assembly.rb +2 -2
- data/app/controllers/concerns/decidim/assemblies/admin/filterable.rb +2 -11
- data/app/controllers/decidim/assemblies/admin/assemblies_controller.rb +19 -4
- data/app/controllers/decidim/assemblies/admin/assembly_copies_controller.rb +1 -1
- data/app/controllers/decidim/assemblies/admin/assembly_share_tokens_controller.rb +18 -0
- data/app/controllers/decidim/assemblies/admin/component_share_tokens_controller.rb +18 -0
- data/app/controllers/decidim/assemblies/assemblies_controller.rb +1 -3
- data/app/controllers/decidim/assemblies/{assembly_members_controller.rb → participatory_space_private_users_controller.rb} +3 -11
- data/app/forms/decidim/assemblies/admin/assembly_copy_form.rb +0 -1
- data/app/forms/decidim/assemblies/admin/assembly_form.rb +5 -40
- data/app/forms/decidim/assemblies/admin/assembly_import_form.rb +0 -1
- data/app/helpers/decidim/assemblies/admin/assemblies_helper.rb +26 -4
- data/app/helpers/decidim/assemblies/assemblies_helper.rb +4 -4
- data/app/helpers/decidim/assemblies/filter_assemblies_helper.rb +11 -15
- data/app/models/decidim/assembly.rb +21 -11
- data/app/packs/entrypoints/decidim_assemblies_admin.js +0 -1
- data/app/packs/entrypoints/decidim_assemblies_admin_list.js +1 -0
- data/app/packs/src/decidim/assemblies/admin/assemblies_list.js +72 -0
- data/app/permissions/decidim/assemblies/permissions.rb +9 -28
- data/app/presenters/decidim/assemblies/admin_log/assembly_presenter.rb +1 -1
- data/app/presenters/decidim/assemblies/assembly_presenter.rb +0 -6
- data/app/queries/decidim/assemblies/metrics/assemblies_metric_manage.rb +2 -2
- data/app/serializers/decidim/assemblies/assembly_importer.rb +0 -35
- data/app/serializers/decidim/assemblies/assembly_serializer.rb +11 -135
- data/app/serializers/decidim/assemblies/open_data_assembly_serializer.rb +59 -0
- data/app/views/decidim/assemblies/admin/assemblies/_assemblies_thead.html.erb +19 -0
- data/app/views/decidim/assemblies/admin/assemblies/_assembly_row.html.erb +101 -0
- data/app/views/decidim/assemblies/admin/assemblies/_form.html.erb +29 -41
- data/app/views/decidim/assemblies/admin/assemblies/index.html.erb +18 -92
- data/app/views/decidim/assemblies/admin/assemblies/index.js.erb +10 -0
- data/app/views/decidim/assemblies/admin/assemblies/manage_trash.html.erb +20 -0
- data/app/views/decidim/assemblies/admin/assembly_copies/_form.html.erb +0 -4
- data/app/views/decidim/assemblies/admin/assembly_imports/_form.html.erb +0 -3
- data/app/views/decidim/assemblies/assemblies/index.html.erb +3 -1
- data/app/views/decidim/assemblies/assemblies/show.html.erb +5 -6
- data/app/views/decidim/assemblies/{assembly_members → participatory_space_private_users}/index.html.erb +6 -5
- data/config/assets.rb +2 -1
- data/config/locales/ar.yml +0 -72
- data/config/locales/bg.yml +0 -74
- data/config/locales/bs-BA.yml +0 -15
- data/config/locales/ca.yml +70 -74
- data/config/locales/cs.yml +70 -74
- data/config/locales/de.yml +70 -74
- data/config/locales/el.yml +0 -72
- data/config/locales/en.yml +71 -75
- data/config/locales/es-MX.yml +70 -74
- data/config/locales/es-PY.yml +70 -74
- data/config/locales/es.yml +70 -74
- data/config/locales/eu.yml +74 -78
- data/config/locales/fi-plain.yml +71 -75
- data/config/locales/fi.yml +71 -75
- data/config/locales/fr-CA.yml +22 -74
- data/config/locales/fr.yml +22 -74
- data/config/locales/ga-IE.yml +0 -25
- data/config/locales/gl.yml +1 -73
- data/config/locales/he-IL.yml +8 -60
- data/config/locales/hu.yml +0 -74
- data/config/locales/id-ID.yml +0 -63
- data/config/locales/is-IS.yml +0 -48
- data/config/locales/it.yml +1 -144
- data/config/locales/ja.yml +70 -74
- data/config/locales/kaa.yml +0 -9
- data/config/locales/ko.yml +0 -6
- data/config/locales/lb.yml +0 -70
- data/config/locales/lt.yml +0 -72
- data/config/locales/lv.yml +0 -74
- data/config/locales/nl.yml +0 -72
- data/config/locales/no.yml +0 -72
- data/config/locales/pl.yml +0 -75
- data/config/locales/pt-BR.yml +0 -74
- data/config/locales/pt.yml +0 -152
- data/config/locales/ro-RO.yml +14 -85
- data/config/locales/ru.yml +0 -60
- data/config/locales/sk.yml +0 -46
- data/config/locales/sl.yml +0 -54
- data/config/locales/sq-AL.yml +0 -77
- data/config/locales/sr-CS.yml +0 -15
- data/config/locales/sv.yml +71 -75
- data/config/locales/tr-TR.yml +0 -75
- data/config/locales/uk.yml +0 -60
- data/config/locales/zh-CN.yml +0 -74
- data/config/locales/zh-TW.yml +0 -72
- data/db/migrate/20190215093700_reset_negative_children_count_counters.rb +2 -2
- data/db/migrate/20210310120444_add_followable_counter_cache_to_assemblies.rb +1 -1
- data/db/migrate/20240822161222_add_deleted_at_to_decidim_assemblies.rb +8 -0
- data/db/migrate/20241016101151_migrate_assembly_members_to_private_users.rb +53 -0
- data/db/migrate/20241108141651_remove_column_show_statistics_from_assemblies.rb +7 -0
- data/decidim-assemblies.gemspec +1 -1
- data/lib/decidim/api/assemblies_type_type.rb +2 -2
- data/lib/decidim/api/assembly_type.rb +32 -34
- data/lib/decidim/assemblies/admin_engine.rb +77 -54
- data/lib/decidim/assemblies/api.rb +0 -1
- data/lib/decidim/assemblies/content_blocks/registry_manager.rb +11 -0
- data/lib/decidim/assemblies/engine.rb +9 -3
- data/lib/decidim/assemblies/menu.rb +9 -22
- data/lib/decidim/assemblies/participatory_space.rb +7 -3
- data/lib/decidim/assemblies/seeds.rb +9 -33
- data/lib/decidim/assemblies/test/factories.rb +15 -36
- data/lib/decidim/assemblies/version.rb +1 -1
- metadata +28 -49
- data/app/cells/decidim/assemblies/assembly_member/data.erb +0 -19
- data/app/cells/decidim/assemblies/assembly_member/name_and_position.erb +0 -11
- data/app/cells/decidim/assemblies/assembly_member/show.erb +0 -9
- data/app/cells/decidim/assemblies/assembly_member_cell.rb +0 -21
- data/app/commands/decidim/assemblies/admin/create_assembly_member.rb +0 -55
- data/app/commands/decidim/assemblies/admin/destroy_assembly_member.rb +0 -24
- data/app/commands/decidim/assemblies/admin/update_assembly_member.rb +0 -29
- data/app/controllers/concerns/decidim/assemblies/admin/assembly_members/filterable.rb +0 -39
- data/app/controllers/decidim/assemblies/admin/assemblies_types_controller.rb +0 -107
- data/app/controllers/decidim/assemblies/admin/assembly_members_controller.rb +0 -83
- data/app/controllers/decidim/assemblies/admin/categories_controller.rb +0 -13
- data/app/events/decidim/assemblies/create_assembly_member_event.rb +0 -17
- data/app/forms/decidim/assemblies/admin/assembly_member_form.rb +0 -64
- data/app/helpers/decidim/assemblies/admin/assembly_members_helper.rb +0 -11
- data/app/models/decidim/assembly_member.rb +0 -34
- data/app/packs/src/decidim/assemblies/admin/assembly_members.js +0 -47
- data/app/packs/src/decidim/assemblies/orgchart.js +0 -0
- data/app/presenters/decidim/admin/assembly_member_presenter.rb +0 -24
- data/app/presenters/decidim/assemblies/admin_log/assembly_member_presenter.rb +0 -51
- data/app/presenters/decidim/assemblies/admin_log/value_types/member_position_presenter.rb +0 -22
- data/app/presenters/decidim/assembly_member_presenter.rb +0 -68
- data/app/views/decidim/assemblies/admin/assemblies_types/_form.html.erb +0 -9
- data/app/views/decidim/assemblies/admin/assemblies_types/edit.html.erb +0 -13
- data/app/views/decidim/assemblies/admin/assemblies_types/index.html.erb +0 -44
- data/app/views/decidim/assemblies/admin/assemblies_types/new.html.erb +0 -18
- data/app/views/decidim/assemblies/admin/assembly_members/_form.html.erb +0 -62
- data/app/views/decidim/assemblies/admin/assembly_members/edit.html.erb +0 -18
- data/app/views/decidim/assemblies/admin/assembly_members/index.html.erb +0 -55
- data/app/views/decidim/assemblies/admin/assembly_members/new.html.erb +0 -18
- data/app/views/decidim/assembly_members/_assembly_member.html.erb +0 -1
- data/app/views/layouts/decidim/admin/assemblies_types.html.erb +0 -17
- data/config/locales/ca-IT.yml +0 -460
- data/lib/decidim/api/assembly_member_type.rb +0 -27
@@ -0,0 +1,72 @@
|
|
1
|
+
/* eslint-disable require-jsdoc */
|
2
|
+
|
3
|
+
class AdminAssembliesListComponent {
|
4
|
+
run() {
|
5
|
+
this.rebindArrows();
|
6
|
+
}
|
7
|
+
|
8
|
+
rebindArrows() {
|
9
|
+
this.unbindArrows();
|
10
|
+
this.bindArrows();
|
11
|
+
}
|
12
|
+
|
13
|
+
bindArrows() {
|
14
|
+
document.querySelectorAll("[data-arrow-up]").forEach((element) => {
|
15
|
+
element.addEventListener("click", this._onClickUpArrow);
|
16
|
+
});
|
17
|
+
document.querySelectorAll("[data-arrow-down]").forEach((element) => {
|
18
|
+
element.addEventListener("click", this._onClickDownArrow);
|
19
|
+
});
|
20
|
+
}
|
21
|
+
|
22
|
+
unbindArrows() {
|
23
|
+
document.querySelectorAll("[data-arrow-up]").forEach((element) => {
|
24
|
+
element.removeEventListener("click", this._onClickUpArrow);
|
25
|
+
});
|
26
|
+
document.querySelectorAll("[data-arrow-down]").forEach((element) => {
|
27
|
+
element.removeEventListener("click", this._onClickDownArrow);
|
28
|
+
});
|
29
|
+
}
|
30
|
+
|
31
|
+
_onClickDownArrow(event) {
|
32
|
+
event.preventDefault();
|
33
|
+
|
34
|
+
const target = event.currentTarget;
|
35
|
+
const assembly = target.closest("[data-assembly-id]");
|
36
|
+
const upArrow = assembly.querySelector("[data-arrow-up]");
|
37
|
+
|
38
|
+
target.classList.toggle("hidden");
|
39
|
+
upArrow.classList.toggle("hidden");
|
40
|
+
}
|
41
|
+
|
42
|
+
_onClickUpArrow(event) {
|
43
|
+
event.preventDefault();
|
44
|
+
|
45
|
+
const target = event.currentTarget;
|
46
|
+
const assembly = target.closest("[data-assembly-id]");
|
47
|
+
const parentLevel = assembly.dataset.level;
|
48
|
+
const downArrow = assembly.querySelector("[data-arrow-down]");
|
49
|
+
|
50
|
+
target.classList.toggle("hidden");
|
51
|
+
downArrow.classList.toggle("hidden");
|
52
|
+
|
53
|
+
// Get all following tr elements
|
54
|
+
let nextElement = assembly.nextElementSibling;
|
55
|
+
while (nextElement) {
|
56
|
+
const currentLevel = nextElement.dataset.level;
|
57
|
+
const nextSibling = nextElement.nextElementSibling;
|
58
|
+
|
59
|
+
if (currentLevel > parentLevel) {
|
60
|
+
nextElement.remove();
|
61
|
+
} else {
|
62
|
+
break;
|
63
|
+
}
|
64
|
+
nextElement = nextSibling;
|
65
|
+
}
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
window.Decidim.AdminAssembliesListComponent = AdminAssembliesListComponent;
|
70
|
+
const component = new AdminAssembliesListComponent();
|
71
|
+
|
72
|
+
component.run();
|
@@ -3,8 +3,6 @@
|
|
3
3
|
module Decidim
|
4
4
|
module Assemblies
|
5
5
|
class Permissions < Decidim::DefaultPermissions
|
6
|
-
include Decidim::UserRoleChecker
|
7
|
-
|
8
6
|
def permissions
|
9
7
|
user_can_enter_space_area?
|
10
8
|
|
@@ -36,11 +34,9 @@ module Decidim
|
|
36
34
|
user_can_create_assembly?
|
37
35
|
user_can_export_assembly?
|
38
36
|
user_can_copy_assembly?
|
39
|
-
user_can_upload_images_in_assembly?
|
40
37
|
|
41
38
|
# org admins and space admins can do everything in the admin section
|
42
39
|
org_admin_action?
|
43
|
-
assemblies_type_action?
|
44
40
|
|
45
41
|
return permission_action unless assembly
|
46
42
|
|
@@ -63,21 +59,6 @@ module Decidim
|
|
63
59
|
toggle_allow(user.admin? || can_manage_assembly?(role: :admin) || can_manage_assembly?(role: :collaborator))
|
64
60
|
end
|
65
61
|
|
66
|
-
def assemblies_type_action?
|
67
|
-
return unless [:assembly_type, :assemblies_type].include? permission_action.subject
|
68
|
-
return disallow! unless user.admin?
|
69
|
-
|
70
|
-
assembly_type = context.fetch(:assembly_type, nil)
|
71
|
-
case permission_action.action
|
72
|
-
when :destroy
|
73
|
-
assemblies_is_empty = assembly_type && assembly_type.assemblies.empty?
|
74
|
-
|
75
|
-
toggle_allow(assemblies_is_empty)
|
76
|
-
else
|
77
|
-
allow!
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
62
|
# It is an admin user if it is an organization admin or is a space admin
|
82
63
|
# for the current `assembly`.
|
83
64
|
def admin_user?
|
@@ -129,6 +110,7 @@ module Decidim
|
|
129
110
|
return disallow! unless can_view_private_space?
|
130
111
|
return allow! if user&.admin?
|
131
112
|
return allow! if assembly.published?
|
113
|
+
return allow! if user_can_preview_space?
|
132
114
|
|
133
115
|
toggle_allow(can_manage_assembly?)
|
134
116
|
end
|
@@ -261,14 +243,13 @@ module Decidim
|
|
261
243
|
is_allowed = [
|
262
244
|
:attachment,
|
263
245
|
:attachment_collection,
|
264
|
-
:category,
|
265
246
|
:component,
|
266
247
|
:component_data,
|
267
248
|
:moderation,
|
268
249
|
:assembly,
|
269
250
|
:assembly_user_role,
|
270
|
-
:assembly_member,
|
271
251
|
:export_space,
|
252
|
+
:share_tokens,
|
272
253
|
:import
|
273
254
|
].include?(permission_action.subject)
|
274
255
|
allow! if is_allowed
|
@@ -280,19 +261,24 @@ module Decidim
|
|
280
261
|
is_allowed = [
|
281
262
|
:attachment,
|
282
263
|
:attachment_collection,
|
283
|
-
:category,
|
284
264
|
:component,
|
285
265
|
:component_data,
|
286
266
|
:moderation,
|
287
267
|
:assembly,
|
288
268
|
:assembly_user_role,
|
289
|
-
:assembly_member,
|
290
269
|
:export_space,
|
270
|
+
:share_tokens,
|
291
271
|
:import
|
292
272
|
].include?(permission_action.subject)
|
293
273
|
allow! if is_allowed
|
294
274
|
end
|
295
275
|
|
276
|
+
def user_can_preview_space?
|
277
|
+
context[:share_token].present? && Decidim::ShareToken.use!(token_for: assembly, token: context[:share_token], user:)
|
278
|
+
rescue ActiveRecord::RecordNotFound, StandardError
|
279
|
+
nil
|
280
|
+
end
|
281
|
+
|
296
282
|
# Checks if the permission_action is to read the admin assemblies list or
|
297
283
|
# not.
|
298
284
|
def read_assembly_list_permission_action?
|
@@ -317,11 +303,6 @@ module Decidim
|
|
317
303
|
Decidim::Assembly.where(id: assemblies + child_assemblies)
|
318
304
|
end
|
319
305
|
end
|
320
|
-
|
321
|
-
# Checks if the assigned admins can upload images on the editor
|
322
|
-
def user_can_upload_images_in_assembly?
|
323
|
-
allow! if user&.admin_terms_accepted? && user_has_any_role?(user, assembly, broad_check: true) && (permission_action.subject == :editor_image)
|
324
|
-
end
|
325
306
|
end
|
326
307
|
end
|
327
308
|
end
|
@@ -62,7 +62,7 @@ module Decidim
|
|
62
62
|
|
63
63
|
def action_string
|
64
64
|
case action
|
65
|
-
when "create", "publish", "unpublish", "update", "duplicate", "export", "import"
|
65
|
+
when "create", "publish", "unpublish", "update", "duplicate", "export", "import", "soft_delete", "restore"
|
66
66
|
"decidim.admin_log.assembly.#{action}"
|
67
67
|
else
|
68
68
|
super
|
@@ -14,12 +14,12 @@ module Decidim
|
|
14
14
|
return @query if @query
|
15
15
|
|
16
16
|
@query = Decidim::Assembly.where(organization: @organization)
|
17
|
-
@query = @query.where(
|
17
|
+
@query = @query.where(decidim_assemblies: { published_at: ..end_time })
|
18
18
|
@query
|
19
19
|
end
|
20
20
|
|
21
21
|
def quantity
|
22
|
-
@quantity ||= query.where(
|
22
|
+
@quantity ||= query.where(decidim_assemblies: { published_at: start_time.. }).count
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -36,14 +36,12 @@ module Decidim
|
|
36
36
|
target: attributes["target"],
|
37
37
|
participatory_scope: attributes["participatory_scope"],
|
38
38
|
participatory_structure: attributes["participatory_structure"],
|
39
|
-
scopes_enabled: attributes["scopes_enabled"],
|
40
39
|
private_space: attributes["private_space"],
|
41
40
|
reference: attributes["reference"],
|
42
41
|
purpose_of_action: attributes["purpose_of_action"],
|
43
42
|
composition: attributes["composition"],
|
44
43
|
duration: attributes["duration"],
|
45
44
|
creation_date: attributes["creation_date"],
|
46
|
-
decidim_scope_id: attributes["decidim_scope_id"],
|
47
45
|
closing_date_reason: attributes["closing_date_reason"],
|
48
46
|
included_at: attributes["included_at"],
|
49
47
|
closing_date: attributes["closing_date"],
|
@@ -68,39 +66,6 @@ module Decidim
|
|
68
66
|
end
|
69
67
|
end
|
70
68
|
|
71
|
-
def import_assemblies_type(type_id)
|
72
|
-
return if Decidim::AssembliesType.find_by(id: type_id).nil?
|
73
|
-
|
74
|
-
@imported_assembly.decidim_assemblies_type_id = type_id
|
75
|
-
end
|
76
|
-
|
77
|
-
def import_categories(categories)
|
78
|
-
return if categories.nil?
|
79
|
-
|
80
|
-
categories.map do |category_attributes|
|
81
|
-
category = Decidim.traceability.create!(
|
82
|
-
Category,
|
83
|
-
@user,
|
84
|
-
name: category_attributes["name"],
|
85
|
-
description: category_attributes["description"],
|
86
|
-
parent_id: category_attributes["parent_id"],
|
87
|
-
participatory_space: @imported_assembly
|
88
|
-
)
|
89
|
-
next if category_attributes["subcategories"].nil?
|
90
|
-
|
91
|
-
category_attributes["subcategories"].map do |subcategory_attributes|
|
92
|
-
Decidim.traceability.create!(
|
93
|
-
Category,
|
94
|
-
@user,
|
95
|
-
name: subcategory_attributes["name"],
|
96
|
-
description: subcategory_attributes["description"],
|
97
|
-
parent_id: category.id,
|
98
|
-
participatory_space: @imported_assembly
|
99
|
-
)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
69
|
def import_folders_and_attachments(attachments)
|
105
70
|
return if attachments["files"].nil?
|
106
71
|
|
@@ -3,146 +3,22 @@
|
|
3
3
|
module Decidim
|
4
4
|
module Assemblies
|
5
5
|
# This class serializes an Assembly so it can be exported to CSV, JSON or other formats.
|
6
|
-
class AssemblySerializer < Decidim::
|
7
|
-
include Decidim::ApplicationHelper
|
8
|
-
include Decidim::ResourceHelper
|
9
|
-
include Decidim::TranslationsHelper
|
10
|
-
|
11
|
-
# Public: Initializes the serializer with an Assembly instance.
|
12
|
-
def initialize(assembly)
|
13
|
-
@assembly = assembly
|
14
|
-
end
|
15
|
-
|
6
|
+
class AssemblySerializer < Decidim::Assemblies::OpenDataAssemblySerializer
|
16
7
|
# Public: Exports a hash with the serialized data for this assembly.
|
17
8
|
def serialize
|
18
|
-
|
19
|
-
id: assembly.id,
|
20
|
-
slug: assembly.slug,
|
21
|
-
hashtag: assembly.hashtag,
|
22
|
-
decidim_organization_id: assembly.decidim_organization_id,
|
23
|
-
title: assembly.title,
|
24
|
-
subtitle: assembly.subtitle,
|
25
|
-
weight: assembly.weight,
|
26
|
-
short_description: assembly.short_description,
|
27
|
-
description: assembly.description,
|
28
|
-
remote_hero_image_url: Decidim::Assemblies::AssemblyPresenter.new(assembly).hero_image_url,
|
29
|
-
remote_banner_image_url: Decidim::Assemblies::AssemblyPresenter.new(assembly).banner_image_url,
|
30
|
-
promoted: assembly.promoted,
|
31
|
-
developer_group: assembly.developer_group,
|
32
|
-
meta_scope: assembly.meta_scope,
|
33
|
-
local_area: assembly.local_area,
|
34
|
-
target: assembly.target,
|
35
|
-
decidim_scope_id: assembly.decidim_scope_id,
|
36
|
-
paticipatory_scope: assembly.participatory_scope, # intentionally misspelled
|
37
|
-
participatory_structure: assembly.participatory_structure,
|
38
|
-
scopes_enabled: assembly.scopes_enabled,
|
39
|
-
private_space: assembly.private_space,
|
40
|
-
reference: assembly.reference,
|
41
|
-
purpose_of_action: assembly.purpose_of_action,
|
42
|
-
composition: assembly.composition,
|
43
|
-
duration: assembly.duration,
|
44
|
-
participatory_scope: assembly.participatory_scope,
|
45
|
-
included_at: assembly.included_at,
|
46
|
-
closing_date: assembly.closing_date,
|
47
|
-
created_by: assembly.created_by,
|
48
|
-
creation_date: assembly.creation_date,
|
49
|
-
closing_date_reason: assembly.closing_date_reason,
|
50
|
-
internal_organisation: assembly.internal_organisation,
|
51
|
-
is_transparent: assembly.is_transparent,
|
52
|
-
special_features: assembly.special_features,
|
53
|
-
twitter_handler: assembly.twitter_handler,
|
54
|
-
instagram_handler: assembly.instagram_handler,
|
55
|
-
facebook_handler: assembly.facebook_handler,
|
56
|
-
youtube_handler: assembly.youtube_handler,
|
57
|
-
github_handler: assembly.github_handler,
|
58
|
-
created_by_other: assembly.created_by_other,
|
59
|
-
decidim_assemblies_type_id: assembly.decidim_assemblies_type_id,
|
60
|
-
area: {
|
61
|
-
id: assembly.area.try(:id),
|
62
|
-
name: assembly.area.try(:name) || empty_translatable
|
63
|
-
},
|
64
|
-
scope: {
|
65
|
-
id: assembly.scope.try(:id),
|
66
|
-
name: assembly.scope.try(:name) || empty_translatable
|
67
|
-
},
|
68
|
-
|
69
|
-
assembly_categories: serialize_categories,
|
70
|
-
attachments: {
|
71
|
-
attachment_collections: serialize_attachment_collections,
|
72
|
-
files: serialize_attachments
|
73
|
-
},
|
74
|
-
components: serialize_components,
|
75
|
-
announcement: assembly.announcement
|
76
|
-
}
|
77
|
-
end
|
78
|
-
|
79
|
-
private
|
80
|
-
|
81
|
-
attr_reader :assembly
|
82
|
-
alias resource assembly
|
83
|
-
|
84
|
-
def serialize_categories
|
85
|
-
return unless assembly.categories.first_class.any?
|
86
|
-
|
87
|
-
assembly.categories.first_class.map do |category|
|
88
|
-
{
|
89
|
-
id: category.try(:id),
|
90
|
-
name: category.try(:name),
|
91
|
-
description: category.try(:description),
|
92
|
-
parent_id: category.try(:parent_id),
|
93
|
-
subcategories: serialize_subcategories(category.subcategories)
|
94
|
-
}
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
def serialize_subcategories(subcategories)
|
99
|
-
return unless subcategories.any?
|
100
|
-
|
101
|
-
subcategories.map do |subcategory|
|
9
|
+
super.merge(
|
102
10
|
{
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def serialize_attachment_collections
|
112
|
-
return unless assembly.attachment_collections.any?
|
113
|
-
|
114
|
-
assembly.attachment_collections.map do |collection|
|
115
|
-
{
|
116
|
-
id: collection.try(:id),
|
117
|
-
name: collection.try(:name),
|
118
|
-
weight: collection.try(:weight),
|
119
|
-
description: collection.try(:description)
|
120
|
-
}
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def serialize_attachments
|
125
|
-
return unless assembly.attachments.any?
|
126
|
-
|
127
|
-
assembly.attachments.map do |attachment|
|
128
|
-
{
|
129
|
-
id: attachment.try(:id),
|
130
|
-
title: attachment.try(:title),
|
131
|
-
weight: attachment.try(:weight),
|
132
|
-
description: attachment.try(:description),
|
133
|
-
attachment_collection: {
|
134
|
-
name: attachment.attachment_collection.try(:name),
|
135
|
-
weight: attachment.attachment_collection.try(:weight),
|
136
|
-
description: attachment.attachment_collection.try(:description)
|
11
|
+
categories: serialize_categories,
|
12
|
+
taxonomies:,
|
13
|
+
attachments: {
|
14
|
+
attachment_collections: serialize_attachment_collections,
|
15
|
+
files: serialize_attachments
|
137
16
|
},
|
138
|
-
|
17
|
+
private_space: resource.private_space,
|
18
|
+
weight: resource.weight,
|
19
|
+
components: serialize_components
|
139
20
|
}
|
140
|
-
|
141
|
-
end
|
142
|
-
|
143
|
-
def serialize_components
|
144
|
-
serializer = Decidim::Exporters::ParticipatorySpaceComponentsSerializer.new(@assembly)
|
145
|
-
serializer.run
|
21
|
+
)
|
146
22
|
end
|
147
23
|
end
|
148
24
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Assemblies
|
5
|
+
# This class serializes an Assembly so it can be exported to CSV for the Open Data feature.
|
6
|
+
class OpenDataAssemblySerializer < Decidim::Exporters::ParticipatorySpaceSerializer
|
7
|
+
# Public: Exports a hash with the serialized data for this assembly.
|
8
|
+
#
|
9
|
+
def serialize
|
10
|
+
super.merge(
|
11
|
+
{
|
12
|
+
url: EngineRouter.main_proxy(resource).assembly_url(resource),
|
13
|
+
subtitle: resource.subtitle,
|
14
|
+
remote_hero_image_url: Decidim::ParticipatoryProcesses::ParticipatoryProcessPresenter.new(resource).hero_image_url,
|
15
|
+
remote_banner_image_url: Decidim::Assemblies::AssemblyPresenter.new(resource).banner_image_url,
|
16
|
+
announcement: resource.announcement,
|
17
|
+
developer_group: resource.developer_group,
|
18
|
+
local_area: resource.local_area,
|
19
|
+
meta_scope: resource.meta_scope,
|
20
|
+
participatory_scope: resource.participatory_scope,
|
21
|
+
purpose_of_action: resource.purpose_of_action,
|
22
|
+
composition: resource.composition,
|
23
|
+
duration: resource.duration,
|
24
|
+
participatory_structure: resource.participatory_structure,
|
25
|
+
target: resource.target,
|
26
|
+
decidim_scope_id: resource.decidim_scope_id,
|
27
|
+
area: {
|
28
|
+
id: resource.area.try(:id),
|
29
|
+
name: resource.area.try(:name) || empty_translatable
|
30
|
+
},
|
31
|
+
scope: {
|
32
|
+
id: resource.scope.try(:id),
|
33
|
+
name: resource.scope.try(:name) || empty_translatable
|
34
|
+
},
|
35
|
+
scopes_enabled: resource.scopes_enabled,
|
36
|
+
included_at: resource.included_at,
|
37
|
+
closing_date: resource.closing_date,
|
38
|
+
created_by: resource.created_by,
|
39
|
+
creation_date: resource.creation_date,
|
40
|
+
closing_date_reason: resource.closing_date_reason,
|
41
|
+
internal_organisation: resource.internal_organisation,
|
42
|
+
is_transparent: resource.is_transparent,
|
43
|
+
special_features: resource.special_features,
|
44
|
+
twitter_handler: resource.twitter_handler,
|
45
|
+
instagram_handler: resource.instagram_handler,
|
46
|
+
facebook_handler: resource.facebook_handler,
|
47
|
+
youtube_handler: resource.youtube_handler,
|
48
|
+
github_handler: resource.github_handler,
|
49
|
+
created_by_other: resource.created_by_other,
|
50
|
+
assembly_type: {
|
51
|
+
id: resource.assembly_type.try(:id),
|
52
|
+
title: resource.assembly_type.try(:title) || empty_translatable
|
53
|
+
}
|
54
|
+
}
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<thead>
|
2
|
+
<tr>
|
3
|
+
<th>
|
4
|
+
<%= sort_link(query, :title, t("models.assembly.fields.title", scope: "decidim.admin")) %>
|
5
|
+
</th>
|
6
|
+
<th>
|
7
|
+
<%= sort_link(query, :created_at, t("models.assembly.fields.created_at", scope: "decidim.admin"), default_order: :desc) %>
|
8
|
+
</th>
|
9
|
+
<th>
|
10
|
+
<%= sort_link(query, :private_space, t("models.assembly.fields.private", scope: "decidim.admin")) %>
|
11
|
+
</th>
|
12
|
+
<th class="table-list__actions">
|
13
|
+
<%= sort_link(query, :published_at, t("models.assembly.fields.published", scope: "decidim.admin")) %>
|
14
|
+
</th>
|
15
|
+
<th>
|
16
|
+
<%= t("models.assembly.fields.actions", scope: "decidim.admin") %>
|
17
|
+
</th>
|
18
|
+
</tr>
|
19
|
+
</thead>
|
@@ -0,0 +1,101 @@
|
|
1
|
+
<tr data-assembly-id="<%= assembly.id %>" data-parent-id="<%= assembly.parent_id %>" data-level="<%= assembly.ancestors.count %>">
|
2
|
+
<td class="whitespace-nowrap">
|
3
|
+
<% if parent_assembly_id %>
|
4
|
+
<% [assembly.ancestors.count - 1, 0].max.times do |index| %>
|
5
|
+
<span class="px-3"></span>
|
6
|
+
<% end %>
|
7
|
+
<span class="px-3 text-xl text-secondary opacity-10">|</span>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<% if assembly.promoted? %>
|
11
|
+
<%= icon_with_tooltip "star-s-fill", t("models.assembly.fields.promoted", scope: "decidim.admin") %>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<span class="table-list__title-ellipsis">
|
15
|
+
<% if allowed_to? :update, :assembly, assembly: assembly %>
|
16
|
+
<%= link_to translated_attribute(assembly.title), edit_assembly_path(assembly) %>
|
17
|
+
<% elsif allowed_to? :read, :component, assembly: assembly %>
|
18
|
+
<%= link_to translated_attribute(assembly.title), components_path(assembly) %><br>
|
19
|
+
<% else %>
|
20
|
+
<%= translated_attribute(assembly.title) %>
|
21
|
+
<% end %>
|
22
|
+
</span>
|
23
|
+
|
24
|
+
<% if assembly.children.count.positive? %>
|
25
|
+
<%= link_to url_for(query_params_with(parent_id_eq: assembly.id)), remote: true, data: { arrow_down: true } do %>
|
26
|
+
<%= icon "arrow-down-s-line", class: "w-4 h-4 ml-2" %>
|
27
|
+
<% end %>
|
28
|
+
<%= link_to "#", class: "hidden", data: { arrow_up: true } do %>
|
29
|
+
<%= icon "arrow-up-s-line", class: "w-4 h-4 ml-2" %>
|
30
|
+
<% end %>
|
31
|
+
<% end %>
|
32
|
+
</td>
|
33
|
+
<td class="table-list__date">
|
34
|
+
<%= l(assembly.created_at, format: :short) %>
|
35
|
+
</td>
|
36
|
+
<td class="table-list__state">
|
37
|
+
<% if assembly.private_space? %>
|
38
|
+
<span><%= t("assemblies.index.private", scope: "decidim.admin") %></span>
|
39
|
+
<% else %>
|
40
|
+
<span><%= t("assemblies.index.public", scope: "decidim.admin") %></span>
|
41
|
+
<% end %>
|
42
|
+
</td>
|
43
|
+
<td class="table-list__state">
|
44
|
+
<% if assembly.published? %>
|
45
|
+
<span class="label success !text-sm"><%= t("assemblies.index.published", scope: "decidim.admin") %></span>
|
46
|
+
<% else %>
|
47
|
+
<span class="label alert !text-sm"><%= t("assemblies.index.unpublished", scope: "decidim.admin") %></span>
|
48
|
+
<% end %>
|
49
|
+
</td>
|
50
|
+
<td class="table-list__actions">
|
51
|
+
<% if view == :deleted %>
|
52
|
+
<% if allowed_to? :restore, :assembly, trashable_deleted_resource: assembly %>
|
53
|
+
<%= icon_link_to "refresh-line", restore_assembly_path(assembly), t("actions.restore", scope: "decidim.admin"), method: :patch, class: "action-icon--restore" %>
|
54
|
+
<% else %>
|
55
|
+
<span class="action-space icon"></span>
|
56
|
+
<% end %>
|
57
|
+
<% else %>
|
58
|
+
<% if allowed_to? :read, :share_tokens, current_participatory_space: assembly %>
|
59
|
+
<%= icon_link_to "share-line", decidim_admin_assemblies.assembly_share_tokens_path(assembly), t("actions.share_tokens", scope: "decidim.admin"), class: "action-icon--new" %>
|
60
|
+
<% else %>
|
61
|
+
<span class="action-space icon"></span>
|
62
|
+
<% end %>
|
63
|
+
<% if allowed_to? :update, :assembly, assembly: assembly %>
|
64
|
+
<%= icon_link_to "pencil-line", edit_assembly_path(assembly), t("actions.configure", scope: "decidim.admin"), class: "action-icon--new" %>
|
65
|
+
<% else %>
|
66
|
+
<span class="action-space icon"></span>
|
67
|
+
<% end %>
|
68
|
+
<% if allowed_to? :copy, :assembly, assembly: assembly, assembly: parent_assembly %>
|
69
|
+
<%= icon_link_to "file-copy-line", new_assembly_copy_path(assembly), t("actions.duplicate", scope: "decidim.admin"), class: "action-icon--copy" %>
|
70
|
+
<% else %>
|
71
|
+
<span class="action-space icon"></span>
|
72
|
+
<% end %>
|
73
|
+
|
74
|
+
<% if allowed_to? :export, :assembly, assembly: assembly %>
|
75
|
+
<%= icon_link_to "download-line", assembly_export_path(assembly), t("actions.export", scope: "decidim.admin"), method: :post, class: "action-icon--export" %>
|
76
|
+
<% else %>
|
77
|
+
<span class="action-space icon"></span>
|
78
|
+
<% end %>
|
79
|
+
|
80
|
+
<% if allowed_to? :preview, :assembly, assembly: assembly %>
|
81
|
+
<%= icon_link_to "eye-line", decidim_assemblies.assembly_path(assembly), t("actions.preview", scope: "decidim.admin"), class: "action-icon--preview", target: "_blank", data: { "external-link": false } %>
|
82
|
+
<% else %>
|
83
|
+
<span class="action-space icon"></span>
|
84
|
+
<% end %>
|
85
|
+
|
86
|
+
<% if allowed_to? :read, :moderation, assembly: assembly %>
|
87
|
+
<%= icon_link_to "flag-line", moderations_path(assembly), t("actions.moderate", scope: "decidim.admin"), class: "action-icon--moderate" %>
|
88
|
+
<% else %>
|
89
|
+
<span class="action-space icon"></span>
|
90
|
+
<% end %>
|
91
|
+
|
92
|
+
<% if allowed_to? :soft_delete, :assembly, trashable_deleted_resource: assembly %>
|
93
|
+
<% if assembly.published? %>
|
94
|
+
<%= icon "delete-bin-line", class: "action-icon action-icon--disabled", role: "img", aria_label: t("actions.soft_delete", scope: "decidim.admin") %>
|
95
|
+
<% else %>
|
96
|
+
<%= icon_link_to "delete-bin-line", soft_delete_assembly_path(assembly), t("actions.soft_delete", scope: "decidim.admin"), method: :patch, class: "action-icon--delete", data: { confirm: t("actions.confirm_delete_assembly", scope: "decidim.admin") } %>
|
97
|
+
<% end %>
|
98
|
+
<% end %>
|
99
|
+
<% end %>
|
100
|
+
</td>
|
101
|
+
</tr>
|