decidim-forms 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +65 -0
  3. data/Rakefile +3 -0
  4. data/app/assets/config/admin/decidim_forms_manifest.js +1 -0
  5. data/app/assets/config/decidim_forms_manifest.js +1 -0
  6. data/app/assets/images/decidim/surveys/icon.svg +19 -0
  7. data/app/assets/javascripts/decidim/forms/admin/auto_buttons_by_min_items.component.js.es6 +25 -0
  8. data/app/assets/javascripts/decidim/forms/admin/auto_select_options_by_total_items.component.js.es6 +23 -0
  9. data/app/assets/javascripts/decidim/forms/admin/forms.js.es6 +188 -0
  10. data/app/assets/javascripts/decidim/forms/autosortable_checkboxes.component.js.es6 +65 -0
  11. data/app/assets/javascripts/decidim/forms/forms.js.es6 +20 -0
  12. data/app/assets/javascripts/decidim/forms/option_attached_inputs.component.js.es6 +32 -0
  13. data/app/commands/decidim/forms/admin/update_questionnaire.rb +86 -0
  14. data/app/commands/decidim/forms/answer_questionnaire.rb +54 -0
  15. data/app/controllers/decidim/forms/admin/concerns/has_questionnaire.rb +95 -0
  16. data/app/controllers/decidim/forms/concerns/has_questionnaire.rb +84 -0
  17. data/app/forms/decidim/forms/admin/answer_option_form.rb +23 -0
  18. data/app/forms/decidim/forms/admin/question_form.rb +35 -0
  19. data/app/forms/decidim/forms/admin/questionnaire_form.rb +27 -0
  20. data/app/forms/decidim/forms/answer_choice_form.rb +15 -0
  21. data/app/forms/decidim/forms/answer_form.rb +69 -0
  22. data/app/forms/decidim/forms/questionnaire_form.rb +22 -0
  23. data/app/helpers/decidim/forms/admin/application_helper.rb +19 -0
  24. data/app/models/concerns/decidim/forms/has_questionnaire.rb +20 -0
  25. data/app/models/decidim/forms/answer.rb +45 -0
  26. data/app/models/decidim/forms/answer_choice.rb +15 -0
  27. data/app/models/decidim/forms/answer_option.rb +11 -0
  28. data/app/models/decidim/forms/application_record.rb +10 -0
  29. data/app/models/decidim/forms/question.rb +36 -0
  30. data/app/models/decidim/forms/questionnaire.rb +23 -0
  31. data/app/queries/decidim/forms/questionnaire_user_answers.rb +28 -0
  32. data/app/views/decidim/forms/admin/questionnaires/_answer_option.html.erb +44 -0
  33. data/app/views/decidim/forms/admin/questionnaires/_form.html.erb +51 -0
  34. data/app/views/decidim/forms/admin/questionnaires/_question.html.erb +115 -0
  35. data/app/views/decidim/forms/admin/questionnaires/edit.html.erb +7 -0
  36. data/app/views/decidim/forms/questionnaires/_answer.html.erb +94 -0
  37. data/app/views/decidim/forms/questionnaires/show.html.erb +84 -0
  38. data/config/locales/ca.yml +79 -0
  39. data/config/locales/de.yml +79 -0
  40. data/config/locales/en.yml +79 -0
  41. data/config/locales/es-PY.yml +79 -0
  42. data/config/locales/es.yml +79 -0
  43. data/config/locales/eu.yml +79 -0
  44. data/config/locales/fi-pl.yml +79 -0
  45. data/config/locales/fi.yml +79 -0
  46. data/config/locales/fr.yml +79 -0
  47. data/config/locales/gl.yml +79 -0
  48. data/config/locales/hu.yml +79 -0
  49. data/config/locales/id-ID.yml +1 -0
  50. data/config/locales/it.yml +79 -0
  51. data/config/locales/nl.yml +79 -0
  52. data/config/locales/pl.yml +79 -0
  53. data/config/locales/pt-BR.yml +79 -0
  54. data/config/locales/pt.yml +79 -0
  55. data/config/locales/ru.yml +1 -0
  56. data/config/locales/sv.yml +79 -0
  57. data/config/locales/tr-TR.yml +1 -0
  58. data/config/locales/uk.yml +1 -0
  59. data/db/migrate/20170511092231_create_decidim_forms_questionnaires.rb +15 -0
  60. data/db/migrate/20170515090916_create_decidim_forms_questions.rb +17 -0
  61. data/db/migrate/20170515144119_create_decidim_forms_answers.rb +15 -0
  62. data/db/migrate/20180405015012_create_decidim_forms_answer_options.rb +11 -0
  63. data/db/migrate/20180405015147_create_decidim_forms_answer_choices.rb +13 -0
  64. data/lib/decidim/forms.rb +13 -0
  65. data/lib/decidim/forms/admin.rb +9 -0
  66. data/lib/decidim/forms/admin_engine.rb +21 -0
  67. data/lib/decidim/forms/data_portability_user_answers_serializer.rb +37 -0
  68. data/lib/decidim/forms/engine.rb +14 -0
  69. data/lib/decidim/forms/test.rb +4 -0
  70. data/lib/decidim/forms/test/factories.rb +55 -0
  71. data/lib/decidim/forms/test/shared_examples/has_questionnaire.rb +524 -0
  72. data/lib/decidim/forms/test/shared_examples/manage_questionnaires.rb +626 -0
  73. data/lib/decidim/forms/user_answers_serializer.rb +29 -0
  74. data/lib/decidim/forms/version.rb +10 -0
  75. metadata +165 -0
@@ -0,0 +1,7 @@
1
+ <%= decidim_form_for(@form, url: update_url, method: :put, html: { class: "form edit_questionnaire" }) do |form| %>
2
+ <%= render partial: "decidim/forms/admin/questionnaires/form", object: form, locals: { title: t(".title") } %>
3
+
4
+ <div class="button--double form-general-submit">
5
+ <%= form.submit t(".save"), class: "button" %>
6
+ </div>
7
+ <% end %>
@@ -0,0 +1,94 @@
1
+ <% field_id = "questionnaire_answers_#{answer_idx}" %>
2
+ <%= label_tag field_id, answer.label(answer_idx), class: "questionnaire-question" %>
3
+
4
+ <% if translated_attribute(answer.question.description).present? %>
5
+ <div class="help-text">
6
+ <%= decidim_sanitize translated_attribute(answer.question.description) %>
7
+ </div>
8
+ <% end %>
9
+
10
+ <% case answer.question.question_type %>
11
+ <% when "short_answer" %>
12
+ <%= answer_form.text_field :body, label: false, id: field_id, disabled: disabled %>
13
+ <% when "long_answer" %>
14
+ <%= answer_form.text_area :body, label: false, id: field_id, rows: 10, disabled: disabled %>
15
+ <% when "single_option" %>
16
+ <div class="radio-button-collection">
17
+ <% choice = answer.choices.first %>
18
+
19
+ <% answer.question.answer_options.each_with_index do |answer_option, idx| %>
20
+ <% choice_id = "#{field_id}_choices_#{idx}" %>
21
+
22
+ <%= label_tag "#{choice_id}_body" do %>
23
+ <%= radio_button_tag "questionnaire[answers][#{answer_idx}][choices][][body]",
24
+ translated_attribute(answer_option.body),
25
+ choice.try(:body),
26
+ id: "#{choice_id}_body", disabled: disabled %>
27
+
28
+ <%= translated_attribute(answer_option.body) %>
29
+
30
+ <% if answer_option.free_text %>
31
+ <%= text_field_tag "questionnaire[answers][#{answer_idx}][choices][][custom_body]",
32
+ choice.try(:custom_body),
33
+ id: "#{choice_id}_custom_body",
34
+ disabled: true %>
35
+ <% end %>
36
+
37
+ <%= hidden_field_tag "questionnaire[answers][#{answer_idx}][choices][][answer_option_id]",
38
+ answer_option.id,
39
+ id: "#{choice_id}_answer_option",
40
+ disabled: true %>
41
+ <% end %>
42
+ <% end %>
43
+ </div>
44
+ <% when "multiple_option" %>
45
+ <div class="check-box-collection">
46
+ <% answer.question.answer_options.each_with_index do |answer_option, idx| %>
47
+ <% choice = answer.selected_choices.find { |choice| choice.answer_option_id == answer_option.id } %>
48
+
49
+ <%= label_tag do %>
50
+ <%= check_box_tag "questionnaire[answers][#{answer_idx}][choices][#{idx}][body]",
51
+ translated_attribute(answer_option.body),
52
+ choice.present?, disabled: disabled %>
53
+
54
+ <%= translated_attribute(answer_option.body) %>
55
+
56
+ <% if answer_option.free_text %>
57
+ <%= text_field_tag "questionnaire[answers][#{answer_idx}][choices][#{idx}][custom_body]",
58
+ choice.try(:custom_body),
59
+ disabled: true %>
60
+ <% end %>
61
+
62
+ <%= hidden_field_tag "questionnaire[answers][#{answer_idx}][choices][#{idx}][answer_option_id]", answer_option.id %>
63
+ <% end %>
64
+ <% end %>
65
+ </div>
66
+ <% when "sorting" %>
67
+ <div class="sortable-check-box-collection">
68
+ <% answer.question.answer_options.each_with_index do |answer_option, idx| %>
69
+ <% choice = answer.selected_choices.find { |choice| choice.answer_option_id == answer_option.id } %>
70
+
71
+ <%= label_tag do %>
72
+ <%= check_box_tag "questionnaire[answers][#{answer_idx}][choices][#{idx}][body]",
73
+ translated_attribute(answer_option.body),
74
+ choice.present?, disabled: disabled %>
75
+
76
+ <span class="position"><%= choice.try(:position) %></span>
77
+
78
+ <%= translated_attribute(answer_option.body) %>
79
+
80
+ <%= hidden_field_tag "questionnaire[answers][#{answer_idx}][choices][#{idx}][position]",
81
+ choice.try(:position),
82
+ disabled: true %>
83
+
84
+ <%= hidden_field_tag "questionnaire[answers][#{answer_idx}][choices][#{idx}][answer_option_id]", answer_option.id %>
85
+ <% end %>
86
+ <% end %>
87
+ </div>
88
+ <% end %>
89
+
90
+ <%= answer_form.hidden_field :question_id %>
91
+
92
+ <% answer.errors.full_messages.each do |msg| %>
93
+ <small class="form-error is-visible"><%= msg %></small>
94
+ <% end %>
@@ -0,0 +1,84 @@
1
+ <% add_decidim_meta_tags({
2
+ title: translated_attribute(questionnaire.title),
3
+ description: translated_attribute(questionnaire.description),
4
+ }) %>
5
+
6
+ <%= render partial: "decidim/shared/component_announcement" %>
7
+
8
+ <div class="row columns">
9
+ <h2 class="section-heading"><%= translated_attribute questionnaire.title %></h2>
10
+ <div class="row">
11
+ <div class="columns large-6 medium-centered lead">
12
+ <%= decidim_sanitize translated_attribute questionnaire.description %>
13
+ </div>
14
+ </div>
15
+ </div>
16
+
17
+ <div class="row">
18
+ <div class="columns large-6 medium-centered">
19
+ <div class="card">
20
+ <div class="card__content">
21
+ <% if allow_answers? %>
22
+ <% if current_user %>
23
+ <% if questionnaire.answered_by?(current_user) %>
24
+ <div class="section">
25
+ <div class="callout success">
26
+ <h5><%= t(".questionnaire_answered.title") %></h5>
27
+ <p><%= t(".questionnaire_answered.body") %></p>
28
+ </div>
29
+ </div>
30
+ <% else %>
31
+ <div class="answer-questionnaire">
32
+ <% unless current_participatory_space.can_participate?(current_user) %>
33
+ <div class="section">
34
+ <div class="callout alert">
35
+ <h5><%= t(".questionnaire_for_private_users.title") %></h5>
36
+ <p><%= t(".questionnaire_for_private_users.body") %></p>
37
+ </div>
38
+ </div>
39
+ <% end %>
40
+
41
+ <%= decidim_form_for(@form, url: update_url, method: :post, html: { class: "form answer-questionnaire" }) do |form| %>
42
+ <% @form.answers.each_with_index do |answer, answer_idx| %>
43
+ <div class="row column">
44
+ <%= fields_for "questionnaire[answers][#{answer_idx}]", answer do |answer_form| %>
45
+ <%= render "decidim/forms/questionnaires/answer", answer_form: answer_form, answer: answer, answer_idx: answer_idx, disabled: !current_participatory_space.can_participate?(current_user) %>
46
+ <% end %>
47
+ </div>
48
+ <% end %>
49
+
50
+ <div class="row column tos-agreement">
51
+ <%= form.check_box :tos_agreement, label: t(".tos_agreement"), id: "questionnaire_tos_agreement", disabled: !current_participatory_space.can_participate?(current_user) %>
52
+ <div class="help-text">
53
+ <%= decidim_sanitize translated_attribute questionnaire.tos %>
54
+ </div>
55
+ </div>
56
+
57
+ <div class="button--double form-general-submit">
58
+ <%= form.submit t(".submit"), class: "button", disabled: !current_participatory_space.can_participate?(current_user), data: { confirm: t(".are_you_sure"), disable: true } %>
59
+ </div>
60
+ <% end %>
61
+ </div>
62
+ <% end %>
63
+ <% else %>
64
+ <div class="answer-questionnaire">
65
+ <h5 class="section-heading"><%= t(".answer_questionnaire.title") %></h5>
66
+ <p>
67
+ <%= t(".answer_questionnaire.anonymous_user_message", sign_in_link: decidim.new_user_session_path, sign_up_link: decidim.new_user_registration_path).html_safe %>
68
+ </p>
69
+ </div>
70
+ <% end %>
71
+ <% else %>
72
+ <div class="section">
73
+ <div class="callout warning">
74
+ <h5><%= t(".questionnaire_closed.title") %></h5>
75
+ <p><%= t(".questionnaire_closed.body") %></p>
76
+ </div>
77
+ </div>
78
+ <% end %>
79
+ </div>
80
+ </div>
81
+ </div>
82
+ </div>
83
+
84
+ <%= javascript_include_tag "decidim/forms/forms" %>
@@ -0,0 +1,79 @@
1
+ ca:
2
+ activemodel:
3
+ attributes:
4
+ answer:
5
+ body: Resposta
6
+ question:
7
+ max_choices: Nombre màxim d'opcions
8
+ question_type: Escriu
9
+ questionnaire_question:
10
+ mandatory: Obligatori
11
+ errors:
12
+ models:
13
+ answer:
14
+ attributes:
15
+ choices:
16
+ missing: no estan complerts
17
+ too_many: n'hi ha massa
18
+ decidim:
19
+ forms:
20
+ admin:
21
+ models:
22
+ components:
23
+ description: Descripció
24
+ tos: Termes i condicions d'ús
25
+ questionnaires:
26
+ answer_option:
27
+ answer_option: Opció de resposta
28
+ free_text: Text lliure
29
+ remove: Elimina
30
+ statement: Declaració
31
+ edit:
32
+ save: Desar
33
+ title: Títol
34
+ form:
35
+ add_question: Afegeix una pregunta
36
+ already_answered_warning: No pots modificar les pregunte d'aquest qüestionari perquè ja ha estat contestat per alguns usuaris.
37
+ question:
38
+ add_answer_option: Afegeix una opció de resposta
39
+ any: Cap
40
+ description: Descripció
41
+ down: Baixar
42
+ question: Pregunta
43
+ remove: Eliminar
44
+ statement: Declaració
45
+ up: Pujar
46
+ update:
47
+ invalid: S'han produït alguns errors en desar el qüestionari.
48
+ success: Els qüestionaris s'han desat correctament.
49
+ errors:
50
+ answer:
51
+ body: El camp no pot estar en blanc
52
+ question_types:
53
+ long_answer: Resposta llarga
54
+ multiple_option: Opció múltiple
55
+ short_answer: Resposta curta
56
+ single_option: Opció única
57
+ sorting: Ordenació
58
+ questionnaires:
59
+ answer:
60
+ invalid: S'han produït errors en respondre el qüestionari.
61
+ success: El qüestionari ha estat respost amb èxit.
62
+ question:
63
+ max_choices: 'Opcions màximes: %{n}'
64
+ show:
65
+ answer_questionnaire:
66
+ anonymous_user_message: <a href="%{sign_in_link}">Inicia sessió amb el teu compte</a> o <a href="%{sign_up_link}">registra't</a> per respondre el qüestionari.
67
+ title: Respon el qüestionari
68
+ are_you_sure: Aquesta acció no es pot desfer i no podràs editar les teves respostes. Estàs segur?
69
+ questionnaire_answered:
70
+ body: Ja has respost a aquest qüestionari.
71
+ title: Ja has respost
72
+ questionnaire_closed:
73
+ body: El qüestionari està tancat i no es pot respondre.
74
+ title: S'ha tancat el qüestionari
75
+ questionnaire_for_private_users:
76
+ body: El qüestionari només està disponible per a usuaris privats
77
+ title: S'ha tancat el qüestionari
78
+ submit: Enviar respostes
79
+ tos_agreement: En participar, acceptes els Termes i condicions d'ús
@@ -0,0 +1,79 @@
1
+ de:
2
+ activemodel:
3
+ attributes:
4
+ answer:
5
+ body: Antworten
6
+ question:
7
+ max_choices: Maximale Anzahl von Auswahlmöglichkeiten
8
+ question_type: Art
9
+ questionnaire_question:
10
+ mandatory: Verpflichtend
11
+ errors:
12
+ models:
13
+ answer:
14
+ attributes:
15
+ choices:
16
+ missing: sind nicht vollständig
17
+ too_many: sind zu viele
18
+ decidim:
19
+ forms:
20
+ admin:
21
+ models:
22
+ components:
23
+ description: Beschreibung
24
+ tos: Nutzungsbedingungen
25
+ questionnaires:
26
+ answer_option:
27
+ answer_option: Antwortoption
28
+ free_text: Freier Text
29
+ remove: Löschen
30
+ statement: Aussage
31
+ edit:
32
+ save: sparen
33
+ title: Titel
34
+ form:
35
+ add_question: Frage hinzufügen
36
+ already_answered_warning: Der Fragebogen wird bereits von einigen Benutzern beantwortet, sodass Sie die Fragen nicht ändern können.
37
+ question:
38
+ add_answer_option: Antwortoption hinzufügen
39
+ any: Irgendein
40
+ description: Beschreibung
41
+ down: Nieder
42
+ question: Frage
43
+ remove: Löschen
44
+ statement: Aussage
45
+ up: Oben
46
+ update:
47
+ invalid: Beim Speichern des Fragebogens sind Fehler aufgetreten.
48
+ success: Fragebögen wurden erfolgreich gespeichert.
49
+ errors:
50
+ answer:
51
+ body: Körper kann nicht leer sein
52
+ question_types:
53
+ long_answer: Lange Antwort
54
+ multiple_option: Mehrfachoption
55
+ short_answer: Kurze Antwort
56
+ single_option: Einzelne Option
57
+ sorting: Sortierung
58
+ questionnaires:
59
+ answer:
60
+ invalid: Bei der Beantwortung des Fragebogens sind Fehler aufgetreten.
61
+ success: Fragebogen erfolgreich beantwortet.
62
+ question:
63
+ max_choices: 'Max Auswahlmöglichkeiten: %{n}'
64
+ show:
65
+ answer_questionnaire:
66
+ anonymous_user_message: <a href="%{sign_in_link}">Melden Sie sich mit Ihrem Konto an</a> oder <a href="%{sign_up_link}">Melden Sie sich an</a> , um den Fragebogen zu beantworten.
67
+ title: Beantworten Sie den Fragebogen
68
+ are_you_sure: Diese Aktion kann nicht rückgängig gemacht werden und Sie können Ihre Antworten nicht bearbeiten. Bist du sicher?
69
+ questionnaire_answered:
70
+ body: Sie haben diesen Fragebogen bereits beantwortet.
71
+ title: Schon beantwortet
72
+ questionnaire_closed:
73
+ body: Der Fragebogen ist geschlossen und kann nicht beantwortet werden.
74
+ title: Fragebogen geschlossen
75
+ questionnaire_for_private_users:
76
+ body: Der Fragebogen ist nur für Privatanwender verfügbar
77
+ title: Fragebogen geschlossen
78
+ submit: einreichen
79
+ tos_agreement: Mit der Teilnahme stimmen Sie den Nutzungsbedingungen zu
@@ -0,0 +1,79 @@
1
+ en:
2
+ activemodel:
3
+ attributes:
4
+ answer:
5
+ body: Answer
6
+ question:
7
+ max_choices: Maximum number of choices
8
+ question_type: Type
9
+ questionnaire_question:
10
+ mandatory: Mandatory
11
+ errors:
12
+ models:
13
+ answer:
14
+ attributes:
15
+ choices:
16
+ missing: are not complete
17
+ too_many: are too many
18
+ decidim:
19
+ forms:
20
+ admin:
21
+ models:
22
+ components:
23
+ description: Description
24
+ tos: Terms of service
25
+ questionnaires:
26
+ answer_option:
27
+ answer_option: Answer option
28
+ free_text: Free text
29
+ remove: Remove
30
+ statement: Statement
31
+ edit:
32
+ save: Save
33
+ title: Title
34
+ form:
35
+ add_question: Add question
36
+ already_answered_warning: The questionnaire is already answered by some users so you cannot modify its questions.
37
+ question:
38
+ add_answer_option: Add answer option
39
+ any: Any
40
+ description: Description
41
+ down: Down
42
+ question: Question
43
+ remove: Remove
44
+ statement: Statement
45
+ up: Up
46
+ update:
47
+ invalid: There's been errors when saving the questionnaire.
48
+ success: Questionnaires saved successfully.
49
+ errors:
50
+ answer:
51
+ body: Body can't be blank
52
+ question_types:
53
+ long_answer: Long answer
54
+ multiple_option: Multiple option
55
+ short_answer: Short answer
56
+ single_option: Single option
57
+ sorting: Sorting
58
+ questionnaires:
59
+ answer:
60
+ invalid: There's been errors when answering the questionnaire.
61
+ success: Questionnaire answered successfully.
62
+ question:
63
+ max_choices: 'Max choices: %{n}'
64
+ show:
65
+ answer_questionnaire:
66
+ anonymous_user_message: <a href="%{sign_in_link}">Sign in with your account</a> or <a href="%{sign_up_link}">sign up</a> to answer the questionnaire.
67
+ title: Answer the questionnaire
68
+ are_you_sure: This action cannot be undone and you will not be able to edit your answers. Are you sure?
69
+ questionnaire_answered:
70
+ body: You have already answered this questionnaire.
71
+ title: Already answered
72
+ questionnaire_closed:
73
+ body: The questionnaire is closed and cannot be answered.
74
+ title: Questionnaire closed
75
+ questionnaire_for_private_users:
76
+ body: The questionnaire is available only for private users
77
+ title: Questionnaire closed
78
+ submit: Submit
79
+ tos_agreement: By participating you accept its Terms of Service
@@ -0,0 +1,79 @@
1
+ es-PY:
2
+ activemodel:
3
+ attributes:
4
+ answer:
5
+ body: Responder
6
+ question:
7
+ max_choices: Número máximo de opciones
8
+ question_type: Tipo
9
+ questionnaire_question:
10
+ mandatory: Obligatorio
11
+ errors:
12
+ models:
13
+ answer:
14
+ attributes:
15
+ choices:
16
+ missing: no están completos
17
+ too_many: son demasiados
18
+ decidim:
19
+ forms:
20
+ admin:
21
+ models:
22
+ components:
23
+ description: Descripción
24
+ tos: Términos y condiciones de uso
25
+ questionnaires:
26
+ answer_option:
27
+ answer_option: Opción de respuesta
28
+ free_text: Texto libre
29
+ remove: Retirar
30
+ statement: Declaración
31
+ edit:
32
+ save: Guardar
33
+ title: Título
34
+ form:
35
+ add_question: Añadir pregunta
36
+ already_answered_warning: Algunos usuarios ya han respondido al cuestionario, por lo que no puedes modificar las preguntas.
37
+ question:
38
+ add_answer_option: Añadir opción de respuesta
39
+ any: Alguna
40
+ description: Descripción
41
+ down: Abajo
42
+ question: Pregunta
43
+ remove: Borrar
44
+ statement: Declaración
45
+ up: Arriba
46
+ update:
47
+ invalid: Ha habido errores al guardar el cuestionario.
48
+ success: Cuestionarios guardados con éxito.
49
+ errors:
50
+ answer:
51
+ body: El campo no puede estar en blanco
52
+ question_types:
53
+ long_answer: Respuesta larga
54
+ multiple_option: Opción múltiple
55
+ short_answer: Respuesta corta
56
+ single_option: Opción única
57
+ sorting: Ordenación
58
+ questionnaires:
59
+ answer:
60
+ invalid: Ha habido errores al responder al cuestionario.
61
+ success: Has respondido al cuestionario con éxito.
62
+ question:
63
+ max_choices: 'Opciones máximas: %{n}'
64
+ show:
65
+ answer_questionnaire:
66
+ anonymous_user_message: <a href="%{sign_in_link}">Inicia sesión con tu cuenta</a> o <a href="%{sign_up_link}">regístrese</a> para responder al cuestionario.
67
+ title: Responde al cuestionario
68
+ are_you_sure: Esta acción no se puede deshacer y no podrás editar tus respuestas. ¿Estás seguro?
69
+ questionnaire_answered:
70
+ body: Ya has respondido este cuestionario.
71
+ title: Ya has respondido
72
+ questionnaire_closed:
73
+ body: El cuestionario está cerrado y ya no puedes responder.
74
+ title: Cuestionario cerrado
75
+ questionnaire_for_private_users:
76
+ body: El cuestionario está disponible solo para usuarios privados
77
+ title: Cuestionario cerrado
78
+ submit: Enviar
79
+ tos_agreement: Al responder aceptas los Términos y condiciones de uso