decidim-proposals 0.29.1 → 0.29.2
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/proposals/highlighted_proposals_for_component/show.erb +11 -11
- data/app/cells/decidim/proposals/proposal_g_cell.rb +21 -0
- data/app/cells/decidim/proposals/proposal_l_cell.rb +17 -18
- data/app/controllers/concerns/decidim/proposals/admin/filterable.rb +1 -1
- data/app/controllers/decidim/proposals/proposals_controller.rb +4 -8
- data/app/forms/decidim/proposals/admin/proposal_answer_form.rb +3 -3
- data/app/forms/decidim/proposals/admin/proposal_form.rb +1 -1
- data/app/forms/decidim/proposals/admin/proposals_import_form.rb +6 -9
- data/app/forms/decidim/proposals/admin/valuation_assignment_form.rb +4 -1
- data/app/helpers/decidim/proposals/admin/proposal_bulk_actions_helper.rb +1 -1
- data/app/helpers/decidim/proposals/map_helper.rb +1 -1
- data/app/models/decidim/proposals/proposal.rb +2 -6
- data/app/packs/stylesheets/decidim/proposals/proposals.scss +1 -5
- data/app/permissions/decidim/proposals/permissions.rb +4 -3
- data/app/services/decidim/proposals/collaborative_draft_diff_renderer.rb +22 -0
- data/app/services/decidim/proposals/diff_renderer.rb +2 -0
- data/app/services/decidim/proposals/proposal_builder.rb +1 -1
- data/app/views/decidim/proposals/admin/proposals/index.html.erb +2 -2
- data/app/views/decidim/proposals/admin/proposals_imports/new.html.erb +2 -2
- data/app/views/decidim/proposals/proposals/index.html.erb +1 -1
- data/app/views/decidim/proposals/proposals/index.js.erb +12 -0
- data/app/views/decidim/proposals/proposals/show.html.erb +1 -1
- data/config/locales/ar.yml +1 -3
- data/config/locales/bg.yml +5 -7
- data/config/locales/bn-BD.yml +1 -0
- data/config/locales/bs-BA.yml +100 -0
- data/config/locales/ca.yml +5 -5
- data/config/locales/cs.yml +19 -5
- data/config/locales/de.yml +7 -7
- data/config/locales/el.yml +3 -5
- data/config/locales/es-MX.yml +8 -8
- data/config/locales/es-PY.yml +3 -3
- data/config/locales/es.yml +8 -8
- data/config/locales/eu.yml +93 -86
- data/config/locales/fi-plain.yml +7 -7
- data/config/locales/fi.yml +24 -24
- data/config/locales/fr-CA.yml +4 -6
- data/config/locales/fr.yml +3 -5
- data/config/locales/gl.yml +3 -6
- data/config/locales/he-IL.yml +7 -0
- data/config/locales/hu.yml +2 -3
- data/config/locales/id-ID.yml +9 -4
- data/config/locales/is-IS.yml +0 -7
- data/config/locales/it.yml +7 -8
- data/config/locales/ja.yml +3 -5
- data/config/locales/lt.yml +1 -3
- data/config/locales/lv.yml +5 -2
- data/config/locales/nl.yml +7 -5
- data/config/locales/no.yml +1 -4
- data/config/locales/pl.yml +2 -4
- data/config/locales/pt-BR.yml +3 -5
- data/config/locales/pt.yml +2 -4
- data/config/locales/ro-RO.yml +7 -9
- data/config/locales/ru.yml +0 -7
- data/config/locales/sk.yml +6 -3
- data/config/locales/sl.yml +0 -4
- data/config/locales/sv.yml +5 -4
- data/config/locales/tr-TR.yml +5 -7
- data/config/locales/uk.yml +1 -8
- data/config/locales/zh-CN.yml +1 -3
- data/config/locales/zh-TW.yml +3 -5
- data/db/migrate/20240110203504_create_default_proposal_states.rb +3 -2
- data/decidim-proposals.gemspec +1 -1
- data/lib/decidim/api/proposal_type.rb +13 -0
- data/lib/decidim/api/proposals_type.rb +1 -3
- data/lib/decidim/proposals/proposal_serializer.rb +7 -4
- data/lib/decidim/proposals/test/factories.rb +6 -5
- data/lib/decidim/proposals/version.rb +1 -1
- metadata +24 -21
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8f0a793e0fdf54677810a839a8e177a8d3077aee2e25ff1618751d76f03f6401
|
|
4
|
+
data.tar.gz: 90b7698d7c3560677628165a4ce38c5fdf78b3d1dc5cb00671967a83a9af0d72
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fd2a28b72d4d22a47f40a4ccbd000421d19c0e014f0788a6888ce36f6665660c5d2d3c862b034280cc4798da73d1137fe4815e773ac48113a89a1baeacee9d2e
|
|
7
|
+
data.tar.gz: 499ac55e1d39ae1b19c105f69187ef399ee5bb97d110ea7ab6f15cef2aaa08c30456c12dbb45a85ff72041aaf0d38df9fca5b202e895286a7e2731e450eca263
|
|
@@ -11,21 +11,21 @@
|
|
|
11
11
|
<% end %>
|
|
12
12
|
</div>
|
|
13
13
|
|
|
14
|
+
<div class="flex items-center justify-between space-x-6">
|
|
15
|
+
<span class="content-block__span flex-shrink-0">
|
|
16
|
+
<%= t("decidim.participatory_spaces.highlighted_proposals.last") %>
|
|
17
|
+
</span>
|
|
18
|
+
<% if single_component? %>
|
|
19
|
+
<%= link_to decidim_proposals.new_proposal_path, class: "button button__xs md:button__lg button__secondary" do %>
|
|
20
|
+
<span class="text-center"><%= t("decidim.proposals.actions.new") %></span>
|
|
21
|
+
<%= icon "add-line" %>
|
|
22
|
+
<% end %>
|
|
23
|
+
<% end %>
|
|
24
|
+
</div>
|
|
14
25
|
<div class="flex items-start justify-between">
|
|
15
26
|
<div class="grow space-y-6">
|
|
16
|
-
<span class="content-block__span">
|
|
17
|
-
<%= t("decidim.participatory_spaces.highlighted_proposals.last") %>
|
|
18
|
-
</span>
|
|
19
|
-
|
|
20
27
|
<% proposals_to_render.each do |p| %>
|
|
21
28
|
<%= card_for p, link_whole_card: true, title_tag: :h3, **options.slice(:show_space) %>
|
|
22
29
|
<% end %>
|
|
23
30
|
</div>
|
|
24
|
-
|
|
25
|
-
<% if single_component? %>
|
|
26
|
-
<%= link_to decidim_proposals.new_proposal_path, class: "button button__sm md:button__lg button__secondary" do %>
|
|
27
|
-
<span><%= t("decidim.proposals.actions.new") %></span>
|
|
28
|
-
<%= icon "add-line" %>
|
|
29
|
-
<% end %>
|
|
30
|
-
<% end %>
|
|
31
31
|
</div>
|
|
@@ -34,6 +34,27 @@ module Decidim
|
|
|
34
34
|
|
|
35
35
|
private
|
|
36
36
|
|
|
37
|
+
def cache_hash
|
|
38
|
+
@cache_hash ||= begin
|
|
39
|
+
hash = []
|
|
40
|
+
hash << I18n.locale.to_s
|
|
41
|
+
hash << self.class.name.demodulize.underscore
|
|
42
|
+
hash << model.cache_key_with_version
|
|
43
|
+
hash << model.proposal_votes_count
|
|
44
|
+
hash << model.endorsements_count
|
|
45
|
+
hash << model.comments_count
|
|
46
|
+
hash << Digest::MD5.hexdigest(model.component.cache_key_with_version)
|
|
47
|
+
hash << Digest::MD5.hexdigest(resource_image_url) if resource_image_url
|
|
48
|
+
hash << 0 # render space
|
|
49
|
+
hash << model.follows_count
|
|
50
|
+
hash << Digest::MD5.hexdigest(model.authors.map(&:cache_key_with_version).to_s)
|
|
51
|
+
hash << (model.must_render_translation?(model.organization) ? 1 : 0) if model.respond_to?(:must_render_translation?)
|
|
52
|
+
hash << model.component.participatory_space.active_step.id if model.component.participatory_space.try(:active_step)
|
|
53
|
+
|
|
54
|
+
hash.join(Decidim.cache_key_separator)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
37
58
|
def classes
|
|
38
59
|
super.merge(metadata: "card__list-metadata")
|
|
39
60
|
end
|
|
@@ -20,25 +20,24 @@ module Decidim
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def cache_hash
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
hash <<
|
|
34
|
-
hash <<
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
hash << (model.must_render_translation?(model.organization) ? 1 : 0) if model.respond_to?(:must_render_translation?)
|
|
39
|
-
hash << model.component.participatory_space.active_step.id if model.component.participatory_space.try(:active_step)
|
|
23
|
+
@cache_hash ||= begin
|
|
24
|
+
hash = []
|
|
25
|
+
hash << I18n.locale.to_s
|
|
26
|
+
hash << self.class.name.demodulize.underscore
|
|
27
|
+
hash << model.cache_key_with_version
|
|
28
|
+
hash << model.proposal_votes_count
|
|
29
|
+
hash << model.endorsements_count
|
|
30
|
+
hash << model.comments_count
|
|
31
|
+
hash << Digest::MD5.hexdigest(model.component.cache_key_with_version)
|
|
32
|
+
hash << Digest::MD5.hexdigest(resource_image_url) if resource_image_url
|
|
33
|
+
hash << render_space? ? 1 : 0
|
|
34
|
+
hash << model.follows_count
|
|
35
|
+
hash << Digest::MD5.hexdigest(model.authors.map(&:cache_key_with_version).to_s)
|
|
36
|
+
hash << (model.must_render_translation?(model.organization) ? 1 : 0) if model.respond_to?(:must_render_translation?)
|
|
37
|
+
hash << model.component.participatory_space.active_step.id if model.component.participatory_space.try(:active_step)
|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
hash.join(Decidim.cache_key_separator)
|
|
40
|
+
end
|
|
42
41
|
end
|
|
43
42
|
end
|
|
44
43
|
end
|
|
@@ -43,13 +43,11 @@ module Decidim
|
|
|
43
43
|
.order(position: :asc)
|
|
44
44
|
render "decidim/proposals/proposals/participatory_texts/participatory_text"
|
|
45
45
|
else
|
|
46
|
-
@
|
|
47
|
-
.result
|
|
48
|
-
.published
|
|
49
|
-
.not_hidden
|
|
46
|
+
@proposals = search.result
|
|
50
47
|
|
|
51
|
-
@proposals = @
|
|
52
|
-
@
|
|
48
|
+
@proposals = reorder(@proposals)
|
|
49
|
+
@proposals = paginate(@proposals)
|
|
50
|
+
@proposals = @proposals.includes(:component, :coauthorships, :attachments)
|
|
53
51
|
|
|
54
52
|
@voted_proposals = if current_user
|
|
55
53
|
ProposalVote.where(
|
|
@@ -59,8 +57,6 @@ module Decidim
|
|
|
59
57
|
else
|
|
60
58
|
[]
|
|
61
59
|
end
|
|
62
|
-
@proposals = reorder(@proposals)
|
|
63
|
-
@proposals = paginate(@proposals)
|
|
64
60
|
end
|
|
65
61
|
end
|
|
66
62
|
|
|
@@ -8,9 +8,9 @@ module Decidim
|
|
|
8
8
|
include TranslatableAttributes
|
|
9
9
|
mimic :proposal_answer
|
|
10
10
|
|
|
11
|
-
translatable_attribute :answer,
|
|
12
|
-
translatable_attribute :cost_report,
|
|
13
|
-
translatable_attribute :execution_period,
|
|
11
|
+
translatable_attribute :answer, Decidim::Attributes::RichText
|
|
12
|
+
translatable_attribute :cost_report, Decidim::Attributes::RichText
|
|
13
|
+
translatable_attribute :execution_period, Decidim::Attributes::RichText
|
|
14
14
|
attribute :cost, Float
|
|
15
15
|
attribute :internal_state, String
|
|
16
16
|
|
|
@@ -10,7 +10,7 @@ module Decidim
|
|
|
10
10
|
translatable_attribute :title, String do |field, _locale|
|
|
11
11
|
validates field, length: { in: 15..150 }, if: proc { |resource| resource.send(field).present? }
|
|
12
12
|
end
|
|
13
|
-
translatable_attribute :body,
|
|
13
|
+
translatable_attribute :body, Decidim::Attributes::RichText
|
|
14
14
|
|
|
15
15
|
validates :title, :body, translatable_presence: true
|
|
16
16
|
|
|
@@ -6,6 +6,7 @@ module Decidim
|
|
|
6
6
|
# A form object to be used when admin users want to import a collection of proposals
|
|
7
7
|
# from another component.
|
|
8
8
|
class ProposalsImportForm < Decidim::Form
|
|
9
|
+
include TranslatableAttributes
|
|
9
10
|
mimic :proposals_import
|
|
10
11
|
|
|
11
12
|
attribute :origin_component_id, Integer
|
|
@@ -19,15 +20,11 @@ module Decidim
|
|
|
19
20
|
validates :import_proposals, allow_nil: false, acceptance: true
|
|
20
21
|
validate :valid_states
|
|
21
22
|
|
|
22
|
-
VALID_STATES = %w(accepted not_answered evaluating rejected).freeze
|
|
23
|
-
|
|
24
23
|
def states_collection
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
)
|
|
30
|
-
end
|
|
24
|
+
@states_collection ||= ProposalState.where(component: current_component) + [ProposalState.new(token: "not_answered",
|
|
25
|
+
title: I18n.t(
|
|
26
|
+
:not_answered, scope: "decidim.proposals.answers"
|
|
27
|
+
))]
|
|
31
28
|
end
|
|
32
29
|
|
|
33
30
|
def states
|
|
@@ -56,7 +53,7 @@ module Decidim
|
|
|
56
53
|
|
|
57
54
|
def valid_states
|
|
58
55
|
return if states.all? do |state|
|
|
59
|
-
|
|
56
|
+
states_collection.pluck(:token).include?(state)
|
|
60
57
|
end
|
|
61
58
|
|
|
62
59
|
errors.add(:states, :invalid)
|
|
@@ -16,7 +16,10 @@ module Decidim
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def valuator_roles
|
|
19
|
-
@valuator_roles ||= current_component.participatory_space
|
|
19
|
+
@valuator_roles ||= current_component.participatory_space
|
|
20
|
+
.user_roles(:valuator)
|
|
21
|
+
.order_by_name
|
|
22
|
+
.where(id: valuator_role_ids)
|
|
20
23
|
end
|
|
21
24
|
|
|
22
25
|
def same_participatory_space
|
|
@@ -10,7 +10,7 @@ module Decidim
|
|
|
10
10
|
|
|
11
11
|
# find the valuators for the current space.
|
|
12
12
|
def find_valuators_for_select(participatory_space, current_user)
|
|
13
|
-
valuator_roles = participatory_space.user_roles(:valuator)
|
|
13
|
+
valuator_roles = participatory_space.user_roles(:valuator).order_by_name
|
|
14
14
|
valuators = Decidim::User.where(id: valuator_roles.pluck(:decidim_user_id)).to_a
|
|
15
15
|
|
|
16
16
|
filtered_valuator_roles = valuator_roles.filter do |role|
|
|
@@ -9,7 +9,7 @@ module Decidim
|
|
|
9
9
|
#
|
|
10
10
|
# geocoded_proposals - A collection of geocoded proposals
|
|
11
11
|
def proposals_data_for_map(geocoded_proposals)
|
|
12
|
-
geocoded_proposals.map do |proposal|
|
|
12
|
+
geocoded_proposals.select(&:geocoded_and_valid?).map do |proposal|
|
|
13
13
|
proposal_data_for_map(proposal)
|
|
14
14
|
end
|
|
15
15
|
end
|
|
@@ -402,12 +402,8 @@ module Decidim
|
|
|
402
402
|
where(query, value:)
|
|
403
403
|
end
|
|
404
404
|
|
|
405
|
-
def self.ransackable_scopes(
|
|
406
|
-
|
|
407
|
-
return base unless auth_object&.admin?
|
|
408
|
-
|
|
409
|
-
# Add extra scopes for admins for the admin panel searches
|
|
410
|
-
base + [:valuator_role_ids_has]
|
|
405
|
+
def self.ransackable_scopes(_auth_object = nil)
|
|
406
|
+
[:with_any_origin, :with_any_state, :state_eq, :voted_by, :coauthored_by, :related_to, :with_any_scope, :with_any_category, :valuator_role_ids_has]
|
|
411
407
|
end
|
|
412
408
|
|
|
413
409
|
# Create i18n ransackers for :title and :body.
|
|
@@ -103,11 +103,7 @@
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
&__grid-text-title {
|
|
106
|
-
@apply flex justify-between flex-row md:flex-col
|
|
107
|
-
|
|
108
|
-
.label {
|
|
109
|
-
@apply md:mt-2;
|
|
110
|
-
}
|
|
106
|
+
@apply flex justify-between flex-row md:flex-col items-start lg:flex-row;
|
|
111
107
|
}
|
|
112
108
|
|
|
113
109
|
&__list-metadata {
|
|
@@ -4,15 +4,16 @@ module Decidim
|
|
|
4
4
|
module Proposals
|
|
5
5
|
class Permissions < Decidim::DefaultPermissions
|
|
6
6
|
def permissions
|
|
7
|
-
return permission_action unless user
|
|
8
|
-
|
|
9
7
|
# Delegate the admin permission checks to the admin permissions class
|
|
10
8
|
return Decidim::Proposals::Admin::Permissions.new(user, permission_action, context).permissions if permission_action.scope == :admin
|
|
11
9
|
return permission_action if permission_action.scope != :public
|
|
12
10
|
|
|
11
|
+
toggle_allow(!proposal.hidden?) if permission_action.subject == :proposal && permission_action.action == :read
|
|
12
|
+
return permission_action unless user
|
|
13
|
+
|
|
13
14
|
case permission_action.subject
|
|
14
15
|
when :proposal
|
|
15
|
-
apply_proposal_permissions(permission_action)
|
|
16
|
+
apply_proposal_permissions(permission_action) unless permission_action.action == :read
|
|
16
17
|
when :collaborative_draft
|
|
17
18
|
apply_collaborative_draft_permissions(permission_action)
|
|
18
19
|
else
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module Proposals
|
|
5
|
+
class CollaborativeDraftDiffRenderer < DiffRenderer
|
|
6
|
+
private
|
|
7
|
+
|
|
8
|
+
def attribute_types
|
|
9
|
+
{
|
|
10
|
+
title: :string,
|
|
11
|
+
body: :string,
|
|
12
|
+
decidim_category_id: :category,
|
|
13
|
+
decidim_scope_id: :scope,
|
|
14
|
+
address: :string,
|
|
15
|
+
latitude: :string,
|
|
16
|
+
longitude: :string,
|
|
17
|
+
decidim_proposals_proposal_state_id: :string
|
|
18
|
+
}
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -21,8 +21,10 @@ module Decidim
|
|
|
21
21
|
|
|
22
22
|
# Parses the values before parsing the changeset.
|
|
23
23
|
def parse_changeset(attribute, values, type, diff)
|
|
24
|
+
return parse_i18n_changeset(attribute, values, type, diff) if [:i18n, :i18n_html].include?(type)
|
|
24
25
|
return parse_scope_changeset(attribute, values, type, diff) if type == :scope
|
|
25
26
|
return parse_state_changeset(attribute, values, type, diff) if type == :state
|
|
27
|
+
return parse_user_group_changeset(attribute, values, type, diff) if type == :user_group
|
|
26
28
|
|
|
27
29
|
values = parse_values(attribute, values)
|
|
28
30
|
old_value = values[0]
|
|
@@ -117,7 +117,7 @@ module Decidim
|
|
|
117
117
|
if attachment.file.attached?
|
|
118
118
|
new_attachment.file = attachment.file.blob
|
|
119
119
|
else
|
|
120
|
-
new_attachment.attached_uploader(:file).remote_url = attachment.attached_uploader(:file).url
|
|
120
|
+
new_attachment.attached_uploader(:file).remote_url = attachment.attached_uploader(:file).url
|
|
121
121
|
end
|
|
122
122
|
|
|
123
123
|
new_attachment.save!
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<%= check_box_tag "proposals_bulk", "all", false, class: "js-check-all" %>
|
|
26
26
|
</th>
|
|
27
27
|
<th class="!text-left">
|
|
28
|
-
<%= sort_link(query, :
|
|
28
|
+
<%= sort_link(query, :translated_title, t("models.proposal.fields.title", scope: "decidim.proposals") ) %>
|
|
29
29
|
</th>
|
|
30
30
|
<th>
|
|
31
31
|
<%= sort_link(query, :published_at, t("models.proposal.fields.published_at", scope: "decidim.proposals") ) %>
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
</th>
|
|
59
59
|
|
|
60
60
|
<th>
|
|
61
|
-
<%=
|
|
61
|
+
<%= t("models.proposal.fields.state", scope: "decidim.proposals") %>
|
|
62
62
|
</th>
|
|
63
63
|
|
|
64
64
|
<th><%= t("actions.title", scope: "decidim.proposals") %></th>
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
</div>
|
|
18
18
|
<div class="row column">
|
|
19
19
|
<%= f.label t(".select_states") %>
|
|
20
|
-
<%= f.collection_check_boxes :states, @form.states_collection, :
|
|
20
|
+
<%= f.collection_check_boxes :states, @form.states_collection, :token, :title do |b| %>
|
|
21
21
|
<div>
|
|
22
|
-
<%= b.label { b.check_box + b.text } %>
|
|
22
|
+
<%= b.label { b.check_box + translated_attribute(b.text) } %>
|
|
23
23
|
</div>
|
|
24
24
|
<% end %>
|
|
25
25
|
</div>
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
|
|
32
32
|
<% if Decidim::Map.available?(:geocoding, :dynamic) && component_settings.geocoding_enabled? %>
|
|
33
33
|
<div class="proposal-list__map">
|
|
34
|
-
<%= dynamic_map_for proposals_data_for_map(@
|
|
34
|
+
<%= dynamic_map_for proposals_data_for_map(@proposals) do %>
|
|
35
35
|
<template id="marker-popup">
|
|
36
36
|
<div class="space-y-6">
|
|
37
37
|
<a href="${link}" class="card__list">
|
|
@@ -3,3 +3,15 @@ var $orderFilterInput = $('.order_filter');
|
|
|
3
3
|
|
|
4
4
|
$proposals.html('<%= j(render partial: "proposals").strip.html_safe %>');
|
|
5
5
|
$orderFilterInput.val('<%= order %>');
|
|
6
|
+
|
|
7
|
+
<% if Decidim::Map.available?(:geocoding, :dynamic) && component_settings.geocoding_enabled? %>
|
|
8
|
+
var $map = $("#map");
|
|
9
|
+
var controller = $map.data("map-controller");
|
|
10
|
+
if (controller) {
|
|
11
|
+
var markerData = JSON.parse('<%= escape_javascript proposals_data_for_map(@proposals).to_json.html_safe %>');
|
|
12
|
+
controller.clearMarkers();
|
|
13
|
+
if (markerData.length > 0 ) {
|
|
14
|
+
controller.addMarkers(markerData);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
<% end %>
|
|
@@ -77,7 +77,7 @@ extra_admin_link(
|
|
|
77
77
|
<% end %>
|
|
78
78
|
|
|
79
79
|
<% if component_settings.geocoding_enabled? && @proposal.geocoded? %>
|
|
80
|
-
<div class="static-map__container">
|
|
80
|
+
<div class="static-map__container py-6">
|
|
81
81
|
<%= render partial: "decidim/shared/static_map", locals: { icon_name: "proposals", geolocalizable: @proposal } %>
|
|
82
82
|
</div>
|
|
83
83
|
<% end %>
|
data/config/locales/ar.yml
CHANGED
|
@@ -262,12 +262,10 @@ ar:
|
|
|
262
262
|
email_subject: تمت إضافة اقتراح جديد "%{resource_title}" إلى %{participatory_space_title}
|
|
263
263
|
proposal_update_category:
|
|
264
264
|
email_intro: 'قام المشرف بتحديث فئة اقتراحك "%{resource_title}" ، تحقق من ذلك في هذه الصفحة:'
|
|
265
|
-
email_outro: لقد تلقيت هذا الإشعار لأنك مؤلف الاقتراح.
|
|
266
265
|
email_subject: تم تحديث فئة %{resource_title} اقتراح
|
|
267
266
|
notification_title: تم تحديث فئة اقتراح <a href="%{resource_path}">%{resource_title}</a> بواسطة مسؤول.
|
|
268
267
|
proposal_update_scope:
|
|
269
268
|
email_intro: 'قام مدير بتحديث نطاق اقتراحك "%{resource_title}" ، يرجى التحقق منه على هذه الصفحة:'
|
|
270
|
-
email_outro: لقد تلقيت هذا الإشعار لأنك مؤلف الاقتراح.
|
|
271
269
|
email_subject: تم تحديث نطاق الاقتراح %{resource_title}
|
|
272
270
|
notification_title: نطاق الاقتراح <a href="%{resource_path}">%{resource_title}</a> تم تحديثه من قبل مدير.
|
|
273
271
|
voting_enabled:
|
|
@@ -316,7 +314,7 @@ ar:
|
|
|
316
314
|
object: أصوات
|
|
317
315
|
participatory_spaces:
|
|
318
316
|
highlighted_proposals:
|
|
319
|
-
see_all: شاهد الكل
|
|
317
|
+
see_all: شاهد الكل
|
|
320
318
|
proposals:
|
|
321
319
|
actions:
|
|
322
320
|
answer_proposal: الرد على المُقتَرَح
|
data/config/locales/bg.yml
CHANGED
|
@@ -117,7 +117,7 @@ bg:
|
|
|
117
117
|
proposal_state_id_eq:
|
|
118
118
|
label: Състояние
|
|
119
119
|
scope_id_eq:
|
|
120
|
-
label:
|
|
120
|
+
label: Сфера
|
|
121
121
|
state_eq:
|
|
122
122
|
label: Състояние
|
|
123
123
|
values:
|
|
@@ -142,7 +142,7 @@ bg:
|
|
|
142
142
|
actions:
|
|
143
143
|
amend: Промяна
|
|
144
144
|
comment: Коментар
|
|
145
|
-
create:
|
|
145
|
+
create: Създаване
|
|
146
146
|
endorse: Одобри
|
|
147
147
|
vote: Глас
|
|
148
148
|
vote_comment: Оцени коментара
|
|
@@ -190,7 +190,7 @@ bg:
|
|
|
190
190
|
proposal_wizard_step_1_help_text: Текст на помощника за стъпка "Създай"
|
|
191
191
|
proposal_wizard_step_2_help_text: Помощен текст на стъпка "Публикуване" на съветника за предложения
|
|
192
192
|
resources_permissions_enabled: Позволените действия могат да се задават за всяко предложение
|
|
193
|
-
scope_id:
|
|
193
|
+
scope_id: Сфера
|
|
194
194
|
scopes_enabled: Обхватите са активирани
|
|
195
195
|
threshold_per_proposal: Праг за предложенията
|
|
196
196
|
vote_limit: Лимит за гласуване на участник
|
|
@@ -309,12 +309,10 @@ bg:
|
|
|
309
309
|
notification_title: Вашето предложение <a href="%{resource_path}">%{resource_title}</a> промени състоянието си на „%{state}“.
|
|
310
310
|
proposal_update_category:
|
|
311
311
|
email_intro: 'Администратор актуализира категорията на Вашето предложение „%{resource_title}“. Вижте повече на тази страница:'
|
|
312
|
-
email_outro: Получавате това известие, защото сте авторът на предложението.
|
|
313
312
|
email_subject: Категорията на предложението %{resource_title} беше актуализирана
|
|
314
313
|
notification_title: Категорията на предложението <a href="%{resource_path}">%{resource_title}</a> беше актуализирана от администратор.
|
|
315
314
|
proposal_update_scope:
|
|
316
315
|
email_intro: 'Администратор актуализира обхвата на Вашето предложение „%{resource_title}“. Вижте повече на тази страница:'
|
|
317
|
-
email_outro: Получавате това известие, защото сте авторът на предложението.
|
|
318
316
|
email_subject: Обхватът на предложението %{resource_title} беше актуализиран
|
|
319
317
|
notification_title: Обхватът на предложението <a href="%{resource_path}">%{resource_title}</a> беше актуализиран от администратор.
|
|
320
318
|
voting_enabled:
|
|
@@ -660,7 +658,7 @@ bg:
|
|
|
660
658
|
open: Отворен
|
|
661
659
|
published: Публикувано
|
|
662
660
|
related_to: Свързано с
|
|
663
|
-
scope:
|
|
661
|
+
scope: Сфера
|
|
664
662
|
search: Търсене
|
|
665
663
|
state: Статус
|
|
666
664
|
withdrawn: Оттеглено
|
|
@@ -746,7 +744,7 @@ bg:
|
|
|
746
744
|
official_proposal: Официално предложение
|
|
747
745
|
published_answer: Публикуван отговор
|
|
748
746
|
published_at: Публикувано на
|
|
749
|
-
scope:
|
|
747
|
+
scope: Сфера
|
|
750
748
|
state: Статус
|
|
751
749
|
title: Заглавие
|
|
752
750
|
valuator: Оценител
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
bn:
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
bs:
|
|
3
|
+
activemodel:
|
|
4
|
+
attributes:
|
|
5
|
+
valuation_assignment:
|
|
6
|
+
admin_log:
|
|
7
|
+
valuator_role_id: Ime procenjivača
|
|
8
|
+
errors:
|
|
9
|
+
models:
|
|
10
|
+
proposal:
|
|
11
|
+
attributes:
|
|
12
|
+
body:
|
|
13
|
+
cant_be_equal_to_template: ne može biti jednak šablonu
|
|
14
|
+
models:
|
|
15
|
+
decidim/proposals/admin/update_proposal_scope_event: Predlog opsega izmenjen
|
|
16
|
+
decidim:
|
|
17
|
+
admin:
|
|
18
|
+
filters:
|
|
19
|
+
proposals:
|
|
20
|
+
valuator_role_ids_has:
|
|
21
|
+
label: Dodeljeno procenjivaču
|
|
22
|
+
search_placeholder:
|
|
23
|
+
id_string_or_title_cont: Pretraži %{collection} prema identifikacionom broju ili nazivu.
|
|
24
|
+
components:
|
|
25
|
+
proposals:
|
|
26
|
+
settings:
|
|
27
|
+
global:
|
|
28
|
+
new_proposal_body_template: Novi predlog šablona glavnog teksta
|
|
29
|
+
new_proposal_body_template_help: Možete da definišete tekst koji će se pojavljivati pri kreiranju novog predloga
|
|
30
|
+
step:
|
|
31
|
+
amendments_visibility: Vidljivost izmena
|
|
32
|
+
amendments_visibility_choices:
|
|
33
|
+
all: Izmene su vidljive svima
|
|
34
|
+
participants: Izmene su vidljive samo svojim autorima
|
|
35
|
+
answers_with_costs: Omogući troškove za odgovore na predloge
|
|
36
|
+
publish_answers_immediately: Objavi odgovore na predloge odmah
|
|
37
|
+
events:
|
|
38
|
+
proposals:
|
|
39
|
+
admin:
|
|
40
|
+
proposal_note_created:
|
|
41
|
+
email_outro: Dobili ste ovo obaveštenje jer možete da procenite predlog.
|
|
42
|
+
email_subject: Neko je ostavio poruku na predlogu %{resource_title}.
|
|
43
|
+
proposal_update_scope:
|
|
44
|
+
email_intro: 'Administrator je ažurirao opseg vašeg predloga "%{resource_title}", pogledajte na ovoj strani:'
|
|
45
|
+
email_subject: Opseg predloga %{resource_title} je ažuriran
|
|
46
|
+
proposals:
|
|
47
|
+
actions:
|
|
48
|
+
answer_proposal: Odgovor na predlog
|
|
49
|
+
show: Prikaži predlog
|
|
50
|
+
admin:
|
|
51
|
+
proposals:
|
|
52
|
+
index:
|
|
53
|
+
assign_to_valuator: Dodeli procenjivaču
|
|
54
|
+
assign_to_valuator_button: Dodeli
|
|
55
|
+
change_scope: Promeni opseg
|
|
56
|
+
publish_answers: Objavi odgovore
|
|
57
|
+
unassign_from_valuator: Oduzmi od procenjivača
|
|
58
|
+
unassign_from_valuator_button: Od dodeli
|
|
59
|
+
update_scope_button: Ažuriraj opseg
|
|
60
|
+
show:
|
|
61
|
+
amendments_count: Broj izmena
|
|
62
|
+
assigned_valuators: Dodeljeni procenjivači
|
|
63
|
+
comments_count: Broj komentara
|
|
64
|
+
documents: Dokumenti
|
|
65
|
+
endorsements_count: Broj podržavanja
|
|
66
|
+
endorsers: Podržavaoci
|
|
67
|
+
n_more_endorsers:
|
|
68
|
+
one: i još 1
|
|
69
|
+
few: i još %{count}
|
|
70
|
+
other: i još %{count}
|
|
71
|
+
photos: Slike
|
|
72
|
+
ranking: "%{ranking} od %{total}"
|
|
73
|
+
related_meetings: Slični sastanci
|
|
74
|
+
remove_assignment: Ukloni zadatak
|
|
75
|
+
remove_assignment_confirmation: Da li ste sigurni da želite da uklonite procenjivača sa ovog predloga?
|
|
76
|
+
valuators: Procenjivači
|
|
77
|
+
update_category:
|
|
78
|
+
invalid: 'Ovi predlozi već imaju %{subject_name} kategoriju: %{proposals}.'
|
|
79
|
+
success: 'Predlozi uspešno dodati u kategoriju %{subject_name}: %{proposals}.'
|
|
80
|
+
update_scope:
|
|
81
|
+
invalid: 'Ovi predlozi već imaju %{subject_name} opseg: %{proposals}.'
|
|
82
|
+
success: 'Predlozi kojima je uspešno dodat opseg %{subject_name}: %{proposals}.'
|
|
83
|
+
admin_log:
|
|
84
|
+
proposal:
|
|
85
|
+
publish_answer: "%{user_name} je objavio odgovor na predlog %{resource_name} u prostoru %{space_name}"
|
|
86
|
+
valuation_assignment:
|
|
87
|
+
create: "%{user_name} je dodao predlog %{resource_name} procenjivaču"
|
|
88
|
+
models:
|
|
89
|
+
proposal:
|
|
90
|
+
fields:
|
|
91
|
+
published_answer: Objavljeni odgovor
|
|
92
|
+
valuator: Procenjivač
|
|
93
|
+
valuators: Procenjivači
|
|
94
|
+
proposals:
|
|
95
|
+
show:
|
|
96
|
+
estimated_cost: Procenjen trošak
|
|
97
|
+
proposals_picker:
|
|
98
|
+
choose_proposals: Izaberi predloge
|
|
99
|
+
publish_answers:
|
|
100
|
+
success: Odgovori na predloge uspešno objavljeni.
|
data/config/locales/ca.yml
CHANGED
|
@@ -143,7 +143,7 @@ ca:
|
|
|
143
143
|
actions:
|
|
144
144
|
amend: Esmena
|
|
145
145
|
comment: Comentar
|
|
146
|
-
create:
|
|
146
|
+
create: Crea
|
|
147
147
|
endorse: Adherir-se
|
|
148
148
|
vote: Donar suport
|
|
149
149
|
vote_comment: Votar el comentari
|
|
@@ -310,12 +310,12 @@ ca:
|
|
|
310
310
|
notification_title: La teva proposta <a href="%{resource_path}">%{resource_title}</a>ha canviat el seu estat a "%{state}".
|
|
311
311
|
proposal_update_category:
|
|
312
312
|
email_intro: 'Una administradora ha actualitzat la categoria de la teva proposta "%{resource_title}", fes-hi una ullada:'
|
|
313
|
-
email_outro: Has rebut aquesta notificació perquè
|
|
313
|
+
email_outro: Has rebut aquesta notificació perquè ets l'autora de la proposta.
|
|
314
314
|
email_subject: S'ha actualitzat la categoria de la proposta %{resource_title}
|
|
315
315
|
notification_title: La categoria de la proposta <a href="%{resource_path}">%{resource_title}</a> ha estat actualitzada per una administradora.
|
|
316
316
|
proposal_update_scope:
|
|
317
317
|
email_intro: 'Una administradora ha actualitzat l''àmbit de la teva proposta "%{resource_title}", fes-hi una ullada:'
|
|
318
|
-
email_outro: Has rebut aquesta notificació perquè
|
|
318
|
+
email_outro: Has rebut aquesta notificació perquè ets l'autora de la proposta.
|
|
319
319
|
email_subject: S'ha actualitzat l'àmbit de la proposta %{resource_title}
|
|
320
320
|
notification_title: L'àmbit de la proposta <a href="%{resource_path}">%{resource_title}</a> ha estat actualitzat per una administradora.
|
|
321
321
|
voting_enabled:
|
|
@@ -507,7 +507,7 @@ ca:
|
|
|
507
507
|
title: Actualitza la proposta
|
|
508
508
|
update: Actualizar
|
|
509
509
|
form:
|
|
510
|
-
attachment_legend: "(Opcional)
|
|
510
|
+
attachment_legend: "(Opcional) Afegeix un fitxer adjunt"
|
|
511
511
|
created_in_meeting: Aquesta proposta prové d'una trobada
|
|
512
512
|
delete_attachment: Suprimeix l'adjunt
|
|
513
513
|
select_a_category: Selecciona una categoria
|
|
@@ -842,7 +842,7 @@ ca:
|
|
|
842
842
|
show:
|
|
843
843
|
answer: Resposta
|
|
844
844
|
changes_at_title: Esmena a "%{title}"
|
|
845
|
-
edit_proposal: Edita proposta
|
|
845
|
+
edit_proposal: Edita la proposta
|
|
846
846
|
estimated_cost: Cost estimat
|
|
847
847
|
hidden_endorsers_count:
|
|
848
848
|
one: i %{count} persona més
|