decidim-assemblies 0.10.1 → 0.11.0.pre1
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/README.md +1 -1
- data/app/assets/config/decidim_assemblies_manifest.js +1 -0
- data/app/assets/javascripts/decidim/assemblies/admin/assemblies.js.es6 +57 -4
- data/app/assets/javascripts/decidim/assemblies/assemblies.js.es6 +18 -0
- data/app/commands/decidim/assemblies/admin/copy_assembly.rb +9 -9
- data/app/commands/decidim/assemblies/admin/create_assembly.rb +33 -1
- data/app/commands/decidim/assemblies/admin/create_assembly_admin.rb +2 -2
- data/app/commands/decidim/assemblies/admin/update_assembly.rb +31 -1
- data/app/constraints/decidim/assemblies/{current_feature.rb → current_component.rb} +7 -7
- data/app/controllers/decidim/assemblies/admin/assemblies_controller.rb +17 -6
- data/app/controllers/decidim/assemblies/admin/{feature_permissions_controller.rb → component_permissions_controller.rb} +2 -2
- data/app/controllers/decidim/assemblies/admin/{features_controller.rb → components_controller.rb} +2 -2
- data/app/controllers/decidim/assemblies/admin/participatory_space_private_users_controller.rb +26 -0
- data/app/controllers/decidim/assemblies/assemblies_controller.rb +10 -4
- data/app/controllers/decidim/assemblies/assembly_widgets_controller.rb +1 -1
- data/app/forms/decidim/assemblies/admin/assembly_copy_form.rb +1 -1
- data/app/forms/decidim/assemblies/admin/assembly_form.rb +63 -2
- data/app/helpers/decidim/assemblies/admin/assemblies_helper.rb +20 -0
- data/app/helpers/decidim/assemblies/assemblies_helper.rb +51 -0
- data/app/models/decidim/assemblies/abilities/admin/admin_ability.rb +1 -0
- data/app/models/decidim/assemblies/abilities/admin/assembly_admin_ability.rb +3 -3
- data/app/models/decidim/assemblies/abilities/admin/assembly_moderator_ability.rb +1 -1
- data/app/models/decidim/assembly.rb +102 -2
- data/app/presenters/decidim/assemblies/admin_log/assembly_presenter.rb +20 -1
- data/app/presenters/decidim/assemblies/assembly_stats_presenter.rb +9 -9
- data/app/presenters/decidim/log/value_types/assembly_presenter.rb +28 -0
- data/app/queries/decidim/assemblies/organization_prioritized_assemblies.rb +3 -2
- data/app/queries/decidim/assemblies/organization_published_assemblies.rb +3 -1
- data/app/queries/decidim/assemblies/visible_assemblies.rb +20 -0
- data/app/views/decidim/assemblies/_assembly.html.erb +1 -1
- data/app/views/decidim/assemblies/admin/assemblies/_form.html.erb +76 -1
- data/app/views/decidim/assemblies/admin/assemblies/edit.html.erb +3 -4
- data/app/views/decidim/assemblies/admin/assemblies/index.html.erb +20 -4
- data/app/views/decidim/assemblies/admin/assemblies/new.html.erb +2 -2
- data/app/views/decidim/assemblies/admin/assembly_copies/_form.html.erb +1 -1
- data/app/views/decidim/assemblies/admin/assembly_copies/new.html.erb +1 -1
- data/app/views/decidim/assemblies/admin/assembly_user_roles/edit.html.erb +1 -1
- data/app/views/decidim/assemblies/admin/assembly_user_roles/index.html.erb +1 -1
- data/app/views/decidim/assemblies/admin/assembly_user_roles/new.html.erb +1 -1
- data/app/views/decidim/assemblies/assemblies/_nav_breadcumb.html.erb +11 -0
- data/app/views/decidim/assemblies/assemblies/_promoted_assembly.html.erb +1 -1
- data/app/views/decidim/assemblies/assemblies/_statistics.html.erb +1 -1
- data/app/views/decidim/assemblies/assemblies/index.html.erb +1 -1
- data/app/views/decidim/assemblies/assemblies/show.html.erb +129 -7
- data/app/views/decidim/assemblies/assembly_widgets/show.html.erb +1 -1
- data/app/views/layouts/decidim/_assembly_header.html.erb +13 -13
- data/app/views/layouts/decidim/admin/assemblies.html.erb +1 -1
- data/app/views/layouts/decidim/admin/assembly.html.erb +15 -10
- data/app/views/layouts/decidim/assembly.html.erb +2 -2
- data/config/locales/ca.yml +71 -1
- data/config/locales/en.yml +71 -1
- data/config/locales/es.yml +71 -1
- data/config/locales/eu.yml +71 -1
- data/config/locales/fi.yml +71 -1
- data/config/locales/fr.yml +88 -18
- data/config/locales/gl.yml +71 -1
- data/config/locales/it.yml +71 -1
- data/config/locales/nl.yml +105 -35
- data/config/locales/pl.yml +71 -1
- data/config/locales/pt-BR.yml +71 -1
- data/config/locales/pt.yml +71 -1
- data/config/locales/ru.yml +0 -1
- data/config/locales/sv.yml +71 -1
- data/config/locales/uk.yml +0 -1
- data/db/migrate/20180124083729_add_private_to_assemblies.rb +7 -0
- data/db/migrate/20180226103942_add_parent_child_relation_to_assemblies.rb +22 -0
- data/db/migrate/20180302121116_add_fields_to_assemblies.rb +25 -0
- data/lib/decidim/assemblies/admin_engine.rb +11 -5
- data/lib/decidim/assemblies/engine.rb +7 -7
- data/lib/decidim/assemblies/participatory_space.rb +89 -34
- data/lib/decidim/assemblies/test/factories.rb +24 -0
- data/lib/decidim/assemblies/version.rb +1 -1
- metadata +23 -13
@@ -23,8 +23,8 @@ module Decidim
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def define_assembly_abilities
|
26
|
-
can :manage,
|
27
|
-
can_manage_assembly?(
|
26
|
+
can :manage, Component do |component|
|
27
|
+
can_manage_assembly?(component.participatory_space)
|
28
28
|
end
|
29
29
|
|
30
30
|
can :manage, Category do |category|
|
@@ -48,7 +48,7 @@ module Decidim
|
|
48
48
|
end
|
49
49
|
|
50
50
|
can [:unreport, :hide], Reportable do |reportable|
|
51
|
-
can_manage_assembly?(reportable.
|
51
|
+
can_manage_assembly?(reportable.component.participatory_space)
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -3,7 +3,22 @@
|
|
3
3
|
module Decidim
|
4
4
|
# Interaction between a user and an organization can be done via an Assembly.
|
5
5
|
# It's a unit of action from the Organization point of view that groups
|
6
|
-
# several
|
6
|
+
# several components (proposals, debates...) that can be enabled or disabled.
|
7
|
+
#
|
8
|
+
# An assembly can have children. This is implemented using a PostgreSQL extension: LTREE
|
9
|
+
# The LTREE extension allows us to save, query on and manipulate trees (hierarchical data
|
10
|
+
# structures). It uses the path enumeration algorithm, which calls for each node in the
|
11
|
+
# tree to record the path from the root you would have to follow to reach that node.
|
12
|
+
#
|
13
|
+
# We use the `parents_path` column to save the path and query the tree. Example:
|
14
|
+
#
|
15
|
+
# A (root assembly) parent = null, parents_path = A
|
16
|
+
# B (root assembly) parent = null, parents_path = B
|
17
|
+
# |- C (child assembly of B, descendant of B) parent = B, parents_path = B.C
|
18
|
+
# |- D (child assembly of C, descendant of B,C) parent = C, parents_path = B.C.D
|
19
|
+
# |- E (child assembly of C, descendant of B,C) parent = C, parents_path = B.C.E
|
20
|
+
# |- F (child assembly of E, descendant of B,C,E) parent = E, parents_path = B.C.E.F
|
21
|
+
#
|
7
22
|
class Assembly < ApplicationRecord
|
8
23
|
include Decidim::HasAttachments
|
9
24
|
include Decidim::HasAttachmentCollections
|
@@ -14,6 +29,12 @@ module Decidim
|
|
14
29
|
include Decidim::HasReference
|
15
30
|
include Decidim::Traceable
|
16
31
|
include Decidim::Loggable
|
32
|
+
include Decidim::ParticipatorySpaceResourceable
|
33
|
+
include Decidim::HasPrivateUsers
|
34
|
+
|
35
|
+
SOCIAL_HANDLERS = [:twitter, :facebook, :instagram, :youtube, :github].freeze
|
36
|
+
ASSEMBLY_TYPES = %w(government executive consultative_advisory participatory working_group commission others).freeze
|
37
|
+
CREATED_BY = %w(city_council public others).freeze
|
17
38
|
|
18
39
|
belongs_to :organization,
|
19
40
|
foreign_key: "decidim_organization_id",
|
@@ -28,7 +49,10 @@ module Decidim
|
|
28
49
|
dependent: :destroy,
|
29
50
|
as: :participatory_space
|
30
51
|
|
31
|
-
has_many :
|
52
|
+
has_many :components, as: :participatory_space, dependent: :destroy
|
53
|
+
|
54
|
+
has_many :children, foreign_key: "parent_id", class_name: "Decidim::Assembly", inverse_of: :parent, dependent: :destroy
|
55
|
+
belongs_to :parent, foreign_key: "parent_id", class_name: "Decidim::Assembly", inverse_of: :children, optional: true, counter_cache: :children_count
|
32
56
|
|
33
57
|
validates :slug, uniqueness: { scope: :organization }
|
34
58
|
validates :slug, presence: true, format: { with: Decidim::Assembly.slug_format }
|
@@ -36,6 +60,15 @@ module Decidim
|
|
36
60
|
mount_uploader :hero_image, Decidim::HeroImageUploader
|
37
61
|
mount_uploader :banner_image, Decidim::BannerImageUploader
|
38
62
|
|
63
|
+
scope :visible_for, lambda { |user|
|
64
|
+
joins("LEFT JOIN decidim_participatory_space_private_users ON
|
65
|
+
decidim_participatory_space_private_users.privatable_to_id = #{table_name}.id")
|
66
|
+
.where("(private_space = ? and decidim_participatory_space_private_users.decidim_user_id = ?)
|
67
|
+
or private_space = ? or (private_space = ? and is_transparent = ?)", true, user, false, true, true)
|
68
|
+
}
|
69
|
+
|
70
|
+
after_create :set_parents_path
|
71
|
+
after_update :set_parents_path, :update_children_paths, if: :saved_change_to_parent_id?
|
39
72
|
# Scope to return only the promoted assemblies.
|
40
73
|
#
|
41
74
|
# Returns an ActiveRecord::Relation.
|
@@ -54,5 +87,72 @@ module Decidim
|
|
54
87
|
def to_param
|
55
88
|
slug
|
56
89
|
end
|
90
|
+
|
91
|
+
def self_and_ancestors
|
92
|
+
self.class.where("#{self.class.table_name}.parents_path @> ?", parents_path).order("string_to_array(#{self.class.table_name}.parents_path::text, '.')")
|
93
|
+
end
|
94
|
+
|
95
|
+
def ancestors
|
96
|
+
self_and_ancestors.where.not(id: id)
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.private_assemblies
|
100
|
+
where(private_space: true)
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.public_spaces
|
104
|
+
super.where(private_space: false).or(Decidim::Assembly.where(private_space: true).where(is_transparent: true))
|
105
|
+
end
|
106
|
+
|
107
|
+
private
|
108
|
+
|
109
|
+
# When an assembly changes their parent, we need to update the parents_path attribute
|
110
|
+
# E.g. If we have the following tree:
|
111
|
+
#
|
112
|
+
# A (root assembly) parent = null, parents_path = A
|
113
|
+
# B (root assembly) parent = null, parents_path = B
|
114
|
+
# |- C (child assembly of B, descendant of B) parent = B, parents_path = B.C
|
115
|
+
# |- D (child assembly of C, descendant of B,C) parent = C, parents_path = B.C.D
|
116
|
+
#
|
117
|
+
# And we change the parent of C to A, this function updates their parents_path attribute:
|
118
|
+
#
|
119
|
+
# |- C (child assembly of *A*, descendant of *A*) parent = *A*, parents_path = *A*.C
|
120
|
+
#
|
121
|
+
# Note: updating parents_path in their descendants is done in the `update_children_paths` function.
|
122
|
+
#
|
123
|
+
# rubocop:disable Rails/SkipsModelValidations
|
124
|
+
def set_parents_path
|
125
|
+
update_column(:parents_path, [parent&.parents_path, id].select(&:present?).join("."))
|
126
|
+
end
|
127
|
+
# rubocop:enable Rails/SkipsModelValidations
|
128
|
+
|
129
|
+
# When an assembly changes their parent, we need to update the parents_path attribute on their descendants
|
130
|
+
# E.g. If we have the following tree:
|
131
|
+
#
|
132
|
+
# A (root assembly) parent = null, parents_path = A
|
133
|
+
# B (root assembly) parent = null, parents_path = B
|
134
|
+
# |- C (child assembly of B, descendant of B) parent = B, parents_path = B.C
|
135
|
+
# |- D (child assembly of C, descendant of B,C) parent = C, parents_path = B.C.D
|
136
|
+
# |- E (child assembly of C, descendant of B,C) parent = C, parents_path = B.C.E
|
137
|
+
# |- F (child assembly of E, descendant of B,C,E) parent = E, parents_path = B.C.E.F
|
138
|
+
#
|
139
|
+
# And we change the parent of C to A, this function updates the parents_path attribute in their
|
140
|
+
# descendants assemblies (D, E and F):
|
141
|
+
#
|
142
|
+
# |- D (child assembly of C, descendant of *A*,C) parent = C, parents_path = *A*.C.D
|
143
|
+
# |- E (child assembly of C, descendant of *A*,C) parent = C, parents_path = *A*.C.E
|
144
|
+
# |- F (child assembly of E, descendant of *A*,C,E) parent = E, parents_path = *A*.C.E.F
|
145
|
+
#
|
146
|
+
# Note: updating parents_path of C (the assembly in which we have changed the parent) is done in the `set_parents_path` function.
|
147
|
+
#
|
148
|
+
# rubocop:disable Rails/SkipsModelValidations
|
149
|
+
def update_children_paths
|
150
|
+
self.class.where(
|
151
|
+
["#{self.class.table_name}.parents_path <@ :old_path AND #{self.class.table_name}.id != :id", old_path: parents_path_before_last_save, id: id]
|
152
|
+
).update_all(
|
153
|
+
["parents_path = :new_path || subpath(parents_path, nlevel(:old_path))", new_path: parents_path, old_path: parents_path_before_last_save]
|
154
|
+
)
|
155
|
+
end
|
156
|
+
# rubocop:enable Rails/SkipsModelValidations
|
57
157
|
end
|
58
158
|
end
|
@@ -35,7 +35,26 @@ module Decidim
|
|
35
35
|
slug: :default,
|
36
36
|
subtitle: :i18n,
|
37
37
|
target: :i18n,
|
38
|
-
title: :i18n
|
38
|
+
title: :i18n,
|
39
|
+
purpose_of_action: :i18n,
|
40
|
+
assembly_type: :string,
|
41
|
+
assembly_type_other: :i8n,
|
42
|
+
creation_date: :date,
|
43
|
+
created_by: :string,
|
44
|
+
created_by_other: :i18n,
|
45
|
+
duration: :date,
|
46
|
+
included_at: :date,
|
47
|
+
closing_date: :date,
|
48
|
+
closing_date_reason: :i18n,
|
49
|
+
internal_organisation: :i18n,
|
50
|
+
is_transparent: :boolean,
|
51
|
+
special_features: :i18n,
|
52
|
+
twitter_handler: :string,
|
53
|
+
facebook_handler: :string,
|
54
|
+
instagram_handler: :string,
|
55
|
+
youtube_handler: :string,
|
56
|
+
github_handler: :string,
|
57
|
+
parent_id: :assembly
|
39
58
|
}
|
40
59
|
end
|
41
60
|
|
@@ -9,8 +9,8 @@ module Decidim
|
|
9
9
|
|
10
10
|
# Public: Render a collection of primary stats.
|
11
11
|
def highlighted
|
12
|
-
highlighted_stats =
|
13
|
-
highlighted_stats = highlighted_stats.concat(
|
12
|
+
highlighted_stats = component_stats(priority: StatsRegistry::HIGH_PRIORITY)
|
13
|
+
highlighted_stats = highlighted_stats.concat(component_stats(priority: StatsRegistry::MEDIUM_PRIORITY))
|
14
14
|
highlighted_stats = highlighted_stats.reject(&:empty?)
|
15
15
|
highlighted_stats = highlighted_stats.reject { |_manifest, _name, data| data.zero? }
|
16
16
|
grouped_highlighted_stats = highlighted_stats.group_by { |stats| stats.first.name }
|
@@ -30,22 +30,22 @@ module Decidim
|
|
30
30
|
|
31
31
|
private
|
32
32
|
|
33
|
-
def
|
34
|
-
Decidim.
|
35
|
-
|
33
|
+
def component_stats(conditions)
|
34
|
+
Decidim.component_manifests.map do |component_manifest|
|
35
|
+
component_manifest.stats.filter(conditions).with_context(published_components).map { |name, data| [component_manifest, name, data] }.flatten
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
def render_stats_data(
|
39
|
+
def render_stats_data(component_manifest, name, data, index)
|
40
40
|
safe_join([
|
41
|
-
index.zero? ? manifest_icon(
|
41
|
+
index.zero? ? manifest_icon(component_manifest) : " / ".html_safe,
|
42
42
|
content_tag(:span, "#{number_with_delimiter(data)} " + I18n.t(name, scope: "decidim.assemblies.statistics"),
|
43
43
|
class: "#{name} process_stats-text")
|
44
44
|
])
|
45
45
|
end
|
46
46
|
|
47
|
-
def
|
48
|
-
@
|
47
|
+
def published_components
|
48
|
+
@published_components ||= Component.where(participatory_space: assembly).published
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Log
|
5
|
+
module ValueTypes
|
6
|
+
# This class presents the given value as a Decidim::Assembly. Check
|
7
|
+
# the `DefaultPresenter` for more info on how value
|
8
|
+
# presenters work.
|
9
|
+
class AssemblyPresenter < DefaultPresenter
|
10
|
+
# Public: Presents the value as a Decidim::Assembly. If the assembly
|
11
|
+
# can be found, it shows its title. Otherwise it shows its ID.
|
12
|
+
#
|
13
|
+
# Returns an HTML-safe String.
|
14
|
+
def present
|
15
|
+
return unless value
|
16
|
+
return h.translated_attribute(assembly.title) if assembly
|
17
|
+
I18n.t("not_found", id: value, scope: "decidim.log.value_types.assembly_presenter")
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def assembly
|
23
|
+
@assembly ||= Decidim::Assembly.find_by(id: value)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -5,13 +5,14 @@ module Decidim
|
|
5
5
|
# This query class filters public assemblies given an organization in a
|
6
6
|
# meaningful prioritized order.
|
7
7
|
class OrganizationPrioritizedAssemblies < Rectify::Query
|
8
|
-
def initialize(organization)
|
8
|
+
def initialize(organization, user = nil)
|
9
9
|
@organization = organization
|
10
|
+
@user = user
|
10
11
|
end
|
11
12
|
|
12
13
|
def query
|
13
14
|
Rectify::Query.merge(
|
14
|
-
OrganizationPublishedAssemblies.new(@organization),
|
15
|
+
OrganizationPublishedAssemblies.new(@organization, @user),
|
15
16
|
PrioritizedAssemblies.new
|
16
17
|
).query
|
17
18
|
end
|
@@ -4,13 +4,15 @@ module Decidim
|
|
4
4
|
module Assemblies
|
5
5
|
# This query class filters published assemblies given an organization.
|
6
6
|
class OrganizationPublishedAssemblies < Rectify::Query
|
7
|
-
def initialize(organization)
|
7
|
+
def initialize(organization, user = nil)
|
8
8
|
@organization = organization
|
9
|
+
@user = user
|
9
10
|
end
|
10
11
|
|
11
12
|
def query
|
12
13
|
Rectify::Query.merge(
|
13
14
|
OrganizationAssemblies.new(@organization),
|
15
|
+
VisibleAssemblies.new(@user),
|
14
16
|
PublishedAssemblies.new
|
15
17
|
).query
|
16
18
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Assemblies
|
5
|
+
# This query class filters assemblies given a current_user.
|
6
|
+
class VisibleAssemblies < Rectify::Query
|
7
|
+
def initialize(user)
|
8
|
+
@user = user
|
9
|
+
end
|
10
|
+
|
11
|
+
def query
|
12
|
+
if @user
|
13
|
+
Decidim::Assembly.visible_for(@user.id)
|
14
|
+
else
|
15
|
+
Decidim::Assembly.public_spaces
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -8,7 +8,7 @@
|
|
8
8
|
<%= link_to assembly_path(assembly), class: "card__link" do %>
|
9
9
|
<h4 class="card__title"><%= translated_attribute assembly.title %></h4>
|
10
10
|
<% end %>
|
11
|
-
<p class="card__desc"><%= decidim_sanitize html_truncate(translated_attribute(assembly.short_description), length: 630, separator:
|
11
|
+
<p class="card__desc"><%= decidim_sanitize html_truncate(translated_attribute(assembly.short_description), length: 630, separator: "...") %></p>
|
12
12
|
</div>
|
13
13
|
<div class="card__footer">
|
14
14
|
<div class="card__support">
|
@@ -1,5 +1,7 @@
|
|
1
1
|
<%= javascript_include_tag "decidim/slug_form" %>
|
2
2
|
|
3
|
+
<%= form.hidden_field :parent_id, value: @form.parent_id %>
|
4
|
+
|
3
5
|
<div class="card">
|
4
6
|
<div class="card-divider">
|
5
7
|
<h2 class="card-title"><%= t "assemblies.form.title", scope: "decidim.admin" %></h2>
|
@@ -76,7 +78,7 @@
|
|
76
78
|
</div>
|
77
79
|
|
78
80
|
<div class="row column">
|
79
|
-
<%= form.select :area_id, option_groups_from_collection_for_select(current_organization.area_types, :areas, :translated_name, :id, :translated_name, current_assembly.try(:decidim_area_id)), include_blank: t(".select_an_area")
|
81
|
+
<%= form.select :area_id, option_groups_from_collection_for_select(current_organization.area_types, :areas, :translated_name, :id, :translated_name, current_assembly.try(:decidim_area_id)), include_blank: t(".select_an_area") %>
|
80
82
|
</div>
|
81
83
|
|
82
84
|
<div class="row column">
|
@@ -90,6 +92,79 @@
|
|
90
92
|
<div class="row column">
|
91
93
|
<%= form.check_box :show_statistics %>
|
92
94
|
</div>
|
95
|
+
|
96
|
+
<div class="row column">
|
97
|
+
<% if @form.processes_for_select %>
|
98
|
+
<%= form.select :participatory_processes_ids,
|
99
|
+
options_for_select(@form.processes_for_select, selected: processes_selected ),
|
100
|
+
{ include_blank: false },
|
101
|
+
{ multiple: true, class: "chosen-select" } %>
|
102
|
+
<% end %>
|
103
|
+
</div>
|
104
|
+
|
105
|
+
<div class="row column">
|
106
|
+
<%= form.translated :editor, :purpose_of_action %>
|
107
|
+
</div>
|
108
|
+
|
109
|
+
<div class="row column">
|
110
|
+
<%= form.translated :editor, :composition %>
|
111
|
+
</div>
|
112
|
+
|
113
|
+
<div class="row column">
|
114
|
+
<%= form.select :assembly_type, @form.assembly_types_for_select, { include_blank: t(".select_an_assembly_type") }, { multiple: false } %>
|
115
|
+
</div>
|
116
|
+
|
117
|
+
<div class="row column" id="assembly_type_other">
|
118
|
+
<%= form.translated :text_field, :assembly_type_other %>
|
119
|
+
</div>
|
120
|
+
|
121
|
+
<div class="row column">
|
122
|
+
<%= form.date_field :creation_date %>
|
123
|
+
</div>
|
124
|
+
|
125
|
+
<div class="row column">
|
126
|
+
<%= form.select :created_by, @form.created_by_for_select, { include_blank: t(".select_a_created_by") }, { multiple: false } %>
|
127
|
+
</div>
|
128
|
+
|
129
|
+
<div class="row column" id="created_by_other">
|
130
|
+
<%= form.translated :text_field, :created_by_other %>
|
131
|
+
</div>
|
132
|
+
|
133
|
+
<div class="row column">
|
134
|
+
<%= form.date_field :duration %>
|
135
|
+
</div>
|
136
|
+
|
137
|
+
<div class="row column">
|
138
|
+
<%= form.date_field :included_at %>
|
139
|
+
</div>
|
140
|
+
|
141
|
+
<div class="row column" id="closing_date_div">
|
142
|
+
<%= form.date_field :closing_date %>
|
143
|
+
</div>
|
144
|
+
|
145
|
+
<div class="row column" id="closing_date_reason_div">
|
146
|
+
<%= form.translated :editor, :closing_date_reason %>
|
147
|
+
</div>
|
148
|
+
|
149
|
+
<div class="row column">
|
150
|
+
<%= form.translated :editor, :internal_organisation %>
|
151
|
+
</div>
|
152
|
+
|
153
|
+
<div class="row column" id="private_space">
|
154
|
+
<%= form.check_box :private_space %>
|
155
|
+
</div>
|
156
|
+
|
157
|
+
<div class="row column" id="is_transparent">
|
158
|
+
<%= form.check_box :is_transparent %>
|
159
|
+
</div>
|
160
|
+
|
161
|
+
<div class="row column" id="special_features">
|
162
|
+
<%= form.translated :editor, :special_features %>
|
163
|
+
</div>
|
164
|
+
|
165
|
+
<div class="columns xlarge-6">
|
166
|
+
<%= form.social_field :text_field, :social_handlers, Decidim::Assembly::SOCIAL_HANDLERS, label: t("social_handlers", scope: "decidim.assemblies.admin.assemblies.form") %>
|
167
|
+
</div>
|
93
168
|
</div>
|
94
169
|
</div>
|
95
170
|
|
@@ -1,7 +1,7 @@
|
|
1
|
-
<%= decidim_form_for(@form, html: { class: "form edit_assembly" }) do |f| %>
|
2
|
-
<%= render partial:
|
1
|
+
<%= decidim_form_for(@form, html: { class: "form edit_assembly assembly_form_admin" }) do |f| %>
|
2
|
+
<%= render partial: "form", object: f %>
|
3
3
|
<div class="button--double form-general-submit">
|
4
|
-
<%= f.submit t("assemblies.edit.update", scope: "decidim.admin"), class: "button"
|
4
|
+
<%= f.submit t("assemblies.edit.update", scope: "decidim.admin"), class: "button" %>
|
5
5
|
|
6
6
|
<% if can? :publish, current_assembly %>
|
7
7
|
<% if current_assembly.published? %>
|
@@ -16,4 +16,3 @@
|
|
16
16
|
<% end %>
|
17
17
|
</div>
|
18
18
|
<% end %>
|
19
|
-
|
@@ -1,7 +1,11 @@
|
|
1
1
|
<div class="card" id="assemblies">
|
2
2
|
<div class="card-divider">
|
3
3
|
<h2 class="card-title">
|
4
|
-
|
4
|
+
<% parent_assembly.self_and_ancestors.each do |assembly| %>
|
5
|
+
<%= link_to "#{translated_attribute(assembly.title)} > ", edit_assembly_path(assembly) %>
|
6
|
+
<% end if parent_assembly %>
|
7
|
+
<%= t "decidim.admin.titles.assemblies" %>
|
8
|
+
<%= link_to t("actions.new", scope: "decidim.admin", name: t("models.assembly.name", scope: "decidim.admin")), new_assembly_path(parent_id: parent_assembly&.id), class: "button tiny button--title" if can? :create, Decidim::Assembly %>
|
5
9
|
</h2>
|
6
10
|
</div>
|
7
11
|
<div class="card-section">
|
@@ -11,6 +15,7 @@
|
|
11
15
|
<tr>
|
12
16
|
<th><%= t("models.assembly.fields.title", scope: "decidim.admin") %></th>
|
13
17
|
<th><%= t("models.assembly.fields.created_at", scope: "decidim.admin") %></th>
|
18
|
+
<th><%= t("models.assembly.fields.private", scope: "decidim.admin") %></th>
|
14
19
|
<th class="table-list__actions"><%= t("models.assembly.fields.published", scope: "decidim.admin") %></th>
|
15
20
|
<th></th>
|
16
21
|
</tr>
|
@@ -20,7 +25,7 @@
|
|
20
25
|
<tr>
|
21
26
|
<td>
|
22
27
|
<% if assembly.promoted? %>
|
23
|
-
<span data-tooltip class="icon-state icon-highlight" aria-haspopup="true"
|
28
|
+
<span data-tooltip class="icon-state icon-highlight" aria-haspopup="true" data-disable-hover="false" title="<%= t("models.assembly.fields.promoted", scope: "decidim.admin") %>">
|
24
29
|
<%= icon "star" %>
|
25
30
|
</span>
|
26
31
|
<% end %>
|
@@ -37,11 +42,18 @@
|
|
37
42
|
<td>
|
38
43
|
<%= l assembly.created_at, format: :short %>
|
39
44
|
</td>
|
45
|
+
<td class="table-list__state">
|
46
|
+
<% if assembly.private_space? %>
|
47
|
+
<strong class="text-alert"><%= t("assemblies.index.private", scope: "decidim.admin") %></strong>
|
48
|
+
<% else %>
|
49
|
+
<strong class="text-success"><%= t("assemblies.index.public", scope: "decidim.admin") %></strong>
|
50
|
+
<% end %>
|
51
|
+
</td>
|
40
52
|
<td class="table-list__state">
|
41
53
|
<% if assembly.published? %>
|
42
|
-
<strong class="text-success"><%= t(
|
54
|
+
<strong class="text-success"><%= t("assemblies.index.published", scope: "decidim.admin") %></strong>
|
43
55
|
<% else %>
|
44
|
-
<strong class="text-alert"><%= t(
|
56
|
+
<strong class="text-alert"><%= t("assemblies.index.not_published", scope: "decidim.admin") %></strong>
|
45
57
|
<% end %>
|
46
58
|
</td>
|
47
59
|
<td class="table-list__actions">
|
@@ -53,6 +65,10 @@
|
|
53
65
|
<%= icon_link_to "pencil", edit_assembly_path(assembly), t("actions.configure", scope: "decidim.admin"), class: "action-icon--new" %>
|
54
66
|
<% end %>
|
55
67
|
|
68
|
+
<% if assembly.children_count > 0 || can?(:create, assembly) %>
|
69
|
+
<%= icon_link_to "dial", decidim_admin_assemblies.assemblies_path(parent_id: assembly.id), t("decidim.admin.titles.assemblies"), class: "action-icon--dial" %>
|
70
|
+
<% end %>
|
71
|
+
|
56
72
|
<% if can? :preview, assembly %>
|
57
73
|
<%= icon_link_to "eye", decidim_assemblies.assembly_path(assembly), t("actions.preview", scope: "decidim.admin"), class: "action-icon--preview" %>
|
58
74
|
<% end %>
|
@@ -2,8 +2,8 @@
|
|
2
2
|
<%= t "assemblies.new.title", scope: "decidim.admin" %>
|
3
3
|
</h2>
|
4
4
|
|
5
|
-
<%= decidim_form_for(@form, html: { class: "form new_assembly" }) do |f| %>
|
6
|
-
<%= render partial:
|
5
|
+
<%= decidim_form_for(@form, html: { class: "form new_assembly assembly_form_admin" }) do |f| %>
|
6
|
+
<%= render partial: "form", object: f %>
|
7
7
|
|
8
8
|
<div class="button--double form-general-submit">
|
9
9
|
<%= f.submit t("assemblies.new.create", scope: "decidim.admin") %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%= decidim_form_for(@form, url: assembly_copies_path(current_assembly), method: :post, html: { class: "form copy_assembly" }) do |f| %>
|
2
|
-
<%= render partial:
|
2
|
+
<%= render partial: "form", object: f, locals: { title: t("assembly_copies.new.title", scope: "decidim.admin"), select: t("assembly_copies.new.select", scope: "decidim.admin")} %>
|
3
3
|
|
4
4
|
<div class="button--double form-general-submit">
|
5
5
|
<%= f.submit t("assembly_copies.new.copy", scope: "decidim.admin") %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%= decidim_form_for(@form, url: assembly_user_role_path(@user_role.assembly, @user_role), html: { class: "form edit_assembly_user_roles" }) do |f| %>
|
2
|
-
<%= render partial:
|
2
|
+
<%= render partial: "form", object: f, locals: { title: t("assembly_user_roles.edit.title", scope: "decidim.admin") } %>
|
3
3
|
|
4
4
|
<div class="button--double form-general-submit">
|
5
5
|
<%= f.submit t("assembly_user_roles.edit.update", scope: "decidim.admin") %>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<h2 class="card-title">
|
4
4
|
<%= t("assembly_user_roles.index.assembly_admins_title", scope: "decidim.admin") %>
|
5
5
|
<% if can? :create, Decidim::AssemblyUserRole %>
|
6
|
-
<%= link_to t("actions.new", scope: "decidim.admin", name: t("models.assembly_user_role.name", scope: "decidim.admin")), new_assembly_user_role_path(current_assembly), class:
|
6
|
+
<%= link_to t("actions.new", scope: "decidim.admin", name: t("models.assembly_user_role.name", scope: "decidim.admin")), new_assembly_user_role_path(current_assembly), class: "button tiny button--title new" %>
|
7
7
|
<% end %>
|
8
8
|
</h2>
|
9
9
|
</div>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%= decidim_form_for(@form, html: { class: "form new_assembly_user_role" }) do |f| %>
|
2
|
-
<%= render partial:
|
2
|
+
<%= render partial: "form", object: f, locals: { title: t("assembly_user_roles.new.title", scope: "decidim.admin") } %>
|
3
3
|
|
4
4
|
<div class="button--double form-general-submit">
|
5
5
|
<%= f.submit t("assembly_user_roles.new.create", scope: "decidim.admin") %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<div class="lines-breadcrumb">
|
2
|
+
<% root = assemblies.shift %>
|
3
|
+
<%= link_to translated_attribute(root.title), assembly_path(root) %>
|
4
|
+
|
5
|
+
<% assemblies.each do |assembly| %>
|
6
|
+
<span class="breadcrumb--separator">></span>
|
7
|
+
<div>
|
8
|
+
<%= link_to translated_attribute(assembly.title), assembly_path(assembly) %>
|
9
|
+
</div>
|
10
|
+
<% end %>
|
11
|
+
</div>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<%= link_to assembly_path(promoted_assembly), class: "card__link" do %>
|
6
6
|
<h2 class="card__title"><%= translated_attribute promoted_assembly.title %></h2>
|
7
7
|
<% end %>
|
8
|
-
<%= decidim_sanitize html_truncate(translated_attribute(promoted_assembly.short_description), length: 630, separator:
|
8
|
+
<%= decidim_sanitize html_truncate(translated_attribute(promoted_assembly.short_description), length: 630, separator: "...") %>
|
9
9
|
<%= link_to assembly_path(promoted_assembly), class: "button secondary small hollow card__button" do %>
|
10
10
|
<%= t("assemblies.promoted_assembly.more_info", scope: "layouts.decidim") %>
|
11
11
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<section class="extended" id="assembly-statistics" class="statistics">
|
2
2
|
<div class="row column">
|
3
|
-
<h4 class="section-heading"><%= t("statistics.headline", scope: "decidim.assemblies"
|
3
|
+
<h4 class="section-heading"><%= t("statistics.headline", scope: "decidim.assemblies") %></h3>
|
4
4
|
</div>
|
5
5
|
<div class="row">
|
6
6
|
<div class="columns small-centered mediumlarge-12 large-12 process_stats">
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
<main class="wrapper">
|
4
4
|
<% if promoted_assemblies.any? %>
|
5
|
-
<section id
|
5
|
+
<section id="highlighted-assemblies" class="row section">
|
6
6
|
<h1 class="section-heading"><%= t("assemblies.index.promoted_assemblies", scope: "layouts.decidim") %></h1>
|
7
7
|
<%= render partial: "promoted_assembly", collection: promoted_assemblies, as: :promoted_assembly %>
|
8
8
|
</section>
|