decidim-forms 0.27.2 → 0.27.3

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: fe0eacc810fb380764e96c7474000294dad78a56ff8fbba63da37ddad92da57a
4
+ data.tar.gz: d9d90aaf1e88deff5c8ad71fa685448a2a6e3ad0e73663c88a1e3567087b66b0
5
5
  SHA512:
6
- metadata.gz: 731c4df584b70bd2b4f83211e69b4f562ef1aaa2a706afe4856f87fa5bdb3ea2bc061f51b037341d4722c87051151ee55b27a94666514da901856563e4e55d72
7
- data.tar.gz: 21e2b2207bfa79f08bf40b0372bf67d987c09919faf0f7bb17d585835f0b65f6402500fc48e469cfa223b2fab0270955c1de3902f54b1360cb8d5fc875a28423
6
+ metadata.gz: 74a496c438077dfc2404b9c832db751d43c166e8eb2ce6089b0c98c173d0fa615e34346a631bcbc2d1f1a48ac58a96de460bde7e23030c700751bb2ab5a458bb
7
+ data.tar.gz: 419adf2d45fb56a6e359015fda1bfc47d291c17295f5cab43c4780f3aad0e2d0c045c645a04972e20d9849d9a44f4bf36e94a45a956a4ac04a61c11430c34984
@@ -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>
@@ -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>
@@ -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 @@
1
+ kaa:
@@ -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" } },
@@ -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.3"
8
8
  end
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
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.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2023-02-13 00:00:00.000000000 Z
14
+ date: 2023-05-11 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.3
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.3
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.3
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.3
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.3
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.3
86
86
  description: A forms gem for decidim.
87
87
  email:
88
88
  - josepjaume@gmail.com
@@ -209,6 +209,7 @@ files:
209
209
  - config/locales/et-EE.yml
210
210
  - config/locales/et.yml
211
211
  - config/locales/eu.yml
212
+ - config/locales/fa-IR.yml
212
213
  - config/locales/fi-pl.yml
213
214
  - config/locales/fi-plain.yml
214
215
  - config/locales/fi.yml
@@ -227,6 +228,7 @@ files:
227
228
  - config/locales/it.yml
228
229
  - config/locales/ja.yml
229
230
  - config/locales/ka-GE.yml
231
+ - config/locales/kaa.yml
230
232
  - config/locales/ko-KR.yml
231
233
  - config/locales/ko.yml
232
234
  - config/locales/lb-LU.yml
@@ -317,7 +319,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
317
319
  - !ruby/object:Gem::Version
318
320
  version: '0'
319
321
  requirements: []
320
- rubygems_version: 3.3.7
322
+ rubygems_version: 3.2.22
321
323
  signing_key:
322
324
  specification_version: 4
323
325
  summary: Decidim forms