decidim-forms 0.27.6 → 0.28.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/cells/decidim/forms/answer_readonly/show.erb +1 -1
  4. data/app/cells/decidim/forms/matrix_readonly/show.erb +1 -1
  5. data/app/cells/decidim/forms/question_readonly/show.erb +8 -8
  6. data/app/cells/decidim/forms/question_readonly/title_and_description.erb +8 -0
  7. data/app/cells/decidim/forms/question_readonly_cell.rb +7 -0
  8. data/app/cells/decidim/forms/step_navigation/show.erb +13 -26
  9. data/app/cells/decidim/forms/step_navigation_cell.rb +7 -0
  10. data/app/commands/decidim/forms/answer_questionnaire.rb +31 -11
  11. data/app/controllers/decidim/forms/admin/concerns/has_questionnaire.rb +4 -4
  12. data/app/controllers/decidim/forms/admin/concerns/has_questionnaire_answers.rb +1 -1
  13. data/app/controllers/decidim/forms/concerns/has_questionnaire.rb +3 -3
  14. data/app/forms/decidim/forms/answer_form.rb +7 -3
  15. data/app/forms/decidim/forms/questionnaire_form.rb +1 -1
  16. data/app/helpers/decidim/forms/admin/application_helper.rb +1 -1
  17. data/app/helpers/decidim/forms/admin/concerns/has_questionnaire_answers_url_helper.rb +2 -2
  18. data/app/models/decidim/forms/answer.rb +1 -1
  19. data/app/models/decidim/forms/display_condition.rb +2 -2
  20. data/app/models/decidim/forms/question.rb +0 -4
  21. data/app/models/decidim/forms/questionnaire.rb +1 -1
  22. data/app/packs/entrypoints/decidim_forms.js +4 -0
  23. data/app/packs/src/decidim/forms/admin/collapsible_questions.js +12 -6
  24. data/app/packs/src/decidim/forms/admin/forms.js +7 -7
  25. data/app/packs/src/decidim/forms/display_conditions.component.js +3 -3
  26. data/app/packs/src/decidim/forms/forms.js +15 -9
  27. data/app/packs/src/decidim/forms/option_attached_inputs.component.js +1 -1
  28. data/app/packs/stylesheets/decidim/forms/forms.scss +82 -52
  29. data/app/packs/stylesheets/decidim/forms/questionnaire-answers-pdf.scss +13 -13
  30. data/app/presenters/decidim/forms/admin/questionnaire_participant_presenter.rb +2 -2
  31. data/app/presenters/decidim/forms/admin_log/questionnaire_presenter.rb +2 -2
  32. data/app/presenters/decidim/forms/answer_option_presenter.rb +1 -1
  33. data/app/queries/decidim/forms/questionnaire_participants.rb +1 -1
  34. data/app/views/decidim/forms/admin/questionnaires/_answer_option.html.erb +1 -1
  35. data/app/views/decidim/forms/admin/questionnaires/_answer_option_template.html.erb +1 -1
  36. data/app/views/decidim/forms/admin/questionnaires/_display_condition.html.erb +2 -2
  37. data/app/views/decidim/forms/admin/questionnaires/_display_condition_template.html.erb +1 -1
  38. data/app/views/decidim/forms/admin/questionnaires/_form.html.erb +52 -74
  39. data/app/views/decidim/forms/admin/questionnaires/_matrix_row.html.erb +1 -1
  40. data/app/views/decidim/forms/admin/questionnaires/_matrix_row_template.html.erb +1 -1
  41. data/app/views/decidim/forms/admin/questionnaires/_question.html.erb +147 -135
  42. data/app/views/decidim/forms/admin/questionnaires/_separator.html.erb +15 -13
  43. data/app/views/decidim/forms/admin/questionnaires/_title_and_description.html.erb +69 -63
  44. data/app/views/decidim/forms/admin/questionnaires/answers/export/_answer.html.erb +4 -4
  45. data/app/views/decidim/forms/admin/questionnaires/answers/export/pdf.html.erb +1 -1
  46. data/app/views/decidim/forms/admin/questionnaires/answers/index.html.erb +41 -45
  47. data/app/views/decidim/forms/admin/questionnaires/answers/show.html.erb +13 -18
  48. data/app/views/decidim/forms/admin/questionnaires/edit.html.erb +33 -6
  49. data/app/views/decidim/forms/questionnaires/_answer.html.erb +31 -27
  50. data/app/views/decidim/forms/questionnaires/_questionnaire.html.erb +78 -0
  51. data/app/views/decidim/forms/questionnaires/_questionnaire_readonly.html.erb +11 -0
  52. data/app/views/decidim/forms/questionnaires/answers/_files.html.erb +1 -1
  53. data/app/views/decidim/forms/questionnaires/answers/_long_answer.html.erb +3 -1
  54. data/app/views/decidim/forms/questionnaires/answers/_matrix_multiple.html.erb +44 -41
  55. data/app/views/decidim/forms/questionnaires/answers/_matrix_single.html.erb +44 -41
  56. data/app/views/decidim/forms/questionnaires/answers/_multiple_option.html.erb +7 -6
  57. data/app/views/decidim/forms/questionnaires/answers/_separator.html.erb +1 -1
  58. data/app/views/decidim/forms/questionnaires/answers/_short_answer.html.erb +3 -1
  59. data/app/views/decidim/forms/questionnaires/answers/_single_option.html.erb +13 -12
  60. data/app/views/decidim/forms/questionnaires/answers/_sorting.html.erb +9 -12
  61. data/app/views/decidim/forms/questionnaires/answers/_title_and_description.html.erb +1 -1
  62. data/app/views/decidim/forms/questionnaires/show.html.erb +35 -144
  63. data/config/initializers/wicked_pdf.rb +1 -1
  64. data/config/locales/ar.yml +0 -6
  65. data/config/locales/bg.yml +0 -11
  66. data/config/locales/ca.yml +7 -2
  67. data/config/locales/cs.yml +8 -3
  68. data/config/locales/de.yml +9 -4
  69. data/config/locales/el.yml +7 -2
  70. data/config/locales/en.yml +8 -3
  71. data/config/locales/es-MX.yml +7 -2
  72. data/config/locales/es-PY.yml +7 -2
  73. data/config/locales/es.yml +7 -2
  74. data/config/locales/eu.yml +8 -3
  75. data/config/locales/fi-plain.yml +7 -2
  76. data/config/locales/fi.yml +7 -2
  77. data/config/locales/fr-CA.yml +8 -3
  78. data/config/locales/fr.yml +8 -3
  79. data/config/locales/gl.yml +0 -4
  80. data/config/locales/hu.yml +3 -9
  81. data/config/locales/id-ID.yml +0 -4
  82. data/config/locales/it.yml +0 -6
  83. data/config/locales/ja.yml +6 -1
  84. data/config/locales/lb.yml +0 -6
  85. data/config/locales/lt.yml +7 -2
  86. data/config/locales/lv.yml +0 -6
  87. data/config/locales/nl.yml +0 -6
  88. data/config/locales/no.yml +0 -6
  89. data/config/locales/pl.yml +6 -8
  90. data/config/locales/pt-BR.yml +0 -25
  91. data/config/locales/pt.yml +0 -6
  92. data/config/locales/ro-RO.yml +19 -14
  93. data/config/locales/ru.yml +0 -3
  94. data/config/locales/sk.yml +0 -6
  95. data/config/locales/sv.yml +3 -6
  96. data/config/locales/tr-TR.yml +0 -6
  97. data/config/locales/zh-CN.yml +0 -6
  98. data/config/locales/zh-TW.yml +7 -2
  99. data/lib/decidim/forms/engine.rb +8 -0
  100. data/lib/decidim/forms/test/factories.rb +37 -51
  101. data/lib/decidim/forms/test/shared_examples/has_questionnaire.rb +129 -239
  102. data/lib/decidim/forms/test/shared_examples/manage_questionnaire_answers.rb +18 -18
  103. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/add_display_conditions.rb +14 -14
  104. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/add_questions.rb +60 -78
  105. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/update_display_conditions.rb +6 -6
  106. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/update_questions.rb +25 -25
  107. data/lib/decidim/forms/test/shared_examples/manage_questionnaires.rb +9 -9
  108. data/lib/decidim/forms/user_answers_serializer.rb +1 -1
  109. data/lib/decidim/forms/version.rb +1 -1
  110. metadata +26 -21
  111. data/app/packs/src/decidim/forms/autosortable_checkboxes.component.js +0 -83
  112. data/config/locales/he-IL.yml +0 -1
  113. data/decidim-forms.gemspec +0 -34
@@ -18,8 +18,6 @@ tr:
18
18
  choices:
19
19
  missing: tamamlanmadı
20
20
  too_many: çok fazla
21
- questionnaire:
22
- request_invalid: İsteği işlerken bir hata oluştu. Lütfen tekrar deneyin
23
21
  decidim:
24
22
  forms:
25
23
  admin:
@@ -107,9 +105,6 @@ tr:
107
105
  update:
108
106
  invalid: Formu kaydederken bir sorun oluştu.
109
107
  success: Başarıyla kaydedildi.
110
- errors:
111
- answer:
112
- body: Vücut boş olamaz
113
108
  images:
114
109
  dimensions: "%{width} x %{height} px"
115
110
  question_types:
@@ -129,7 +124,6 @@ tr:
129
124
  max_choices: 'Maksimum seçenek: %{n}'
130
125
  show:
131
126
  answer_questionnaire:
132
- anonymous_user_message: <a href="%{sign_in_link}">Formu yanıtlamak için</a> veya <a href="%{sign_up_link}">hesabınızla giriş yapın</a>.
133
127
  title: Formu cevapla
134
128
  current_step: '%{step} adım'
135
129
  of_total_steps: '%{total_steps}'
@@ -18,8 +18,6 @@ zh-CN:
18
18
  choices:
19
19
  missing: 不完成
20
20
  too_many: 太多了
21
- questionnaire:
22
- request_invalid: 处理请求时出错。请再试一次
23
21
  decidim:
24
22
  forms:
25
23
  admin:
@@ -106,9 +104,6 @@ zh-CN:
106
104
  update:
107
105
  invalid: 保存表单时出错。
108
106
  success: 表单保存成功。
109
- errors:
110
- answer:
111
- body: 主体不能为空
112
107
  images:
113
108
  dimensions: "%{width} x %{height} px"
114
109
  question_types:
@@ -128,7 +123,6 @@ zh-CN:
128
123
  max_choices: '最大选择数: %{n}'
129
124
  show:
130
125
  answer_questionnaire:
131
- anonymous_user_message: <a href="%{sign_in_link}">使用您的帐户</a> 或 <a href="%{sign_up_link}">注册</a> 以回答表单。
132
126
  title: 回答表单
133
127
  current_step: 步骤 %{step}
134
128
  of_total_steps: '%{total_steps}'
@@ -24,7 +24,7 @@ zh-TW:
24
24
  missing: 尚未完成
25
25
  too_many: 太多了
26
26
  questionnaire:
27
- request_invalid: 處理請求時發生錯誤,請再試一次
27
+ request_invalid: 處理請求時發生錯誤。請再試一次。
28
28
  decidim:
29
29
  forms:
30
30
  admin:
@@ -45,6 +45,8 @@ zh-TW:
45
45
  actions:
46
46
  back: 返回回覆
47
47
  export: 匯出
48
+ next: 下一個 &rsaquo;
49
+ previous: "&lsaquo; 上一篇"
48
50
  show: 顯示答案
49
51
  empty: 目前尚未回答
50
52
  export:
@@ -154,7 +156,10 @@ zh-TW:
154
156
  max_choices: '最多選擇數量: %{n}'
155
157
  show:
156
158
  answer_questionnaire:
157
- anonymous_user_message: <a href="%{sign_in_link}">使用現有帳號登入</a> 或 <a href="%{sign_up_link}">註冊新帳戶</a> 以回答此表單。
159
+ already_have_an_account?: 已經有帳號了嗎?
160
+ are_you_new?: 新用戶?
161
+ sign_in_description: 登入以填寫問卷
162
+ sign_up_description: 建立參與者帳號以填寫問卷
158
163
  title: 回答表單
159
164
  current_step: 步驟%{step}
160
165
  of_total_steps: 的%{total_steps}
@@ -15,6 +15,14 @@ module Decidim
15
15
  initializer "decidim_forms.webpacker.assets_path" do
16
16
  Decidim.register_assets_path File.expand_path("app/packs", root)
17
17
  end
18
+
19
+ initializer "decidim_forms.authorization_transfer" do
20
+ config.to_prepare do
21
+ Decidim::AuthorizationTransfer.register(:forms) do |transfer|
22
+ transfer.move_records(Decidim::Forms::Answer, :decidim_user_id)
23
+ end
24
+ end
25
+ end
18
26
  end
19
27
  end
20
28
  end
@@ -5,37 +5,37 @@ require "decidim/participatory_processes/test/factories"
5
5
 
6
6
  FactoryBot.define do
7
7
  factory :questionnaire, class: "Decidim::Forms::Questionnaire" do
8
- transient do
9
- skip_injection { false }
8
+ title { generate_localized_title }
9
+ description do
10
+ Decidim::Faker::Localized.wrapped("<p>", "</p>") do
11
+ generate_localized_title
12
+ end
10
13
  end
11
- title { generate_localized_title(:questionnaire_title, skip_injection: skip_injection) }
12
- description { generate_localized_description(:questionnaire_description, skip_injection: skip_injection) }
13
- tos { generate_localized_title(:questionnaire_tos, skip_injection: skip_injection) }
14
- questionnaire_for { build(:participatory_process, skip_injection: skip_injection) }
14
+ tos { generate_localized_title }
15
+ questionnaire_for { build(:participatory_process) }
15
16
  salt { SecureRandom.hex(32) }
16
17
 
17
18
  trait :with_questions do
18
19
  questions do
19
20
  position = 0
20
21
  qs = %w(short_answer long_answer).collect do |text_question_type|
21
- q = build(:questionnaire_question, question_type: text_question_type, position: position, skip_injection: skip_injection)
22
+ q = build(:questionnaire_question, question_type: text_question_type, position:)
22
23
  position += 1
23
24
  q
24
25
  end
25
- qs << build(:questionnaire_question, :with_answer_options, question_type: :single_option, position: position, skip_injection: skip_injection)
26
+ qs << build(:questionnaire_question, :with_answer_options, question_type: :single_option, position:)
26
27
  qs
27
28
  end
28
29
  end
29
30
 
30
31
  trait :with_all_questions do
31
- after(:build) do |questionaire, evaluator|
32
+ after(:build) do |questionaire, _evaluator|
32
33
  position = 0
33
34
  %w(short_answer long_answer).collect do |text_question_type|
34
35
  q = create(:questionnaire_question,
35
36
  question_type: text_question_type,
36
- position: position,
37
- questionnaire: questionaire,
38
- skip_injection: evaluator.skip_injection)
37
+ position:,
38
+ questionnaire: questionaire)
39
39
  position += 1
40
40
  questionaire.questions << q
41
41
  end
@@ -43,9 +43,8 @@ FactoryBot.define do
43
43
  %w(single_option multiple_option).each do |option_question_type|
44
44
  q = create(:questionnaire_question, :with_answer_options,
45
45
  question_type: option_question_type,
46
- position: position,
47
- questionnaire: questionaire,
48
- skip_injection: evaluator.skip_injection)
46
+ position:,
47
+ questionnaire: questionaire)
49
48
  q.display_conditions.build(
50
49
  condition_question: questionaire.questions[q.position - 1],
51
50
  question: q,
@@ -59,10 +58,9 @@ FactoryBot.define do
59
58
  %w(matrix_single matrix_multiple).collect do |matrix_question_type|
60
59
  q = build(:questionnaire_question, :with_answer_options,
61
60
  question_type: matrix_question_type,
62
- position: position,
61
+ position:,
63
62
  body: generate_localized_title,
64
- questionnaire: questionaire,
65
- skip_injection: evaluator.skip_injection)
63
+ questionnaire: questionaire)
66
64
  q.display_conditions.build(
67
65
  condition_question: questionaire.questions[q.position - 1],
68
66
  question: q,
@@ -84,13 +82,16 @@ FactoryBot.define do
84
82
 
85
83
  factory :questionnaire_question, class: "Decidim::Forms::Question" do
86
84
  transient do
87
- skip_injection { false }
88
85
  options { [] }
89
86
  rows { [] }
90
87
  end
91
88
 
92
- body { generate_localized_title(:questionnaire_question_body, skip_injection: skip_injection) }
93
- description { generate_localized_description(:questionnaire_question_description, skip_injection: skip_injection) }
89
+ body { generate_localized_title }
90
+ description do
91
+ Decidim::Faker::Localized.wrapped("<p>", "</p>") do
92
+ generate_localized_title
93
+ end
94
+ end
94
95
  mandatory { false }
95
96
  position { 0 }
96
97
  question_type { Decidim::Forms::Question::TYPES.first }
@@ -118,13 +119,13 @@ FactoryBot.define do
118
119
 
119
120
  trait :with_answer_options do
120
121
  answer_options do
121
- Array.new(3).collect { build(:answer_option, skip_injection: skip_injection) }
122
+ Array.new(3).collect { build(:answer_option) }
122
123
  end
123
124
  end
124
125
 
125
126
  trait :conditioned do
126
127
  display_conditions do
127
- Array.new(3).collect { build(:display_condition, skip_injection: skip_injection) }
128
+ Array.new(3).collect { build(:display_condition) }
128
129
  end
129
130
  end
130
131
 
@@ -138,28 +139,22 @@ FactoryBot.define do
138
139
  end
139
140
 
140
141
  factory :answer, class: "Decidim::Forms::Answer" do
141
- transient do
142
- skip_injection { false }
143
- end
144
142
  body { "hola" }
145
143
  questionnaire
146
- question { create(:questionnaire_question, questionnaire: questionnaire, skip_injection: skip_injection) }
147
- user { create(:user, organization: questionnaire.questionnaire_for.organization, skip_injection: skip_injection) }
144
+ question { create(:questionnaire_question, questionnaire:) }
145
+ user { create(:user, organization: questionnaire.questionnaire_for.organization) }
148
146
  session_token { Digest::MD5.hexdigest(user.id.to_s) }
149
147
 
150
148
  trait :with_attachments do
151
- after(:create) do |answer, evaluator|
152
- create :attachment, :with_image, attached_to: answer, skip_injection: evaluator.skip_injection
153
- create :attachment, :with_pdf, attached_to: answer, skip_injection: evaluator.skip_injection
149
+ after(:create) do |answer, _evaluator|
150
+ create :attachment, :with_image, attached_to: answer
151
+ create :attachment, :with_pdf, attached_to: answer
154
152
  end
155
153
  end
156
154
  end
157
155
 
158
156
  factory :answer_option, class: "Decidim::Forms::AnswerOption" do
159
- transient do
160
- skip_injection { false }
161
- end
162
- question { create(:questionnaire_question, skip_injection: skip_injection) }
157
+ question { create(:questionnaire_question) }
163
158
  body { generate_localized_title }
164
159
  free_text { false }
165
160
 
@@ -173,40 +168,31 @@ FactoryBot.define do
173
168
  end
174
169
 
175
170
  factory :answer_choice, class: "Decidim::Forms::AnswerChoice" do
176
- transient do
177
- skip_injection { false }
178
- end
179
171
  answer
180
- answer_option { create(:answer_option, question: answer.question, skip_injection: skip_injection) }
181
- matrix_row { create(:question_matrix_row, question: answer.question, skip_injection: skip_injection) }
172
+ answer_option { create(:answer_option, question: answer.question) }
173
+ matrix_row { create(:question_matrix_row, question: answer.question) }
182
174
  end
183
175
 
184
176
  factory :question_matrix_row, class: "Decidim::Forms::QuestionMatrixRow" do
185
- transient do
186
- skip_injection { false }
187
- end
188
- question { create(:questionnaire_question, skip_injection: skip_injection) }
177
+ question { create(:questionnaire_question) }
189
178
  body { generate_localized_title }
190
179
  position { 0 }
191
180
  end
192
181
 
193
182
  factory :display_condition, class: "Decidim::Forms::DisplayCondition" do
194
- transient do
195
- skip_injection { false }
196
- end
197
- condition_question { create(:questionnaire_question, skip_injection: skip_injection) }
198
- question { create(:questionnaire_question, position: 1, skip_injection: skip_injection) }
183
+ condition_question { create(:questionnaire_question) }
184
+ question { create(:questionnaire_question, position: 1) }
199
185
  condition_type { :answered }
200
186
  mandatory { true }
201
187
 
202
188
  trait :equal do
203
189
  condition_type { :equal }
204
- answer_option { create(:answer_option, question: condition_question, skip_injection: skip_injection) }
190
+ answer_option { create(:answer_option, question: condition_question) }
205
191
  end
206
192
 
207
193
  trait :match do
208
194
  condition_type { :match }
209
- condition_value { generate_localized_title(:condition_value, skip_injection: skip_injection) }
195
+ condition_value { generate_localized_title }
210
196
  end
211
197
  end
212
198
  end