decidim-reporting_proposals 0.2.0

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 (142) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +32 -0
  3. data/.erb-lint.yml +30 -0
  4. data/.eslintignore +3 -0
  5. data/.eslintrc.json +239 -0
  6. data/.github/workflows/codeql-analysis.yml +74 -0
  7. data/.github/workflows/lint.yml +45 -0
  8. data/.github/workflows/test_integration.yml +125 -0
  9. data/.github/workflows/test_unit.yml +51 -0
  10. data/.gitignore +27 -0
  11. data/.rspec +3 -0
  12. data/.rubocop.yml +3 -0
  13. data/.rubocop_rails.yml +87 -0
  14. data/.rubocop_ruby.yml +1754 -0
  15. data/.ruby-version +1 -0
  16. data/.simplecov +13 -0
  17. data/CODE_OF_CONDUCT.md +74 -0
  18. data/Gemfile +40 -0
  19. data/Gemfile.lock +815 -0
  20. data/LICENSE-AGPLv3.txt +661 -0
  21. data/README.md +166 -0
  22. data/Rakefile +40 -0
  23. data/app/cells/decidim/reporting_proposals/edit_note_modal/show.erb +20 -0
  24. data/app/cells/decidim/reporting_proposals/edit_note_modal_cell.rb +37 -0
  25. data/app/commands/concerns/decidim/reporting_proposals/admin/create_category_override.rb +32 -0
  26. data/app/commands/concerns/decidim/reporting_proposals/admin/update_category_override.rb +32 -0
  27. data/app/commands/concerns/decidim/reporting_proposals/create_report_override.rb +19 -0
  28. data/app/commands/decidim/reporting_proposals/admin/update_proposal.rb +46 -0
  29. data/app/commands/decidim/reporting_proposals/admin/update_proposal_note.rb +36 -0
  30. data/app/commands/decidim/reporting_proposals/create_reporting_proposal.rb +68 -0
  31. data/app/controllers/concerns/decidim/reporting_proposals/admin/categories_controller_override.rb +16 -0
  32. data/app/controllers/concerns/decidim/reporting_proposals/admin/needs_header_snippets.rb +50 -0
  33. data/app/controllers/concerns/decidim/reporting_proposals/admin/proposal_answer_templates_controller_override.rb +18 -0
  34. data/app/controllers/concerns/decidim/reporting_proposals/admin/proposal_answers_controller_override.rb +35 -0
  35. data/app/controllers/concerns/decidim/reporting_proposals/admin/proposals_controller_override.rb +28 -0
  36. data/app/controllers/concerns/decidim/reporting_proposals/needs_proposal_extra_validations_snippets.rb +51 -0
  37. data/app/controllers/concerns/decidim/reporting_proposals/proposals_controller_override.rb +113 -0
  38. data/app/controllers/decidim/reporting_proposals/admin/application_controller.rb +18 -0
  39. data/app/controllers/decidim/reporting_proposals/admin/proposal_notes_controller.rb +38 -0
  40. data/app/controllers/decidim/reporting_proposals/admin/proposals_controller.rb +61 -0
  41. data/app/controllers/decidim/reporting_proposals/application_controller.rb +11 -0
  42. data/app/controllers/decidim/reporting_proposals/geolocation_controller.rb +32 -0
  43. data/app/forms/concerns/decidim/reporting_proposals/admin/category_form_override.rb +19 -0
  44. data/app/forms/concerns/decidim/reporting_proposals/form_builder_override.rb +48 -0
  45. data/app/forms/concerns/decidim/reporting_proposals/map_builder_override.rb +60 -0
  46. data/app/forms/decidim/reporting_proposals/admin/proposal_photo_form.rb +23 -0
  47. data/app/forms/decidim/reporting_proposals/proposal_form.rb +33 -0
  48. data/app/helpers/concerns/decidim/reporting_proposals/admin/proposals_helper_override.rb +63 -0
  49. data/app/helpers/concerns/decidim/reporting_proposals/proposal_wizard_helper_override.rb +61 -0
  50. data/app/jobs/decidim/reporting_proposals/assign_proposal_valuators_job.rb +51 -0
  51. data/app/models/concerns/decidim/reporting_proposals/category_override.rb +28 -0
  52. data/app/models/concerns/decidim/reporting_proposals/participatory_space_role_config/valuator_override.rb +17 -0
  53. data/app/models/concerns/decidim/reporting_proposals/participatory_space_user_role_override.rb +25 -0
  54. data/app/models/decidim/reporting_proposals/category_valuator.rb +28 -0
  55. data/app/overrides/decidim/admin/categories/_form/add_valuators_field.html.erb.deface +3 -0
  56. data/app/overrides/decidim/admin/categories/index/add_table_column_name.html.erb.deface +3 -0
  57. data/app/overrides/decidim/admin/categories/index/add_valuators.html.erb.deface +3 -0
  58. data/app/overrides/decidim/proposals/admin/proposal_notes/_proposal_notes/add_edit_link.html.erb.deface +3 -0
  59. data/app/overrides/decidim/proposals/admin/proposal_notes/_proposal_notes/add_links_to_note.html.erb.deface +3 -0
  60. data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_td_hide_action.html.erb.deface +3 -0
  61. data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_valuators_name.html.erb.deface +9 -0
  62. data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/replace_td_title.html.erb.deface +3 -0
  63. data/app/overrides/decidim/proposals/admin/proposals/show/add_photo_management.html.erb.deface +3 -0
  64. data/app/overrides/decidim/proposals/admin/proposals/show/add_send_email_btn.html.erb.deface +3 -0
  65. data/app/overrides/decidim/proposals/admin/proposals/show/remove_photos.html.erb.deface +4 -0
  66. data/app/overrides/decidim/proposals/admin/proposals/show/replace_valuators.html.erb.deface +3 -0
  67. data/app/overrides/decidim/proposals/proposals/_proposal_similar/add_distance_badge.html.erb.deface +5 -0
  68. data/app/overrides/decidim/proposals/proposals/_wizard_header/replace_title.html.erb.deface +14 -0
  69. data/app/overrides/decidim/proposals/proposals/edit/add_user_group.html.erb.deface +3 -0
  70. data/app/overrides/decidim/proposals/proposals/edit/replace_javascript.html.erb.deface +8 -0
  71. data/app/overrides/decidim/proposals/proposals/edit/replace_partial_edit_form_fields.html.erb.deface +3 -0
  72. data/app/overrides/decidim/proposals/proposals/edit_draft/add_user_group.html.erb.deface +3 -0
  73. data/app/overrides/decidim/proposals/proposals/edit_draft/replace_javascript.html.erb.deface +8 -0
  74. data/app/overrides/decidim/proposals/proposals/edit_draft/replace_partial_edit_form_fields.html.erb.deface +3 -0
  75. data/app/overrides/decidim/proposals/proposals/index/add_additional_button.html.erb.deface +3 -0
  76. data/app/overrides/decidim/proposals/proposals/new/remove_title.html.erb.deface +1 -0
  77. data/app/overrides/decidim/proposals/proposals/new/replace_body.html.erb.deface +3 -0
  78. data/app/overrides/decidim/proposals/proposals/new/replace_javascript.html.erb.deface +8 -0
  79. data/app/overrides/decidim/proposals/proposals/show/add_additional_button.html.erb.deface +3 -0
  80. data/app/overrides/layouts/decidim/_process_header_steps/always_show_new_proposals.html.erb.deface +3 -0
  81. data/app/packs/entrypoints/decidim_reporting_proposals.js +6 -0
  82. data/app/packs/entrypoints/decidim_reporting_proposals_camera.js +2 -0
  83. data/app/packs/entrypoints/decidim_reporting_proposals_geocoding.js +2 -0
  84. data/app/packs/entrypoints/decidim_reporting_proposals_js_validations.js +1 -0
  85. data/app/packs/entrypoints/decidim_reporting_proposals_list_component_admin.js +1 -0
  86. data/app/packs/entrypoints/decidim_reporting_proposals_manage_component_admin.js +1 -0
  87. data/app/packs/images/.keep +0 -0
  88. data/app/packs/src/decidim/reporting_proposals/proposal_extra_validations.js +89 -0
  89. data/app/packs/src/decidim/reporting_proposals/proposals/add_proposal.js +66 -0
  90. data/app/packs/src/decidim/reporting_proposals/reverse_geocoding.js +54 -0
  91. data/app/packs/src/decidim/reporting_proposals/user_camera_inputs.js +49 -0
  92. data/app/packs/stylesheets/decidim/reporting_proposals/geocoding_addons.scss +34 -0
  93. data/app/packs/stylesheets/decidim/reporting_proposals/list_component_admin.scss +27 -0
  94. data/app/packs/stylesheets/decidim/reporting_proposals/manage_component_admin.scss +31 -0
  95. data/app/packs/stylesheets/decidim/reporting_proposals/proposals/add_proposal.scss +12 -0
  96. data/app/packs/stylesheets/decidim/reporting_proposals/user_camera_inputs.scss +19 -0
  97. data/app/permissions/concerns/decidim/reporting_proposals/admin/permissions_override.rb +27 -0
  98. data/app/permissions/decidim/reporting_proposals/admin/permissions.rb +79 -0
  99. data/app/permissions/decidim/reporting_proposals/permissions.rb +17 -0
  100. data/app/queries/decidim/reporting_proposals/nearby_proposals.rb +57 -0
  101. data/app/serializers/decidim/reporting_proposals/proposal_serializer_override.rb +77 -0
  102. data/app/validators/concerns/decidim/reporting_proposals/component_validator_override.rb +25 -0
  103. data/app/views/decidim/proposals/admin/proposal_notes/_editing_note.html.erb +18 -0
  104. data/app/views/decidim/proposals/admin/proposal_notes/_proposal_notes_body.html.erb +6 -0
  105. data/app/views/decidim/proposals/admin/proposals/_send_email_button.html.erb +4 -0
  106. data/app/views/decidim/proposals/proposals/_additional_button.html.erb +6 -0
  107. data/app/views/decidim/reporting_proposals/admin/categories/_column_valuators.html.erb +1 -0
  108. data/app/views/decidim/reporting_proposals/admin/categories/_valuators.html.erb +1 -0
  109. data/app/views/decidim/reporting_proposals/admin/categories/_valuators_field.html.erb +7 -0
  110. data/app/views/decidim/reporting_proposals/admin/proposals/_photo_form.html.erb +24 -0
  111. data/app/views/decidim/reporting_proposals/admin/proposals/_photo_gallery.html.erb +21 -0
  112. data/app/views/decidim/reporting_proposals/admin/proposals/_photos.html.erb +14 -0
  113. data/app/views/decidim/reporting_proposals/admin/proposals/_proposal_td_hide.html.erb +20 -0
  114. data/app/views/decidim/reporting_proposals/admin/proposals/_proposal_td_title.html.erb +41 -0
  115. data/app/views/decidim/reporting_proposals/proposals/_additional_button_for_show.html.erb +6 -0
  116. data/app/views/decidim/reporting_proposals/proposals/_new_proposal_fields.html.erb +7 -0
  117. data/app/views/decidim/reporting_proposals/proposals/_reporting_proposal_fields.html.erb +113 -0
  118. data/app/views/decidim/reporting_proposals/proposals/_user_group.html.erb +5 -0
  119. data/bin/rails +6 -0
  120. data/bin/webpack-dev-server +6 -0
  121. data/codecov.yml +11 -0
  122. data/config/assets.rb +13 -0
  123. data/config/i18n-tasks.yml +13 -0
  124. data/config/locales/ca.yml +366 -0
  125. data/config/locales/de.yml +366 -0
  126. data/config/locales/en.yml +426 -0
  127. data/config/locales/es.yml +366 -0
  128. data/crowdin.yml +45 -0
  129. data/db/migrate/20221219151846_create_decidim_categories_valuators.rb +17 -0
  130. data/decidim-reporting_proposals.gemspec +34 -0
  131. data/lib/decidim/api/reporting_proposals_type.rb +10 -0
  132. data/lib/decidim/reporting_proposals/admin.rb +8 -0
  133. data/lib/decidim/reporting_proposals/admin_engine.rb +31 -0
  134. data/lib/decidim/reporting_proposals/component.rb +490 -0
  135. data/lib/decidim/reporting_proposals/config.rb +53 -0
  136. data/lib/decidim/reporting_proposals/engine.rb +96 -0
  137. data/lib/decidim/reporting_proposals/test/factories.rb +13 -0
  138. data/lib/decidim/reporting_proposals/version.rb +15 -0
  139. data/lib/decidim/reporting_proposals.rb +13 -0
  140. data/package-lock.json +7844 -0
  141. data/package.json +195 -0
  142. metadata +319 -0
@@ -0,0 +1,113 @@
1
+ <% if @form.categories&.any? %>
2
+ <div class="field">
3
+ <%= form.categories_select :category_id, @form.categories, include_blank: t("decidim.proposals.proposals.edit.select_a_category") %>
4
+ </div>
5
+ <% end %>
6
+
7
+ <% if component_settings.attachments_allowed? %>
8
+ <fieldset class="gallery__container photos_container">
9
+ <% if @form.photos.any? %>
10
+ <% @form.photos.each do |photo| %>
11
+ <div class="callout gallery__item" id="attachment_<%= photo.id %>" data-closable>
12
+ <%= image_tag photo.thumbnail_url, class: "thumbnail", alt: photo.file.filename %>
13
+ <%= form.hidden_field :photos, multiple: true, value: photo.id, id: "photo-#{photo.id}" %>
14
+ <button class="close-button"
15
+ aria-label="<%= t("delete_image", scope: "decidim.proposals.proposals.edit") %>"
16
+ title="<%= t("delete_image", scope: "decidim.proposals.proposals.edit") %>"
17
+ type="button"
18
+ data-close>
19
+ <span aria-hidden="true">&times;</span>
20
+ </button>
21
+ </div>
22
+ <% end %>
23
+ <% end %>
24
+ <div class="field row column">
25
+ <%= form.file_field :add_photos, multiple: false, label: t("image", scope: "decidim.reporting_proposals.proposals.form") %>
26
+
27
+ <div class="has_no_image">
28
+ <%= form.check_box :has_no_image %>
29
+ </div>
30
+ </div>
31
+ </fieldset>
32
+
33
+ <% end %>
34
+
35
+ <% if @form.geocoding_enabled? %>
36
+ <div class="field" id="address_input">
37
+ <div class="address-fill">
38
+ <%= form.geocoding_field :address, placeholder: t("decidim.proposals.proposals.placeholder.address") %>
39
+ </div>
40
+ <div class="has_no_address">
41
+ <%= form.check_box :has_no_address %>
42
+ <%= form.hidden_field :has_address, value: "1" %>
43
+ </div>
44
+ <div class="map address-fill" id="address_map">
45
+ <%= render partial: "dynamic_map_instructions" %>
46
+ <%= dynamic_map_for proposal_preview_data_for_map(@form.to_h) %>
47
+ </div>
48
+ </div>
49
+ <% end %>
50
+
51
+ <div class="field hashtags__container">
52
+ <%= form.text_field :title, class: "js-hashtags", value: form_presenter.title %>
53
+ </div>
54
+
55
+ <div class="field hashtags__container">
56
+ <%= text_editor_for_proposal_body(form) %>
57
+ </div>
58
+
59
+ <% if @form.component_automatic_hashtags.any? %>
60
+ <div class="field">
61
+ <%= form.label :automatic_hashtags %>
62
+ <div class="checkboxes hashtags">
63
+ <% @form.component_automatic_hashtags.each do |hashtag| %>
64
+ <label>
65
+ <%= check_box_tag "", "", { checked: true }, { disabled: true } %>#<%= hashtag %>
66
+ </label>
67
+ <% end %>
68
+ </div>
69
+ </div>
70
+ <% end %>
71
+
72
+ <% if @form.component_suggested_hashtags.any? %>
73
+ <div class="field">
74
+ <%= form.label :suggested_hashtags, nil, for: nil %>
75
+ <div class="checkboxes hashtags">
76
+ <%= form.collection_check_boxes :suggested_hashtags, @form.component_suggested_hashtags.map { |hashtag| [hashtag.downcase, "##{hashtag}"] }, :first, :last do |option|
77
+ option.label { option.check_box(checked: @form.suggested_hashtag_checked?(option.value)) + option.text }
78
+ end %>
79
+ </div>
80
+ </div>
81
+ <% end %>
82
+
83
+ <% if current_component.has_subscopes? %>
84
+ <div class="field">
85
+ <%= scopes_picker_field form, :scope_id, root: current_component.scope %>
86
+ </div>
87
+ <% end %>
88
+
89
+ <% if component_settings.attachments_allowed? && !component_settings.only_photo_attachments? %>
90
+ <fieldset class="attachments_container gallery__container documents_container">
91
+ <legend><%= t("attachment_legend", scope: "decidim.proposals.proposals.edit") %></legend>
92
+
93
+ <% if @form.documents.any? %>
94
+ <% @form.documents.each do |document| %>
95
+ <div class="callout" id="attachment_<%= document.id %>" data-closable>
96
+ <%= link_to translated_attribute(document.title), document.url %>
97
+ <small><%= document.file_type %> <%= number_to_human_size(document.file_size) %></small>
98
+ <%= form.hidden_field :documents, multiple: true, value: document.id, id: "document-#{document.id}" %>
99
+ <button class="close-button"
100
+ aria-label="<%= t("delete_document", scope: "decidim.proposals.proposals.edit") %>"
101
+ title="<%= t("delete_document", scope: "decidim.proposals.proposals.edit") %>"
102
+ type="button" data-close>
103
+ <span aria-hidden="true">&times;</span>
104
+ </button>
105
+ </div>
106
+ <% end %>
107
+ <% end %>
108
+
109
+ <div class="row column">
110
+ <%= form.file_field :add_documents, multiple: true, label: t("add_documents", scope: "decidim.proposals.proposals.edit") %>
111
+ </div>
112
+ </fieldset>
113
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <% if current_organization.user_groups_enabled? && Decidim::UserGroups::ManageableUserGroups.for(current_user).verified.any? %>
2
+ <div class="field">
3
+ <%= user_group_select_field(form, :user_group_id) %>
4
+ </div>
5
+ <% end %>
data/bin/rails ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ Dir.chdir("development_app")
5
+
6
+ load "bin/rails"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ Dir.chdir("development_app")
5
+
6
+ load "bin/webpack-dev-server"
data/codecov.yml ADDED
@@ -0,0 +1,11 @@
1
+ coverage:
2
+ status:
3
+ patch: false
4
+ project:
5
+ default:
6
+ threshold: 0.1%
7
+ github_checks:
8
+ annotations: true
9
+ flag_management:
10
+ default_rules:
11
+ carryforward: true
data/config/assets.rb ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ base_path = File.expand_path("..", __dir__)
4
+
5
+ Decidim::Webpacker.register_path("#{base_path}/app/packs")
6
+ Decidim::Webpacker.register_entrypoints(
7
+ decidim_reporting_proposals: "#{base_path}/app/packs/entrypoints/decidim_reporting_proposals.js",
8
+ decidim_reporting_proposals_manage_component_admin: "#{base_path}/app/packs/entrypoints/decidim_reporting_proposals_manage_component_admin.js",
9
+ decidim_reporting_proposals_list_component_admin: "#{base_path}/app/packs/entrypoints/decidim_reporting_proposals_list_component_admin.js",
10
+ decidim_reporting_proposals_geocoding: "#{base_path}/app/packs/entrypoints/decidim_reporting_proposals_geocoding.js",
11
+ decidim_reporting_proposals_camera: "#{base_path}/app/packs/entrypoints/decidim_reporting_proposals_camera.js",
12
+ decidim_reporting_proposals_js_validations: "#{base_path}/app/packs/entrypoints/decidim_reporting_proposals_js_validations.js"
13
+ )
@@ -0,0 +1,13 @@
1
+ ---
2
+
3
+ base_locale: en
4
+ locales: [en]
5
+
6
+ data:
7
+ external:
8
+ - "<%= %x[bundle info decidim-core --path].chomp %>/config/locales/%{locale}.yml"
9
+ - "<%= %x[bundle info decidim-proposals --path].chomp %>/config/locales/%{locale}.yml"
10
+
11
+ ignore_unused:
12
+
13
+ ignore_missing:
@@ -0,0 +1,366 @@
1
+ ---
2
+ ca:
3
+ activemodel:
4
+ attributes:
5
+ category:
6
+ valuator_ids: Avaluadores assignades
7
+ proposal:
8
+ has_no_address: No té adreça
9
+ decidim:
10
+ application:
11
+ geocoding:
12
+ unconfigured: La geocodificació no està configurada!
13
+ components:
14
+ proposals:
15
+ settings:
16
+ global:
17
+ evaluating_proposals_overdue: Quants dies després una proposta amb estat avaluació es considera vençuda
18
+ evaluating_proposals_overdue_help: Aquesta regla afegeix una alerta visual a la llista e propostes. Si no ho vols utilitzar, deixa aquest valor a zero.
19
+ geocoding_comparison_enabled: Compara propostes per proximitat de distància
20
+ geocoding_comparison_enabled_help: La configuració permet comparar propostes per proximitat de distància en lloc de semblança de text. Aquesta característica requereix que un servei de geocodificació estigui configurat i habilitat al component (en cas contrari, el valor predeterminat és la comparació de semblança de text).
21
+ geocoding_comparison_newer_than: Compareu només les propostes fetes en els últims X dies
22
+ geocoding_comparison_newer_than_help: Aquesta configuració només s'aplica quan es comparen propostes per proximitat a distància. Les propostes anteriors al nombre de dies especificat són ignorades. Deixeu a zero per comparar totes les propostes.
23
+ geocoding_comparison_radius: Radi màxim (en metres) per considerar propostes similars (s'ordenaran per proximitat) per distància proximitat
24
+ proposal_photo_editing_enabled: Permet que les administradores i les avaluadores editin les fotos quan responen les propostes
25
+ unanswered_proposals_overdue: Quants dies després una proposta sense resposta es considera vençuda
26
+ unanswered_proposals_overdue_help: Aquesta regla afegeix una alerta visual a la llista e propostes. Si no ho vols utilitzar, deixa aquest valor a zero.
27
+ reporting_proposals:
28
+ name: Propostes directes
29
+ settings:
30
+ global:
31
+ additional_button_for_show_proposal_link: Botó d'acció addicional després de l'enllaç "tornar a la llista" quan visiteu una proposta concreta (enllaç)
32
+ additional_button_for_show_proposal_text: Botó d'acció addicional després de l'enllaç "tornar a la llista" quan visiteu una proposta concreta (text)
33
+ additional_button_link: Botó d'acció addicional al costat de la proposta nova (enllaç)
34
+ additional_button_text: Botó d'acció addicional al costat de la proposta nova (text)
35
+ additional_buttons_for_show_proposal_show: Mostra un botó addicional a la vista pública en el detall de les propostes
36
+ additional_buttons_show: Mostra un botó addicional a la vista pública del llistat de propostes
37
+ additional_buttons_show_help: Afegeix el text i l'enllaç a sota
38
+ amendments_enabled: Esmenes habilitades
39
+ amendments_enabled_help: Si l'actives, configura les funcionalitats de l'esmena per cada fase.
40
+ amendments_wizard_help_text: Text d'ajuda en crear una nova esmena
41
+ announcement: Anunci
42
+ attachments_allowed: Permetre arxius adjunts
43
+ can_accumulate_supports_beyond_threshold: Pot acumular suports més enllà del llindar
44
+ collaborative_drafts_enabled: Esborranys col·laboratius habilitats
45
+ comments_enabled: Comentaris habilitats
46
+ comments_max_length: Longitud màxima dels comentaris (deixa 0 si vols mantenir la configuració per defecte)
47
+ default_sort_order: Ordre de propostes directes per defecte
48
+ default_sort_order_help: '''Per defecte'' vol dir que si els suports estan habilitats, les propostes es mostraran aleatòriament, i si els suports estan bloquejats, aleshores es mostraran de més a menys suports.'
49
+ default_sort_order_options:
50
+ default: Per defecte
51
+ most_commented: Més comentada
52
+ most_endorsed: Més adhesions
53
+ most_followed: Més seguida
54
+ most_voted: Més suports
55
+ random: Aleatori
56
+ recent: Recent
57
+ with_more_authors: Amb més autores
58
+ evaluating_proposals_overdue: Quants dies després una proposta amb estat avaluació es considera vençuda
59
+ evaluating_proposals_overdue_help: Aquesta regla afegeix una alerta visual a la llista e propostes. Si no ho vols utilitzar, deixa aquest valor a zero.
60
+ geocoding_comparison_enabled: Compara propostes per proximitat de distància
61
+ geocoding_comparison_enabled_help: La configuració permet comparar propostes per proximitat de distància en lloc de semblança de text. Aquesta característica requereix que un servei de geocodificació estigui configurat i habilitat al component (en cas contrari, el valor predeterminat és la comparació de semblança de text).
62
+ geocoding_comparison_newer_than: Compareu només les propostes fetes en els últims X dies
63
+ geocoding_comparison_newer_than_help: Aquesta configuració només s'aplica quan es comparen propostes per proximitat a distància. Les propostes anteriors al nombre de dies especificat són ignorades. Deixeu a zero per comparar totes les propostes.
64
+ geocoding_comparison_radius: Radi màxim (en metres) per considerar propostes similars (s'ordenaran per proximitat) per distància proximitat
65
+ geocoding_enabled: Geocodificació habilitada
66
+ minimum_votes_per_user: Suports mínims per participant
67
+ new_proposal_body_template: Plantilla pel text de nova proposta
68
+ new_proposal_body_template_help: Pots definir el text predefinit que hauria de tenir una nova proposta
69
+ new_proposal_help_text: Text d'ajuda per la creació d'una nova proposta
70
+ official_proposals_enabled: Propostes d'administradora (oficials) habilitades
71
+ only_photo_attachments: Utilitza només fitxers de fotos
72
+ participatory_texts_enabled: Textos participatius habilitats
73
+ participatory_texts_enabled_readonly: No es pot interactuar amb aquesta configuració si hi ha propostes existents. Si us plau, crea un nou 'component de propostes' si vols habilitar aquesta característica o descarta totes les propostes importades al menú "textos participatius" si vols deshabilitar-lo.
74
+ proposal_answering_enabled: Resposta a les propostes habilitada
75
+ proposal_edit_before_minutes: Les propostes poden ser editades per les autores abans que passin aquests minuts
76
+ proposal_edit_time: Edició de proposta
77
+ proposal_edit_time_choices:
78
+ infinite: Permet l'edició de propostes durant un període infinit
79
+ limited: Permet l'edició de propostes durant una finestra temporal específica
80
+ proposal_length: Longitud màxima del cos de la proposta
81
+ proposal_limit: Límit de propostes per participant
82
+ proposal_photo_editing_enabled: Permet a les administradores i avaluadores editar les fotos quan responen a les propostes
83
+ proposal_wizard_step_1_help_text: Text d'ajuda pel pas "Crear" de l'assistent de propostes
84
+ proposal_wizard_step_2_help_text: Text d'ajuda pel pas "Comparar" de l'assistent de propostes
85
+ proposal_wizard_step_3_help_text: Text d'ajuda pel pas "Completar" de l'assistent de propostes
86
+ proposal_wizard_step_4_help_text: Text d'ajuda pel pas "Publicar" de l'assistent de propostes
87
+ resources_permissions_enabled: Es poden establir permisos d'accions per a cada proposta
88
+ scope_id: Àmbit
89
+ scopes_enabled: Àmbits habilitats
90
+ threshold_per_proposal: Llindar per proposta
91
+ unanswered_proposals_overdue: Quants dies després una proposta sense resposta es considera vençuda
92
+ unanswered_proposals_overdue_help: Aquesta regla afegeix una alerta visual a la llista e propostes. Si no ho vols utilitzar, deixa aquest valor a zero.
93
+ vote_limit: Límit de suports per participant
94
+ step:
95
+ amendment_creation_enabled: Creació d'esmena habilitada
96
+ amendment_creation_enabled_help: La participant pot esmenar propostes.
97
+ amendment_promotion_enabled: Promoció d'esmenes habilitada
98
+ amendment_promotion_enabled_help: Les autores de les esmenes rebutjades poden promocionar-les a propostes.
99
+ amendment_reaction_enabled: Resposta a l'esmena habilitada
100
+ amendment_reaction_enabled_help: Les autores de les propostes poden acceptar o rebutjar les esmenes proposades pels participants.
101
+ amendments_visibility: Visibilitat de les esmenes
102
+ amendments_visibility_choices:
103
+ all: Les esmenes són visibles per tothom
104
+ participants: Les esmenes són visibles només per les autores
105
+ amendments_visibility_help: Si se selecciona l'opció "Les esmenes són visibles únicament per als seus autors", els participants han d'estar identificats per a veure les esmenes realitzades.
106
+ announcement: Anunci
107
+ answers_with_costs: Habilita el cost en la resposta de les propostes
108
+ automatic_hashtags: Hashtags afegits a totes les propostes
109
+ comments_blocked: Comentaris bloquejats
110
+ creation_enabled: Les participants poden crear propostes directes
111
+ creation_enabled_readonly: Aquesta opció es desactiva quan actives la funcionalitat de Textos Participatius. Per a pujar propostes com a text participatiu fes clic al botó de Textos Participatius i segueix les instruccions.
112
+ default_sort_order: Ordre de propostes per defecte
113
+ default_sort_order_help: '''Per defecte'' vol dir que si els suports estan habilitats, les propostes es mostraran aleatòriament, i si els suports estan bloquejats, aleshores es mostraran de més a menys suports.'
114
+ default_sort_order_options:
115
+ default: Per defecte
116
+ most_commented: Més comentada
117
+ most_endorsed: Més adhesions
118
+ most_followed: Més seguida
119
+ most_voted: Més suports
120
+ random: Aleatori
121
+ recent: Recent
122
+ with_more_authors: Amb més autores
123
+ endorsements_blocked: Adhesions bloquejades
124
+ endorsements_enabled: Adhesions habilitades
125
+ proposal_answering_enabled: Resposta a les propostes habilitada
126
+ publish_answers_immediately: Publica la resposta de la proposta immediatament
127
+ publish_answers_immediately_help_html: 'Tingues present que si respons alguna proposta sense que això estigui habilitat, l''hauràs de publicar manualment seleccionant i fent servir l''acció de publicar. Per a més informació sobre el funcionament, consulta la <a href="https://docs.decidim.org/en/admin/components/proposals/answers#_publication" target="_blank">pàgina de documentació de les respostes a les propostes</a>.'
128
+ suggested_hashtags: Hashtags suggerits a les participants per a noves propostes
129
+ votes_blocked: Suports bloquejats
130
+ votes_enabled: Suports habilitats
131
+ votes_hidden: Suports ocults (si els suports estan habilitats, marcant aquesta opció s'amagarà el nombre de suports)
132
+ moderations:
133
+ actions:
134
+ hide: Amagar
135
+ admin:
136
+ reportable:
137
+ hide:
138
+ invalid: Hi ha hagut un problema amagant aquest recurs.
139
+ success: Recurs amagat amb èxit.
140
+ proposals:
141
+ admin:
142
+ proposals:
143
+ send_email_button:
144
+ send_mail: Send an email to user
145
+ reporting_proposals:
146
+ actions:
147
+ answer_proposal: Resposta de la proposta
148
+ edit_proposal: Edita la proposta
149
+ import: Importa propostes d'un altre component
150
+ new: Nova proposta
151
+ participatory_texts: Textos participatius
152
+ show: Veure proposta
153
+ title: Accions
154
+ admin:
155
+ actions:
156
+ edit_valuators: Edita les avaluadores
157
+ preview: Vista prèvia
158
+ answer_overdue:
159
+ datetime:
160
+ distance_in_words:
161
+ about_x_hours:
162
+ one: aproximadament 1 hora de retard
163
+ other: aproximadament %{count} hores de retard
164
+ about_x_months:
165
+ one: aproximadament 1 mes de retard
166
+ other: aproximadament %{count} mesos de retard
167
+ about_x_years:
168
+ one: aproximadament 1 any de retard
169
+ other: aproximadament %{count} anys de retard
170
+ almost_x_years:
171
+ one: aproximadament 1 any de retard
172
+ other: aproximadament %{count} anys de retard
173
+ half_a_minute: mig minut de retard
174
+ less_than_x_minutes:
175
+ one: menys d'un minut de retard
176
+ other: menys de %{count} minuts de retard
177
+ less_than_x_seconds:
178
+ one: menys d'1 segon de retard
179
+ other: menys de %{count} segons de retard
180
+ over_x_years:
181
+ one: més d'1 any de retard
182
+ other: més de %{count} anys de retard
183
+ x_days:
184
+ one: 1 dia de retard
185
+ other: "%{count} dies de retard"
186
+ x_minutes:
187
+ one: 1 minut de retard
188
+ other: "%{count} minuts de retard"
189
+ x_months:
190
+ one: 1 mes de retard
191
+ other: "%{count} mesos de retard"
192
+ x_seconds:
193
+ one: 1 segon de retard
194
+ other: "%{count} segons de retard"
195
+ x_years:
196
+ one: 1 any de retard
197
+ other: "%{count} anys de retard"
198
+ answer_pending:
199
+ datetime:
200
+ distance_in_words:
201
+ about_x_hours:
202
+ one: aproximadament 1 hora per respondre
203
+ other: aproximadament %{count} hores per respondre
204
+ about_x_months:
205
+ one: aproximadament 1 mes per respondre
206
+ other: uns %{count} mesos per respondre
207
+ about_x_years:
208
+ one: aproximadament 1 any per respondre
209
+ other: aproximadament %{count} anys per respondre
210
+ almost_x_years:
211
+ one: gairebé 1 any per respondre
212
+ other: gairebé %{count} anys per respondre
213
+ half_a_minute: mig minut per respondre
214
+ less_than_x_minutes:
215
+ one: menys d'un minut per respondre
216
+ other: menys de %{count} minuts per respondre
217
+ less_than_x_seconds:
218
+ one: menys d'1 segon per respondre
219
+ other: menys de %{count} segons per respondre
220
+ over_x_years:
221
+ one: més d'1 any per respondre
222
+ other: més de %{count} anys per respondre
223
+ x_days:
224
+ one: 1 dia per respondre
225
+ other: "%{count} dies per respondre"
226
+ x_minutes:
227
+ one: 1 minut per respondre
228
+ other: "%{count} minuts per respondre"
229
+ x_months:
230
+ one: 1 mes per respondre
231
+ other: "%{count} mesos per respondre"
232
+ x_seconds:
233
+ one: 1 segon per respondre
234
+ other: "%{count} segons per respondre"
235
+ x_years:
236
+ one: 1 any per respondre
237
+ other: "%{count} anys per respondre"
238
+ categories:
239
+ form:
240
+ valuators_help: Seleccioneu les avaluadores que s'assignaran automàticament quan es publiqui una proposta en aquesta categoria (rebran una notificació).
241
+ index:
242
+ valuators_column: Avaluadores assignades
243
+ evaluate_pending:
244
+ datetime:
245
+ distance_in_words:
246
+ about_x_hours:
247
+ one: aproximadament 1 hora per avaluar
248
+ other: aproximadament %{count} hores per avaluar
249
+ about_x_months:
250
+ one: aproximadament 1 hora per avaluar
251
+ other: aproximadament %{count} mesos per avaluar
252
+ about_x_years:
253
+ one: aproximadament 1 any per avaluar
254
+ other: aproximadament %{count} anys per avaluar
255
+ almost_x_years:
256
+ one: gairebé 1 any per avaluar
257
+ other: gairebé %{count} anys per avaluar
258
+ half_a_minute: half a minute to evaluate
259
+ less_than_x_minutes:
260
+ one: menys d'un minut per avaluar
261
+ other: menys de %{count} minuts per avaluar
262
+ less_than_x_seconds:
263
+ one: menys d'1 segon per avaluar
264
+ other: menys de %{count} segons per avaluar
265
+ over_x_years:
266
+ one: més d'1 any per avaluar
267
+ other: més de %{count} anys per avaluar
268
+ x_days:
269
+ one: 1 dia per avaluar
270
+ other: "%{count} dies per avaluar"
271
+ x_minutes:
272
+ one: 1 minut per avaluar
273
+ other: "%{count} minuts per avaluar"
274
+ x_months:
275
+ one: 1 mes per avaluar
276
+ other: "%{count} mesos per avaluar"
277
+ x_seconds:
278
+ one: 1 segon per avaluar
279
+ other: "%{count} segons per avaluar"
280
+ x_years:
281
+ one: 1 any per avaluar
282
+ other: "%{count} anys per avaluar"
283
+ exports:
284
+ proposal_comments: Comentaris
285
+ proposals: Propostes directes
286
+ proposal_notes:
287
+ modal:
288
+ body: Note
289
+ title: Edit note
290
+ update: Update
291
+ update:
292
+ edited: Edited
293
+ invalid: There was a problem updating the proposal note.
294
+ success: Proposal note successfully updated.
295
+ proposals:
296
+ photo_form:
297
+ action: Afageix imatge
298
+ add_images: Afegeix imatges
299
+ gallery_legend: Afegeix imatges
300
+ title: Fotografies
301
+ upload_msg: Cap arxiu seleccionat
302
+ photo_gallery:
303
+ delete_image: Esborrar imatge
304
+ photos: Fotografies
305
+ photos:
306
+ title: Fotografies
307
+ valuators_list:
308
+ assigned_valuators: Avaluadores assignades
309
+ remove_assignment: desfer assignació
310
+ remove_assignment_confirmation: eliminar la confirmació de l'assignació
311
+ valuators: Avaluadores
312
+ resolution_time: Temps de resolució
313
+ time_elapsed:
314
+ datetime:
315
+ distance_in_words:
316
+ about_x_hours:
317
+ one: aproximadament 1 hora
318
+ other: aproximadament %{count} hores
319
+ about_x_months:
320
+ one: aproximadament 1 mes
321
+ other: aproximadament %{count} mesos
322
+ about_x_years:
323
+ one: aproximadament 1 any
324
+ other: aproximadament %{count} anys
325
+ almost_x_years:
326
+ one: gairebé 1 any
327
+ other: gairebé %{count} anys
328
+ half_a_minute: mig minut
329
+ less_than_x_minutes:
330
+ one: menys d'un minut
331
+ other: menys de %{count} minuts
332
+ less_than_x_seconds:
333
+ one: menys d'un segon
334
+ other: menys de %{count} segons
335
+ over_x_years:
336
+ one: més d’1 any
337
+ other: més de %{count} anys
338
+ x_days:
339
+ one: 1 dia
340
+ other: "%{count} dies"
341
+ x_minutes:
342
+ one: 1 minut
343
+ other: "%{count} minuts"
344
+ x_months:
345
+ one: 1 mes
346
+ other: "%{count} mesos"
347
+ x_seconds:
348
+ one: 1 segon
349
+ other: "%{count} segons"
350
+ x_years:
351
+ one: 1 any
352
+ other: "%{count} anys"
353
+ forms:
354
+ errors:
355
+ device_not_supported: La geolocalització no és compatible amb el vostre navegador.
356
+ no_device_location: Ho sentim, no hem pogut detectar la teva localització.
357
+ use_my_camera: Usa la meva càmera
358
+ use_my_location: Usa la meva localització
359
+ proposals:
360
+ compare:
361
+ geocoding:
362
+ away: "%{meters} de distància"
363
+ description: Aquestes són propostes que es troben en un radi de %{meters} respecte a la que esteu creant. En cas que trobeu un altra proposta d'informe en la mateixa situació, podeu optar per donar-li una adhesió en comptes de crear-ne un de nou.
364
+ title: Propostes properes
365
+ form:
366
+ image: Imatge/fotografia