decidim-forms 0.23.2 → 0.24.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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/decidim/forms/forms.js.es6 +4 -4
  3. data/app/commands/decidim/forms/admin/update_questionnaire.rb +2 -1
  4. data/app/commands/decidim/forms/answer_questionnaire.rb +43 -1
  5. data/app/controllers/decidim/forms/admin/concerns/has_questionnaire.rb +10 -2
  6. data/app/controllers/decidim/forms/concerns/has_questionnaire.rb +10 -4
  7. data/app/forms/decidim/forms/admin/question_form.rb +2 -0
  8. data/app/forms/decidim/forms/answer_form.rb +27 -0
  9. data/app/helpers/decidim/forms/admin/application_helper.rb +1 -6
  10. data/app/helpers/decidim/forms/admin/concerns/has_questionnaire_answers_url_helper.rb +3 -3
  11. data/app/jobs/decidim/forms/export_questionnaire_answers_job.rb +1 -1
  12. data/app/models/decidim/forms/answer.rb +8 -0
  13. data/app/models/decidim/forms/question.rb +9 -3
  14. data/app/models/decidim/forms/questionnaire.rb +2 -0
  15. data/app/presenters/decidim/forms/admin/questionnaire_answer_presenter.rb +20 -0
  16. data/app/presenters/decidim/forms/admin/questionnaire_participant_presenter.rb +4 -4
  17. data/app/queries/decidim/forms/questionnaire_user_answers.rb +2 -1
  18. data/app/views/decidim/forms/admin/questionnaires/_form.html.erb +3 -3
  19. data/app/views/decidim/forms/admin/questionnaires/_question.html.erb +11 -0
  20. data/app/views/decidim/forms/admin/questionnaires/edit.html.erb +1 -1
  21. data/app/views/decidim/forms/questionnaires/_answer.html.erb +1 -1
  22. data/app/views/decidim/forms/questionnaires/answers/_files.html.erb +1 -0
  23. data/app/views/decidim/forms/questionnaires/answers/_long_answer.html.erb +1 -1
  24. data/app/views/decidim/forms/questionnaires/answers/_matrix_multiple.html.erb +2 -1
  25. data/app/views/decidim/forms/questionnaires/answers/_matrix_single.html.erb +2 -1
  26. data/app/views/decidim/forms/questionnaires/answers/_multiple_option.html.erb +2 -1
  27. data/app/views/decidim/forms/questionnaires/answers/_short_answer.html.erb +1 -1
  28. data/app/views/decidim/forms/questionnaires/answers/_single_option.html.erb +2 -1
  29. data/app/views/decidim/forms/questionnaires/show.html.erb +1 -1
  30. data/config/initializers/wicked_pdf.rb +2 -0
  31. data/config/locales/ca.yml +8 -2
  32. data/config/locales/cs.yml +8 -2
  33. data/config/locales/de.yml +8 -2
  34. data/config/locales/el.yml +1 -1
  35. data/config/locales/en.yml +8 -2
  36. data/config/locales/es-MX.yml +8 -2
  37. data/config/locales/es-PY.yml +8 -2
  38. data/config/locales/es.yml +8 -2
  39. data/config/locales/fi-plain.yml +8 -2
  40. data/config/locales/fi.yml +8 -2
  41. data/config/locales/fr-CA.yml +8 -2
  42. data/config/locales/fr.yml +9 -3
  43. data/config/locales/gl.yml +2 -1
  44. data/config/locales/it.yml +1 -2
  45. data/config/locales/ja.yml +2 -2
  46. data/config/locales/lv.yml +1 -1
  47. data/config/locales/nl.yml +4 -5
  48. data/config/locales/no.yml +1 -2
  49. data/config/locales/pl.yml +11 -2
  50. data/config/locales/pt.yml +1 -2
  51. data/config/locales/ro-RO.yml +13 -2
  52. data/config/locales/sv.yml +1 -2
  53. data/config/locales/tr-TR.yml +2 -2
  54. data/config/locales/zh-CN.yml +1 -2
  55. data/db/migrate/20210208094442_add_max_characters_to_decidim_forms_questions.rb +7 -0
  56. data/lib/decidim/api/answer_option_type.rb +13 -0
  57. data/lib/decidim/api/question_type.rb +21 -0
  58. data/lib/decidim/api/questionnaire_entity_interface.rb +5 -5
  59. data/lib/decidim/api/questionnaire_type.rb +19 -0
  60. data/lib/decidim/exporters/form_pdf_controller_helper.rb +2 -0
  61. data/lib/decidim/forms.rb +1 -1
  62. data/lib/decidim/forms/api.rb +3 -0
  63. data/lib/decidim/forms/data_portability_user_answers_serializer.rb +7 -1
  64. data/lib/decidim/forms/test/factories.rb +12 -2
  65. data/lib/decidim/forms/test/shared_examples/has_questionnaire.rb +38 -5
  66. data/lib/decidim/forms/test/shared_examples/manage_questionnaires.rb +5 -4
  67. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/add_display_conditions.rb +7 -3
  68. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/add_questions.rb +1 -1
  69. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/update_questions.rb +5 -0
  70. data/lib/decidim/forms/user_answers_serializer.rb +9 -1
  71. data/lib/decidim/forms/version.rb +1 -1
  72. metadata +15 -13
  73. data/app/types/decidim/forms/answer_option_type.rb +0 -14
  74. data/app/types/decidim/forms/question_type.rb +0 -23
  75. data/app/types/decidim/forms/questionnaire_type.rb +0 -22
@@ -36,23 +36,23 @@ module Decidim
36
36
  end
37
37
 
38
38
  def first_short_answer
39
- short = sibilings.where("decidim_forms_questions.question_type in (?)", %w(short_answer))
39
+ short = sibilings.where(decidim_forms_questions: { question_type: %w(short_answer) })
40
40
  short.first
41
41
  end
42
42
 
43
43
  def completion
44
- with_body = sibilings.where("decidim_forms_questions.question_type in (?)", %w(short_answer long_answer))
44
+ with_body = sibilings.where(decidim_forms_questions: { question_type: %w(short_answer long_answer) })
45
45
  .where.not(body: "").count
46
46
  with_choices = sibilings.where.not("decidim_forms_questions.question_type in (?)", %w(short_answer long_answer))
47
47
  .where("decidim_forms_answers.id IN (SELECT decidim_answer_id FROM decidim_forms_answer_choices)").count
48
48
 
49
- (with_body + with_choices).to_f / questionnaire.questions.count * 100
49
+ (with_body + with_choices).to_f / questionnaire.questions.not_separator.count * 100
50
50
  end
51
51
 
52
52
  private
53
53
 
54
54
  def sibilings
55
- Answer.where(questionnaire: questionnaire, session_token: participant.session_token).joins(:question).order("decidim_forms_questions.position ASC")
55
+ Answer.not_separator.where(questionnaire: questionnaire, session_token: participant.session_token).joins(:question).order("decidim_forms_questions.position ASC")
56
56
  end
57
57
  end
58
58
  end
@@ -20,7 +20,8 @@ module Decidim
20
20
 
21
21
  # Finds and group answers by user for each questionnaire's question.
22
22
  def query
23
- answers = Answer.where(questionnaire: @questionnaire)
23
+ answers = Answer.not_separator.joins(:question).where(questionnaire: @questionnaire)
24
+
24
25
  answers.sort_by { |answer| answer.question.position }.group_by { |a| a.user || a.session_token }.values
25
26
  end
26
27
  end
@@ -1,7 +1,7 @@
1
1
  <div class="card">
2
2
  <div class="card-divider">
3
3
  <h2 class="card-title">
4
- <%= t(".title") %>
4
+ <%= edit_questionnaire_title %>
5
5
  <% unless template? questionnaire.questionnaire_for %>
6
6
  <% if allowed_to? :preview, :questionnaire %>
7
7
  <div class="button--title">
@@ -10,7 +10,7 @@
10
10
  <% end %>
11
11
  <% if questionnaire.answers.any? %>
12
12
  <div class="button--title">
13
- <%= export_dropdown if allowed_to? :export_answers, :questionnaire %>
13
+ <%= export_dropdown(current_component, questionnaire.id) if allowed_to? :export_answers, :questionnaire %>
14
14
  </div>
15
15
  <div class="button--title">
16
16
  <% if allowed_to? :show, :questionnaire_answers %>
@@ -18,7 +18,7 @@
18
18
  <% end %>
19
19
  </div>
20
20
  <% else %>
21
- <button class="button tiny button--title" disabled><%= t("empty", scope: "decidim.forms.admin.questionnaires.answers") %></a>
21
+ <button class="button tiny button--title" disabled><%= t("empty", scope: "decidim.forms.admin.questionnaires.answers") %></button>
22
22
  <% end %>
23
23
  <% end %>
24
24
  </h2>
@@ -73,6 +73,17 @@
73
73
  %>
74
74
  </div>
75
75
 
76
+ <div class="row column">
77
+ <%=
78
+ form.number_field(
79
+ :max_characters,
80
+ disabled: !editable,
81
+ min: 0,
82
+ label: t("activemodel.attributes.questionnaire_question.max_characters")
83
+ )
84
+ %>
85
+ </div>
86
+
76
87
  <div class="row column">
77
88
  <%=
78
89
  form.select(
@@ -2,7 +2,7 @@
2
2
  <%= render partial: "decidim/templates/admin/questionnaire_templates/choose", locals: { target: questionnaire, form_title: t("decidim.forms.admin.questionnaires.edit.title") } %>
3
3
  <% else %>
4
4
  <%= decidim_form_for(@form, url: update_url, method: :put, html: { class: "form edit_questionnaire" }) do |form| %>
5
- <%= render partial: "decidim/forms/admin/questionnaires/form", object: form, locals: { title: title_for_questionnaire } %>
5
+ <%= render partial: "decidim/forms/admin/questionnaires/form", object: form %>
6
6
 
7
7
  <div class="button--double form-general-submit">
8
8
  <%= form.submit t(".save"), class: "button" %>
@@ -17,7 +17,7 @@
17
17
  </div>
18
18
  <% end %>
19
19
 
20
- <%= render partial: "decidim/forms/questionnaires/answers/#{answer.question.question_type}", locals: { answer: answer, answer_form: answer_form, answer_idx: answer_idx, field_id: field_id, disabled: disabled } %>
20
+ <%= render partial: "decidim/forms/questionnaires/answers/#{answer.question.question_type}", locals: { answer: answer, answer_form: answer_form, answer_idx: answer_idx, field_id: field_id, disabled: disabled, maxlength: (answer.question.max_characters if answer.question.max_characters.positive?) } %>
21
21
 
22
22
  <%= answer_form.hidden_field :question_id %>
23
23
 
@@ -0,0 +1 @@
1
+ <%= answer_form.file_field :add_documents, label: false, multiple: true, id: field_id, disabled: disabled %>
@@ -1 +1 @@
1
- <%= answer_form.text_area :body, label: false, id: field_id, rows: 10, disabled: disabled %>
1
+ <%= answer_form.text_area :body, label: false, id: field_id, rows: 10, disabled: disabled, maxlength: maxlength %>
@@ -32,7 +32,8 @@
32
32
  <%= text_field_tag "questionnaire[responses][#{answer_idx}][choices][][custom_body]",
33
33
  choice.try(:custom_body),
34
34
  id: "#{choice_id}_custom_body",
35
- disabled: true %>
35
+ disabled: true,
36
+ maxlength: maxlength %>
36
37
  <% end %>
37
38
  </div>
38
39
  </td>
@@ -32,7 +32,8 @@
32
32
  <%= text_field_tag "questionnaire[responses][#{answer_idx}][choices][#{row_idx}][custom_body]",
33
33
  choice.try(:custom_body),
34
34
  id: "#{choice_id}_custom_body",
35
- disabled: true %>
35
+ disabled: true,
36
+ maxlength: maxlength %>
36
37
  <% end %>
37
38
  </div>
38
39
  </td>
@@ -16,7 +16,8 @@
16
16
  <% if answer_option.free_text %>
17
17
  <%= text_field_tag "questionnaire[responses][#{answer_idx}][choices][#{idx}][custom_body]",
18
18
  choice.try(:custom_body),
19
- disabled: true %>
19
+ disabled: true,
20
+ maxlength: maxlength %>
20
21
  <% end %>
21
22
  </div>
22
23
  <% end %>
@@ -1 +1 @@
1
- <%= answer_form.text_field :body, label: false, id: field_id, disabled: disabled %>
1
+ <%= answer_form.text_field :body, label: false, id: field_id, disabled: disabled, maxlength: maxlength %>
@@ -23,7 +23,8 @@
23
23
  <%= text_field_tag "questionnaire[responses][#{answer_idx}][choices][][custom_body]",
24
24
  choice.try(:custom_body),
25
25
  id: "#{choice_id}_custom_body",
26
- disabled: true %>
26
+ disabled: true,
27
+ maxlength: maxlength %>
27
28
  <% end %>
28
29
  </div>
29
30
  <% end %>
@@ -56,7 +56,7 @@
56
56
  </div>
57
57
  <% end %>
58
58
 
59
- <%= decidim_form_for(@form, url: update_url, method: :post, html: { class: "form answer-questionnaire" }, data: { "safe-path" => form_path }) do |form| %>
59
+ <%= decidim_form_for(@form, url: update_url, method: :post, html: { multipart: true, class: "form answer-questionnaire" }, data: { "safe-path" => form_path }) do |form| %>
60
60
  <%= form_required_explanation %>
61
61
  <%= invisible_captcha %>
62
62
  <% answer_idx = 0 %>
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "wicked_pdf"
2
4
 
3
5
  # frozen_string_literal: true
@@ -10,10 +10,15 @@ ca:
10
10
  question_type: Tipus
11
11
  questionnaire_question:
12
12
  mandatory: Obligatori
13
+ max_characters: Límit de caràcters (deixa-ho a 0 si no hi ha límit)
13
14
  errors:
14
15
  models:
15
16
  answer:
16
17
  attributes:
18
+ add_documents:
19
+ needs_to_be_reattached: Ha de ser adjuntat de nou
20
+ body:
21
+ too_long: és massa llarg
17
22
  choices:
18
23
  missing: no estan complets
19
24
  too_many: en són masses
@@ -78,7 +83,7 @@ ca:
78
83
  collapse: Redueix totes les preguntes
79
84
  expand: Expandeix totes les preguntes
80
85
  preview: Previsualitzar
81
- title: Editar el formulari
86
+ title: Editar formulari per %{questionnaire_for}
82
87
  unpublished_warning: El formulari no està publicat. Pots modificar les preguntes, però al fer-ho s'esborraran les respostes actuals.
83
88
  matrix_row:
84
89
  matrix_row: Fila
@@ -110,7 +115,7 @@ ca:
110
115
  answer:
111
116
  body: El camp no pot estar en blanc
112
117
  files:
113
- extension_whitelist: 'Formats d''arxiu acceptats:'
118
+ extension_allowlist: 'Formats d''arxiu acceptats:'
114
119
  images:
115
120
  dimensions: "%{width} x %{height} px"
116
121
  dimensions_info: 'Aquesta imatge medirà:'
@@ -118,6 +123,7 @@ ca:
118
123
  resize_and_pad: Redimensionat i ajustat a
119
124
  resize_to_fit: Redimensionada per ajustar-la
120
125
  question_types:
126
+ files: Arxius
121
127
  long_answer: Resposta llarga
122
128
  matrix_multiple: Matriu (opció multiple)
123
129
  matrix_single: Matriu (opció única)
@@ -10,10 +10,15 @@ cs:
10
10
  question_type: Typ
11
11
  questionnaire_question:
12
12
  mandatory: Povinné
13
+ max_characters: Limit znaků (ponechte na 0, pokud není limit)
13
14
  errors:
14
15
  models:
15
16
  answer:
16
17
  attributes:
18
+ add_documents:
19
+ needs_to_be_reattached: Potřebuje být znovu připojen
20
+ body:
21
+ too_long: je příliš dlouhý
17
22
  choices:
18
23
  missing: nejsou úplné
19
24
  too_many: jsou příliš mnoho
@@ -78,7 +83,7 @@ cs:
78
83
  collapse: Sbalit všechny otázky
79
84
  expand: Rozbalit všechny otázky
80
85
  preview: Náhled
81
- title: Upravit formulář
86
+ title: Upravit formulář pro %{questionnaire_for}
82
87
  unpublished_warning: Formulář není zveřejněn. Můžete změnit jeho otázky, ale tím odstraníte aktuální odpovědi.
83
88
  matrix_row:
84
89
  matrix_row: Řádek
@@ -110,7 +115,7 @@ cs:
110
115
  answer:
111
116
  body: Tělo nemůže být prázdné
112
117
  files:
113
- extension_whitelist: 'Akceptované formáty:'
118
+ extension_allowlist: 'Akceptované formáty:'
114
119
  images:
115
120
  dimensions: "%{width} x %{height} px"
116
121
  dimensions_info: 'Tento obrázek bude:'
@@ -118,6 +123,7 @@ cs:
118
123
  resize_and_pad: Zmenšeno a odsazeno k
119
124
  resize_to_fit: Upravena velikost na vyplnění
120
125
  question_types:
126
+ files: Soubory
121
127
  long_answer: Dlouhá odpověď
122
128
  matrix_multiple: Matice (Více možností)
123
129
  matrix_single: Matice (Jedna možnost)
@@ -10,10 +10,15 @@ de:
10
10
  question_type: Art
11
11
  questionnaire_question:
12
12
  mandatory: Verpflichtend
13
+ max_characters: Maximale Anzahl Zeichen (0 bedeutet kein Limit)
13
14
  errors:
14
15
  models:
15
16
  answer:
16
17
  attributes:
18
+ add_documents:
19
+ needs_to_be_reattached: Muss erneut angehängt werden
20
+ body:
21
+ too_long: ist zu lang
17
22
  choices:
18
23
  missing: sind nicht vollständig
19
24
  too_many: sind zu viele
@@ -78,7 +83,7 @@ de:
78
83
  collapse: Alle Fragen einklappen
79
84
  expand: Alle Fragen ausklappen
80
85
  preview: Vorschau
81
- title: Formular bearbeiten
86
+ title: Formular für %{questionnaire_for} bearbeiten
82
87
  unpublished_warning: Das Formular ist nicht öffentlich. Sie können die Fragen ändern, dabei werden allerdings die aktuellen Antworten gelöscht.
83
88
  matrix_row:
84
89
  matrix_row: Zeile
@@ -110,7 +115,7 @@ de:
110
115
  answer:
111
116
  body: Körper kann nicht leer sein
112
117
  files:
113
- extension_whitelist: 'Gültige Formate:'
118
+ extension_allowlist: 'Gültige Formate:'
114
119
  images:
115
120
  dimensions: "%{width} x %{height} px"
116
121
  dimensions_info: 'Das Bild wird:'
@@ -118,6 +123,7 @@ de:
118
123
  resize_and_pad: in der Größe angepasst und gepolstert zu
119
124
  resize_to_fit: in der Größe verändert, damit es passt
120
125
  question_types:
126
+ files: Dateien
121
127
  long_answer: Lange Antwort
122
128
  matrix_multiple: Matrix (Mehrfachoption)
123
129
  matrix_single: Matrix (Einzelne Option)
@@ -66,7 +66,7 @@ el:
66
66
  answer:
67
67
  body: Το σώμα δεν μπορεί να είναι κενό
68
68
  files:
69
- extension_whitelist: 'Αποδεκτές μορφές:'
69
+ extension_allowlist: 'Αποδεκτές μορφές:'
70
70
  images:
71
71
  dimensions: "Π %{width} x Υ %{height} px"
72
72
  dimensions_info: 'Για αυτήν την εικόνα θα:'
@@ -11,10 +11,15 @@ en:
11
11
  question_type: Type
12
12
  questionnaire_question:
13
13
  mandatory: Mandatory
14
+ max_characters: Character limit (leave to 0 if no limit)
14
15
  errors:
15
16
  models:
16
17
  answer:
17
18
  attributes:
19
+ add_documents:
20
+ needs_to_be_reattached: Needs to be reattached
21
+ body:
22
+ too_long: is too long
18
23
  choices:
19
24
  missing: are not complete
20
25
  too_many: are too many
@@ -79,7 +84,7 @@ en:
79
84
  collapse: Collapse all questions
80
85
  expand: Expand all questions
81
86
  preview: Preview
82
- title: Edit form
87
+ title: Edit form for %{questionnaire_for}
83
88
  unpublished_warning: The form is not published. You may modify its questions, but doing so will delete current answers.
84
89
  matrix_row:
85
90
  matrix_row: Row
@@ -111,7 +116,7 @@ en:
111
116
  answer:
112
117
  body: Body can't be blank
113
118
  files:
114
- extension_whitelist: 'Accepted formats:'
119
+ extension_allowlist: 'Accepted formats:'
115
120
  images:
116
121
  dimensions: "%{width} x %{height} px"
117
122
  dimensions_info: 'This image will be:'
@@ -119,6 +124,7 @@ en:
119
124
  resize_and_pad: Resized and padded to
120
125
  resize_to_fit: Resized to fit
121
126
  question_types:
127
+ files: Files
122
128
  long_answer: Long answer
123
129
  matrix_multiple: Matrix (Multiple option)
124
130
  matrix_single: Matrix (Single option)
@@ -10,10 +10,15 @@ es-MX:
10
10
  question_type: Tipo
11
11
  questionnaire_question:
12
12
  mandatory: Obligatorio
13
+ max_characters: Límite de caracteres (dejar a 0 si no hay límite)
13
14
  errors:
14
15
  models:
15
16
  answer:
16
17
  attributes:
18
+ add_documents:
19
+ needs_to_be_reattached: Es necesario volver a adjuntar el fichero
20
+ body:
21
+ too_long: es demasiado largo
17
22
  choices:
18
23
  missing: no están completos
19
24
  too_many: son demasiados
@@ -78,7 +83,7 @@ es-MX:
78
83
  collapse: Contraer todas las preguntas
79
84
  expand: Expandir todos las preguntas
80
85
  preview: Previsualizar
81
- title: Editar el formulario
86
+ title: Editar formulario para %{questionnaire_for}
82
87
  unpublished_warning: El formulario no está publicado. Puedes modificar sus preguntas, pero al hacerlo eliminará las respuestas actuales.
83
88
  matrix_row:
84
89
  matrix_row: Fila
@@ -110,7 +115,7 @@ es-MX:
110
115
  answer:
111
116
  body: El campo no puede estar en blanco
112
117
  files:
113
- extension_whitelist: 'Formatos de archivo aceptados:'
118
+ extension_allowlist: 'Formatos de archivo aceptados:'
114
119
  images:
115
120
  dimensions: "%{width} x %{height} px"
116
121
  dimensions_info: 'Esta imagen medirá:'
@@ -118,6 +123,7 @@ es-MX:
118
123
  resize_and_pad: Redimensionado y ajustado a
119
124
  resize_to_fit: Redimensionada para ajustarla
120
125
  question_types:
126
+ files: Archivos
121
127
  long_answer: Respuesta larga
122
128
  matrix_multiple: Matriz (opción múltiple)
123
129
  matrix_single: Matriz (opción única)
@@ -10,10 +10,15 @@ es-PY:
10
10
  question_type: Tipo
11
11
  questionnaire_question:
12
12
  mandatory: Obligatorio
13
+ max_characters: Límite de caracteres (dejar a 0 si no hay límite)
13
14
  errors:
14
15
  models:
15
16
  answer:
16
17
  attributes:
18
+ add_documents:
19
+ needs_to_be_reattached: Es necesario volver a adjuntar el fichero
20
+ body:
21
+ too_long: es demasiado largo
17
22
  choices:
18
23
  missing: no están completos
19
24
  too_many: son demasiados
@@ -78,7 +83,7 @@ es-PY:
78
83
  collapse: Contraer todas las preguntas
79
84
  expand: Expandir todos las preguntas
80
85
  preview: Previsualizar
81
- title: Editar el formulario
86
+ title: Editar formulario para %{questionnaire_for}
82
87
  unpublished_warning: El formulario no está publicado. Puedes modificar sus preguntas, pero al hacerlo eliminará las respuestas actuales.
83
88
  matrix_row:
84
89
  matrix_row: Fila
@@ -110,7 +115,7 @@ es-PY:
110
115
  answer:
111
116
  body: El campo no puede estar en blanco
112
117
  files:
113
- extension_whitelist: 'Formatos de archivo aceptados:'
118
+ extension_allowlist: 'Formatos de archivo aceptados:'
114
119
  images:
115
120
  dimensions: "%{width} x %{height} px"
116
121
  dimensions_info: 'Esta imagen medirá:'
@@ -118,6 +123,7 @@ es-PY:
118
123
  resize_and_pad: Redimensionado y ajustado a
119
124
  resize_to_fit: Redimensionada para ajustarla
120
125
  question_types:
126
+ files: Archivos
121
127
  long_answer: Respuesta larga
122
128
  matrix_multiple: Matriz (opción múltiple)
123
129
  matrix_single: Matriz (opción única)
@@ -10,10 +10,15 @@ es:
10
10
  question_type: Tipo
11
11
  questionnaire_question:
12
12
  mandatory: Obligatorio
13
+ max_characters: Límite de caracteres (dejar a 0 si no hay límite)
13
14
  errors:
14
15
  models:
15
16
  answer:
16
17
  attributes:
18
+ add_documents:
19
+ needs_to_be_reattached: Es necesario volver a adjuntar el fichero
20
+ body:
21
+ too_long: es demasiado largo
17
22
  choices:
18
23
  missing: no están completos
19
24
  too_many: son demasiados
@@ -78,7 +83,7 @@ es:
78
83
  collapse: Contraer todas las preguntas
79
84
  expand: Expandir todos las preguntas
80
85
  preview: Previsualizar
81
- title: Editar el formulario
86
+ title: Editar formulario para %{questionnaire_for}
82
87
  unpublished_warning: El formulario no está publicado. Puedes modificar sus preguntas, pero al hacerlo eliminará las respuestas actuales.
83
88
  matrix_row:
84
89
  matrix_row: Fila
@@ -110,7 +115,7 @@ es:
110
115
  answer:
111
116
  body: El campo no puede estar en blanco
112
117
  files:
113
- extension_whitelist: 'Formatos de archivo aceptados:'
118
+ extension_allowlist: 'Formatos de archivo aceptados:'
114
119
  images:
115
120
  dimensions: "%{width} x %{height} px"
116
121
  dimensions_info: 'Esta imagen medirá:'
@@ -118,6 +123,7 @@ es:
118
123
  resize_and_pad: Redimensionada y ajustada a
119
124
  resize_to_fit: Redimensionada para ajustarla
120
125
  question_types:
126
+ files: Archivos
121
127
  long_answer: Respuesta larga
122
128
  matrix_multiple: Matriz (opción múltiple)
123
129
  matrix_single: Matriz (opción única)