decidim-forms 0.20.0 → 0.23.1.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/admin/decidim_forms_manifest.css +3 -0
  3. data/app/assets/config/admin/decidim_forms_manifest.js +1 -0
  4. data/app/assets/config/decidim_forms_manifest.css +1 -0
  5. data/app/assets/images/decidim/surveys/icon.svg +1 -19
  6. data/app/assets/javascripts/decidim/forms/admin/auto_select_options_from_url.component.js.es6 +40 -0
  7. data/app/assets/javascripts/decidim/forms/admin/collapsible_questions.js.es6 +13 -0
  8. data/app/assets/javascripts/decidim/forms/admin/forms.js.es6 +260 -16
  9. data/app/assets/javascripts/decidim/forms/admin/live_text_update.component.js.es6 +52 -0
  10. data/app/assets/javascripts/decidim/forms/autosortable_checkboxes.component.js.es6 +54 -34
  11. data/app/assets/javascripts/decidim/forms/display_conditions.component.js.es6 +204 -0
  12. data/app/assets/javascripts/decidim/forms/forms.js.es6 +49 -1
  13. data/app/assets/javascripts/decidim/forms/max_choices_alert.component.js.es6 +44 -0
  14. data/app/assets/stylesheets/decidim/forms/forms.scss +39 -0
  15. data/app/assets/stylesheets/decidim/forms/questionnaire-answers-pdf.scss +69 -0
  16. data/app/cells/decidim/forms/matrix_readonly/show.erb +5 -0
  17. data/app/cells/decidim/forms/matrix_readonly_cell.rb +12 -0
  18. data/app/cells/decidim/forms/question_readonly/show.erb +5 -1
  19. data/app/cells/decidim/forms/question_readonly_cell.rb +5 -0
  20. data/app/cells/decidim/forms/step_navigation/show.erb +35 -0
  21. data/app/cells/decidim/forms/step_navigation_cell.rb +46 -0
  22. data/app/commands/decidim/forms/admin/update_questionnaire.rb +33 -1
  23. data/app/commands/decidim/forms/answer_questionnaire.rb +2 -1
  24. data/app/controllers/decidim/forms/admin/concerns/has_questionnaire.rb +52 -2
  25. data/app/controllers/decidim/forms/admin/concerns/has_questionnaire_answers.rb +97 -0
  26. data/app/controllers/decidim/forms/concerns/has_questionnaire.rb +11 -2
  27. data/app/forms/decidim/forms/admin/display_condition_form.rb +100 -0
  28. data/app/forms/decidim/forms/admin/question_form.rb +21 -1
  29. data/app/forms/decidim/forms/admin/question_matrix_row_form.rb +26 -0
  30. data/app/forms/decidim/forms/answer_choice_form.rb +1 -0
  31. data/app/forms/decidim/forms/answer_form.rb +31 -2
  32. data/app/forms/decidim/forms/questionnaire_form.rb +25 -3
  33. data/app/helpers/decidim/forms/admin/application_helper.rb +37 -0
  34. data/app/helpers/decidim/forms/admin/concerns/has_questionnaire_answers_pagination_helper.rb +49 -0
  35. data/app/helpers/decidim/forms/admin/concerns/has_questionnaire_answers_url_helper.rb +40 -0
  36. data/app/helpers/decidim/forms/admin/questionnaire_answers_helper.rb +27 -0
  37. data/app/jobs/decidim/forms/export_questionnaire_answers_job.rb +19 -0
  38. data/app/models/decidim/forms/answer.rb +0 -3
  39. data/app/models/decidim/forms/answer_choice.rb +7 -0
  40. data/app/models/decidim/forms/answer_option.rb +14 -0
  41. data/app/models/decidim/forms/display_condition.rb +51 -0
  42. data/app/models/decidim/forms/question.rb +52 -2
  43. data/app/models/decidim/forms/question_matrix_row.rb +15 -0
  44. data/app/models/decidim/forms/questionnaire.rb +11 -1
  45. data/app/presenters/decidim/forms/admin/questionnaire_answer_presenter.rb +43 -0
  46. data/app/presenters/decidim/forms/admin/questionnaire_participant_presenter.rb +60 -0
  47. data/app/presenters/decidim/forms/answer_option_presenter.rb +20 -0
  48. data/app/presenters/decidim/forms/question_presenter.rb +16 -0
  49. data/app/queries/decidim/forms/questionnaire_participant.rb +35 -0
  50. data/app/queries/decidim/forms/questionnaire_participants.rb +43 -0
  51. data/app/types/decidim/forms/answer_option_type.rb +14 -0
  52. data/app/types/decidim/forms/question_type.rb +23 -0
  53. data/app/types/decidim/forms/questionnaire_type.rb +22 -0
  54. data/app/views/decidim/forms/admin/questionnaires/_answer_option_template.html.erb +1 -1
  55. data/app/views/decidim/forms/admin/questionnaires/_display_condition.html.erb +88 -0
  56. data/app/views/decidim/forms/admin/questionnaires/_display_condition_template.html.erb +7 -0
  57. data/app/views/decidim/forms/admin/questionnaires/_form.html.erb +67 -8
  58. data/app/views/decidim/forms/admin/questionnaires/_matrix_row.html.erb +34 -0
  59. data/app/views/decidim/forms/admin/questionnaires/_matrix_row_template.html.erb +7 -0
  60. data/app/views/decidim/forms/admin/questionnaires/_question.html.erb +45 -6
  61. data/app/views/decidim/forms/admin/questionnaires/_separator.html.erb +41 -0
  62. data/app/views/decidim/forms/admin/questionnaires/answers/export/_answer.html.erb +31 -0
  63. data/app/views/decidim/forms/admin/questionnaires/answers/export/pdf.html.erb +13 -0
  64. data/app/views/decidim/forms/admin/questionnaires/answers/index.html.erb +53 -0
  65. data/app/views/decidim/forms/admin/questionnaires/answers/show.html.erb +48 -0
  66. data/app/views/decidim/forms/admin/questionnaires/edit.html.erb +9 -5
  67. data/app/views/decidim/forms/questionnaires/_answer.html.erb +28 -99
  68. data/app/views/decidim/forms/questionnaires/answers/_long_answer.html.erb +1 -0
  69. data/app/views/decidim/forms/questionnaires/answers/_matrix_multiple.html.erb +43 -0
  70. data/app/views/decidim/forms/questionnaires/answers/_matrix_single.html.erb +43 -0
  71. data/app/views/decidim/forms/questionnaires/answers/_multiple_option.html.erb +23 -0
  72. data/app/views/decidim/forms/questionnaires/answers/_separator.html.erb +1 -0
  73. data/app/views/decidim/forms/questionnaires/answers/_short_answer.html.erb +1 -0
  74. data/app/views/decidim/forms/questionnaires/answers/_single_option.html.erb +30 -0
  75. data/app/views/decidim/forms/questionnaires/answers/_sorting.html.erb +23 -0
  76. data/app/views/decidim/forms/questionnaires/show.html.erb +78 -26
  77. data/app/views/layouts/decidim/forms/admin/questionnaires/questionnaire_answers.html.erb +12 -0
  78. data/config/initializers/wicked_pdf.rb +25 -0
  79. data/config/locales/am-ET.yml +1 -0
  80. data/config/locales/ar.yml +9 -4
  81. data/config/locales/bg-BG.yml +14 -0
  82. data/config/locales/bg.yml +14 -0
  83. data/config/locales/ca.yml +98 -8
  84. data/config/locales/cs.yml +89 -5
  85. data/config/locales/da-DK.yml +1 -0
  86. data/config/locales/da.yml +1 -0
  87. data/config/locales/de.yml +92 -4
  88. data/config/locales/el-GR.yml +1 -0
  89. data/config/locales/el.yml +118 -0
  90. data/config/locales/en.yml +89 -5
  91. data/config/locales/eo.yml +1 -0
  92. data/config/locales/es-MX.yml +94 -4
  93. data/config/locales/es-PY.yml +94 -4
  94. data/config/locales/es.yml +94 -4
  95. data/config/locales/et-EE.yml +1 -0
  96. data/config/locales/et.yml +1 -0
  97. data/config/locales/eu.yml +7 -4
  98. data/config/locales/fi-plain.yml +88 -4
  99. data/config/locales/fi.yml +88 -4
  100. data/config/locales/fr-CA.yml +172 -0
  101. data/config/locales/fr.yml +89 -5
  102. data/config/locales/ga-IE.yml +1 -0
  103. data/config/locales/gl.yml +7 -4
  104. data/config/locales/hr-HR.yml +1 -0
  105. data/config/locales/hr.yml +1 -0
  106. data/config/locales/hu.yml +11 -5
  107. data/config/locales/id-ID.yml +7 -4
  108. data/config/locales/is-IS.yml +1 -0
  109. data/config/locales/is.yml +1 -0
  110. data/config/locales/it.yml +89 -5
  111. data/config/locales/ja-JP.yml +170 -0
  112. data/config/locales/ja.yml +170 -0
  113. data/config/locales/ko-KR.yml +1 -0
  114. data/config/locales/ko.yml +1 -0
  115. data/config/locales/lt-LT.yml +1 -0
  116. data/config/locales/lt.yml +1 -0
  117. data/config/locales/lv.yml +118 -0
  118. data/config/locales/mt-MT.yml +1 -0
  119. data/config/locales/mt.yml +1 -0
  120. data/config/locales/nl.yml +92 -8
  121. data/config/locales/no.yml +98 -1
  122. data/config/locales/om-ET.yml +1 -0
  123. data/config/locales/pl.yml +113 -26
  124. data/config/locales/pt-BR.yml +8 -5
  125. data/config/locales/pt.yml +111 -24
  126. data/config/locales/ro-RO.yml +167 -0
  127. data/config/locales/ru.yml +4 -2
  128. data/config/locales/sk-SK.yml +88 -0
  129. data/config/locales/sk.yml +90 -0
  130. data/config/locales/sl.yml +12 -0
  131. data/config/locales/so-SO.yml +1 -0
  132. data/config/locales/sr-CS.yml +1 -0
  133. data/config/locales/sv.yml +88 -7
  134. data/config/locales/ti-ER.yml +1 -0
  135. data/config/locales/tr-TR.yml +7 -4
  136. data/config/locales/vi-VN.yml +1 -0
  137. data/config/locales/vi.yml +1 -0
  138. data/config/locales/zh-CN.yml +172 -0
  139. data/config/locales/zh-TW.yml +1 -0
  140. data/db/migrate/20200130194123_create_decidim_forms_display_conditions.rb +20 -0
  141. data/db/migrate/20200225123810_create_decidim_forms_question_matrix_rows.rb +11 -0
  142. data/db/migrate/20200304152939_add_matrix_row_id_to_decidim_forms_answer_choices.rb +11 -0
  143. data/lib/decidim/api/questionnaire_entity_interface.rb +18 -0
  144. data/lib/decidim/exporters/form_pdf.rb +33 -0
  145. data/lib/decidim/exporters/form_pdf_controller_helper.rb +11 -0
  146. data/lib/decidim/forms.rb +6 -0
  147. data/lib/decidim/forms/admin_engine.rb +1 -1
  148. data/lib/decidim/forms/api.rb +7 -0
  149. data/lib/decidim/forms/test.rb +6 -0
  150. data/lib/decidim/forms/test/factories.rb +60 -5
  151. data/lib/decidim/forms/test/shared_examples/has_questionnaire.rb +918 -60
  152. data/lib/decidim/forms/test/shared_examples/manage_questionnaire_answers.rb +108 -0
  153. data/lib/decidim/forms/test/shared_examples/manage_questionnaires.rb +33 -575
  154. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/add_display_conditions.rb +179 -0
  155. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/add_questions.rb +463 -0
  156. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/update_display_conditions.rb +93 -0
  157. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/update_questions.rb +461 -0
  158. data/lib/decidim/forms/user_answers_serializer.rb +21 -4
  159. data/lib/decidim/forms/version.rb +1 -1
  160. metadata +136 -11
@@ -0,0 +1 @@
1
+ <%= answer_form.hidden_field :body, value: "separator", id: field_id, disabled: disabled %>
@@ -0,0 +1 @@
1
+ <%= answer_form.text_field :body, label: false, id: field_id, disabled: disabled %>
@@ -0,0 +1,30 @@
1
+ <div class="radio-button-collection">
2
+ <% choice = answer.choices.first %>
3
+
4
+ <% answer.question.answer_options.each_with_index do |answer_option, idx| %>
5
+ <% choice_id = "#{field_id}_choices_#{idx}" %>
6
+
7
+ <div class="collection-input">
8
+ <%= label_tag "#{choice_id}_body" do %>
9
+ <%= radio_button_tag "questionnaire[responses][#{answer_idx}][choices][][body]",
10
+ translated_attribute(answer_option.body),
11
+ answer_option.id == choice.try(:answer_option_id),
12
+ id: "#{choice_id}_body", disabled: disabled %>
13
+
14
+ <%= translated_attribute(answer_option.body) %>
15
+
16
+ <%= hidden_field_tag "questionnaire[responses][#{answer_idx}][choices][][answer_option_id]",
17
+ answer_option.id,
18
+ id: "#{choice_id}_answer_option",
19
+ disabled: true %>
20
+ <% end %>
21
+
22
+ <% if answer_option.free_text %>
23
+ <%= text_field_tag "questionnaire[responses][#{answer_idx}][choices][][custom_body]",
24
+ choice.try(:custom_body),
25
+ id: "#{choice_id}_custom_body",
26
+ disabled: true %>
27
+ <% end %>
28
+ </div>
29
+ <% end %>
30
+ </div>
@@ -0,0 +1,23 @@
1
+ <div class="sortable-check-box-collection">
2
+ <% answer.question.answer_options.each_with_index do |answer_option, idx| %>
3
+ <% choice = answer.selected_choices.find { |choice| choice.answer_option_id == answer_option.id } %>
4
+
5
+ <div class="collection-input">
6
+ <%= label_tag do %>
7
+ <%= check_box_tag "questionnaire[responses][#{answer_idx}][choices][#{idx}][body]",
8
+ translated_attribute(answer_option.body),
9
+ choice.present?, disabled: disabled %>
10
+
11
+ <span class="position"><%= choice.try(:position) %></span>
12
+
13
+ <%= translated_attribute(answer_option.body) %>
14
+
15
+ <%= hidden_field_tag "questionnaire[responses][#{answer_idx}][choices][#{idx}][position]",
16
+ choice.try(:position),
17
+ disabled: true %>
18
+
19
+ <%= hidden_field_tag "questionnaire[responses][#{answer_idx}][choices][#{idx}][answer_option_id]", answer_option.id %>
20
+ <% end %>
21
+ </div>
22
+ <% end %>
23
+ </div>
@@ -3,21 +3,31 @@
3
3
  description: translated_attribute(questionnaire.description),
4
4
  }) %>
5
5
 
6
+ <% columns = allow_answers? && visitor_can_answer? && @form.responses.map(&:question).any?(&:matrix?) ? 9 : 6 %>
7
+
6
8
  <%= render partial: "decidim/shared/component_announcement" %>
7
9
 
8
10
  <div class="row columns">
9
- <h2 class="section-heading"><%= translated_attribute questionnaire.title %></h2>
11
+ <h3 class="section-heading"><%= translated_attribute questionnaire.title %></h3>
10
12
  <div class="row">
11
- <div class="columns large-6 medium-centered lead">
13
+ <div class="columns large-<%= columns %> medium-centered lead">
12
14
  <%= decidim_sanitize translated_attribute questionnaire.description %>
13
15
  </div>
14
16
  </div>
15
17
  </div>
16
18
 
17
19
  <div class="row">
18
- <div class="columns large-6 medium-centered">
20
+ <div class="columns large-<%= columns %> medium-centered">
19
21
  <div class="card">
20
22
  <div class="card__content">
23
+ <% unless questionnaire_for.try(:component)&.try(:published?) %>
24
+ <div class="section">
25
+ <div class="callout warning">
26
+ <p><%= t(".questionnaire_not_published.body") %></p>
27
+ </div>
28
+ </div>
29
+ <% end %>
30
+
21
31
  <% if allow_answers? %>
22
32
  <% if visitor_can_answer? %>
23
33
  <% if visitor_already_answered? %>
@@ -29,6 +39,14 @@
29
39
  </div>
30
40
  <% else %>
31
41
  <div class="answer-questionnaire">
42
+ <noscript>
43
+ <div class="section">
44
+ <div class="callout warning">
45
+ <h5><%= t(".questionnaire_js_disabled.title") %></h5>
46
+ <p><%= t(".questionnaire_js_disabled.body") %></p>
47
+ </div>
48
+ </div>
49
+ </noscript>
32
50
  <% unless current_participatory_space.can_participate?(current_user) %>
33
51
  <div class="section">
34
52
  <div class="callout alert">
@@ -38,32 +56,66 @@
38
56
  </div>
39
57
  <% end %>
40
58
 
41
- <%= decidim_form_for(@form, url: update_url, method: :post, html: { class: "form answer-questionnaire" }) do |form| %>
59
+ <%= decidim_form_for(@form, url: update_url, method: :post, html: { class: "form answer-questionnaire" }, data: { "safe-path" => form_path }) do |form| %>
60
+ <%= form_required_explanation %>
42
61
  <%= invisible_captcha %>
43
- <% @form.answers.each_with_index do |answer, answer_idx| %>
44
- <div class="row column">
45
- <%= fields_for "questionnaire[answers][#{answer_idx}]", answer do |answer_form| %>
46
- <%= render "decidim/forms/questionnaires/answer", answer_form: answer_form, answer: answer, answer_idx: answer_idx, disabled: !current_participatory_space.can_participate?(current_user) %>
62
+ <% answer_idx = 0 %>
63
+ <% cleaned_answer_idx = 0 %>
64
+ <% @form.responses_by_step.each_with_index do |step_answers, step_index| %>
65
+ <div id="step-<%= step_index %>" class="<%= step_index.zero? ? "questionnaire-step" : "questionnaire-step hide" %>" data-toggler=".hide">
66
+ <% if @form.total_steps > 1 %>
67
+ <h4 class="section-heading">
68
+ <%= t(".current_step", step: step_index + 1) %> <span class="answer-questionnaire__steps"><%= t(".of_total_steps", total_steps: @form.total_steps) %></span>
69
+ </h4>
47
70
  <% end %>
48
- </div>
49
- <% end %>
50
71
 
51
- <% if show_represent_user_group? %>
52
- <div class="row column represent-user-group">
53
- <%= cell("decidim/represent_user_group", form) %>
54
- </div>
55
- <% end %>
72
+ <% step_answers.each do |answer| %>
73
+ <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
+ <% answer.question.display_conditions.each do |display_condition| %>
75
+ <%= content_tag :div, nil, class: "display-condition", data: display_condition.to_html_data %>
76
+ <% end %>
56
77
 
57
- <div class="row column tos-agreement">
58
- <%= form.check_box :tos_agreement, label: t(".tos_agreement"), id: "questionnaire_tos_agreement", disabled: !current_participatory_space.can_participate?(current_user) %>
59
- <div class="help-text">
60
- <%= decidim_sanitize translated_attribute questionnaire.tos %>
61
- </div>
62
- </div>
78
+ <%= fields_for "questionnaire[responses][#{answer_idx}]", answer do |answer_form| %>
79
+ <%= render(
80
+ "decidim/forms/questionnaires/answer",
81
+ answer_form: answer_form,
82
+ answer: answer,
83
+ answer_idx: answer_idx,
84
+ cleaned_answer_idx: cleaned_answer_idx,
85
+ disabled: !current_participatory_space.can_participate?(current_user)
86
+ ) %>
87
+ <% end %>
88
+ </div>
89
+ <% if !answer.question.separator? %>
90
+ <% cleaned_answer_idx += 1 %>
91
+ <% end %>
92
+ <% answer_idx += 1 %>
93
+ <% end %>
63
94
 
64
- <div class="button--double form-general-submit">
65
- <%= form.submit t(".submit"), class: "button", disabled: !current_participatory_space.can_participate?(current_user), data: { confirm: t(".are_you_sure"), disable: true } %>
66
- </div>
95
+ <% if step_index + 1 == @form.total_steps %>
96
+ <% if show_represent_user_group? %>
97
+ <div class="row column represent-user-group">
98
+ <%= cell("decidim/represent_user_group", form) %>
99
+ </div>
100
+ <% end %>
101
+
102
+ <div class="row column tos-agreement">
103
+ <%= form.check_box :tos_agreement, label: t(".tos_agreement"), id: "questionnaire_tos_agreement", disabled: !current_participatory_space.can_participate?(current_user) %>
104
+ <div class="help-text">
105
+ <%= decidim_sanitize translated_attribute questionnaire.tos %>
106
+ </div>
107
+ </div>
108
+ <% end %>
109
+
110
+ <%= cell(
111
+ "decidim/forms/step_navigation",
112
+ step_index,
113
+ total_steps: @form.total_steps,
114
+ button_disabled: !current_participatory_space.can_participate?(current_user),
115
+ form: form
116
+ ) %>
117
+ </div>
118
+ <% end %>
67
119
  <% end %>
68
120
  </div>
69
121
  <% end %>
@@ -75,14 +127,14 @@
75
127
  </p>
76
128
 
77
129
  <ol>
78
- <%= cell("decidim/forms/question_readonly", collection: @questionnaire.questions) %>
130
+ <%= cell("decidim/forms/question_readonly", collection: @questionnaire.questions.not_conditioned) %>
79
131
  </ol>
80
132
  </div>
81
133
  <% end %>
82
134
  <% else %>
83
135
  <div class="section">
84
136
  <div class="callout warning">
85
- <h5><%= t(".questionnaire_closed.title") %></h5>
137
+ <h4><%= t(".questionnaire_closed.title") %></h4>
86
138
  <p><%= t(".questionnaire_closed.body") %></p>
87
139
  </div>
88
140
  </div>
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="<%= I18n.locale %>" class="no-js">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
+ <meta name="viewport" content="width=device-width">
6
+ <%= wicked_pdf_stylesheet_link_tag "decidim/forms/questionnaire-answers-pdf" %>
7
+ <title><%= @title %></title>
8
+ </head>
9
+ <body>
10
+ <%= yield %>
11
+ </body>
12
+ </html>
@@ -0,0 +1,25 @@
1
+ require "wicked_pdf"
2
+
3
+ # frozen_string_literal: true
4
+
5
+ # WickedPDF Global Configuration
6
+ #
7
+ # Use this to set up shared configuration options for your entire application.
8
+ # Any of the configuration options shown here can also be applied to single
9
+ # models by passing arguments to the `render :pdf` call.
10
+ #
11
+ # To learn more, check out the README:
12
+ #
13
+ # https://github.com/mileszs/wicked_pdf/blob/master/README.md
14
+
15
+ WickedPdf.config = {
16
+ # Path to the wkhtmltopdf executable: This usually isn't needed if using
17
+ # one of the wkhtmltopdf-binary family of gems.
18
+ # exe_path: '/usr/local/bin/wkhtmltopdf',
19
+ # or
20
+ exe_path: Gem.bin_path("wkhtmltopdf-binary", "wkhtmltopdf")
21
+
22
+ # Layout file to be used for all PDFs
23
+ # (but can be overridden in `render :pdf` calls)
24
+ # layout: 'pdf.html',
25
+ }
@@ -0,0 +1 @@
1
+ am:
@@ -15,6 +15,8 @@ ar:
15
15
  choices:
16
16
  missing: ليست كاملة
17
17
  too_many: كثير جدا
18
+ questionnaire:
19
+ request_invalid: حدث خطأ أثناء معالجة الطلب. الرجاء إعادة المحاولة ثانية
18
20
  decidim:
19
21
  forms:
20
22
  admin:
@@ -30,10 +32,12 @@ ar:
30
32
  statement: بيان
31
33
  edit:
32
34
  save: حفظ
33
- title: عنوان
34
35
  form:
35
36
  add_question: أضف سؤال
36
37
  already_answered_warning: تمت الإجابة على النموذج من قبل بعض المستخدمين حتى لا تتمكن من تعديل أسئلته.
38
+ matrix_row:
39
+ remove: إزالة
40
+ statement: بيان
37
41
  question:
38
42
  add_answer_option: إضافة خيار الإجابة
39
43
  any: أي
@@ -45,7 +49,6 @@ ar:
45
49
  up: فوق
46
50
  update:
47
51
  invalid: كانت هناك مشكلة في حفظ النموذج.
48
- success: تم حفظ النماذج بنجاح.
49
52
  errors:
50
53
  answer:
51
54
  body: لا يمكن أن يكون الجسم فارغًا
@@ -65,7 +68,6 @@ ar:
65
68
  answer_questionnaire:
66
69
  anonymous_user_message: <a href="%{sign_in_link}">قم بتسجيل الدخول بحسابك</a> أو <a href="%{sign_up_link}">اشترك</a> للإجابة على النموذج
67
70
  title: أجب عن النموذج
68
- are_you_sure: لا يمكن التراجع عن هذا الإجراء ولن تتمكن من تعديل إجاباتك. هل أنت واثق؟
69
71
  questionnaire_answered:
70
72
  body: لقد أجبت بالفعل على هذا النموذج.
71
73
  title: تمت الاجابة مسبقا
@@ -75,8 +77,11 @@ ar:
75
77
  questionnaire_for_private_users:
76
78
  body: النموذج متاح فقط للمستخدمين من القطاع الخاص
77
79
  title: شكل مغلق
78
- submit: خضع
79
80
  tos_agreement: من خلال المشاركة ، فإنك تقبل شروط الخدمة
81
+ step_navigation:
82
+ show:
83
+ are_you_sure: لا يمكن التراجع عن هذا الإجراء ولن تتمكن من تعديل إجاباتك. هل أنت واثق؟
84
+ submit: خضع
80
85
  user_answers_serializer:
81
86
  created_at: أجاب على
82
87
  id: معرف الإجابة
@@ -0,0 +1,14 @@
1
+ bg:
2
+ activemodel:
3
+ attributes:
4
+ answer:
5
+ body: Отговор
6
+ question:
7
+ max_choices: Максимален брой възможности
8
+ question_type: Тип
9
+ decidim:
10
+ forms:
11
+ step_navigation:
12
+ show:
13
+ are_you_sure: Това действие не може да се отмени и Вие не можете да редактирате отговорите си. Сигурни ли сте?
14
+ submit: Изпрати
@@ -0,0 +1,14 @@
1
+ bg:
2
+ activemodel:
3
+ attributes:
4
+ answer:
5
+ body: Отговор
6
+ question:
7
+ max_choices: Максимален брой възможности
8
+ question_type: Тип
9
+ decidim:
10
+ forms:
11
+ step_navigation:
12
+ show:
13
+ are_you_sure: Това действие не може да се отмени и Вие не можете да редактирате отговорите си. Сигурни ли сте?
14
+ submit: Изпрати
@@ -2,7 +2,9 @@ ca:
2
2
  activemodel:
3
3
  attributes:
4
4
  answer:
5
- body: Respondre
5
+ body: Resposta
6
+ choices: Opcions
7
+ selected_choices: Opcions seleccionades
6
8
  question:
7
9
  max_choices: Nombre màxim d'opcions
8
10
  question_type: Tipus
@@ -15,42 +17,110 @@ ca:
15
17
  choices:
16
18
  missing: no estan complets
17
19
  too_many: en són masses
20
+ questionnaire:
21
+ request_invalid: Hi ha hagut un problema gestionant la petició. Si us plau torna-ho a provar
18
22
  decidim:
19
23
  forms:
20
24
  admin:
21
25
  models:
22
26
  components:
23
27
  description: Descripció
24
- tos: Termes i condicions d'ús
28
+ tos: Termes del servei
25
29
  questionnaires:
30
+ actions:
31
+ back: Tornar a les preguntes
32
+ show: Mostrar les respostes
26
33
  answer_option:
27
34
  answer_option: Opció de resposta
28
35
  free_text: Text lliure
29
- remove: Eliminar
36
+ remove: Elimina
30
37
  statement: Declaració
38
+ answers:
39
+ actions:
40
+ back: Tornar a les respostes
41
+ export: Exportar
42
+ show: Mostrar les respostes
43
+ empty: Encara no hi ha respostes
44
+ export:
45
+ answer:
46
+ title: 'Resposta #%{number}'
47
+ export_response:
48
+ title: survey_user_answers_%{token}
49
+ index:
50
+ title: "%{total} respostes totals"
51
+ show:
52
+ title: 'Resposta #%{number}'
53
+ display_condition:
54
+ answer_option: Opció de resposta
55
+ condition_question: Pregunta
56
+ condition_type: Condició
57
+ condition_types:
58
+ answered: Amb resposta
59
+ equal: Igual a
60
+ match: Inclou text
61
+ not_answered: No resposta
62
+ not_equal: No és igual
63
+ condition_value: Text inclòs
64
+ display_condition: Condicions de visualització
65
+ mandatory: Aquesta condició s'ha de complir sempre independentment de l'estat d'altres condicions
66
+ remove: Eliminar
67
+ save_warning: Recorda de guardar l'enquesta abans de configurar les condicions de visualitzacióó
68
+ select_answer_option: Eliminar l'opció de resposta
69
+ select_condition_question: Seleccionar una pregunta
70
+ select_condition_type: Seleccionar un tipus de condició
31
71
  edit:
32
- save: Desar
33
- title: Títol
72
+ save: Desa
73
+ title: Editar el qüestionari
34
74
  form:
35
75
  add_question: Afegeix una pregunta
76
+ add_separator: Afegir separador
36
77
  already_answered_warning: No pots modificar les preguntes d'aquest formulari perquè ja ha estat contestat per algunes participants.
78
+ collapse: Redueix totes les preguntes
79
+ expand: Expandeix totes les preguntes
80
+ preview: Previsualitzar
81
+ title: Editar el formulari
82
+ unpublished_warning: El formulari no està publicat. Pots modificar les preguntes, però al fer-ho s'esborraran les respostes actuals.
83
+ matrix_row:
84
+ matrix_row: Fila
85
+ remove: Elimina
86
+ statement: Declaració
37
87
  question:
38
88
  add_answer_option: Afegeix una opció de resposta
89
+ add_display_condition: Afegir condició de visualització
90
+ add_display_condition_info: Guardar l'enquesta per a configurar les condicions de visualització
91
+ add_matrix_row: Afegir fila
39
92
  any: Cap
93
+ collapse: Redueix
40
94
  description: Descripció
41
95
  down: Avall
96
+ expand: Expandeix
42
97
  question: Pregunta
43
98
  remove: Eliminar
44
99
  statement: Declaració
45
100
  up: Amunt
101
+ separator:
102
+ down: Baixar
103
+ remove: Eliminar
104
+ separator: Separador
105
+ up: Pujar
46
106
  update:
47
107
  invalid: S'ha produït un error en desar el formulari.
48
- success: Els formularis s'han desat correctament.
108
+ success: Formulari desat correctament.
49
109
  errors:
50
110
  answer:
51
111
  body: El camp no pot estar en blanc
112
+ files:
113
+ extension_whitelist: 'Formats d''arxiu acceptats:'
114
+ images:
115
+ dimensions: "%{width} x %{height} px"
116
+ dimensions_info: 'Aquesta imatge medirà:'
117
+ processors:
118
+ resize_and_pad: Redimensionat i ajustat a
119
+ resize_to_fit: Redimensionada per ajustar-la
52
120
  question_types:
53
121
  long_answer: Resposta llarga
122
+ matrix_multiple: Matriu (opció multiple)
123
+ matrix_single: Matriu (opció única)
54
124
  multiple_option: Opció múltiple
55
125
  short_answer: Resposta curta
56
126
  single_option: Opció única
@@ -58,6 +128,7 @@ ca:
58
128
  questionnaires:
59
129
  answer:
60
130
  invalid: S'han produït un error en respondre el formulari.
131
+ max_choices_alert: Hi ha massa opcions seleccionades
61
132
  success: Has contestat el formulari correctament.
62
133
  question:
63
134
  max_choices: 'Opcions màximes: %{n}'
@@ -65,7 +136,8 @@ ca:
65
136
  answer_questionnaire:
66
137
  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 formulari.
67
138
  title: Respon el formulari
68
- are_you_sure: Aquesta acció no es pot desfer i no podràs editar les teves respostes. Estàs segura?
139
+ current_step: Pas %{step}
140
+ of_total_steps: de %{total_steps}
69
141
  questionnaire_answered:
70
142
  body: Ja has respost a aquest formulari.
71
143
  title: Ja has respost
@@ -75,8 +147,26 @@ ca:
75
147
  questionnaire_for_private_users:
76
148
  body: El formulari només està disponible per a participants privades
77
149
  title: S'ha tancat el formulari
78
- submit: Enviar respostes
150
+ questionnaire_js_disabled:
151
+ body: Algunes de les característiques d'aquest formulari es deshabilitaran. Per millorar la teva experiència, si us plau, habilita JavaScript al teu navegador.
152
+ title: JavaScript està desactivat
153
+ questionnaire_not_published:
154
+ body: Aquest formulari no s'ha publicat encara.
79
155
  tos_agreement: En participar acceptes els Termes i condicions d'ús
156
+ step_navigation:
157
+ show:
158
+ are_you_sure: Aquesta acció no es pot desfer i no podràs editar les teves respostes. Estàs segura?
159
+ back: Enrere
160
+ continue: Continuar
161
+ submit: Enviar respostes
80
162
  user_answers_serializer:
163
+ body: Resposta
164
+ completion: Finalització
81
165
  created_at: Respost el
82
166
  id: Identificador de resposta
167
+ ip_hash: Hash d'adreça IP
168
+ question: Pregunta
169
+ registered: Registrada
170
+ session_token: Identificador d'usuària
171
+ unregistered: No registrada
172
+ user_status: Estat de l'usuària