decidim-proposals 0.29.2 → 0.29.3

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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/proposals/highlighted_proposals_for_component/show.erb +0 -12
  3. data/app/commands/decidim/proposals/admin/import_proposals.rb +7 -65
  4. data/app/controllers/decidim/proposals/admin/proposal_answers_controller.rb +7 -0
  5. data/app/controllers/decidim/proposals/admin/proposals_imports_controller.rb +2 -2
  6. data/app/controllers/decidim/proposals/versions_controller.rb +1 -1
  7. data/app/forms/decidim/proposals/admin/proposal_answer_form.rb +0 -15
  8. data/app/helpers/decidim/proposals/application_helper.rb +1 -0
  9. data/app/helpers/decidim/proposals/proposals_helper.rb +1 -3
  10. data/app/jobs/decidim/proposals/admin/import_proposals_job.rb +91 -0
  11. data/app/mailers/decidim/proposals/admin/import_proposals_mailer.rb +30 -0
  12. data/app/models/decidim/proposals/collaborative_draft.rb +2 -3
  13. data/app/models/decidim/proposals/proposal.rb +0 -5
  14. data/app/services/decidim/proposals/proposal_builder.rb +1 -0
  15. data/app/views/decidim/proposals/admin/import_proposals_mailer/notify_failure.html.erb +1 -0
  16. data/app/views/decidim/proposals/admin/import_proposals_mailer/notify_success.html.erb +2 -0
  17. data/app/views/decidim/proposals/admin/proposals/_form.html.erb +1 -1
  18. data/app/views/decidim/proposals/admin/proposals/show.html.erb +4 -4
  19. data/app/views/decidim/proposals/proposals/_proposals.html.erb +1 -1
  20. data/app/views/decidim/proposals/proposals/index.html.erb +8 -1
  21. data/config/locales/ar.yml +7 -3
  22. data/config/locales/bg.yml +0 -5
  23. data/config/locales/bs-BA.yml +0 -2
  24. data/config/locales/ca-IT.yml +945 -0
  25. data/config/locales/ca.yml +22 -7
  26. data/config/locales/cs.yml +14 -3
  27. data/config/locales/de.yml +20 -5
  28. data/config/locales/el.yml +2 -4
  29. data/config/locales/en.yml +18 -3
  30. data/config/locales/es-MX.yml +21 -6
  31. data/config/locales/es-PY.yml +21 -6
  32. data/config/locales/es.yml +24 -9
  33. data/config/locales/eu.yml +94 -79
  34. data/config/locales/fi-plain.yml +18 -3
  35. data/config/locales/fi.yml +18 -3
  36. data/config/locales/fr-CA.yml +16 -4
  37. data/config/locales/fr.yml +16 -4
  38. data/config/locales/ga-IE.yml +2 -1
  39. data/config/locales/gl.yml +2 -0
  40. data/config/locales/hu.yml +2 -6
  41. data/config/locales/id-ID.yml +3 -1
  42. data/config/locales/is-IS.yml +5 -0
  43. data/config/locales/it.yml +24 -3
  44. data/config/locales/ja.yml +19 -3
  45. data/config/locales/lt.yml +2 -5
  46. data/config/locales/lv.yml +2 -2
  47. data/config/locales/nl.yml +4 -4
  48. data/config/locales/no.yml +2 -2
  49. data/config/locales/pl.yml +0 -5
  50. data/config/locales/pt-BR.yml +0 -3
  51. data/config/locales/pt.yml +2 -2
  52. data/config/locales/ro-RO.yml +18 -2
  53. data/config/locales/ru.yml +5 -0
  54. data/config/locales/sk.yml +2 -2
  55. data/config/locales/sr-CS.yml +0 -2
  56. data/config/locales/sv.yml +7 -5
  57. data/config/locales/tr-TR.yml +2 -2
  58. data/config/locales/uk.yml +5 -0
  59. data/config/locales/zh-CN.yml +2 -2
  60. data/config/locales/zh-TW.yml +2 -4
  61. data/lib/decidim/proposals/version.rb +1 -1
  62. data/lib/tasks/proposals/upgrade/decidim_proposals_upgrade_tasks.rake +22 -0
  63. metadata +25 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8f0a793e0fdf54677810a839a8e177a8d3077aee2e25ff1618751d76f03f6401
4
- data.tar.gz: 90b7698d7c3560677628165a4ce38c5fdf78b3d1dc5cb00671967a83a9af0d72
3
+ metadata.gz: f68f4460c5148fc90b2ff8d92c25b7c1c5afae4347c4ce8bdcdfe2eec7e533cb
4
+ data.tar.gz: 06c7f3d44d8534c22b816d9ba8e216d1fa854337ada6158056a06bcb70a46598
5
5
  SHA512:
6
- metadata.gz: fd2a28b72d4d22a47f40a4ccbd000421d19c0e014f0788a6888ce36f6665660c5d2d3c862b034280cc4798da73d1137fe4815e773ac48113a89a1baeacee9d2e
7
- data.tar.gz: 499ac55e1d39ae1b19c105f69187ef399ee5bb97d110ea7ab6f15cef2aaa08c30456c12dbb45a85ff72041aaf0d38df9fca5b202e895286a7e2731e450eca263
6
+ metadata.gz: e10e7ef879ce34a18a5b9e101ca6fef2cc8d4c7434b6f0599fa1d5cf830e34e00fbd8fd9cb571b280e2c2113fc375f8233d6bfa4b32fea9c864958c0ab62c342
7
+ data.tar.gz: 5363d5e2789296bb4f969919776c406a2ede64f6e1651a27c56c9fab3b55c82e35f00b60c4a8c564f5192ce7b4d03a581f557b217c2185810c37f237e961d740
@@ -10,18 +10,6 @@
10
10
  <% end %>
11
11
  <% end %>
12
12
  </div>
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>
25
13
  <div class="flex items-start justify-between">
26
14
  <div class="grow space-y-6">
27
15
  <% proposals_to_render.each do |p| %>
@@ -22,7 +22,8 @@ module Decidim
22
22
  def call
23
23
  return broadcast(:invalid) unless form.valid?
24
24
 
25
- broadcast(:ok, import_proposals)
25
+ import_proposals
26
+ broadcast(:ok)
26
27
  end
27
28
 
28
29
  private
@@ -30,70 +31,11 @@ module Decidim
30
31
  attr_reader :form
31
32
 
32
33
  def import_proposals
33
- proposals.map do |original_proposal|
34
- next if proposal_already_copied?(original_proposal, target_component)
35
-
36
- Decidim::Proposals::ProposalBuilder.copy(
37
- original_proposal,
38
- author: proposal_author,
39
- action_user: form.current_user,
40
- extra_attributes: {
41
- "component" => target_component
42
- }.merge(proposal_answer_attributes(original_proposal))
43
- )
44
- end.compact
45
- end
46
-
47
- def proposals
48
- @proposals = Decidim::Proposals::Proposal
49
- .where(component: origin_component)
50
- @proposals = @proposals.where(scope: proposal_scopes) unless proposal_scopes.empty?
51
-
52
- @proposals = if @form.states.include?("not_answered")
53
- @proposals.not_answered.or(@proposals.where(id: @proposals.only_status(@form.states).pluck(:id)))
54
- else
55
- @proposals.only_status(@form.states)
56
- end
57
-
58
- @proposals
59
- end
60
-
61
- def proposal_scopes
62
- @form.scopes
63
- end
64
-
65
- def origin_component
66
- @form.origin_component
67
- end
68
-
69
- def target_component
70
- @form.current_component
71
- end
72
-
73
- def proposal_already_copied?(original_proposal, target_component)
74
- # Note: we are including also proposals from unpublished components
75
- # because otherwise duplicates could be created until the component is
76
- # published.
77
- original_proposal.linked_resources(:proposals, "copied_from_component", component_published: false).any? do |proposal|
78
- proposal.component == target_component
79
- end
80
- end
81
-
82
- def proposal_author
83
- form.keep_authors ? nil : @form.current_organization
84
- end
85
-
86
- def proposal_answer_attributes(original_proposal)
87
- return {} unless form.keep_answers
88
-
89
- state = Decidim::Proposals::ProposalState.where(component: target_component, token: original_proposal.state).first
90
-
91
- {
92
- answer: original_proposal.answer,
93
- answered_at: original_proposal.answered_at,
94
- proposal_state: state,
95
- state_published_at: original_proposal.state_published_at
96
- }
34
+ ImportProposalsJob.perform_later(form.as_json.merge({
35
+ "current_user_id" => form.current_user.id,
36
+ "current_organization_id" => form.current_organization.id,
37
+ "current_component_id" => form.current_component.id
38
+ }))
97
39
  end
98
40
  end
99
41
  end
@@ -5,6 +5,9 @@ module Decidim
5
5
  module Admin
6
6
  # This controller allows admins to answer proposals in a participatory process.
7
7
  class ProposalAnswersController < Admin::ApplicationController
8
+ include ActionView::Helpers::SanitizeHelper
9
+ include Decidim::Proposals::Admin::Filterable
10
+
8
11
  helper_method :proposal
9
12
 
10
13
  helper Proposals::ApplicationHelper
@@ -44,6 +47,10 @@ module Decidim
44
47
  def proposal
45
48
  @proposal ||= Proposal.where(component: current_component).find(params[:id])
46
49
  end
50
+
51
+ def collection
52
+ @collection ||= Proposal.where(component: current_component).not_hidden.published
53
+ end
47
54
  end
48
55
  end
49
56
  end
@@ -16,8 +16,8 @@ module Decidim
16
16
  @form = form(Admin::ProposalsImportForm).from_params(params)
17
17
 
18
18
  Admin::ImportProposals.call(@form) do
19
- on(:ok) do |proposals|
20
- flash[:notice] = I18n.t("proposals_imports.create.success", scope: "decidim.proposals.admin", number: proposals.length)
19
+ on(:ok) do
20
+ flash[:notice] = I18n.t("proposals_imports.create.success", scope: "decidim.proposals.admin")
21
21
  redirect_to EngineRouter.admin_proxy(current_component).root_path
22
22
  end
23
23
 
@@ -11,7 +11,7 @@ module Decidim
11
11
  def versioned_resource
12
12
  @versioned_resource ||=
13
13
  if params[:proposal_id]
14
- present(Proposal.where(component: current_component).find(params[:proposal_id]))
14
+ present(Proposal.not_hidden.published.where(component: current_component).find(params[:proposal_id]))
15
15
  else
16
16
  CollaborativeDraft.where(component: current_component).find(params[:collaborative_draft_id])
17
17
  end
@@ -15,20 +15,9 @@ module Decidim
15
15
  attribute :internal_state, String
16
16
 
17
17
  validates :internal_state, presence: true, inclusion: { in: :proposal_states }
18
- validates :answer, translatable_presence: true, if: ->(form) { form.state == "rejected" }
19
-
20
- with_options if: :costs_required? do
21
- validates :cost, numericality: true, presence: true
22
- validates :cost_report, translatable_presence: true
23
- validates :execution_period, translatable_presence: true
24
- end
25
18
 
26
19
  alias state internal_state
27
20
 
28
- def costs_required?
29
- costs_enabled? && state == "accepted"
30
- end
31
-
32
21
  def publish_answer?
33
22
  current_component.current_settings.publish_answers_immediately?
34
23
  end
@@ -38,10 +27,6 @@ module Decidim
38
27
  def proposal_states
39
28
  Decidim::Proposals::ProposalState.where(component: current_component).pluck(:token).map(&:to_s) + ["not_answered"]
40
29
  end
41
-
42
- def costs_enabled?
43
- current_component.current_settings.answers_with_costs?
44
- end
45
30
  end
46
31
  end
47
32
  end
@@ -30,6 +30,7 @@ module Decidim
30
30
 
31
31
  def proposal_state_css_style(proposal)
32
32
  return "" if proposal.emendation?
33
+ return "" if proposal.withdrawn?
33
34
 
34
35
  proposal.proposal_state&.css_style
35
36
  end
@@ -12,9 +12,7 @@ module Decidim
12
12
  end
13
13
 
14
14
  def proposal_has_costs?
15
- @proposal.cost.present? &&
16
- translated_attribute(@proposal.cost_report).present? &&
17
- translated_attribute(@proposal.execution_period).present?
15
+ @proposal.cost.present?
18
16
  end
19
17
 
20
18
  def toggle_view_mode_link(current_mode, target_mode, title, params)
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Proposals
5
+ module Admin
6
+ class ImportProposalsJob < ApplicationJob
7
+ queue_as :default
8
+
9
+ def perform(form)
10
+ @form = form
11
+ ActiveRecord::Base.transaction do
12
+ proposals.map do |original_proposal|
13
+ next if proposal_already_copied?(original_proposal, target_component)
14
+
15
+ Decidim::Proposals::ProposalBuilder.copy(
16
+ original_proposal,
17
+ author: proposal_author,
18
+ action_user: current_user,
19
+ extra_attributes: {
20
+ "component" => target_component
21
+ }.merge(proposal_answer_attributes(original_proposal))
22
+ )
23
+ end
24
+ end
25
+ ImportProposalsMailer.notify_success(current_user, origin_component, target_component, proposals.count).deliver_later
26
+ rescue ActiveRecord::RecordNotFound, NoMethodError
27
+ ImportProposalsMailer.notify_failure(current_user, origin_component, target_component).deliver_later
28
+ end
29
+
30
+ private
31
+
32
+ def proposals
33
+ proposals = Decidim::Proposals::Proposal.where(component: origin_component)
34
+ proposals = proposals.where(scope: proposal_scopes) unless proposal_scopes.empty?
35
+
36
+ if @form["states"].include?("not_answered")
37
+ proposals.not_answered.or(proposals.where(id: proposals.only_status(@form["states"]).pluck(:id)))
38
+ else
39
+ proposals.only_status(@form["states"])
40
+ end
41
+ end
42
+
43
+ def origin_component
44
+ @origin_component ||= Decidim::Component.find(@form["origin_component_id"])
45
+ end
46
+
47
+ def target_component
48
+ @target_component ||= Decidim::Component.find(@form["current_component_id"])
49
+ end
50
+
51
+ def current_user
52
+ @current_user ||= Decidim::User.find(@form["current_user_id"])
53
+ end
54
+
55
+ def current_organization
56
+ @current_organization ||= Decidim::Organization.find(@form["current_organization_id"])
57
+ end
58
+
59
+ def proposal_already_copied?(original_proposal, target_component)
60
+ # Note: we are including also proposals from unpublished components
61
+ # because otherwise duplicates could be created until the component is
62
+ # published.
63
+ original_proposal.linked_resources(:proposals, "copied_from_component", component_published: false).any? do |proposal|
64
+ proposal.component == target_component
65
+ end
66
+ end
67
+
68
+ def proposal_author
69
+ @form["keep_authors"] ? nil : current_organization
70
+ end
71
+
72
+ def proposal_scopes
73
+ @form["scopes"] || []
74
+ end
75
+
76
+ def proposal_answer_attributes(original_proposal)
77
+ return {} unless @form["keep_answers"]
78
+
79
+ state = Decidim::Proposals::ProposalState.where(component: target_component, token: original_proposal.proposal_state&.token).first
80
+
81
+ {
82
+ answer: original_proposal.answer,
83
+ answered_at: original_proposal.answered_at,
84
+ proposal_state: state,
85
+ state_published_at: original_proposal.state_published_at
86
+ }
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Proposals
5
+ module Admin
6
+ class ImportProposalsMailer < Decidim::ApplicationMailer
7
+ def notify_success(user, origin_component, target_component, count)
8
+ @organization = user.organization
9
+ @origin_component = origin_component
10
+ @target_component = target_component
11
+ @count = count
12
+
13
+ with_user(user) do
14
+ mail(to: user.email, subject: t(".subject"))
15
+ end
16
+ end
17
+
18
+ def notify_failure(user, origin_component, target_component)
19
+ @organization = user.organization
20
+ @origin_component = origin_component
21
+ @target_component = target_component
22
+
23
+ with_user(user) do
24
+ mail(to: user.email, subject: t(".subject"))
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -45,9 +45,8 @@ module Decidim
45
45
  authored_by?(user)
46
46
  end
47
47
 
48
- # Public: Overrides the `reported_content_url` Reportable concern method.
49
- def reported_content_url
50
- ResourceLocatorPresenter.new(self).url
48
+ def presenter
49
+ Decidim::Proposals::CollaborativeDraftPresenter.new(self)
51
50
  end
52
51
 
53
52
  # Public: Overrides the `reported_attributes` Reportable concern method.
@@ -301,11 +301,6 @@ module Decidim
301
301
  state == "evaluating"
302
302
  end
303
303
 
304
- # Public: Overrides the `reported_content_url` Reportable concern method.
305
- def reported_content_url
306
- ResourceLocatorPresenter.new(self).url
307
- end
308
-
309
304
  # Returns the presenter for this author, to be used in the views.
310
305
  # Required by ResourceRenderer.
311
306
  def presenter
@@ -63,6 +63,7 @@ module Decidim
63
63
  "created_at",
64
64
  "updated_at",
65
65
  "state",
66
+ "decidim_proposals_proposal_state_id",
66
67
  "state_published_at",
67
68
  "answer",
68
69
  "answered_at",
@@ -0,0 +1 @@
1
+ <p><%= t(".body", origin_component_name: translated_attribute(@origin_component.name), target_component_name: translated_attribute(@target_component.name)) %></p>
@@ -0,0 +1,2 @@
1
+ <p><%= t(".body", origin_component_name: translated_attribute(@origin_component.name), target_component_name: translated_attribute(@target_component.name)) %></p>
2
+ <p><%= t(".added_proposals", count: @count) %></p>
@@ -20,7 +20,7 @@
20
20
  </div>
21
21
  <% end %>
22
22
  <% if @form.component_suggested_hashtags.any? %>
23
- <div>
23
+ <div class="row column">
24
24
  <%= form.label :suggested_hashtags %>
25
25
  <div class="hashtags">
26
26
  <%= form.collection_check_boxes :suggested_hashtags, @form.component_suggested_hashtags.map { |hashtag| [hashtag.downcase, "##{hashtag}"] }, :first, :last do |option|
@@ -53,20 +53,20 @@
53
53
 
54
54
  <% presented_endorsers = endorsers_presenters_for(proposal) %>
55
55
  <% if presented_endorsers.any? %>
56
- <%= render partial: "endorsers", locals: { presented_endorsers:, proposal: } %>
56
+ <%= render partial: "decidim/proposals/admin/proposals/endorsers", locals: { presented_endorsers:, proposal: } %>
57
57
  <% end %>
58
58
 
59
59
  <% if proposal.documents.any? %>
60
- <%= render partial: "documents", locals: { proposal: } %>
60
+ <%= render partial: "decidim/proposals/admin/proposals/documents", locals: { proposal: } %>
61
61
  <% end %>
62
62
 
63
63
  <% if proposal.photos.any? %>
64
- <%= render partial: "photos", locals: { proposal: } %>
64
+ <%= render partial: "decidim/proposals/admin/proposals/photos", locals: { proposal: } %>
65
65
  <% end %>
66
66
 
67
67
  <% proposal_meetings = proposal.linked_resources(:meetings, "proposals_from_meeting") %>
68
68
  <% if proposal_meetings.any? %>
69
- <%= render partial: "meetings", locals: { proposal_meetings: } %>
69
+ <%= render partial: "decidim/proposals/admin/proposals/meetings", locals: { proposal_meetings: } %>
70
70
  <% end %>
71
71
 
72
72
  <% if allowed_to?(:create, :proposal_note, proposal: proposal) %>
@@ -8,7 +8,7 @@
8
8
  <%= cell("decidim/announcement", params[:filter].present? ? t(".empty_filters") : t(".empty")) %>
9
9
  <% else %>
10
10
  <div class="flex items-center justify-between">
11
- <h2 class="h5 md:h3 decorator"><%= t("count", scope: "decidim.proposals.proposals.index", count: @proposals.total_count) %></h2>
11
+ <h2 class="h5 md:h3 decorator" aria-live="polite" aria-atomic="true"><%= t("count", scope: "decidim.proposals.proposals.index", count: @proposals.total_count) %></h2>
12
12
  <div class="view-layout__links flex view_mode__links">
13
13
  <%= toggle_view_mode_link(@view_mode, "list", t("list_mode", scope: "decidim.proposals.proposals.index"), params) %>
14
14
  <%= toggle_view_mode_link(@view_mode, "grid", t("grid_mode", scope: "decidim.proposals.proposals.index"), params) %>
@@ -1,4 +1,11 @@
1
- <% add_decidim_page_title(t("name", scope: "decidim.components.proposals")) %>
1
+ <% add_decidim_meta_tags(
2
+ description: translated_attribute(current_participatory_space.short_description),
3
+ title: t("decidim.components.pagination.page_title",
4
+ component_name:,
5
+ current_page: @proposals.current_page,
6
+ total_pages: @proposals.total_pages ),
7
+ url: proposals_url,
8
+ resource: current_component) %>
2
9
 
3
10
  <% append_stylesheet_pack_tag "decidim_proposals", media: "all" %>
4
11
  <% append_javascript_pack_tag "decidim_proposals" %>
@@ -12,6 +12,8 @@ ar:
12
12
  state: حالة
13
13
  title: عنوان
14
14
  user_group_id: إنشاء مسودة تعاونية كـ
15
+ import_participatory_text:
16
+ document: مستند
15
17
  proposal:
16
18
  address: عنوان
17
19
  answer: إجابة
@@ -21,6 +23,8 @@ ar:
21
23
  category_id: الفئة
22
24
  decidim_scope_id: النطاق
23
25
  has_address: لديه عنوان
26
+ latitude: خط العرض
27
+ longitude: خط الطول
24
28
  scope_id: نطاق
25
29
  state: حالة
26
30
  suggested_hashtags: الهاشتاج المقترحة
@@ -33,6 +37,8 @@ ar:
33
37
  execution_period: فترة التنفيذ
34
38
  proposals_copy:
35
39
  origin_component_id: مكون لنسخ المقترحات من
40
+ proposals_file_import:
41
+ file: ملف
36
42
  proposals_import:
37
43
  import_proposals: مقترحات الاستيراد
38
44
  keep_answers: الاحتفاظ بالحالة والإجابات
@@ -312,6 +318,7 @@ ar:
312
318
  title: اقتراحات
313
319
  votes:
314
320
  object: أصوات
321
+ title: الأصوات
315
322
  participatory_spaces:
316
323
  highlighted_proposals:
317
324
  see_all: شاهد الكل
@@ -420,7 +427,6 @@ ar:
420
427
  index:
421
428
  actions: أفعال
422
429
  assign_to_valuator: أسنِده إلى مُقيِّم
423
- assign_to_valuator_button: تعيين
424
430
  cancel: إلغاء
425
431
  change_category: تغيير الفئة
426
432
  change_scope: تغيير النطاق
@@ -434,7 +440,6 @@ ar:
434
440
  split_button: انشق، مزق
435
441
  title: اقتراحات
436
442
  unassign_from_valuator: إلغاء الإسناد مِن المُقيِّم
437
- unassign_from_valuator_button: إلغاء الإسناد
438
443
  update: تحديث
439
444
  update_scope_button: تحديث النطاق
440
445
  new:
@@ -685,7 +690,6 @@ ar:
685
690
  text_banner: أنت تتطلع على قائمة الاقتراحات المسحوبة من قبل مؤلفيها. %{go_back_link}.
686
691
  new:
687
692
  send: استمر
688
- title: إنشاء اقتراحك
689
693
  orders:
690
694
  label: 'ترتيب المقترحات حسب:'
691
695
  most_commented: الأكثر تعليقًا عليها
@@ -374,7 +374,6 @@ bg:
374
374
  title: Гласове
375
375
  participatory_spaces:
376
376
  highlighted_proposals:
377
- last: Позледни предложения
378
377
  see_all: Виж всички предложения
379
378
  proposals:
380
379
  actions:
@@ -512,7 +511,6 @@ bg:
512
511
  index:
513
512
  actions: Активности
514
513
  assign_to_valuator: Възлагане на оценител
515
- assign_to_valuator_button: Възлагане
516
514
  cancel: Отказ
517
515
  change_category: Промяна на категория
518
516
  change_scope: Промяна на обхвата
@@ -528,7 +526,6 @@ bg:
528
526
  statuses: Статуси
529
527
  title: Предложения
530
528
  unassign_from_valuator: Отнемане възложеното на оценителя
531
- unassign_from_valuator_button: Отнемане на възложеното
532
529
  update: Актуализация
533
530
  update_scope_button: Актуализиране на обхвата
534
531
  new:
@@ -569,7 +566,6 @@ bg:
569
566
  proposals_imports:
570
567
  create:
571
568
  invalid: Възникна проблем при импортирането на предложенията.
572
- success: "%{number} предложения бяха импортирани успешно."
573
569
  new:
574
570
  create: Импортиране на предложения
575
571
  no_components: Няма други компоненти на предложения в това пространство за участие, от които да се импортират предложенията.
@@ -808,7 +804,6 @@ bg:
808
804
  text_banner: Разглеждате списъка с предложения, оттеглени от своите автори. %{go_back_link}.
809
805
  new:
810
806
  send: Продължи
811
- title: Създайте Ваше предложение
812
807
  orders:
813
808
  label: 'Подреждане на предложенията по:'
814
809
  most_commented: Най-коментирани
@@ -51,11 +51,9 @@ bs:
51
51
  proposals:
52
52
  index:
53
53
  assign_to_valuator: Dodeli procenjivaču
54
- assign_to_valuator_button: Dodeli
55
54
  change_scope: Promeni opseg
56
55
  publish_answers: Objavi odgovore
57
56
  unassign_from_valuator: Oduzmi od procenjivača
58
- unassign_from_valuator_button: Od dodeli
59
57
  update_scope_button: Ažuriraj opseg
60
58
  show:
61
59
  amendments_count: Broj izmena