decidim-forms 0.27.2 → 0.27.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e399e7c1e3e8618dfd75491617038ecf10b4d06e3f53b61b343aa7888403996
4
- data.tar.gz: 785293c3df843039cf86005b3c64ff1d5777adf54c2b4e63bf883fa5d4d36ce0
3
+ metadata.gz: a7dd21d56ae75820592770d7c2e26e6a28a35b08826d3aef4e6b796e9bd4bdc6
4
+ data.tar.gz: a65698b93fc4e84f85a61df07e28071d851436c5b0907a00b91127d7f4569684
5
5
  SHA512:
6
- metadata.gz: 731c4df584b70bd2b4f83211e69b4f562ef1aaa2a706afe4856f87fa5bdb3ea2bc061f51b037341d4722c87051151ee55b27a94666514da901856563e4e55d72
7
- data.tar.gz: 21e2b2207bfa79f08bf40b0372bf67d987c09919faf0f7bb17d585835f0b65f6402500fc48e469cfa223b2fab0270955c1de3902f54b1360cb8d5fc875a28423
6
+ metadata.gz: 1989b2607dc0c56d1b6ed5f0f8eb70421935bf1fd7f565128ec282ea677dc920fca3ea460cbbad1e73681add5611b3010e2b7f77afaadcf5d3eff765dc8b56c0
7
+ data.tar.gz: '008f83363510243b24a9cb6d4e8f2997e7831d213a024328686bb0ab55ee8af8722f59c85577dfbc489217aa48b4dfa1c12697903b5dd94637e7cf1cd8b03705'
@@ -18,7 +18,7 @@ module Decidim
18
18
  validates :selected_choices, presence: true, if: :mandatory_choices?
19
19
 
20
20
  validate :max_choices, if: -> { question.max_choices }
21
- validate :all_choices, if: -> { question.question_type == "sorting" }
21
+ validate :all_choices, if: -> { question.sorting? && question.mandatory? }
22
22
  validate :min_choices, if: -> { question.matrix? && question.mandatory? }
23
23
  validate :documents_present, if: -> { question.question_type == "files" && question.mandatory? }
24
24
  validate :max_characters, if: -> { question.max_characters.positive? }
@@ -59,7 +59,22 @@ module Decidim
59
59
  end
60
60
 
61
61
  def display_conditions_fulfilled?
62
- question.display_conditions.all? do |condition|
62
+ return optional_conditions_fulfilled? unless question.display_conditions.where(mandatory: true).any?
63
+
64
+ mandatory_conditions_fulfilled?
65
+ end
66
+
67
+ def mandatory_conditions_fulfilled?
68
+ question.display_conditions.where(mandatory: true).all? do |condition|
69
+ answer = context.responses&.find { |r| r.question_id&.to_i == condition.condition_question.id }
70
+ condition.fulfilled?(answer)
71
+ end
72
+ end
73
+
74
+ def optional_conditions_fulfilled?
75
+ return true unless question.display_conditions.where(mandatory: false).any?
76
+
77
+ question.display_conditions.where(mandatory: false).any? do |condition|
63
78
  answer = context.responses&.find { |r| r.question_id&.to_i == condition.condition_question.id }
64
79
  condition.fulfilled?(answer)
65
80
  end
@@ -4,6 +4,8 @@ module Decidim
4
4
  module Forms
5
5
  # This class holds a Form to answer a questionnaire from Decidim's public page.
6
6
  class QuestionnaireForm < Decidim::Form
7
+ include ActiveModel::Validations::Callbacks
8
+
7
9
  # as questionnaire uses "answers" for the database relationships is
8
10
  # important not to use the same word here to avoid querying all the entries, resulting in a high performance penalty
9
11
  attribute :responses, Array[AnswerForm]
@@ -12,6 +14,8 @@ module Decidim
12
14
 
13
15
  attribute :tos_agreement, Boolean
14
16
 
17
+ before_validation :before_validation
18
+
15
19
  validates :tos_agreement, allow_nil: false, acceptance: true
16
20
  validate :session_token_in_context
17
21
 
@@ -70,6 +70,10 @@ module Decidim
70
70
  mandatory? && !multiple_choice? && !has_attachments?
71
71
  end
72
72
 
73
+ def sorting?
74
+ question_type == "sorting"
75
+ end
76
+
73
77
  def mandatory_choices?
74
78
  mandatory? && multiple_choice? && !has_attachments?
75
79
  end
@@ -31,7 +31,7 @@
31
31
  <%= form.translated :editor, :description, toolbar: :full, lines: 30, label: t("models.components.description", scope: "decidim.forms.admin") %>
32
32
  </div>
33
33
  <div class="row column">
34
- <%= form.translated :editor, :tos, toolbar: :full, lines: 10, label: t("models.components.tos", scope: "decidim.forms.admin") %>
34
+ <%= form.translated :editor, :tos, toolbar: :content, lines: 10, label: t("models.components.tos", scope: "decidim.forms.admin") %>
35
35
  </div>
36
36
  </div>
37
37
  </div>
@@ -1,3 +1,5 @@
1
+ <% add_decidim_page_title(t("decidim.forms.admin.questionnaires.edit.title")) %>
2
+
1
3
  <% if templates_defined? && choose_template? %>
2
4
  <%= render partial: "decidim/templates/admin/questionnaire_templates/choose", locals: { target: questionnaire, form_title: t("decidim.forms.admin.questionnaires.edit.title") } %>
3
5
  <% else %>
@@ -7,7 +7,7 @@
7
7
  <%= label_tag field_id, translated_attribute(answer.question.body), class: "questionnaire-title_and_description" %>
8
8
  <% if translated_attribute(answer.question.description).present? %>
9
9
  <div class="help-title_and_description ">
10
- <%= decidim_sanitize_editor translated_attribute(answer.question.description) %>
10
+ <%= decidim_sanitize_editor_admin translated_attribute(answer.question.description) %>
11
11
  </div>
12
12
  <% end %>
13
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 } %>
@@ -22,7 +22,7 @@
22
22
 
23
23
  <% if translated_attribute(answer.question.description).present? %>
24
24
  <div class="help-text">
25
- <%= decidim_sanitize_editor translated_attribute(answer.question.description) %>
25
+ <%= decidim_sanitize_editor_admin translated_attribute(answer.question.description) %>
26
26
  </div>
27
27
  <% end %>
28
28
 
@@ -11,7 +11,7 @@
11
11
  <h2 class="section-heading"><%= translated_attribute questionnaire.title %></h2>
12
12
  <div class="row">
13
13
  <div class="columns large-<%= columns %> medium-centered lead">
14
- <%= decidim_sanitize_editor translated_attribute questionnaire.description %>
14
+ <%= decidim_sanitize_editor_admin translated_attribute questionnaire.description %>
15
15
  </div>
16
16
  </div>
17
17
  </div>
File without changes
@@ -143,6 +143,8 @@ de:
143
143
  single_option: Einzelne Option
144
144
  sorting: Sortierung
145
145
  title_and_description: Titel und Beschreibung
146
+ questionnaire_answer_presenter:
147
+ download_attachment: Anhang herunterladen
146
148
  questionnaires:
147
149
  answer:
148
150
  invalid: Bei der Beantwortung des Fragebogens sind Fehler aufgetreten.
@@ -4,15 +4,22 @@ el:
4
4
  attributes:
5
5
  answer:
6
6
  body: Απάντηση
7
+ choices: Επιλογές
8
+ selected_choices: Επιλεγμένες επιλογές
7
9
  question:
8
10
  max_choices: Μέγιστος αριθμός επιλογών
9
11
  question_type: Τύπος
10
12
  questionnaire_question:
11
13
  mandatory: Υποχρεωτικό
14
+ max_characters: Όριο χαρακτήρων (αφήστε στο 0 αν δεν υπάρχει όριο)
12
15
  errors:
13
16
  models:
14
17
  answer:
15
18
  attributes:
19
+ add_documents:
20
+ needs_to_be_reattached: Πρέπει να επισυναφθεί ξανά
21
+ body:
22
+ too_long: είναι πολύ μεγάλο
16
23
  choices:
17
24
  missing: δεν έχουν ολοκληρωθεί
18
25
  too_many: είναι πάρα πολλά
@@ -26,26 +33,68 @@ el:
26
33
  description: Περιγραφή
27
34
  tos: Όροι χρήσης υπηρεσίας
28
35
  questionnaires:
36
+ actions:
37
+ back: Επιστροφή στις ερωτήσεις
38
+ show: Εμφάνιση απαντήσεων
29
39
  answer_option:
30
40
  answer_option: Επιλογή απάντησης
31
41
  free_text: Ελεύθερο κείμενο
32
42
  remove: Κατάργηση
33
43
  statement: Δήλωση
44
+ answers:
45
+ actions:
46
+ back: Επιστροφή στις απαντήσεις
47
+ export: Εξαγωγή
48
+ show: Εμφάνιση απαντήσεων
49
+ empty: Δεν υπάρχουν απαντήσεις ακόμη
50
+ export:
51
+ answer:
52
+ title: 'Απάντηση #%{number}'
53
+ export_response:
54
+ title: survey_user_answers_%{token}
55
+ index:
56
+ title: "%{total} συνολικές απαντήσεις"
57
+ show:
58
+ title: 'Απάντηση #%{number}'
59
+ display_condition:
60
+ answer_option: Επιλογή απάντησης
61
+ condition_question: Ερώτηση
62
+ condition_type: Συνθήκη
63
+ condition_types:
64
+ answered: Απαντήθηκε
65
+ equal: Ίσο
66
+ match: Περιλαμβάνει κείμενο
67
+ not_answered: Δεν απαντήθηκε
68
+ not_equal: Όχι ίσο
69
+ condition_value: Περιλαμβανόμενο κείμενο
70
+ display_condition: Συνθήκη εμφάνισης
71
+ mandatory: Αυτή η συνθήκη πρέπει να ικανοποιείται πάντα ανεξάρτητα από την κατάσταση άλλων συνθηκών
72
+ remove: Αφαίρεση
73
+ save_warning: Θυμηθείτε να αποθηκεύσετε τη φόρμα πριν διαμορφώσετε τις συνθήκες εμφάνισης
74
+ select_answer_option: Επιλέξτε επιλογή απάντησης
75
+ select_condition_question: Επιλέξτε μια ερώτηση
76
+ select_condition_type: Επιλέξτε έναν τύπο συνθήκης
34
77
  edit:
35
78
  save: Αποθήκευση
36
79
  title: Επεξεργασία ερωτηματολογίου
37
80
  form:
38
81
  add_question: Προσθήκη ερώτησης
39
82
  add_separator: Προσθήκη διαχωριστικού
83
+ add_title_and_description: Προσθήκη τίτλου και περιγραφής
40
84
  already_answered_warning: Η φόρμα έχει ήδη απαντηθεί από ορισμένους χρήστες, επομένως δεν μπορείτε να τροποποιήσετε τις ερωτήσεις της.
41
85
  collapse: Σύμπτυξη όλων των ερωτήσεων
42
86
  expand: Ανάπτυξη όλων των ερωτήσεων
87
+ preview: Προεπισκόπηση
88
+ title: Επεξεργασία φόρμας για %{questionnaire_for}
89
+ unpublished_warning: Η φόρμα δεν έχει δημοσιευτεί. Μπορείτε να τροποποιήσετε τις ερωτήσεις της, αλλά με αυτόν τον τρόπο θα διαγράψετε τις τρέχουσες απαντήσεις.
43
90
  matrix_row:
44
91
  matrix_row: Γραμμή
45
92
  remove: Κατάργηση
46
93
  statement: Δήλωση
47
94
  question:
48
95
  add_answer_option: Προσθήκη επιλογής απάντησης
96
+ add_display_condition: Προσθήκη συνθήκης εμφάνισης
97
+ add_display_condition_info: Αποθηκεύστε τη φόρμα για να ρυθμίσετε τις συνθήκες εμφάνισης
49
98
  add_matrix_row: Προσθήκη γραμμής
50
99
  any: Οποιαδήποτε
51
100
  collapse: Σύμπτυξη
@@ -61,14 +110,31 @@ el:
61
110
  remove: Κατάργηση
62
111
  separator: Διαχωριστικό
63
112
  up: Επάνω
113
+ title_and_description:
114
+ collapse: Σύμπτυξη
115
+ description: Περιγραφή
116
+ down: Κάτω
117
+ expand: Ανάπτυξη
118
+ remove: Αφαίρεση
119
+ title: Τίτλος
120
+ title_and_description: Τίτλος και περιγραφή
121
+ up: Πάνω
64
122
  update:
65
123
  invalid: Υπήρξε ένα πρόβλημα κατά την αποθήκευση της φόρμας.
124
+ success: Η φόρμα αποθηκεύτηκε επιτυχώς.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "Ο/Η %{user_name} ενημέρωσε το %{resource_name} ερωτηματολόγιο"
66
128
  errors:
67
129
  answer:
68
130
  body: Το σώμα δεν μπορεί να είναι κενό
69
131
  images:
70
132
  dimensions: "Π %{width} x Υ %{height} px"
133
+ processors:
134
+ resize_and_pad: Αυτή η εικόνα θα αλλάξει μέγεθος σε %{dimensions}.
135
+ resize_to_fit: Αυτή η εικόνα θα αλλάξει μέγεθος για να χωρέσει σε %{dimensions}.
71
136
  question_types:
137
+ files: Αρχεία
72
138
  long_answer: Μεγάλη απάντηση
73
139
  matrix_multiple: Πίνακας (πολλαπλή επιλογή)
74
140
  matrix_single: Πίνακας (μία επιλογή)
@@ -76,6 +142,9 @@ el:
76
142
  short_answer: Σύντομη απάντηση
77
143
  single_option: Μία επιλογή
78
144
  sorting: Ταξινόμηση
145
+ title_and_description: Τίτλος και περιγραφή
146
+ questionnaire_answer_presenter:
147
+ download_attachment: Λήψη συνημμένου
79
148
  questionnaires:
80
149
  answer:
81
150
  invalid: Υπήρξε ένα πρόβλημα κατά την απάντηση της φόρμας.
@@ -98,6 +167,11 @@ el:
98
167
  questionnaire_for_private_users:
99
168
  body: Η φόρμα είναι διαθέσιμη μόνο για ιδιωτικούς χρήστες
100
169
  title: Η φόρμα έκλεισε
170
+ questionnaire_js_disabled:
171
+ body: Ορισμένες από τις δυνατότητες αυτής της φόρμας θα απενεργοποιηθούν. Για να βελτιώσετε την εμπειρία σας, ενεργοποιήστε την JavaScript στο πρόγραμμα περιήγησης.
172
+ title: Η JavaScript είναι απενεργοποιημένη
173
+ questionnaire_not_published:
174
+ body: Αυτή η φόρμα δεν έχει δημοσιευτεί ακόμη.
101
175
  tos_agreement: Με τη συμμετοχή σας, αποδέχεστε τους Όρους παροχής υπηρεσίας
102
176
  step_navigation:
103
177
  show:
@@ -106,8 +180,13 @@ el:
106
180
  continue: Συνέχεια
107
181
  submit: Υποβολή
108
182
  user_answers_serializer:
183
+ body: Απάντηση
184
+ completion: Ολοκλήρωση
109
185
  created_at: Απαντήθηκε στις
110
186
  id: Αναγνωριστικό απάντησης
187
+ ip_hash: IP Hash
188
+ question: Ερώτηση
111
189
  registered: Έχει εγγραφεί
190
+ session_token: Αναγνωριστικό χρήστη
112
191
  unregistered: Δεν έχει εγγραφεί
113
192
  user_status: Κατάσταση χρήστη
@@ -73,7 +73,7 @@ es:
73
73
  save_warning: Recuerda guardar el formulario antes de configurar las condiciones de visualización
74
74
  select_answer_option: Seleccionar opción de respuesta
75
75
  select_condition_question: Seleccionar una pregunta
76
- select_condition_type: Seleccione un tipo de condición
76
+ select_condition_type: Selecciona un tipo de condición
77
77
  edit:
78
78
  save: Guardar
79
79
  title: Editar el cuestionario
@@ -98,18 +98,18 @@ eu:
98
98
  add_matrix_row: Gehitu errenkada
99
99
  any: Edozein
100
100
  collapse: Bildu
101
- description: deskribapena
102
- down: Down
101
+ description: Deskribapena
102
+ down: Behera
103
103
  expand: Zabaldu
104
104
  question: Galdera
105
105
  remove: Kendu
106
- statement: adierazpena
107
- up: up
106
+ statement: Adierazpena
107
+ up: Gora
108
108
  separator:
109
- down: Jaitsi
109
+ down: Behera
110
110
  remove: Kendu
111
111
  separator: Bereizlea
112
- up: Igo
112
+ up: Gora
113
113
  title_and_description:
114
114
  collapse: Tolestu
115
115
  description: Deskribapena
@@ -124,7 +124,7 @@ eu:
124
124
  success: Galdetegia zuzen gorde da.
125
125
  admin_log:
126
126
  questionnaire:
127
- update: "%{user_name} -k%{resource_name} galdetegia eguneratu du"
127
+ update: "%{user_name} erabiltzaileak %{resource_name} galdetegia eguneratu du"
128
128
  errors:
129
129
  answer:
130
130
  body: Testua ezin da hutsik egon
@@ -141,21 +141,21 @@ eu:
141
141
  multiple_option: Hainbat aukera
142
142
  short_answer: Erantzun laburra
143
143
  single_option: Aukera bakarra
144
- sorting: Lazcoz
144
+ sorting: Sailkaketa
145
145
  title_and_description: Izenburua eta deskribapena
146
146
  questionnaire_answer_presenter:
147
147
  download_attachment: Deskargatu eranskina
148
148
  questionnaires:
149
149
  answer:
150
- invalid: Akatsik egon da galdeketa erantzutean.
150
+ invalid: Akatsen bat gertatu da galdeketa erantzutean.
151
151
  max_choices_alert: Aukera gehiegi daude hautatuta
152
- success: Galdesortaz erantzun ona.
152
+ success: Formularioak ondo erantzun du.
153
153
  question:
154
154
  max_choices: 'Gehienezko aukerak: %{n}'
155
155
  show:
156
156
  answer_questionnaire:
157
157
  anonymous_user_message: <a href="%{sign_in_link}">Hasi saioa zure kontuarekin</a> edo <a href="%{sign_up_link}">saioa hasi</a> galdetegiari erantzuteko.
158
- title: Erantzun galdetegia
158
+ title: Erantzun formularioari
159
159
  current_step: '%{step} urratsa'
160
160
  of_total_steps: '%{total_steps} etik'
161
161
  questionnaire_answered:
@@ -0,0 +1 @@
1
+ fa:
@@ -0,0 +1,8 @@
1
+ ---
2
+ kaa:
3
+ decidim:
4
+ forms:
5
+ admin:
6
+ questionnaires:
7
+ edit:
8
+ save: Saqlaw
@@ -1 +1,192 @@
1
+ ---
1
2
  zh-TW:
3
+ activemodel:
4
+ attributes:
5
+ answer:
6
+ body: 回答
7
+ choices: 選項
8
+ selected_choices: 已選擇的選項
9
+ question:
10
+ max_choices: 選擇的最大數量
11
+ question_type: 類別
12
+ questionnaire_question:
13
+ mandatory: 必填的
14
+ max_characters: 字元限制(如果不需要限制,請設為0)
15
+ errors:
16
+ models:
17
+ answer:
18
+ attributes:
19
+ add_documents:
20
+ needs_to_be_reattached: 需要重新附加
21
+ body:
22
+ too_long: 太長
23
+ choices:
24
+ missing: 尚未完成
25
+ too_many: 太多了
26
+ questionnaire:
27
+ request_invalid: 處理請求時發生錯誤,請再試一次
28
+ decidim:
29
+ forms:
30
+ admin:
31
+ models:
32
+ components:
33
+ description: 說明
34
+ tos: 服務條款
35
+ questionnaires:
36
+ actions:
37
+ back: 返回問題
38
+ show: 顯示回應
39
+ answer_option:
40
+ answer_option: 答案選項:
41
+ free_text: 免費文字
42
+ remove: 移除
43
+ statement: 聲明
44
+ answers:
45
+ actions:
46
+ back: 返回回覆
47
+ export: 匯出
48
+ show: 顯示答案
49
+ empty: 目前尚未回答
50
+ export:
51
+ answer:
52
+ title: '回應 #%{number}'
53
+ export_response:
54
+ title: 調查問卷使用者回答_%{token}
55
+ index:
56
+ title: "%{total} 個回應總數"
57
+ show:
58
+ title: '回答#%{number}'
59
+ display_condition:
60
+ answer_option: 答案選項
61
+ condition_question: 問題
62
+ condition_type: 條件
63
+ condition_types:
64
+ answered: 已回答
65
+ equal: 等於
66
+ match: 包含文字
67
+ not_answered: 未回答
68
+ not_equal: 不等於
69
+ condition_value: 包含文字
70
+ display_condition: 顯示條件
71
+ mandatory: 這個條件必須始終滿足,無論其他條件的狀態如何。
72
+ remove: 移除
73
+ save_warning: 在配置顯示條件之前,請記得保存表單。
74
+ select_answer_option: 選擇答案選項
75
+ select_condition_question: 選取一個問題
76
+ select_condition_type: 選擇一個條件類型
77
+ edit:
78
+ save: 儲存
79
+ title: 編輯問卷內容
80
+ form:
81
+ add_question: 新增問題
82
+ add_separator: 新增分隔線
83
+ add_title_and_description: 新增標題與描述
84
+ already_answered_warning: 已有使用者回答此表單,因此您無法修改問題。
85
+ collapse: 收起所有問題
86
+ expand: 展開所有問題
87
+ preview: 預覽
88
+ title: 編輯問卷表單%{questionnaire_for}
89
+ unpublished_warning: 此表單尚未發佈。您可以修改其問題,但這樣做將刪除目前的回答。
90
+ matrix_row:
91
+ matrix_row: 列
92
+ remove: 移除
93
+ statement: 聲明
94
+ question:
95
+ add_answer_option: 新增答案選項
96
+ add_display_condition: 新增顯示條件
97
+ add_display_condition_info: 請先儲存表單再設定顯示條件
98
+ add_matrix_row: 新增列
99
+ any: 任何
100
+ collapse: 收回
101
+ description: 說明
102
+ down: 向下
103
+ expand: 展開
104
+ question: 問題
105
+ remove: 移除
106
+ statement: 聲明
107
+ up: 往上
108
+ separator:
109
+ down: 向下
110
+ remove: 移除
111
+ separator: 分隔線
112
+ up: 往上
113
+ title_and_description:
114
+ collapse: 收回
115
+ description: 說明
116
+ down: 向下
117
+ expand: 展開
118
+ remove: 移除
119
+ title: 標題
120
+ title_and_description: 標題和描述
121
+ up: 往上
122
+ update:
123
+ invalid: 儲存表單時發生問題。
124
+ success: 表單已成功儲存。
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} 更新了 %{resource_name} 問卷模板"
128
+ errors:
129
+ answer:
130
+ body: 內容不能為空
131
+ images:
132
+ dimensions: "%{width} x %{height} 像素"
133
+ processors:
134
+ resize_and_pad: 圖片將被調整大小並填充至 %{dimensions}。
135
+ resize_to_fit: 此圖片將被調整大小以符合 %{dimensions}。
136
+ question_types:
137
+ files: 檔案
138
+ long_answer: 長回答
139
+ matrix_multiple: 矩陣(多重選項)
140
+ matrix_single: 矩陣(單一選項)
141
+ multiple_option: 多選
142
+ short_answer: 簡答
143
+ single_option: 單選
144
+ sorting: 排序中
145
+ title_and_description: 標題和描述
146
+ questionnaire_answer_presenter:
147
+ download_attachment: 下載附件
148
+ questionnaires:
149
+ answer:
150
+ invalid: 回答表單時出現問題
151
+ max_choices_alert: 選擇的項目太多了
152
+ success: 表單已成功回答
153
+ question:
154
+ max_choices: '最多選擇數量: %{n}'
155
+ show:
156
+ answer_questionnaire:
157
+ anonymous_user_message: <a href="%{sign_in_link}">使用現有帳號登入</a> 或 <a href="%{sign_up_link}">註冊新帳戶</a> 以回答此表單。
158
+ title: 回答表單
159
+ current_step: 步驟%{step}
160
+ of_total_steps: 的%{total_steps}
161
+ questionnaire_answered:
162
+ body: 您已經回答過此表格。
163
+ title: 已經回答
164
+ questionnaire_closed:
165
+ body: 該表格已關閉,無法回答。
166
+ title: 表單已關閉
167
+ questionnaire_for_private_users:
168
+ body: 此表單僅適用於私人使用者
169
+ title: 表單已關閉
170
+ questionnaire_js_disabled:
171
+ body: 此表單的某些功能將被禁用。為了改善您的體驗,請在您的瀏覽器中啟用JavaScript。
172
+ title: JavaScript已停用
173
+ questionnaire_not_published:
174
+ body: 此表單尚未發佈。
175
+ tos_agreement: 透過參與,您同意其服務條款
176
+ step_navigation:
177
+ show:
178
+ are_you_sure: 此操作無法撤消,您將無法編輯您的答案。您確定嗎?
179
+ back: 返回
180
+ continue: 繼續
181
+ submit: 提交
182
+ user_answers_serializer:
183
+ body: 回答
184
+ completion: 完成
185
+ created_at: 回答時間
186
+ id: 回答 ID
187
+ ip_hash: IP Hash
188
+ question: 問題
189
+ registered: 已註冊
190
+ session_token: 使用者識別碼
191
+ unregistered: 未註冊
192
+ user_status: 用戶狀態
@@ -538,12 +538,13 @@ shared_examples_for "has questionnaire" do
538
538
  end
539
539
  end
540
540
 
541
- context "when question type is sorting" do
541
+ context "when question type is sorting and mandatory" do
542
542
  let!(:question) do
543
543
  create(
544
544
  :questionnaire_question,
545
545
  questionnaire: questionnaire,
546
546
  question_type: "sorting",
547
+ mandatory: true,
547
548
  options: [
548
549
  { "body" => { "en" => "chocolate" } },
549
550
  { "body" => { "en" => "like" } },
@@ -39,19 +39,19 @@ module Decidim
39
39
  end
40
40
 
41
41
  def questions_hash
42
- return {} if questionnaire&.questions.blank?
42
+ questionnaire_id = @answers.first&.decidim_questionnaire_id
43
+ return {} unless questionnaire_id
43
44
 
44
- questionnaire.questions.each.inject({}) do |serialized, question|
45
+ questions = Decidim::Forms::Question.where(decidim_questionnaire_id: questionnaire_id)
46
+ return {} if questions.none?
47
+
48
+ questions.each.inject({}) do |serialized, question|
45
49
  serialized.update(
46
50
  translated_question_key(question.position, question.body) => ""
47
51
  )
48
52
  end
49
53
  end
50
54
 
51
- def questionnaire
52
- @answers.first&.questionnaire
53
- end
54
-
55
55
  def translated_question_key(idx, body)
56
56
  "#{idx + 1}. #{translated_attribute(body)}"
57
57
  end
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-forms version.
5
5
  module Forms
6
6
  def self.version
7
- "0.27.2"
7
+ "0.27.4"
8
8
  end
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-forms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.2
4
+ version: 0.27.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
8
8
  - Marc Riera Casals
9
9
  - Oriol Gual Oliva
10
10
  - Rubén González Valero
11
- autorequire:
11
+ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2023-02-13 00:00:00.000000000 Z
14
+ date: 2023-07-27 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: decidim-core
@@ -19,14 +19,14 @@ dependencies:
19
19
  requirements:
20
20
  - - '='
21
21
  - !ruby/object:Gem::Version
22
- version: 0.27.2
22
+ version: 0.27.4
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - '='
28
28
  - !ruby/object:Gem::Version
29
- version: 0.27.2
29
+ version: 0.27.4
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: wicked_pdf
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -61,28 +61,28 @@ dependencies:
61
61
  requirements:
62
62
  - - '='
63
63
  - !ruby/object:Gem::Version
64
- version: 0.27.2
64
+ version: 0.27.4
65
65
  type: :development
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
69
  - - '='
70
70
  - !ruby/object:Gem::Version
71
- version: 0.27.2
71
+ version: 0.27.4
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: decidim-dev
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
76
  - - '='
77
77
  - !ruby/object:Gem::Version
78
- version: 0.27.2
78
+ version: 0.27.4
79
79
  type: :development
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - '='
84
84
  - !ruby/object:Gem::Version
85
- version: 0.27.2
85
+ version: 0.27.4
86
86
  description: A forms gem for decidim.
87
87
  email:
88
88
  - josepjaume@gmail.com
@@ -186,6 +186,7 @@ files:
186
186
  - app/views/decidim/forms/questionnaires/show.html.erb
187
187
  - app/views/layouts/decidim/forms/admin/questionnaires/questionnaire_answers.html.erb
188
188
  - config/assets.rb
189
+ - config/environment.rb
189
190
  - config/initializers/wicked_pdf.rb
190
191
  - config/locales/am-ET.yml
191
192
  - config/locales/ar-SA.yml
@@ -209,6 +210,7 @@ files:
209
210
  - config/locales/et-EE.yml
210
211
  - config/locales/et.yml
211
212
  - config/locales/eu.yml
213
+ - config/locales/fa-IR.yml
212
214
  - config/locales/fi-pl.yml
213
215
  - config/locales/fi-plain.yml
214
216
  - config/locales/fi.yml
@@ -227,6 +229,7 @@ files:
227
229
  - config/locales/it.yml
228
230
  - config/locales/ja.yml
229
231
  - config/locales/ka-GE.yml
232
+ - config/locales/kaa.yml
230
233
  - config/locales/ko-KR.yml
231
234
  - config/locales/ko.yml
232
235
  - config/locales/lb-LU.yml
@@ -302,7 +305,7 @@ homepage: https://github.com/decidim/decidim
302
305
  licenses:
303
306
  - AGPL-3.0
304
307
  metadata: {}
305
- post_install_message:
308
+ post_install_message:
306
309
  rdoc_options: []
307
310
  require_paths:
308
311
  - lib
@@ -317,8 +320,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
317
320
  - !ruby/object:Gem::Version
318
321
  version: '0'
319
322
  requirements: []
320
- rubygems_version: 3.3.7
321
- signing_key:
323
+ rubygems_version: 3.2.22
324
+ signing_key:
322
325
  specification_version: 4
323
326
  summary: Decidim forms
324
327
  test_files: []