decidim-forms 0.27.2 → 0.27.4

Sign up to get free protection for your applications and to get access to all the features.
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: []