decidim-forms 0.25.1 → 0.26.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/commands/decidim/forms/answer_questionnaire.rb +6 -2
- data/app/forms/decidim/forms/admin/question_form.rb +4 -0
- data/app/models/decidim/forms/answer.rb +1 -0
- data/app/models/decidim/forms/question.rb +7 -1
- data/app/packs/src/decidim/forms/admin/forms.js +2 -0
- data/app/presenters/decidim/forms/admin/questionnaire_answer_presenter.rb +19 -4
- data/app/presenters/decidim/forms/admin/questionnaire_participant_presenter.rb +5 -2
- data/app/queries/decidim/forms/questionnaire_user_answers.rb +4 -1
- data/app/views/decidim/forms/admin/questionnaires/_form.html.erb +12 -0
- data/app/views/decidim/forms/admin/questionnaires/_title_and_description.html.erb +80 -0
- data/app/views/decidim/forms/questionnaires/_answer.html.erb +10 -1
- data/app/views/decidim/forms/questionnaires/answers/_title_and_description.html.erb +1 -0
- data/app/views/decidim/forms/questionnaires/show.html.erb +8 -7
- data/config/locales/ca.yml +11 -0
- data/config/locales/cs.yml +11 -0
- data/config/locales/en.yml +11 -0
- data/config/locales/es-MX.yml +11 -0
- data/config/locales/es-PY.yml +11 -0
- data/config/locales/es.yml +11 -0
- data/config/locales/fi-plain.yml +11 -0
- data/config/locales/fi.yml +11 -0
- data/config/locales/fr-CA.yml +11 -0
- data/config/locales/fr.yml +12 -1
- data/config/locales/gl.yml +11 -0
- data/config/locales/hu.yml +11 -0
- data/config/locales/ja.yml +12 -1
- data/config/locales/lb-LU.yml +103 -0
- data/config/locales/nl.yml +11 -0
- data/config/locales/no.yml +52 -0
- data/config/locales/pt-BR.yml +1 -1
- data/config/locales/ro-RO.yml +69 -58
- data/config/locales/sv.yml +12 -0
- data/config/locales/val-ES.yml +18 -0
- data/lib/decidim/forms/test/factories.rb +12 -0
- data/lib/decidim/forms/test/shared_examples/manage_questionnaire_answers.rb +18 -0
- data/lib/decidim/forms/test/shared_examples/manage_questionnaires/add_questions.rb +36 -5
- data/lib/decidim/forms/test/shared_examples/manage_questionnaires/update_questions.rb +98 -0
- data/lib/decidim/forms/test/shared_examples/manage_questionnaires.rb +8 -0
- data/lib/decidim/forms/user_answers_serializer.rb +7 -1
- data/lib/decidim/forms/version.rb +1 -1
- metadata +15 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '001966829dd7bb233641ea5fb6134eacfadb93b6e902854ea48ee21287a378af'
|
4
|
+
data.tar.gz: 10229cd3561629c46253977f603129863ac1d6cc87bd0737be5368ec22c6d9f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5f1c63e9080a6599abbf681a66b58f937929d3d65401ce0d342c65ba8241b060f0fea8d1af1120296cabc3c287756adfd9310387de91028472ed2eff5893db5
|
7
|
+
data.tar.gz: b01e17fefc02e5d569eca30ac167c8d9d3eecd4edeaca8ed6b259b3aca7c6e73062bc7879da4b038e7c80a65d7237895a82c21d4c4b934041659444769915aa1
|
@@ -20,7 +20,7 @@ module Decidim
|
|
20
20
|
#
|
21
21
|
# Broadcasts :ok if successful, :invalid otherwise.
|
22
22
|
def call
|
23
|
-
return broadcast(:invalid) if @form.invalid?
|
23
|
+
return broadcast(:invalid) if @form.invalid? || user_already_answered?
|
24
24
|
|
25
25
|
answer_questionnaire
|
26
26
|
|
@@ -32,7 +32,7 @@ module Decidim
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
attr_reader :form
|
35
|
+
attr_reader :form, :questionnaire, :current_user
|
36
36
|
|
37
37
|
private
|
38
38
|
|
@@ -96,6 +96,10 @@ module Decidim
|
|
96
96
|
raise ActiveRecord::Rollback if @errors
|
97
97
|
end
|
98
98
|
end
|
99
|
+
|
100
|
+
def user_already_answered?
|
101
|
+
questionnaire.answered_by?(current_user || form.context.session_token)
|
102
|
+
end
|
99
103
|
end
|
100
104
|
end
|
101
105
|
end
|
@@ -42,6 +42,10 @@ module Decidim
|
|
42
42
|
question_type == Decidim::Forms::Question::SEPARATOR_TYPE
|
43
43
|
end
|
44
44
|
|
45
|
+
def title_and_description?
|
46
|
+
question_type == Decidim::Forms::Question::TITLE_AND_DESCRIPTION_TYPE
|
47
|
+
end
|
48
|
+
|
45
49
|
def matrix_rows_by_position
|
46
50
|
matrix_rows.sort do |a, b|
|
47
51
|
if a.position && b.position
|
@@ -22,6 +22,7 @@ module Decidim
|
|
22
22
|
validate :question_belongs_to_questionnaire
|
23
23
|
|
24
24
|
scope :not_separator, -> { joins(:question).where.not(decidim_forms_questions: { question_type: Decidim::Forms::Question::SEPARATOR_TYPE }) }
|
25
|
+
scope :not_title_and_description, -> { joins(:question).where.not(decidim_forms_questions: { question_type: Decidim::Forms::Question::TITLE_AND_DESCRIPTION_TYPE }) }
|
25
26
|
|
26
27
|
def self.user_collection(user)
|
27
28
|
where(decidim_user_id: user.id)
|
@@ -8,7 +8,8 @@ module Decidim
|
|
8
8
|
|
9
9
|
QUESTION_TYPES = %w(short_answer long_answer single_option multiple_option sorting files matrix_single matrix_multiple).freeze
|
10
10
|
SEPARATOR_TYPE = "separator"
|
11
|
-
|
11
|
+
TITLE_AND_DESCRIPTION_TYPE = "title_and_description"
|
12
|
+
TYPES = (QUESTION_TYPES + [SEPARATOR_TYPE, TITLE_AND_DESCRIPTION_TYPE]).freeze
|
12
13
|
|
13
14
|
translatable_fields :body, :description
|
14
15
|
|
@@ -49,6 +50,7 @@ module Decidim
|
|
49
50
|
validates :question_type, inclusion: { in: TYPES }
|
50
51
|
|
51
52
|
scope :not_separator, -> { where.not(question_type: SEPARATOR_TYPE) }
|
53
|
+
scope :not_title_and_description, -> { where.not(question_type: TITLE_AND_DESCRIPTION_TYPE) }
|
52
54
|
|
53
55
|
scope :with_body, -> { where(question_type: %w(short_answer long_answer)) }
|
54
56
|
scope :with_choices, -> { where.not(question_type: %w(short_answer long_answer)) }
|
@@ -84,6 +86,10 @@ module Decidim
|
|
84
86
|
question_type.to_s == SEPARATOR_TYPE
|
85
87
|
end
|
86
88
|
|
89
|
+
def title_and_description?
|
90
|
+
question_type.to_s == TITLE_AND_DESCRIPTION_TYPE
|
91
|
+
end
|
92
|
+
|
87
93
|
def has_attachments?
|
88
94
|
question_type.to_s == "files"
|
89
95
|
end
|
@@ -375,8 +375,10 @@ export default function createEditableForm() {
|
|
375
375
|
fieldSelector: fieldSelector,
|
376
376
|
addFieldButtonSelector: ".add-question",
|
377
377
|
addSeparatorButtonSelector: ".add-separator",
|
378
|
+
addTitleAndDescriptionButtonSelector: ".add-title-and-description",
|
378
379
|
fieldTemplateSelector: ".decidim-question-template",
|
379
380
|
separatorTemplateSelector: ".decidim-separator-template",
|
381
|
+
TitleAndDescriptionTemplateSelector: ".decidim-title-and-description-template",
|
380
382
|
removeFieldButtonSelector: ".remove-question",
|
381
383
|
moveUpFieldButtonSelector: ".move-up-question",
|
382
384
|
moveDownFieldButtonSelector: ".move-down-question",
|
@@ -21,10 +21,13 @@ module Decidim
|
|
21
21
|
return "-" if answer.choices.empty?
|
22
22
|
|
23
23
|
choices = answer.choices.map do |choice|
|
24
|
-
|
24
|
+
{
|
25
|
+
answer_option_body: choice.try(:answer_option).try(:translated_body),
|
26
|
+
choice_body: body_or_custom_body(choice)
|
27
|
+
}
|
25
28
|
end
|
26
29
|
|
27
|
-
return choices.first if answer.question.question_type == "single_option"
|
30
|
+
return choice(choices.first) if answer.question.question_type == "single_option"
|
28
31
|
|
29
32
|
content_tag(:ul) do
|
30
33
|
safe_join(choices.map { |c| choice(c) })
|
@@ -52,11 +55,23 @@ module Decidim
|
|
52
55
|
# rubocop:enable Style/StringConcatenation
|
53
56
|
end
|
54
57
|
|
55
|
-
def choice(
|
58
|
+
def choice(choice_hash)
|
56
59
|
content_tag :li do
|
57
|
-
|
60
|
+
render_body_for choice_hash
|
58
61
|
end
|
59
62
|
end
|
63
|
+
|
64
|
+
def render_body_for(choice_hash)
|
65
|
+
return choice_hash[:answer_option_body] if choice_hash[:choice_body].blank?
|
66
|
+
|
67
|
+
"#{choice_hash[:answer_option_body]} (#{choice_hash[:choice_body]})"
|
68
|
+
end
|
69
|
+
|
70
|
+
def body_or_custom_body(choice)
|
71
|
+
return choice.custom_body if choice.try(:custom_body).present?
|
72
|
+
|
73
|
+
""
|
74
|
+
end
|
60
75
|
end
|
61
76
|
end
|
62
77
|
end
|
@@ -46,13 +46,16 @@ module Decidim
|
|
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.not_separator.count * 100
|
49
|
+
(with_body + with_choices).to_f / questionnaire.questions.not_separator.not_title_and_description.count * 100
|
50
50
|
end
|
51
51
|
|
52
52
|
private
|
53
53
|
|
54
54
|
def sibilings
|
55
|
-
Answer.not_separator
|
55
|
+
Answer.not_separator
|
56
|
+
.not_title_and_description
|
57
|
+
.where(questionnaire: questionnaire, session_token: participant.session_token)
|
58
|
+
.joins(:question).order("decidim_forms_questions.position ASC")
|
56
59
|
end
|
57
60
|
end
|
58
61
|
end
|
@@ -20,7 +20,10 @@ module Decidim
|
|
20
20
|
|
21
21
|
# Finds and group answers by user for each questionnaire's question.
|
22
22
|
def query
|
23
|
-
answers = Answer.not_separator
|
23
|
+
answers = Answer.not_separator
|
24
|
+
.not_title_and_description
|
25
|
+
.joins(:question)
|
26
|
+
.where(questionnaire: @questionnaire)
|
24
27
|
|
25
28
|
answers.sort_by { |answer| answer.question.position }.group_by { |a| a.user || a.session_token }.values
|
26
29
|
end
|
@@ -65,6 +65,12 @@
|
|
65
65
|
id: tabs_id_for_question(blank_question),
|
66
66
|
editable: questionnaire.questions_editable? %>
|
67
67
|
</script>
|
68
|
+
<script type="text/template" class="decidim-title-and-description-template decidim-template" id="title-and-description-template">
|
69
|
+
<%= render "decidim/forms/admin/questionnaires/title_and_description",
|
70
|
+
form: question_form,
|
71
|
+
id: tabs_id_for_question(blank_question),
|
72
|
+
editable: questionnaire.questions_editable? %>
|
73
|
+
</script>
|
68
74
|
<%= render "decidim/forms/admin/questionnaires/answer_option_template", form: question_form, editable: questionnaire.questions_editable?, template_id: "answer-option-template-dummy" %>
|
69
75
|
<%= render "decidim/forms/admin/questionnaires/display_condition_template", form: question_form, editable: questionnaire.questions_editable?, template_id: "display-condition-template-dummy" %>
|
70
76
|
<%= render "decidim/forms/admin/questionnaires/matrix_row_template", form: question_form, editable: questionnaire.questions_editable?, template_id: "matrix-row-template-dummy" %>
|
@@ -83,6 +89,11 @@
|
|
83
89
|
form: question_form,
|
84
90
|
id: tabs_id_for_question(question),
|
85
91
|
editable: questionnaire.questions_editable? %>
|
92
|
+
<% elsif question.title_and_description? %>
|
93
|
+
<%= render "decidim/forms/admin/questionnaires/title_and_description",
|
94
|
+
form: question_form,
|
95
|
+
id: tabs_id_for_question(question),
|
96
|
+
editable: questionnaire.questions_editable? %>
|
86
97
|
<% else %>
|
87
98
|
<%= render "decidim/forms/admin/questionnaires/question",
|
88
99
|
form: question_form,
|
@@ -102,6 +113,7 @@
|
|
102
113
|
<% if questionnaire.questions_editable? %>
|
103
114
|
<button class="button add-question"><%= t(".add_question") %></button>
|
104
115
|
<button class="button add-separator"><%= t(".add_separator") %></button>
|
116
|
+
<button class="button add-title-and-description"><%= t(".add_title_and_description") %></button>
|
105
117
|
<% end %>
|
106
118
|
</div>
|
107
119
|
|
@@ -0,0 +1,80 @@
|
|
1
|
+
<% question = form.object %>
|
2
|
+
<% is_expanded = question.errors.any? %>
|
3
|
+
|
4
|
+
<div class="card questionnaire-question" id="<%= id %>-field">
|
5
|
+
<div class="card-divider question-divider">
|
6
|
+
<h2 class="card-title">
|
7
|
+
<span>
|
8
|
+
<% if editable %>
|
9
|
+
<%== icon("move") %>
|
10
|
+
<% end %>
|
11
|
+
<%= dynamic_title(translated_attribute(question.body), class: "question-title-statement", max_length: 50, omission: "...", placeholder: t(".title_and_description")) %>
|
12
|
+
</span>
|
13
|
+
|
14
|
+
<button type="button" class="button small secondary button--title question--collapse" data-toggle="<%= id %>-question-card button--collapse-question-<%= id %> button--expand-question-<%= id %>">
|
15
|
+
<span id="button--collapse-question-<%= id %>" data-toggler=".hide" class="icon-collapse <%= "hide" unless is_expanded %>">
|
16
|
+
<%== icon("caret-top", aria_label: t(".collapse"), role: "img") %>
|
17
|
+
</span>
|
18
|
+
|
19
|
+
<span id="button--expand-question-<%= id %>" data-toggler=".hide" class="icon-expand <%= "hide" if is_expanded %>">
|
20
|
+
<%== icon("caret-bottom", aria_label: t(".expand"), role: "img") %>
|
21
|
+
</span>
|
22
|
+
</button>
|
23
|
+
|
24
|
+
<% if editable %>
|
25
|
+
<button class="button small alert hollow move-up-question button--title">
|
26
|
+
<%== "#{icon("arrow-top")} #{t(".up")}" %>
|
27
|
+
</button>
|
28
|
+
|
29
|
+
<button class="button small alert hollow move-down-question button--title">
|
30
|
+
<%== "#{icon("arrow-bottom")} #{t(".down")}" %>
|
31
|
+
</button>
|
32
|
+
|
33
|
+
<button class="button small alert hollow remove-question button--title">
|
34
|
+
<%= t(".remove") %>
|
35
|
+
</button>
|
36
|
+
<% end %>
|
37
|
+
</h2>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<div class="card-section collapsible <%= "hide" unless is_expanded %>" data-toggler=".hide" id="<%= id %>-question-card">
|
41
|
+
<div class="row column">
|
42
|
+
<%=
|
43
|
+
form.translated(
|
44
|
+
:text_field,
|
45
|
+
:body,
|
46
|
+
tabs_id: id,
|
47
|
+
label: t(".title"),
|
48
|
+
disabled: !editable
|
49
|
+
)
|
50
|
+
%>
|
51
|
+
</div>
|
52
|
+
|
53
|
+
<div class="row column">
|
54
|
+
<%=
|
55
|
+
form.translated(
|
56
|
+
:editor,
|
57
|
+
:description,
|
58
|
+
toolbar: :full,
|
59
|
+
tabs_id: id,
|
60
|
+
label: t(".description"),
|
61
|
+
disabled: !editable
|
62
|
+
)
|
63
|
+
%>
|
64
|
+
</div>
|
65
|
+
|
66
|
+
<%=
|
67
|
+
form.hidden_field(
|
68
|
+
:question_type,
|
69
|
+
value: :title_and_description
|
70
|
+
)
|
71
|
+
%>
|
72
|
+
|
73
|
+
<% if question.persisted? %>
|
74
|
+
<%= form.hidden_field :id, disabled: !editable %>
|
75
|
+
<% end %>
|
76
|
+
|
77
|
+
<%= form.hidden_field :position, value: question.position || 0, disabled: !editable %>
|
78
|
+
<%= form.hidden_field :deleted, disabled: !editable %>
|
79
|
+
</div>
|
80
|
+
</div>
|
@@ -3,6 +3,15 @@
|
|
3
3
|
<% if answer.question.separator? %>
|
4
4
|
<%= 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 } %>
|
5
5
|
<%= answer_form.hidden_field :question_id %>
|
6
|
+
<% elsif answer.question.title_and_description? %>
|
7
|
+
<%= label_tag field_id, translated_attribute(answer.question.body), class: "questionnaire-title_and_description" %>
|
8
|
+
<% if translated_attribute(answer.question.description).present? %>
|
9
|
+
<div class="help-title_and_description ">
|
10
|
+
<%= decidim_sanitize_editor translated_attribute(answer.question.description) %>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
<%= 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 } %>
|
14
|
+
<%= answer_form.hidden_field :question_id %>
|
6
15
|
<% else %>
|
7
16
|
<% case answer.question.question_type %>
|
8
17
|
<% when "single_option", "multiple_option", "sorting" %>
|
@@ -13,7 +22,7 @@
|
|
13
22
|
|
14
23
|
<% if translated_attribute(answer.question.description).present? %>
|
15
24
|
<div class="help-text">
|
16
|
-
<%=
|
25
|
+
<%= decidim_sanitize_editor translated_attribute(answer.question.description) %>
|
17
26
|
</div>
|
18
27
|
<% end %>
|
19
28
|
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= answer_form.hidden_field :body, value: "title-and-description", id: field_id, disabled: disabled %>
|
@@ -11,7 +11,7 @@
|
|
11
11
|
<h3 class="section-heading"><%= translated_attribute questionnaire.title %></h3>
|
12
12
|
<div class="row">
|
13
13
|
<div class="columns large-<%= columns %> medium-centered lead">
|
14
|
-
<%=
|
14
|
+
<%= decidim_sanitize_editor translated_attribute questionnaire.description %>
|
15
15
|
</div>
|
16
16
|
</div>
|
17
17
|
</div>
|
@@ -20,8 +20,8 @@
|
|
20
20
|
<div class="columns large-<%= columns %> medium-centered">
|
21
21
|
<div class="card">
|
22
22
|
<div class="card__content">
|
23
|
-
|
24
|
-
|
23
|
+
<% unless questionnaire_for.try(:component)&.try(:published?) %>
|
24
|
+
<div class="section">
|
25
25
|
<div class="callout warning">
|
26
26
|
<p><%= t(".questionnaire_not_published.body") %></p>
|
27
27
|
</div>
|
@@ -65,14 +65,15 @@
|
|
65
65
|
<div id="step-<%= step_index %>" class="<%= step_index.zero? ? "questionnaire-step" : "questionnaire-step hide" %>" data-toggler=".hide">
|
66
66
|
<% if @form.total_steps > 1 %>
|
67
67
|
<h4 class="section-heading">
|
68
|
-
<%= t(".current_step", step: step_index + 1) %>
|
68
|
+
<%= t(".current_step", step: step_index + 1) %>
|
69
|
+
<span class="answer-questionnaire__steps"><%= t(".of_total_steps", total_steps: @form.total_steps) %></span>
|
69
70
|
</h4>
|
70
71
|
<% end %>
|
71
72
|
|
72
73
|
<% step_answers.each do |answer| %>
|
73
74
|
<div class="row column answer question" data-max-choices="<%= answer.question.max_choices %>" data-conditioned="<%= answer.question.display_conditions.any? %>" data-question-id="<%= answer.question.id %>">
|
74
75
|
<% answer.question.display_conditions.each do |display_condition| %>
|
75
|
-
<%= content_tag :div, nil,
|
76
|
+
<%= content_tag :div, nil, class: "display-condition", data: display_condition.to_html_data %>
|
76
77
|
<% end %>
|
77
78
|
|
78
79
|
<%= fields_for "questionnaire[responses][#{answer_idx}]", answer do |answer_form| %>
|
@@ -86,7 +87,7 @@
|
|
86
87
|
) %>
|
87
88
|
<% end %>
|
88
89
|
</div>
|
89
|
-
<% if !answer.question.separator? %>
|
90
|
+
<% if !(answer.question.separator? || answer.question.title_and_description?) %>
|
90
91
|
<% cleaned_answer_idx += 1 %>
|
91
92
|
<% end %>
|
92
93
|
<% answer_idx += 1 %>
|
@@ -108,7 +109,7 @@
|
|
108
109
|
<div class="row column tos-agreement">
|
109
110
|
<%= form.check_box :tos_agreement, label: t(".tos_agreement"), id: "questionnaire_tos_agreement", disabled: !current_participatory_space.can_participate?(current_user) %>
|
110
111
|
<div class="help-text">
|
111
|
-
<%=
|
112
|
+
<%= decidim_sanitize_editor translated_attribute questionnaire.tos %>
|
112
113
|
</div>
|
113
114
|
</div>
|
114
115
|
<% end %>
|
data/config/locales/ca.yml
CHANGED
@@ -79,6 +79,7 @@ ca:
|
|
79
79
|
form:
|
80
80
|
add_question: Afegeix una pregunta
|
81
81
|
add_separator: Afegir separador
|
82
|
+
add_title_and_description: Afegir títol i descripció
|
82
83
|
already_answered_warning: No pots modificar les preguntes d'aquest formulari perquè ja ha estat contestat per algunes participants.
|
83
84
|
collapse: Redueix totes les preguntes
|
84
85
|
expand: Expandeix totes les preguntes
|
@@ -108,6 +109,15 @@ ca:
|
|
108
109
|
remove: Eliminar
|
109
110
|
separator: Separador
|
110
111
|
up: Pujar
|
112
|
+
title_and_description:
|
113
|
+
collapse: Replegar
|
114
|
+
description: Descripció
|
115
|
+
down: Baixar
|
116
|
+
expand: Expandir
|
117
|
+
remove: Esborrar
|
118
|
+
title: Títol
|
119
|
+
title_and_description: Títol i descripció
|
120
|
+
up: Pujar
|
111
121
|
update:
|
112
122
|
invalid: S'ha produït un error en desar el formulari.
|
113
123
|
success: Formulari desat correctament.
|
@@ -131,6 +141,7 @@ ca:
|
|
131
141
|
short_answer: Resposta curta
|
132
142
|
single_option: Opció única
|
133
143
|
sorting: Ordenació
|
144
|
+
title_and_description: Títol i descripció
|
134
145
|
questionnaires:
|
135
146
|
answer:
|
136
147
|
invalid: S'han produït un error en respondre el formulari.
|
data/config/locales/cs.yml
CHANGED
@@ -79,6 +79,7 @@ cs:
|
|
79
79
|
form:
|
80
80
|
add_question: Přidat otázku
|
81
81
|
add_separator: Přidat oddělovač
|
82
|
+
add_title_and_description: Přidat název a popis
|
82
83
|
already_answered_warning: Formulář je již zodpovězen některými uživateli, takže jeho otázky nemůžete upravovat.
|
83
84
|
collapse: Sbalit všechny otázky
|
84
85
|
expand: Rozbalit všechny otázky
|
@@ -108,6 +109,15 @@ cs:
|
|
108
109
|
remove: Odebrat
|
109
110
|
separator: Oddělovač
|
110
111
|
up: Nahoru
|
112
|
+
title_and_description:
|
113
|
+
collapse: Sbalit
|
114
|
+
description: Popis
|
115
|
+
down: Dolů
|
116
|
+
expand: Rozbalit
|
117
|
+
remove: Odebrat
|
118
|
+
title: Název
|
119
|
+
title_and_description: Název a popis
|
120
|
+
up: Nahoru
|
111
121
|
update:
|
112
122
|
invalid: Při ukládání dotazníku došlo k chybám.
|
113
123
|
success: Formulář byl úspěšně uložen.
|
@@ -131,6 +141,7 @@ cs:
|
|
131
141
|
short_answer: Stručná odpověď
|
132
142
|
single_option: Jedna možnost
|
133
143
|
sorting: Třídění
|
144
|
+
title_and_description: Název a popis
|
134
145
|
questionnaires:
|
135
146
|
answer:
|
136
147
|
invalid: Při odpovědi na dotazník došlo k chybám.
|
data/config/locales/en.yml
CHANGED
@@ -80,6 +80,7 @@ en:
|
|
80
80
|
form:
|
81
81
|
add_question: Add question
|
82
82
|
add_separator: Add separator
|
83
|
+
add_title_and_description: Add title and description
|
83
84
|
already_answered_warning: The form is already answered by some users so you cannot modify its questions.
|
84
85
|
collapse: Collapse all questions
|
85
86
|
expand: Expand all questions
|
@@ -109,6 +110,15 @@ en:
|
|
109
110
|
remove: Remove
|
110
111
|
separator: Separator
|
111
112
|
up: Up
|
113
|
+
title_and_description:
|
114
|
+
collapse: Collapse
|
115
|
+
description: Description
|
116
|
+
down: Down
|
117
|
+
expand: Expand
|
118
|
+
remove: Remove
|
119
|
+
title: Title
|
120
|
+
title_and_description: Title and description
|
121
|
+
up: Up
|
112
122
|
update:
|
113
123
|
invalid: There was a problem saving the form.
|
114
124
|
success: Form successfully saved.
|
@@ -132,6 +142,7 @@ en:
|
|
132
142
|
short_answer: Short answer
|
133
143
|
single_option: Single option
|
134
144
|
sorting: Sorting
|
145
|
+
title_and_description: Title and description
|
135
146
|
questionnaires:
|
136
147
|
answer:
|
137
148
|
invalid: There was a problem answering the form.
|
data/config/locales/es-MX.yml
CHANGED
@@ -79,6 +79,7 @@ es-MX:
|
|
79
79
|
form:
|
80
80
|
add_question: Añadir pregunta
|
81
81
|
add_separator: Añadir separador
|
82
|
+
add_title_and_description: Añadir título y descripción
|
82
83
|
already_answered_warning: Algunos usuarios ya han respondido al cuestionario, por lo que no puedes modificar las preguntas.
|
83
84
|
collapse: Contraer todas las preguntas
|
84
85
|
expand: Expandir todos las preguntas
|
@@ -108,6 +109,15 @@ es-MX:
|
|
108
109
|
remove: Eliminar
|
109
110
|
separator: Separador
|
110
111
|
up: Subir
|
112
|
+
title_and_description:
|
113
|
+
collapse: Contraer
|
114
|
+
description: Descripción
|
115
|
+
down: Bajar
|
116
|
+
expand: Expandir
|
117
|
+
remove: Eliminar
|
118
|
+
title: Título
|
119
|
+
title_and_description: Título y descripción
|
120
|
+
up: Subir
|
111
121
|
update:
|
112
122
|
invalid: Ha habido errores al guardar el cuestionario.
|
113
123
|
success: Formulario guardado correctamente.
|
@@ -131,6 +141,7 @@ es-MX:
|
|
131
141
|
short_answer: Respuesta corta
|
132
142
|
single_option: Opción única
|
133
143
|
sorting: Ordenación
|
144
|
+
title_and_description: Titulo y descripción
|
134
145
|
questionnaires:
|
135
146
|
answer:
|
136
147
|
invalid: Ha habido errores al responder al cuestionario.
|
data/config/locales/es-PY.yml
CHANGED
@@ -79,6 +79,7 @@ es-PY:
|
|
79
79
|
form:
|
80
80
|
add_question: Añadir pregunta
|
81
81
|
add_separator: Añadir separador
|
82
|
+
add_title_and_description: Añadir título y descripción
|
82
83
|
already_answered_warning: Algunos usuarios ya han respondido al cuestionario, por lo que no puedes modificar las preguntas.
|
83
84
|
collapse: Contraer todas las preguntas
|
84
85
|
expand: Expandir todos las preguntas
|
@@ -108,6 +109,15 @@ es-PY:
|
|
108
109
|
remove: Eliminar
|
109
110
|
separator: Separador
|
110
111
|
up: Subir
|
112
|
+
title_and_description:
|
113
|
+
collapse: Contraer
|
114
|
+
description: Descripción
|
115
|
+
down: Bajar
|
116
|
+
expand: Expandir
|
117
|
+
remove: Eliminar
|
118
|
+
title: Título
|
119
|
+
title_and_description: Título y descripción
|
120
|
+
up: Subir
|
111
121
|
update:
|
112
122
|
invalid: Ha habido errores al guardar el cuestionario.
|
113
123
|
success: Formulario guardado correctamente.
|
@@ -131,6 +141,7 @@ es-PY:
|
|
131
141
|
short_answer: Respuesta corta
|
132
142
|
single_option: Opción única
|
133
143
|
sorting: Ordenación
|
144
|
+
title_and_description: Titulo y descripción
|
134
145
|
questionnaires:
|
135
146
|
answer:
|
136
147
|
invalid: Ha habido errores al responder al cuestionario.
|
data/config/locales/es.yml
CHANGED
@@ -79,6 +79,7 @@ es:
|
|
79
79
|
form:
|
80
80
|
add_question: Añadir pregunta
|
81
81
|
add_separator: Añadir separador
|
82
|
+
add_title_and_description: Añadir título y descripción
|
82
83
|
already_answered_warning: Algunas participantes ya han respondido el formulario, por lo que no puedes modificar las preguntas.
|
83
84
|
collapse: Contraer todas las preguntas
|
84
85
|
expand: Expandir todos las preguntas
|
@@ -108,6 +109,15 @@ es:
|
|
108
109
|
remove: Eliminar
|
109
110
|
separator: Separador
|
110
111
|
up: Subir
|
112
|
+
title_and_description:
|
113
|
+
collapse: Contraer
|
114
|
+
description: Descripción
|
115
|
+
down: Bajar
|
116
|
+
expand: Expandir
|
117
|
+
remove: Eliminar
|
118
|
+
title: Título
|
119
|
+
title_and_description: Título y descripción
|
120
|
+
up: Subir
|
111
121
|
update:
|
112
122
|
invalid: Se ha producido un error al guardar el formulario.
|
113
123
|
success: Formulario guardado correctamente.
|
@@ -131,6 +141,7 @@ es:
|
|
131
141
|
short_answer: Respuesta corta
|
132
142
|
single_option: Opción única
|
133
143
|
sorting: Ordenación
|
144
|
+
title_and_description: Titulo y descripción
|
134
145
|
questionnaires:
|
135
146
|
answer:
|
136
147
|
invalid: Se ha producido un error al responder el formulario.
|
data/config/locales/fi-plain.yml
CHANGED
@@ -79,6 +79,7 @@ fi-pl:
|
|
79
79
|
form:
|
80
80
|
add_question: Lisää kysymys
|
81
81
|
add_separator: Lisää erotinviiva
|
82
|
+
add_title_and_description: Lisää otsikko ja kuvaus
|
82
83
|
already_answered_warning: Jotkut käyttäjät ovat jo vastanneet kyselyyn, joten et voi muokata kysymyksiä.
|
83
84
|
collapse: Sulje kaikki kysymykset
|
84
85
|
expand: Avaa kaikki kysymykset
|
@@ -108,6 +109,15 @@ fi-pl:
|
|
108
109
|
remove: Poista
|
109
110
|
separator: Erotin
|
110
111
|
up: Ylös
|
112
|
+
title_and_description:
|
113
|
+
collapse: Pienennä
|
114
|
+
description: Kuvaus
|
115
|
+
down: Alas
|
116
|
+
expand: Laajenna
|
117
|
+
remove: Poista
|
118
|
+
title: Otsikko
|
119
|
+
title_and_description: Otsikko ja kuvaus
|
120
|
+
up: Ylös
|
111
121
|
update:
|
112
122
|
invalid: Kyselylomakkeiden tallentamisessa on tapahtunut virheitä.
|
113
123
|
success: Lomake tallennettu onnistuneesti.
|
@@ -131,6 +141,7 @@ fi-pl:
|
|
131
141
|
short_answer: Lyhyt vastaus
|
132
142
|
single_option: Yksi vaihtoehto
|
133
143
|
sorting: Järjestäminen
|
144
|
+
title_and_description: Otsikko ja kuvaus
|
134
145
|
questionnaires:
|
135
146
|
answer:
|
136
147
|
invalid: Kyselylomakkeeseen vastatessa tapahtui virheitä.
|
data/config/locales/fi.yml
CHANGED
@@ -79,6 +79,7 @@ fi:
|
|
79
79
|
form:
|
80
80
|
add_question: Lisää kysymys
|
81
81
|
add_separator: Lisää erotinviiva
|
82
|
+
add_title_and_description: Lisää otsikko ja kuvaus
|
82
83
|
already_answered_warning: Jotkut käyttäjät ovat jo vastanneet tähän kyselylomakkeeseen, joten et voi enää muokata kysymyksiä.
|
83
84
|
collapse: Sulje kaikki kysymykset
|
84
85
|
expand: Avaa kaikki kysymykset
|
@@ -108,6 +109,15 @@ fi:
|
|
108
109
|
remove: Poista
|
109
110
|
separator: Erotin
|
110
111
|
up: Ylös
|
112
|
+
title_and_description:
|
113
|
+
collapse: Pienennä
|
114
|
+
description: Kuvaus
|
115
|
+
down: Alas
|
116
|
+
expand: Laajenna
|
117
|
+
remove: Poista
|
118
|
+
title: Otsikko
|
119
|
+
title_and_description: Otsikko ja kuvaus
|
120
|
+
up: Ylös
|
111
121
|
update:
|
112
122
|
invalid: Kyselylomakkeen tallentaminen epäonnistui.
|
113
123
|
success: Lomake tallennettu onnistuneesti.
|
@@ -131,6 +141,7 @@ fi:
|
|
131
141
|
short_answer: Lyhyt vastaus
|
132
142
|
single_option: Yksi vaihtoehto
|
133
143
|
sorting: Järjestäminen
|
144
|
+
title_and_description: Otsikko ja kuvaus
|
134
145
|
questionnaires:
|
135
146
|
answer:
|
136
147
|
invalid: Kyselylomakkeeseen vastaaminen epäonnistui.
|