decidim-proposals 0.14.4 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -0
  3. data/app/assets/images/decidim/gamification/badges/accepted_proposals.svg +194 -104
  4. data/app/assets/images/decidim/gamification/badges/proposals.svg +192 -108
  5. data/app/assets/javascripts/decidim/proposals/admin/proposals.es6 +25 -20
  6. data/app/cells/decidim/proposals/proposal_activity_cell.rb +19 -0
  7. data/app/commands/decidim/proposals/admin/answer_proposal.rb +6 -2
  8. data/app/commands/decidim/proposals/admin/create_proposal.rb +4 -4
  9. data/app/commands/decidim/proposals/admin/import_participatory_text.rb +49 -0
  10. data/app/commands/decidim/proposals/admin/import_proposals.rb +7 -21
  11. data/app/commands/decidim/proposals/admin/merge_proposals.rb +68 -0
  12. data/app/commands/decidim/proposals/admin/publish_participatory_text.rb +65 -0
  13. data/app/commands/decidim/proposals/admin/split_proposals.rb +67 -0
  14. data/app/commands/decidim/proposals/admin/update_proposal.rb +67 -0
  15. data/app/commands/decidim/proposals/create_collaborative_draft.rb +19 -14
  16. data/app/commands/decidim/proposals/create_proposal.rb +4 -2
  17. data/app/commands/decidim/proposals/endorse_proposal.rb +5 -1
  18. data/app/commands/decidim/proposals/publish_proposal.rb +15 -3
  19. data/app/commands/decidim/proposals/unvote_proposal.rb +34 -3
  20. data/app/commands/decidim/proposals/vote_proposal.rb +32 -2
  21. data/app/controllers/decidim/proposals/admin/participatory_texts_controller.rb +62 -0
  22. data/app/controllers/decidim/proposals/admin/proposals_controller.rb +28 -1
  23. data/app/controllers/decidim/proposals/admin/proposals_merges_controller.rb +27 -0
  24. data/app/controllers/decidim/proposals/admin/proposals_splits_controller.rb +27 -0
  25. data/app/controllers/decidim/proposals/collaborative_drafts_controller.rb +0 -1
  26. data/app/controllers/decidim/proposals/proposal_endorsements_controller.rb +6 -2
  27. data/app/controllers/decidim/proposals/proposal_votes_controller.rb +15 -0
  28. data/app/controllers/decidim/proposals/proposals_controller.rb +1 -1
  29. data/app/forms/decidim/proposals/admin/import_participatory_text_form.rb +28 -0
  30. data/app/forms/decidim/proposals/admin/preview_participatory_text_form.rb +21 -0
  31. data/app/forms/decidim/proposals/admin/proposal_form.rb +4 -1
  32. data/app/forms/decidim/proposals/admin/proposals_fork_form.rb +57 -0
  33. data/app/forms/decidim/proposals/admin/proposals_merge_form.rb +13 -0
  34. data/app/forms/decidim/proposals/admin/proposals_split_form.rb +12 -0
  35. data/app/helpers/decidim/proposals/application_helper.rb +23 -0
  36. data/app/helpers/decidim/proposals/map_helper.rb +1 -1
  37. data/app/helpers/decidim/proposals/participatory_texts_helper.rb +18 -0
  38. data/app/helpers/decidim/proposals/proposal_endorsements_helper.rb +1 -1
  39. data/app/helpers/decidim/proposals/proposal_wizard_helper.rb +2 -1
  40. data/app/jobs/decidim/proposals/notify_proposals_mentioned_job.rb +3 -4
  41. data/app/models/decidim/proposals/participatory_text.rb +13 -0
  42. data/app/models/decidim/proposals/proposal.rb +31 -9
  43. data/app/models/decidim/proposals/proposal_vote.rb +21 -1
  44. data/app/permissions/decidim/proposals/admin/permissions.rb +30 -0
  45. data/app/presenters/decidim/proposals/admin_log/proposal_presenter.rb +5 -1
  46. data/app/presenters/decidim/proposals/log/resource_presenter.rb +18 -0
  47. data/app/presenters/decidim/proposals/official_author_presenter.rb +4 -0
  48. data/app/queries/decidim/proposals/metrics/accepted_proposals_metric_manage.rb +29 -0
  49. data/app/queries/decidim/proposals/metrics/proposals_metric_manage.rb +53 -0
  50. data/app/queries/decidim/proposals/metrics/votes_metric_manage.rb +57 -0
  51. data/app/services/decidim/proposals/proposal_builder.rb +72 -0
  52. data/app/services/decidim/proposals/proposal_search.rb +2 -2
  53. data/app/views/decidim/proposals/admin/participatory_texts/_article-preview.html.erb +13 -0
  54. data/app/views/decidim/proposals/admin/participatory_texts/_bulk-actions.html.erb +1 -0
  55. data/app/views/decidim/proposals/admin/participatory_texts/index.html.erb +43 -0
  56. data/app/views/decidim/proposals/admin/participatory_texts/new_import.html.erb +39 -0
  57. data/app/views/decidim/proposals/admin/proposals/_bulk-actions.html.erb +7 -2
  58. data/app/views/decidim/proposals/admin/proposals/_proposal-tr.html.erb +4 -0
  59. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_dropdown.html.erb +36 -0
  60. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_merge.html.erb +15 -0
  61. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_recategorize.html.erb +15 -0
  62. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_split.html.erb +15 -0
  63. data/app/views/decidim/proposals/admin/proposals/edit.html.erb +7 -0
  64. data/app/views/decidim/proposals/admin/proposals/index.html.erb +2 -2
  65. data/app/views/decidim/proposals/collaborative_drafts/compare.html.erb +2 -2
  66. data/app/views/decidim/proposals/collaborative_drafts/complete.html.erb +1 -1
  67. data/app/views/decidim/proposals/collaborative_drafts/show.html.erb +1 -1
  68. data/app/views/decidim/proposals/proposal_endorsements/_identity.html.erb +5 -1
  69. data/app/views/decidim/proposals/proposal_endorsements/update_buttons_and_counters.js.erb +1 -1
  70. data/app/views/decidim/proposals/proposal_votes/update_buttons_and_counters.js.erb +13 -4
  71. data/app/views/decidim/proposals/proposals/_edit_form_fields.html.erb +2 -2
  72. data/app/views/decidim/proposals/proposals/_endorsement_identities_cabin.html.erb +1 -1
  73. data/app/views/decidim/proposals/proposals/_proposal_similar.html.erb +1 -1
  74. data/app/views/decidim/proposals/proposals/_voting_rules.html.erb +15 -4
  75. data/app/views/decidim/proposals/proposals/new.html.erb +1 -1
  76. data/config/locales/ca.yml +72 -4
  77. data/config/locales/de.yml +71 -3
  78. data/config/locales/en.yml +71 -3
  79. data/config/locales/es-PY.yml +71 -3
  80. data/config/locales/es.yml +73 -5
  81. data/config/locales/eu.yml +71 -3
  82. data/config/locales/fi.yml +81 -13
  83. data/config/locales/fr.yml +71 -3
  84. data/config/locales/gl.yml +71 -3
  85. data/config/locales/hu.yml +71 -3
  86. data/config/locales/it.yml +71 -3
  87. data/config/locales/nl.yml +71 -3
  88. data/config/locales/pl.yml +71 -3
  89. data/config/locales/pt-BR.yml +72 -4
  90. data/config/locales/pt.yml +71 -3
  91. data/config/locales/sv.yml +71 -3
  92. data/db/migrate/20180927111721_create_participatory_texts.rb +13 -0
  93. data/db/migrate/20180930125321_add_participatory_text_level_to_proposals.rb +7 -0
  94. data/db/migrate/20180930125321_add_position_to_proposals.rb +7 -0
  95. data/db/migrate/20181003074440_fix_user_groups_ids_in_proposals_endorsements.rb +16 -0
  96. data/db/migrate/20181010114622_add_temporary_votes.rb +9 -0
  97. data/db/migrate/20181016132225_add_organization_as_author.rb +13 -0
  98. data/db/migrate/20181017084221_make_author_polymorhpic_for_proposal_endorsements.rb +31 -0
  99. data/lib/decidim/content_parsers/proposal_parser.rb +9 -3
  100. data/lib/decidim/proposals.rb +3 -1
  101. data/lib/decidim/proposals/admin_engine.rb +12 -1
  102. data/lib/decidim/proposals/component.rb +60 -23
  103. data/lib/decidim/proposals/engine.rb +55 -12
  104. data/lib/decidim/proposals/markdown_to_proposals.rb +90 -0
  105. data/lib/decidim/proposals/participatory_text_section.rb +21 -0
  106. data/lib/decidim/proposals/test/factories.rb +35 -7
  107. data/lib/decidim/proposals/version.rb +1 -1
  108. metadata +86 -19
@@ -0,0 +1,15 @@
1
+ <div id="js-merge-proposals-actions" class="hide js-bulk-action-form">
2
+ <%= form_tag(proposals_merge_path, method: :post, id: "js-form-merge-proposals", class: "flex--cc flex-gap--1") do %>
3
+ <div class="checkboxes hide">
4
+ <% proposals.each do |proposal| %>
5
+ <%= check_box_tag "proposal_ids[]", proposal.id, false, class: "js-check-all-proposal js-proposal-id-#{proposal.id}" %>
6
+ <% end %>
7
+ </div>
8
+
9
+ <%= bulk_components_select((current_component.siblings + [current_component])) %>
10
+
11
+ <%= submit_tag(t("decidim.proposals.admin.proposals.index.merge_button"), id: "js-submit-merge-proposals", class: "button small button--simple float-left") %>
12
+
13
+ <button id="js-cancel-merge-proposals" class="button tiny clear compact js-cancel-bulk-action" type="button"><%= t("decidim.proposals.admin.proposals.index.cancel") %></button>
14
+ <% end %>
15
+ </div>
@@ -0,0 +1,15 @@
1
+ <div id="js-recategorize-proposals-actions" class="hide js-bulk-action-form">
2
+ <%= form_tag(update_category_proposals_path, method: :post, remote: true, id: "js-form-recategorize-proposals", class: "flex--cc flex-gap--1") do %>
3
+ <div class="checkboxes hide">
4
+ <% proposals.each do |proposal| %>
5
+ <%= check_box_tag "proposal_ids[]", proposal.id, false, class: "js-check-all-proposal js-proposal-id-#{proposal.id}" %>
6
+ <% end %>
7
+ </div>
8
+
9
+ <%= bulk_categories_select current_component.categories %>
10
+
11
+ <%= submit_tag(t("decidim.proposals.admin.proposals.index.update"), id: "js-submit-edit-category", class: "button small button--simple float-left") %>
12
+
13
+ <button id="js-cancel-edit-category" class="button tiny clear compact js-cancel-bulk-action" type="button"><%= t("decidim.proposals.admin.proposals.index.cancel") %></button>
14
+ <% end %>
15
+ </div>
@@ -0,0 +1,15 @@
1
+ <div id="js-split-proposals-actions" class="hide js-bulk-action-form">
2
+ <%= form_tag(proposals_split_path, method: :post, id: "js-form-split-proposals", class: "flex--cc flex-gap--1") do %>
3
+ <div class="checkboxes hide">
4
+ <% proposals.each do |proposal| %>
5
+ <%= check_box_tag "proposal_ids[]", proposal.id, false, class: "js-check-all-proposal js-proposal-id-#{proposal.id}" %>
6
+ <% end %>
7
+ </div>
8
+
9
+ <%= bulk_components_select((current_component.siblings + [current_component])) %>
10
+
11
+ <%= submit_tag(t("decidim.proposals.admin.proposals.index.split_button"), id: "js-submit-split-proposals", class: "button small button--simple float-left") %>
12
+
13
+ <button id="js-cancel-split-proposals" class="button tiny clear compact js-cancel-bulk-action" type="button"><%= t("decidim.proposals.admin.proposals.index.cancel") %></button>
14
+ <% end %>
15
+ </div>
@@ -0,0 +1,7 @@
1
+ <%= decidim_form_for(@form, html: { class: "form edit_proposal" }) do |f| %>
2
+ <%= render partial: "form", object: f, locals: { title: t(".title") } %>
3
+
4
+ <div class="button--double form-general-submit">
5
+ <%= f.submit t(".update") %>
6
+ </div>
7
+ <% end %>
@@ -3,7 +3,7 @@
3
3
  <h2 class="card-title flex--sbc">
4
4
  <div>
5
5
  <%= t(".title") %>
6
- <span id="js-recategorize-proposals-count" class="component-counter component-counter--inline" title="<%= t("decidim.proposals.admin.proposals.index.selected") %>"></span>
6
+ <span id="js-selected-proposals-count" class="component-counter component-counter--inline" title="<%= t("decidim.proposals.admin.proposals.index.selected") %>"></span>
7
7
  </div>
8
8
  <%= render partial: "bulk-actions" %>
9
9
  </h2>
@@ -14,7 +14,7 @@
14
14
  <thead>
15
15
  <tr>
16
16
  <th>
17
- <%= check_box_tag "proposals_recategorize", "all", false, class: "js-check-all" %>
17
+ <%= check_box_tag "proposals_bulk", "all", false, class: "js-check-all" %>
18
18
  </th>
19
19
  <th>
20
20
  <%= sort_link(query, :id, t("models.proposal.fields.id", scope: "decidim.proposals"), default_order: :desc ) %>
@@ -2,7 +2,7 @@
2
2
  <%= render partial: "decidim/proposals/proposals/wizard_aside" %>
3
3
 
4
4
  <div class="columns large-6">
5
- <%= render partial: "decidim/proposals/proposals/wizard_header", locals: {callout_step_help_text_class: "warning"} %>
5
+ <%= render partial: "decidim/proposals/proposals/wizard_header", locals: { callout_step_help_text_class: "warning" } %>
6
6
 
7
7
  <% if @similar_collaborative_drafts.presence %>
8
8
  <div class="row small-up-1 card-grid">
@@ -12,7 +12,7 @@
12
12
  </div>
13
13
  <% end %>
14
14
  <div class="row column text-center">
15
- <%= link_to t(".mine_is_different"), complete_collaborative_drafts_path(collaborative_draft: {title: @form.title, body: @form.body}), class: "button small" %>
15
+ <%= link_to t(".mine_is_different"), complete_collaborative_drafts_path(collaborative_draft: { title: @form.title, body: @form.body }), class: "button small" %>
16
16
  </div>
17
17
  </div>
18
18
  <div class="columns large-3"></div>
@@ -36,7 +36,7 @@
36
36
  </div>
37
37
  <% end %>
38
38
 
39
- <% if current_user.user_groups.verified.any? %>
39
+ <% if Decidim::UserGroups::ManageableUserGroups.for(current_user).verified.any? %>
40
40
  <div class="field">
41
41
  <%= user_group_select_field form, :user_group_id %>
42
42
  </div>
@@ -116,7 +116,7 @@
116
116
  <%= render partial: "decidim/shared/static_map", locals: { icon_name: "proposals", geolocalizable: @collaborative_draft } %>
117
117
  <% end %>
118
118
 
119
- <%= cell "decidim/tags", @collaborative_draft, context: {extra_classes: ["tags--collaborative-draft"]} %>
119
+ <%= cell "decidim/tags", @collaborative_draft, context: { extra_classes: ["tags--collaborative-draft"] } %>
120
120
  </div>
121
121
  </div>
122
122
  </div>
@@ -1,5 +1,9 @@
1
1
  <li class="<%= selected ? "selected" : "" %>" data-method="<%= http_method.to_s.upcase %>" data-url="<%= current_endorsement_url %>">
2
- <%= card_for identity, context: { extra_classes: ["author-data--small"] } %>
2
+ <div class="author-data author-data--small">
3
+ <div class="author-data__main">
4
+ <%== cell("decidim/author", identity).profile %>
5
+ </div>
6
+ </div>
3
7
 
4
8
  <%= icon("circle-check", class: "icon--big #{selected ? '' : 'invisible'}") %>
5
9
  </li>
@@ -1,4 +1,4 @@
1
- <% if current_user.user_groups.empty? %>
1
+ <% if Decidim::UserGroups::ManageableUserGroups.for(current_user).verified.empty? %>
2
2
  update_main_page_button();
3
3
  <% end %>
4
4
  update_identities_rows();
@@ -1,8 +1,12 @@
1
- var $proposalVotesCount = $('#proposal-<%= proposal.id %>-votes-count');
2
- var $proposalVoteButton = $('#proposal-<%= proposal.id %>-vote-button');
1
+ <% @proposals.each do |proposal| %>
2
+ (function() {
3
+ var $proposalVotesCount = $('#proposal-<%= proposal.id %>-votes-count');
4
+ var $proposalVoteButton = $('#proposal-<%= proposal.id %>-vote-button');
3
5
 
4
- morphdom($proposalVotesCount[0], '<%= j(render partial: "decidim/proposals/proposals/votes_count", locals: { proposal: proposal, from_proposals_list: @from_proposals_list }).strip.html_safe %>');
5
- morphdom($proposalVoteButton[0], '<%= j(render partial: "decidim/proposals/proposals/vote_button", locals: { proposal: proposal, from_proposals_list: @from_proposals_list }).strip.html_safe %>');
6
+ morphdom($proposalVotesCount[0], '<%= j(render partial: "decidim/proposals/proposals/votes_count", locals: { proposal: proposal, from_proposals_list: @from_proposals_list }).strip.html_safe %>');
7
+ morphdom($proposalVoteButton[0], '<%= j(render partial: "decidim/proposals/proposals/vote_button", locals: { proposal: proposal, from_proposals_list: @from_proposals_list }).strip.html_safe %>');
8
+ })();
9
+ <% end %>
6
10
 
7
11
  <% if vote_limit_enabled? %>
8
12
  var $remainingVotesCount = $('#remaining-votes-count');
@@ -18,3 +22,8 @@ morphdom($proposalVoteButton[0], '<%= j(render partial: "decidim/proposals/propo
18
22
  $notVotedButtons.val('<%= t("decidim.proposals.proposals.vote_button.vote") %>');
19
23
  <% end %>
20
24
  <% end %>
25
+
26
+ <% if show_voting_rules? %>
27
+ var $votingRules = $('.voting-rules');
28
+ morphdom($votingRules[0], '<%= j(render partial: "decidim/proposals/proposals/voting_rules").strip.html_safe %>');
29
+ <% end %>
@@ -3,7 +3,7 @@
3
3
  </div>
4
4
 
5
5
  <div class="field hashtags__container">
6
- <%= form.text_area :body, rows: 10, class: "js-hashtags", hashtaggable: true, value: present(@proposal).body %>
6
+ <%= form.text_area :body, rows: 10, class: "js-hashtags", hashtaggable: true, value: present(@proposal).body %>
7
7
  </div>
8
8
 
9
9
  <% if component_settings.geocoding_enabled? %>
@@ -28,7 +28,7 @@
28
28
  </div>
29
29
  <% end %>
30
30
 
31
- <% if current_user.user_groups.verified.any? %>
31
+ <% if Decidim::UserGroups::ManageableUserGroups.for(current_user).verified.any? %>
32
32
  <div class="field">
33
33
  <%= user_group_select_field form, :user_group_id %>
34
34
  </div>
@@ -1,5 +1,5 @@
1
1
  <%= javascript_include_tag "decidim/proposals/identity_selector_dialog" %>
2
- <% if current_user && current_user.user_groups.verified.any? %>
2
+ <% if current_user && Decidim::UserGroups::ManageableUserGroups.for(current_user).verified.any? %>
3
3
  <button id="select-identity-button" type="button" name="button" class="button small compact light button--sc <%= fully_endorsed ? "success": "secondary" %>">
4
4
  <%= t(".endorse") %>
5
5
  </button>
@@ -16,7 +16,7 @@
16
16
  <%== cell("decidim/proposals/proposal_m", proposal).badge %>
17
17
 
18
18
  <p><%= truncate(present(proposal).html_body, length: 100) %></p>
19
- <%= cell "decidim/tags", proposal, context: {extra_classes: ["tags--proposal"]} %>
19
+ <%= cell "decidim/tags", proposal, context: { extra_classes: ["tags--proposal"] } %>
20
20
  </div>
21
21
  </article>
22
22
  </div>
@@ -1,6 +1,6 @@
1
- <% if votes_enabled? && (vote_limit_enabled? || threshold_per_proposal_enabled? || proposal_limit_enabled? || can_accumulate_supports_beyond_threshold?) %>
2
- <div class="row column">
3
- <div class="callout secondary voting-rules">
1
+ <% if show_voting_rules? %>
2
+ <div class="row column voting-rules">
3
+ <div class="callout secondary">
4
4
  <div class="row">
5
5
  <div class="columns medium-8 large-9">
6
6
  <h3 class="heading3"><%= t(".title") %></h3>
@@ -20,6 +20,17 @@
20
20
  <% if can_accumulate_supports_beyond_threshold? %>
21
21
  <li><%= t(".can_accumulate_supports_beyond_threshold.description", limit: threshold_per_proposal) %></li>
22
22
  <% end %>
23
+
24
+ <% if minimum_votes_per_user_enabled? %>
25
+ <li>
26
+ <%= t(".minimum_votes_per_user.description", votes: minimum_votes_per_user) %>
27
+ <% if votes_given >= minimum_votes_per_user %>
28
+ <%= t(".minimum_votes_per_user.given_enough_votes") %>
29
+ <% else %>
30
+ <%= t(".minimum_votes_per_user.supports_remaining", remaining_votes: minimum_votes_per_user - votes_given) %>
31
+ <% end %>
32
+ </li>
33
+ <% end %>
23
34
  </ul>
24
35
  </div>
25
36
  <% if current_user_can_vote? %>
@@ -27,7 +38,7 @@
27
38
  <div class="card card--nomargin text-center remaining-votes-counter">
28
39
  <div class="card__content">
29
40
  <span class="definition-data__title"><%= t(".vote_limit.left", limit: component_settings.vote_limit) %></span>
30
- <%= render partial: "remaining_votes_count" %>
41
+ <%= render partial: "decidim/proposals/proposals/remaining_votes_count" %>
31
42
  <span class="extra__suport-text"><%= t(".vote_limit.votes") %></span>
32
43
  </div>
33
44
  </div>
@@ -15,7 +15,7 @@
15
15
  <%= form.text_area :body, rows: 10, class: "js-hashtags", hashtaggable: true %>
16
16
  </div>
17
17
 
18
- <% if current_user.user_groups.verified.any? %>
18
+ <% if Decidim::UserGroups::ManageableUserGroups.for(current_user).verified.any? %>
19
19
  <div class="field">
20
20
  <%= user_group_select_field form, :user_group_id %>
21
21
  </div>
@@ -75,8 +75,10 @@ ca:
75
75
  collaborative_drafts_enabled: Esborranys col·laboratius habilitats
76
76
  comments_enabled: Comentaris habilitats
77
77
  geocoding_enabled: Geocodificació habilitada
78
+ minimum_votes_per_user: Suports mínims per usuari
78
79
  new_proposal_help_text: Text d'ajuda al crear una nova proposta
79
80
  official_proposals_enabled: Propostes oficials habilitades
81
+ participatory_texts_enabled: Texts participatius habilitats
80
82
  proposal_answering_enabled: Activar resposta oficial a propostes
81
83
  proposal_edit_before_minutes: Les propostes poden ser editades pels autors abans que passin aquest nombre de minuts
82
84
  proposal_length: Longitud màxima del cos de la proposta
@@ -187,29 +189,48 @@ ca:
187
189
  gamification:
188
190
  badges:
189
191
  accepted_proposals:
192
+ conditions:
193
+ - Tria l'espai de participació del teu interès amb la creació de propostes activada
194
+ - Intenta fer propostes que es puguin dur a terme. D'aquesta manera és més probable que s'acceptin.
195
+ description: Aquest distintiu es concedeix quan participes activament amb noves propostes i s'accepten.
190
196
  description_another: Aquest usuari ha aconseguit tenir %{score} propostes acceptades.
191
197
  description_own: Has aconseguit que s'acceptin %{score} de les teves propostes.
192
- explanation: Els usuaris obtenen aquesta distinció aconseguint que s'acceptin les seves propostes.
193
198
  name: Propostes acceptades
194
199
  next_level_in: Aconsegueix que s'acceptin %{score} propostes més per arribar al següent nivell!
195
200
  unearned_another: Aquest usuari encara no ha aconseguit que s'accepti cap de les seves propostes.
196
201
  unearned_own: Cap de les teves propostes encara no ha estat acceptada.
197
202
  proposal_votes:
203
+ conditions:
204
+ - Navega i passa un temps llegint les propostes d'altres persones
205
+ - Dóna suport a les propostes que desitgis o troba'n d'interessants
206
+ description: Aquest distintiu es concedeix quan dones suport a propostes d'altres persones.
198
207
  description_another: Aquest usuari ha donat suport a %{score} propostes.
199
208
  description_own: Has donat suport a %{score} propostes.
200
- explanation: Els usuaris obtenen aquesta distinció donant suport a les propostes.
201
209
  name: Suports a propostes
202
210
  next_level_in: Dona suport a %{score} propostes més per arribar al següent nivell!
203
211
  unearned_another: Aquest usuari encara no ha donat suport a cap proposta.
204
212
  unearned_own: Encara no has donat suport a cap proposta.
205
213
  proposals:
214
+ conditions:
215
+ - Tria un espai de participació del teu interès amb la creació de propostes activada
216
+ - Crea una proposta nova
217
+ description: Aquest distintiu es concedeix quan participes activament amb noves propostes.
206
218
  description_another: Aquest usuari ha creat %{score} propostes.
207
219
  description_own: Has creat %{score} propostes.
208
- explanation: Els usuaris obtenen aquesta insígnia creant propostes.
209
220
  name: Propostes
210
221
  next_level_in: Crea %{score} més propostes per arribar al següent nivell!
211
222
  unearned_another: Aquest usuari encara no ha creat cap proposta.
212
223
  unearned_own: Encara no has creat cap proposta.
224
+ metrics:
225
+ accepted_proposals:
226
+ object: propostes
227
+ title: Propostes acceptades
228
+ proposals:
229
+ object: propostes
230
+ title: Propostes
231
+ votes:
232
+ object: vots
233
+ title: Vots
213
234
  participatory_processes:
214
235
  participatory_process_groups:
215
236
  highlighted_proposals:
@@ -221,8 +242,10 @@ ca:
221
242
  proposals:
222
243
  actions:
223
244
  answer: Respondre
245
+ edit_proposal: Edita la proposta
224
246
  import: Importa des d'un altre component
225
247
  new: Nova proposta
248
+ participatory_texts: Textos participatius
226
249
  private_notes: Notes privades
227
250
  title: Accions
228
251
  admin:
@@ -234,6 +257,28 @@ ca:
234
257
  models:
235
258
  proposal:
236
259
  name: Proposta
260
+ participatory_texts:
261
+ bulk-actions:
262
+ import_doc: Importar document
263
+ import:
264
+ invalid: El formulari no és vàlid!
265
+ success: Enhorabona, les seccions següents s'han analitzat del document importat, i s'han convertit en propostes. Ara pots revisar-les i ajustar el que necessitis abans de publicar.
266
+ index:
267
+ info_1: Les seccions següents s'han analitzat del document importat, i s'han convertit en propostes. Ara pots revisar-les i ajustar el que necessitis abans de publicar.
268
+ publish_document: Publicar el document
269
+ title: PREVISUALITZAR EL TEXT PARTICIPATIU
270
+ new_import:
271
+ bottom_hint: "(Podràs previsualitzar i ordenar les seccions del document)"
272
+ document_legend: 'Afegeix un document de menys de 2MB, cadascuna de les seccions fins que s''analitzin 3 nivells en Propostes. Els formats suportats són: Markdown'
273
+ title: AGREGAR DOCUMENT
274
+ upload_document: Penja el document
275
+ publish:
276
+ invalid: No s'han pogut publicar propostes
277
+ success: S'han publicat totes les propostes
278
+ sections:
279
+ article: "<em>Article</em>"
280
+ section: "<em>Secció:</em> <strong>%{title}</strong>"
281
+ sub-section: "<em>Subsecció:</em> %{title}"
237
282
  proposal_answers:
238
283
  edit:
239
284
  accepted: Acceptada
@@ -257,6 +302,9 @@ ca:
257
302
  create:
258
303
  invalid: Hi ha hagut un problema en crear aquesta proposta
259
304
  success: Proposta creada correctament
305
+ edit:
306
+ title: Actualitza la proposta
307
+ update: Actualització
260
308
  form:
261
309
  attachment_legend: "(Opcional) Afegiu un fitxer adjunt"
262
310
  select_a_category: Selecciona una categoria
@@ -264,7 +312,12 @@ ca:
264
312
  actions: Accions
265
313
  cancel: Cancel·lar
266
314
  change_category: Canvia la categoria
315
+ merge: Uneix-te a un de nou
316
+ merge_button: Fusionar
317
+ select_component: Selecciona un component
267
318
  selected: seleccionat
319
+ split: Dividir propostes
320
+ split_button: Split
268
321
  title: Propostes
269
322
  update: Actualitza
270
323
  new:
@@ -284,6 +337,14 @@ ca:
284
337
  no_components: No hi ha cap altre component de propostes en aquest espai participatiu des d'on importar-les.
285
338
  select_component: Escull un continent
286
339
  select_states: Consulteu els estats de les propostes per importar
340
+ proposals_merges:
341
+ create:
342
+ invalid: S'ha produït un error en combinar les propostes seleccionades.
343
+ success: S'han combinat amb èxit les propostes en una nova.
344
+ proposals_splits:
345
+ create:
346
+ invalid: S'ha produït un error en dividir les propostes seleccionades.
347
+ success: S'ha dividit amb èxit les propostes en unes noves.
287
348
  shared:
288
349
  info_proposal:
289
350
  body: Cos
@@ -294,6 +355,7 @@ ca:
294
355
  proposal:
295
356
  answer: "%{user_name} ha respost a la proposta %{resource_name} a l'espai %{space_name}"
296
357
  create: "%{user_name} ha creat la proposta %{resource_name} sobre l'espai %{space_name} com a proposta oficial"
358
+ update: "%{user_name} ha actualitzat la proposta oficial %{resource_name} sobre l'espai %{space_name}"
297
359
  proposal_note:
298
360
  create: "%{user_name} ha deixat una nota privada a la proposta %{resource_name} dins l'espai %{space_name}"
299
361
  answers:
@@ -422,6 +484,8 @@ ca:
422
484
  destroy_draft:
423
485
  error: S'ha produït un error en suprimir l'esborrany de la proposta.
424
486
  success: L'esborrany de proposta s'ha eliminat amb èxit.
487
+ last_activity:
488
+ new_proposal_at_html: "<span>Nova proposta a %{link}</span>"
425
489
  models:
426
490
  collaborative_draft:
427
491
  fields:
@@ -535,7 +599,7 @@ ca:
535
599
  view_proposal: Veure proposta
536
600
  show:
537
601
  edit_proposal: Editar proposta
538
- endorsements_list: Llista d'adhesions
602
+ endorsements_list: Llistat d'adhesions
539
603
  hidden_endorsers_count:
540
604
  one: i 1 persona més
541
605
  other: i %{count} persones més
@@ -570,6 +634,10 @@ ca:
570
634
  voting_rules:
571
635
  can_accumulate_supports_beyond_threshold:
572
636
  description: Cada proposta pot acumular més de %{limit} suports
637
+ minimum_votes_per_user:
638
+ description: Has de distribuir un mínim de 3 suports entre diferents propostes.
639
+ given_enough_votes: Has donat suficients suports.
640
+ supports_remaining: Has de donar %{remaining_votes} suport/s més a propostes per tenir en compte els teus suports.
573
641
  proposal_limit:
574
642
  description: Pots crear fins a %{limit} propostes.
575
643
  threshold_per_proposal:
@@ -75,8 +75,10 @@ de:
75
75
  collaborative_drafts_enabled: Collaborative Entwürfe aktiviert
76
76
  comments_enabled: Kommentare aktiviert
77
77
  geocoding_enabled: Geocodierung aktiviert
78
+ minimum_votes_per_user: Mindeststimmen pro Nutzer
78
79
  new_proposal_help_text: Neuer Vorschlagstext
79
80
  official_proposals_enabled: Offizielle Vorschläge aktiviert
81
+ participatory_texts_enabled: Partizipative Texte aktiviert
80
82
  proposal_answering_enabled: Angebotsantworten aktiviert
81
83
  proposal_edit_before_minutes: Vorschläge können von Autoren bearbeitet werden, bevor diese vielen Minuten verstreichen
82
84
  proposal_length: Maximale Länge des Vorschlagskörpers
@@ -183,29 +185,48 @@ de:
183
185
  gamification:
184
186
  badges:
185
187
  accepted_proposals:
188
+ conditions:
189
+ - Wählen Sie den Bereich für die Teilnahme Ihrer Interessen mit der Einreichung von Vorschlägen aktiviert
190
+ - Versuchen Sie Vorschläge zu machen, die ausgeführt werden können. Auf diese Weise werden sie eher akzeptiert.
191
+ description: Dieses Abzeichen wird gewährt, wenn Sie aktiv an neuen Angeboten teilnehmen und diese angenommen werden.
186
192
  description_another: Dieser Benutzer hat %{score} Vorschläge akzeptiert.
187
193
  description_own: Sie haben %{score} Vorschläge angenommen.
188
- explanation: Benutzer erhalten dieses Abzeichen, indem sie ihre Vorschläge annehmen lassen.
189
194
  name: Akzeptierte Vorschläge
190
195
  next_level_in: Erhalten Sie %{score} weitere Vorschläge, um das nächste Level zu erreichen!
191
196
  unearned_another: Dieser Benutzer hat noch keine Vorschläge erhalten.
192
197
  unearned_own: Sie haben noch keine Vorschläge erhalten.
193
198
  proposal_votes:
199
+ conditions:
200
+ - Stöbern Sie und verbringen Sie etwas Zeit, die Vorschläge anderer Leute zu lesen
201
+ - Unterstützen Sie die Vorschläge, die Sie mögen oder interessant finden
202
+ description: Dieses Abzeichen wird gewährt, wenn Sie Vorschläge anderer Personen unterstützen.
194
203
  description_another: Dieser Benutzer hat %{score} Vorschläge unterstützt.
195
204
  description_own: Sie haben %{score} Vorschläge unterstützt.
196
- explanation: Benutzer erhalten dieses Abzeichen, indem sie Vorschläge unterstützen.
197
205
  name: Vorschlag unterstützt
198
206
  next_level_in: Unterstütze %{score} weitere Vorschläge, um das nächste Level zu erreichen!
199
207
  unearned_another: Dieser Benutzer hat noch keine Vorschläge unterstützt.
200
208
  unearned_own: Sie haben noch keine Vorschläge unterstützt.
201
209
  proposals:
210
+ conditions:
211
+ - Wählen Sie den Bereich für die Teilnahme Ihrer Interessen mit der Einreichung von Vorschlägen aktiviert
212
+ - Erstellen Sie einen neuen Vorschlag
213
+ description: Dieses Abzeichen wird gewährt, wenn Sie aktiv an neuen Vorschlägen teilnehmen.
202
214
  description_another: Dieser Benutzer hat %{score} Vorschläge erstellt.
203
215
  description_own: Sie haben %{score} Vorschläge erstellt.
204
- explanation: Benutzer erhalten dieses Abzeichen, indem sie Vorschläge erstellen.
205
216
  name: Vorschläge
206
217
  next_level_in: Erstellen Sie %{score} weitere Vorschläge, um das nächste Level zu erreichen!
207
218
  unearned_another: Dieser Benutzer hat noch keine Vorschläge erstellt.
208
219
  unearned_own: Sie haben noch keine Vorschläge erstellt.
220
+ metrics:
221
+ accepted_proposals:
222
+ object: Vorschläge
223
+ title: Akzeptierte Vorschläge
224
+ proposals:
225
+ object: Vorschläge
226
+ title: Vorschläge
227
+ votes:
228
+ object: Stimmen
229
+ title: Stimmen
209
230
  participatory_processes:
210
231
  participatory_process_groups:
211
232
  highlighted_proposals:
@@ -217,8 +238,10 @@ de:
217
238
  proposals:
218
239
  actions:
219
240
  answer: Antworten
241
+ edit_proposal: Angebot bearbeiten
220
242
  import: Importieren von einer anderen Komponente
221
243
  new: Neuer Vorschlag
244
+ participatory_texts: Partizipative Texte
222
245
  private_notes: Private Notizen
223
246
  title: Aktionen
224
247
  admin:
@@ -230,6 +253,28 @@ de:
230
253
  models:
231
254
  proposal:
232
255
  name: Vorschlag
256
+ participatory_texts:
257
+ bulk-actions:
258
+ import_doc: Dokument importieren
259
+ import:
260
+ invalid: Das Formular ist ungültig!
261
+ success: Herzlichen Glückwunsch, die folgenden Abschnitte wurden aus dem importierten Dokument analysiert, sie wurden in Vorschläge konvertiert. Jetzt können Sie alles überprüfen und anpassen, bevor Sie es veröffentlichen.
262
+ index:
263
+ info_1: Die folgenden Abschnitte wurden aus dem importierten Dokument analysiert, sie wurden in Vorschläge konvertiert. Jetzt können Sie alles überprüfen und anpassen, bevor Sie es veröffentlichen.
264
+ publish_document: Dokument veröffentlichen
265
+ title: VORSCHAU TEILNEHMERTEXT
266
+ new_import:
267
+ bottom_hint: "(Sie können Dokumentabschnitte in der Vorschau anzeigen und sortieren.)"
268
+ document_legend: 'Fügen Sie ein Dokument mit weniger als 2 MB hinzu, wobei jeder Abschnitt bis zu 3 Ebenen tief in Vorschläge zerlegt wird. Unterstützte Formate sind: Markdown'
269
+ title: DOKUMENT HINZUFÜGEN
270
+ upload_document: Dokument hochladen
271
+ publish:
272
+ invalid: Vorschläge konnten nicht veröffentlicht werden
273
+ success: Alle Vorschläge wurden veröffentlicht
274
+ sections:
275
+ article: "<em>Artikel</em>"
276
+ section: "<em>Abschnitt:</em> <strong>%{title}</strong>"
277
+ sub-section: "<em>Unterabschnitt:</em> %{title}"
233
278
  proposal_answers:
234
279
  edit:
235
280
  accepted: Akzeptiert
@@ -253,6 +298,9 @@ de:
253
298
  create:
254
299
  invalid: Beim Erstellen dieses Angebots ist ein Problem aufgetreten
255
300
  success: Angebot erfolgreich erstellt
301
+ edit:
302
+ title: Angebot aktualisieren
303
+ update: Aktualisieren
256
304
  form:
257
305
  attachment_legend: "(Optional) Fügen Sie einen Anhang hinzu"
258
306
  select_a_category: Wählen Sie eine Kategorie
@@ -260,7 +308,12 @@ de:
260
308
  actions: Aktionen
261
309
  cancel: Stornieren
262
310
  change_category: Kategorie ändern
311
+ merge: Verschmelze zu einem neuen
312
+ merge_button: Verschmelzen
313
+ select_component: Wählen Sie eine Komponente aus
263
314
  selected: ausgewählt
315
+ split: Split-Vorschläge
316
+ split_button: Teilt
264
317
  title: Vorschläge
265
318
  update: Aktualisieren
266
319
  new:
@@ -280,6 +333,14 @@ de:
280
333
  no_components: In diesem partizipatorischen Bereich gibt es keine weiteren Vorschlagskomponenten, aus denen die Vorschläge importiert werden könnten.
281
334
  select_component: Bitte wählen Sie eine Komponente aus
282
335
  select_states: Überprüfen Sie die Status der zu importierenden Vorschläge
336
+ proposals_merges:
337
+ create:
338
+ invalid: Beim Zusammenführen der ausgewählten Vorschläge ist ein Fehler aufgetreten.
339
+ success: Erfolgreich die Vorschläge in eine neue zusammengeführt.
340
+ proposals_splits:
341
+ create:
342
+ invalid: Beim Teilen der ausgewählten Vorschläge ist ein Fehler aufgetreten.
343
+ success: Die Vorschläge wurden erfolgreich in neue aufgeteilt.
283
344
  shared:
284
345
  info_proposal:
285
346
  body: Karosserie
@@ -290,6 +351,7 @@ de:
290
351
  proposal:
291
352
  answer: "%{user_name} beantwortete den %{resource_name} Vorschlag auf den %{space_name} Feldern"
292
353
  create: "%{user_name} hat den %{resource_name} Vorschlag auf den %{space_name} Feldern als offizieller Vorschlag erstellt"
354
+ update: "%{user_name} aktualisiert den %{resource_name} offiziellen Vorschlag für die %{space_name} Flächen"
293
355
  proposal_note:
294
356
  create: "%{user_name} eine private Notiz zu dem %{resource_name} Vorschlag auf dem %{space_name} Feld hinterlassen"
295
357
  answers:
@@ -418,6 +480,8 @@ de:
418
480
  destroy_draft:
419
481
  error: Es gab Fehler beim Löschen des Angebotsentwurfs.
420
482
  success: Der Angebotsentwurf wurde erfolgreich gelöscht.
483
+ last_activity:
484
+ new_proposal_at_html: "<span>Neuer Vorschlag bei %{link}</span>"
421
485
  models:
422
486
  collaborative_draft:
423
487
  fields:
@@ -566,6 +630,10 @@ de:
566
630
  voting_rules:
567
631
  can_accumulate_supports_beyond_threshold:
568
632
  description: Jeder Vorschlag kann mehr als %{limit} Unterstützungen sammeln
633
+ minimum_votes_per_user:
634
+ description: Sie müssen mindestens 3 Stimmen unter verschiedenen Vorschlägen verteilen.
635
+ given_enough_votes: Du hast genug Unterstützung gegeben.
636
+ supports_remaining: Sie müssen %{remaining_votes} weitere Vorschläge abgeben, damit Ihre Stimmen berücksichtigt werden.
569
637
  proposal_limit:
570
638
  description: Sie können bis zu %{limit} Vorschläge erstellen.
571
639
  threshold_per_proposal: