decidim-assemblies 0.23.5 → 0.24.2
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_cell.rb +2 -0
- data/app/cells/decidim/assemblies/statistic/show.erb +9 -0
- data/app/cells/decidim/assemblies/statistic_cell.rb +20 -0
- data/app/cells/decidim/assemblies/statistics/show.erb +17 -0
- data/app/cells/decidim/assemblies/statistics_cell.rb +18 -0
- data/app/commands/decidim/assemblies/admin/create_assembly.rb +1 -0
- data/app/commands/decidim/assemblies/admin/update_assembly.rb +2 -1
- data/app/controllers/decidim/assemblies/admin/imports_controller.rb +14 -0
- data/app/controllers/decidim/assemblies/admin/moderations/reports_controller.rb +14 -0
- data/app/controllers/decidim/assemblies/assemblies_controller.rb +1 -1
- data/app/forms/decidim/assemblies/admin/assembly_form.rb +3 -0
- data/app/helpers/decidim/assemblies/admin/assemblies_admin_menu_helper.rb +15 -0
- data/app/models/decidim/assembly.rb +3 -3
- data/app/presenters/decidim/assemblies/assembly_stats_presenter.rb +35 -25
- data/app/queries/decidim/assemblies/organization_assemblies.rb +1 -1
- data/app/queries/decidim/assemblies/organization_published_assemblies.rb +1 -1
- data/app/serializers/decidim/assemblies/assembly_serializer.rb +1 -0
- data/app/views/decidim/assemblies/admin/assemblies/_form.html.erb +4 -0
- data/app/views/decidim/assemblies/admin/assemblies/index.html.erb +11 -1
- data/app/views/decidim/assemblies/admin/assemblies_types/index.html.erb +1 -1
- data/app/views/decidim/assemblies/assemblies/show.html.erb +1 -1
- data/app/views/layouts/decidim/admin/assemblies.html.erb +2 -20
- data/app/views/layouts/decidim/admin/assembly.html.erb +2 -1
- data/config/locales/ar.yml +2 -1
- data/config/locales/ca.yml +9 -3
- data/config/locales/cs.yml +11 -5
- data/config/locales/de.yml +9 -3
- data/config/locales/el.yml +2 -4
- data/config/locales/en.yml +9 -3
- data/config/locales/es-MX.yml +9 -3
- data/config/locales/es-PY.yml +9 -3
- data/config/locales/es.yml +9 -3
- data/config/locales/eu.yml +2 -1
- data/config/locales/fi-plain.yml +8 -2
- data/config/locales/fi.yml +8 -2
- data/config/locales/fr-CA.yml +9 -3
- data/config/locales/fr.yml +9 -3
- data/config/locales/gl.yml +8 -6
- data/config/locales/hu.yml +2 -4
- data/config/locales/id-ID.yml +2 -1
- data/config/locales/is-IS.yml +1 -1
- data/config/locales/it.yml +2 -4
- data/config/locales/ja.yml +4 -3
- data/config/locales/lv.yml +2 -4
- data/config/locales/nl.yml +9 -3
- data/config/locales/no.yml +2 -4
- data/config/locales/pl.yml +10 -4
- data/config/locales/pt-BR.yml +2 -1
- data/config/locales/pt.yml +2 -4
- data/config/locales/ro-RO.yml +6 -3
- data/config/locales/ru.yml +2 -1
- data/config/locales/sk.yml +0 -3
- data/config/locales/sl.yml +2 -1
- data/config/locales/sr-CS.yml +0 -3
- data/config/locales/sv.yml +8 -3
- data/config/locales/tr-TR.yml +2 -4
- data/config/locales/uk.yml +2 -1
- data/config/locales/zh-CN.yml +2 -4
- data/db/migrate/20210204152393_add_weight_field_to_assembly.rb +7 -0
- data/db/migrate/20210310120444_add_followable_counter_cache_to_assemblies.rb +16 -0
- data/lib/decidim/api/assemblies_type_type.rb +16 -0
- data/lib/decidim/api/assembly_member_type.rb +28 -0
- data/lib/decidim/api/assembly_type.rb +64 -0
- data/lib/decidim/assemblies.rb +1 -0
- data/lib/decidim/assemblies/admin_engine.rb +31 -1
- data/lib/decidim/assemblies/api.rb +9 -0
- data/lib/decidim/assemblies/engine.rb +3 -5
- data/lib/decidim/assemblies/participatory_space.rb +38 -38
- data/lib/decidim/assemblies/query_extensions.rb +39 -20
- data/lib/decidim/assemblies/test/factories.rb +5 -4
- data/lib/decidim/assemblies/version.rb +1 -1
- metadata +23 -14
- data/app/types/decidim/assemblies/assemblies_type_type.rb +0 -17
- data/app/types/decidim/assemblies/assembly_member_type.rb +0 -29
- data/app/types/decidim/assemblies/assembly_type.rb +0 -67
- data/app/views/decidim/assemblies/assemblies/_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: f1cdccdc43b87cca1180a3e753329bb0b99f74e55d57fe1d4d2e2550fdec0723
|
4
|
+
data.tar.gz: d03ca1b004aa6d853693201af27edb9b5759c68af86fd0f0a588b39be0a5f9ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a9c07f3f332c9a6182e26cab5370c43674e2fa7400363732460e4e787b20fa5eb53d585ac896896996841a498fd3aa95c70599b522fd9e0f178689260c31ab4
|
7
|
+
data.tar.gz: 5d3531576102d1fa52c8226adfd7613319ad825f5e10af7153fbcc05ede1d5afc4ba9a513020dfd4e0e1b0af275764df06a92485510791672a07f7e500a6a60e
|
@@ -41,10 +41,12 @@ module Decidim
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def children_count_status
|
44
|
+
# rubocop: disable Style/StringConcatenation
|
44
45
|
content_tag(
|
45
46
|
:strong,
|
46
47
|
t("layouts.decidim.assemblies.index.children")
|
47
48
|
) + " " + children_assemblies_visible_for_user
|
49
|
+
# rubocop: enable Style/StringConcatenation
|
48
50
|
end
|
49
51
|
|
50
52
|
def children_assemblies_visible_for_user
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Assemblies
|
5
|
+
# This cell renders a Statistic of a Assemblies
|
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.assemblies.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
|
+
<h3 class="section-heading">
|
5
|
+
<%= stats_heading %>
|
6
|
+
</h3>
|
7
|
+
|
8
|
+
<div class="space-stats">
|
9
|
+
<% if model.present? %>
|
10
|
+
<%= cell("decidim/assemblies/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 Assemblies
|
5
|
+
# This cell renders the Statistics of an Assembly
|
6
|
+
class StatisticsCell < Decidim::ViewModel
|
7
|
+
private
|
8
|
+
|
9
|
+
def stats_heading
|
10
|
+
t("statistics.headline", scope: "decidim.assemblies")
|
11
|
+
end
|
12
|
+
|
13
|
+
def no_stats
|
14
|
+
t("statistics.no_stats", scope: "decidim.assemblies")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -94,7 +94,8 @@ module Decidim
|
|
94
94
|
facebook_handler: form.facebook_handler,
|
95
95
|
instagram_handler: form.instagram_handler,
|
96
96
|
youtube_handler: form.youtube_handler,
|
97
|
-
github_handler: form.github_handler
|
97
|
+
github_handler: form.github_handler,
|
98
|
+
weight: form.weight
|
98
99
|
}.merge(uploader_attributes)
|
99
100
|
end
|
100
101
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Assemblies
|
5
|
+
module Admin
|
6
|
+
# This controller allows importing things.
|
7
|
+
# It is targeted for customizations for importing things that lives under
|
8
|
+
# an assembly.
|
9
|
+
class ImportsController < Decidim::Admin::ImportsController
|
10
|
+
include Concerns::AssemblyAdmin
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Assemblies
|
5
|
+
module Admin
|
6
|
+
module Moderations
|
7
|
+
# This controller allows admins to manage moderation reports in an assembly.
|
8
|
+
class ReportsController < Decidim::Admin::Moderations::ReportsController
|
9
|
+
include Concerns::AssemblyAdmin
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -45,6 +45,7 @@ module Decidim
|
|
45
45
|
attribute :parent_id, Integer
|
46
46
|
attribute :participatory_processes_ids, Array[Integer]
|
47
47
|
attribute :scope_id, Integer
|
48
|
+
attribute :weight, Integer, default: 0
|
48
49
|
|
49
50
|
attribute :is_transparent, Boolean
|
50
51
|
attribute :promoted, Boolean
|
@@ -79,6 +80,8 @@ module Decidim
|
|
79
80
|
validates :banner_image, passthru: { to: Decidim::Assembly }
|
80
81
|
validates :hero_image, passthru: { to: Decidim::Assembly }
|
81
82
|
|
83
|
+
validates :weight, presence: true
|
84
|
+
|
82
85
|
alias organization current_organization
|
83
86
|
|
84
87
|
def ensure_parent_cannot_be_child
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Assemblies
|
5
|
+
module Admin
|
6
|
+
module AssembliesAdminMenuHelper
|
7
|
+
include Decidim::Admin::SidebarMenuHelper
|
8
|
+
|
9
|
+
def admin_assemblies_menu
|
10
|
+
@admin_assemblies_menu ||= sidebar_menu(:admin_assemblies_menu)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -67,7 +67,7 @@ module Decidim
|
|
67
67
|
has_many :components, as: :participatory_space, dependent: :destroy
|
68
68
|
|
69
69
|
has_many :children, foreign_key: "parent_id", class_name: "Decidim::Assembly", inverse_of: :parent, dependent: :destroy
|
70
|
-
belongs_to :parent,
|
70
|
+
belongs_to :parent, class_name: "Decidim::Assembly", inverse_of: :children, optional: true, counter_cache: :children_count
|
71
71
|
|
72
72
|
validates_upload :hero_image
|
73
73
|
mount_uploader :hero_image, Decidim::HeroImageUploader
|
@@ -215,9 +215,9 @@ module Decidim
|
|
215
215
|
# rubocop:disable Rails/SkipsModelValidations
|
216
216
|
def update_children_paths
|
217
217
|
self.class.where(
|
218
|
-
["#{self.class.table_name}.parents_path <@ :old_path AND #{self.class.table_name}.id != :id", old_path: parents_path_before_last_save, id: id]
|
218
|
+
["#{self.class.table_name}.parents_path <@ :old_path AND #{self.class.table_name}.id != :id", { old_path: parents_path_before_last_save, id: id }]
|
219
219
|
).update_all(
|
220
|
-
["parents_path = :new_path || subpath(parents_path, nlevel(:old_path))", new_path: parents_path, old_path: parents_path_before_last_save]
|
220
|
+
["parents_path = :new_path || subpath(parents_path, nlevel(:old_path))", { new_path: parents_path, old_path: parents_path_before_last_save }]
|
221
221
|
)
|
222
222
|
end
|
223
223
|
# rubocop:enable Rails/SkipsModelValidations
|
@@ -2,46 +2,56 @@
|
|
2
2
|
|
3
3
|
module Decidim
|
4
4
|
module Assemblies
|
5
|
-
# A presenter to render statistics in
|
5
|
+
# A presenter to render statistics in an Assembly.
|
6
6
|
class AssemblyStatsPresenter < Rectify::Presenter
|
7
7
|
attribute :assembly, Decidim::Assembly
|
8
|
-
include IconHelper
|
8
|
+
include Decidim::IconHelper
|
9
9
|
|
10
|
-
# Public:
|
11
|
-
def
|
12
|
-
highlighted_stats =
|
13
|
-
highlighted_stats
|
10
|
+
# Public: returns a collection of stats (Hash) for the Assembly Home.
|
11
|
+
def collection
|
12
|
+
highlighted_stats = assembly_participants_stats
|
13
|
+
highlighted_stats.concat(assembly_followers_stats(priority: StatsRegistry::HIGH_PRIORITY))
|
14
|
+
highlighted_stats.concat(component_stats(priority: StatsRegistry::HIGH_PRIORITY))
|
15
|
+
highlighted_stats.concat(component_stats(priority: StatsRegistry::MEDIUM_PRIORITY))
|
14
16
|
highlighted_stats = highlighted_stats.reject(&:empty?)
|
15
|
-
highlighted_stats = highlighted_stats.reject { |
|
16
|
-
grouped_highlighted_stats = highlighted_stats.group_by
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
17
|
+
highlighted_stats = highlighted_stats.reject { |_stat_manifest, _stat_title, stat_number| stat_number.zero? }
|
18
|
+
grouped_highlighted_stats = highlighted_stats.group_by(&:first)
|
19
|
+
|
20
|
+
statistics = []
|
21
|
+
grouped_highlighted_stats.each do |_manifest_name, stats|
|
22
|
+
stats.each_with_index.each do |stat, _index|
|
23
|
+
stat.each_with_index.map do |_item, subindex|
|
24
|
+
next unless (subindex % 3).zero?
|
25
|
+
next if stat[subindex + 2].zero?
|
26
|
+
|
27
|
+
statistics << { stat_title: stat[subindex + 1], stat_number: stat[subindex + 2] }
|
26
28
|
end
|
27
29
|
end
|
28
|
-
|
30
|
+
end
|
31
|
+
statistics
|
29
32
|
end
|
30
33
|
|
31
34
|
private
|
32
35
|
|
36
|
+
def assembly_participants_stats
|
37
|
+
Decidim.stats.only([:participants_count]).with_context(assembly)
|
38
|
+
.map { |stat_title, stat_number| [assembly.manifest.name, stat_title, stat_number] }
|
39
|
+
end
|
40
|
+
|
33
41
|
def component_stats(conditions)
|
34
42
|
Decidim.component_manifests.map do |component_manifest|
|
35
|
-
component_manifest.stats.
|
43
|
+
component_manifest.stats.except([:proposals_accepted])
|
44
|
+
.filter(conditions)
|
45
|
+
.with_context(published_components)
|
46
|
+
.map { |stat_title, stat_number| [component_manifest.name, stat_title, stat_number] }.flatten
|
36
47
|
end
|
37
48
|
end
|
38
49
|
|
39
|
-
def
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
])
|
50
|
+
def assembly_followers_stats(conditions)
|
51
|
+
Decidim.stats.only([:followers_count])
|
52
|
+
.filter(conditions)
|
53
|
+
.with_context(assembly)
|
54
|
+
.map { |stat_title, stat_number| [assembly.manifest.name, stat_title, stat_number] }
|
45
55
|
end
|
46
56
|
|
47
57
|
def published_components
|
@@ -22,6 +22,7 @@ module Decidim
|
|
22
22
|
decidim_organization_id: assembly.decidim_organization_id,
|
23
23
|
title: assembly.title,
|
24
24
|
subtitle: assembly.subtitle,
|
25
|
+
weight: assembly.weight,
|
25
26
|
short_description: assembly.short_description,
|
26
27
|
description: assembly.description,
|
27
28
|
remote_hero_image_url: Decidim::Assemblies::AssemblyPresenter.new(assembly).hero_image_url,
|
@@ -65,7 +65,7 @@
|
|
65
65
|
<% end %>
|
66
66
|
</td>
|
67
67
|
<td>
|
68
|
-
<%= l(assembly.
|
68
|
+
<%= l(assembly.created_at, format: :short) %>
|
69
69
|
</td>
|
70
70
|
<td class="table-list__state">
|
71
71
|
<% if assembly.private_space? %>
|
@@ -84,14 +84,20 @@
|
|
84
84
|
<td class="table-list__actions">
|
85
85
|
<% if allowed_to? :create, :assembly, assembly: assembly %>
|
86
86
|
<%= icon_link_to "data-transfer-download", assembly_export_path(assembly), t("actions.export", scope: "decidim.admin"), method: :post, class: "action-icon--export" %>
|
87
|
+
<% else %>
|
88
|
+
<span class="action-space icon"></span>
|
87
89
|
<% end %>
|
88
90
|
|
89
91
|
<% if allowed_to? :create, :assembly, assembly: assembly %>
|
90
92
|
<%= icon_link_to "clipboard", new_assembly_copy_path(assembly), t("actions.duplicate", scope: "decidim.admin"), class: "action-icon--copy" %>
|
93
|
+
<% else %>
|
94
|
+
<span class="action-space icon"></span>
|
91
95
|
<% end %>
|
92
96
|
|
93
97
|
<% if allowed_to? :update, :assembly, assembly: assembly %>
|
94
98
|
<%= icon_link_to "pencil", edit_assembly_path(assembly), t("actions.configure", scope: "decidim.admin"), class: "action-icon--new" %>
|
99
|
+
<% else %>
|
100
|
+
<span class="action-space icon"></span>
|
95
101
|
<% end %>
|
96
102
|
|
97
103
|
<% if assembly.children.count.positive? || allowed_to?(:create, :assembly) %>
|
@@ -99,10 +105,14 @@
|
|
99
105
|
url_for(query_params_with(parent_id_eq: assembly.id)),
|
100
106
|
t("decidim.admin.titles.assemblies"),
|
101
107
|
class: "action-icon--dial #{'highlighted' if assembly.children.count.positive?}" %>
|
108
|
+
<% else %>
|
109
|
+
<span class="action-space icon"></span>
|
102
110
|
<% end %>
|
103
111
|
|
104
112
|
<% if allowed_to? :preview, :assembly, assembly: assembly %>
|
105
113
|
<%= icon_link_to "eye", decidim_assemblies.assembly_path(assembly), t("actions.preview", scope: "decidim.admin"), class: "action-icon--preview" %>
|
114
|
+
<% else %>
|
115
|
+
<span class="action-space icon"></span>
|
106
116
|
<% end %>
|
107
117
|
</td>
|
108
118
|
</tr>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<h2 class="card-title">
|
4
4
|
<%= t "decidim.admin.titles.assemblies_types" %>
|
5
5
|
<%= link_to t("actions.new_assembly_type", scope: "decidim.admin"),
|
6
|
-
[
|
6
|
+
[:new, :assemblies_type],
|
7
7
|
class: "button tiny button--title" if allowed_to? :create, :assembly_type %>
|
8
8
|
</h2>
|
9
9
|
</div>
|
@@ -1,23 +1,5 @@
|
|
1
|
-
<% content_for :
|
2
|
-
|
3
|
-
<ul>
|
4
|
-
<% if allowed_to?(:read, :assembly_list) %>
|
5
|
-
<li <% if is_active_link?(decidim_admin_assemblies.assemblies_path) %> class="is-active" <% end %>>
|
6
|
-
<%= aria_selected_link_to I18n.t("menu.assemblies", scope: "decidim.admin"), decidim_admin_assemblies.assemblies_path %>
|
7
|
-
</li>
|
8
|
-
<% end %>
|
9
|
-
<% if allowed_to?(:manage, :assemblies_type) %>
|
10
|
-
<li <% if is_active_link?(decidim_admin_assemblies.assemblies_types_path) %> class="is-active" <% end %>>
|
11
|
-
<%= aria_selected_link_to I18n.t("menu.assemblies_types", scope: "decidim.admin"), decidim_admin_assemblies.assemblies_types_path %>
|
12
|
-
</li>
|
13
|
-
<% end %>
|
14
|
-
<% if allowed_to?(:read, :assemblies_setting) %>
|
15
|
-
<li <% if is_active_link?(decidim_admin_assemblies.edit_assemblies_settings_path) %> class="is-active" <% end %>>
|
16
|
-
<%= aria_selected_link_to I18n.t("menu.assemblies_settings", scope: "decidim.admin"), decidim_admin_assemblies.edit_assemblies_settings_path %>
|
17
|
-
</li>
|
18
|
-
<% end %>
|
19
|
-
</ul>
|
20
|
-
</div>
|
1
|
+
<% content_for :sidebar_menu_nav do %>
|
2
|
+
<%= admin_assemblies_menu.render %>
|
21
3
|
<% end %>
|
22
4
|
|
23
5
|
<%= render "layouts/decidim/admin/application" do %>
|
@@ -13,7 +13,7 @@
|
|
13
13
|
<ul id="components-list">
|
14
14
|
<% current_participatory_space.components.each do |component| %>
|
15
15
|
<% if component.manifest.admin_engine && user_role_config.component_is_accessible?(component.manifest_name) %>
|
16
|
-
<li <% if is_active_link?(manage_component_path(component)) || is_active_link?(decidim_admin_assemblies.edit_component_path(current_participatory_space, component)) || is_active_link?(decidim_admin_assemblies.edit_component_permissions_path(current_participatory_space, component)) %> class="is-active" <% end %>>
|
16
|
+
<li <% if is_active_link?(manage_component_path(component)) || is_active_link?(decidim_admin_assemblies.edit_component_path(current_participatory_space, component)) || is_active_link?(decidim_admin_assemblies.edit_component_permissions_path(current_participatory_space, component)) || participatory_space_active_link?(component) %> class="is-active" <% end %>>
|
17
17
|
<%= link_to manage_component_path(component) do %>
|
18
18
|
<%= translated_attribute component.name %>
|
19
19
|
<% if component.primary_stat.present? %>
|
@@ -68,6 +68,7 @@
|
|
68
68
|
<%= aria_selected_link_to t("moderations", scope: "decidim.admin.menu.assemblies_submenu"), decidim_admin_assemblies.moderations_path(current_participatory_space) %>
|
69
69
|
</li>
|
70
70
|
<% end %>
|
71
|
+
<%= Decidim::Admin.view_hooks.render(:admin_secondary_nav, deep_dup) %>
|
71
72
|
</ul>
|
72
73
|
</div>
|
73
74
|
<% end %>
|