decidim-forms 0.31.0.rc2 → 0.31.1

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: 10cee5c8cf9c6f33218ddcbda38125eea06c16d3306ed26c37b22fa3893094ec
4
- data.tar.gz: 3b1b30b4848cd720c0bdc5720c7b27a868b332b1f30cd8f51fed9aca615dfdeb
3
+ metadata.gz: 808d3aa9f3a035f3f1012fdaf627e29e43a4f384dfb86360b4c974adfbc05266
4
+ data.tar.gz: 8dc436b20281c0239705a31fae3cbfc820cafe2956a8ae73cf2e9f9582a07fed
5
5
  SHA512:
6
- metadata.gz: 6b44f235a04a06408d2d3a8d39c86fb557a09c873a1c5d6d010c8d19fc6d91c61b081e5d8686c665e54e413d18c630b5fbe175d4c5d216dd5f3e63f5392b922f
7
- data.tar.gz: d7eda3ba4d5c7ad2d2646b63d5c74e672872aed1e8fa90db732f92eaebca30103ff7fc0e04057369c7dbab7a41323627f136a634adb52f872d2f1d630d100f4e
6
+ metadata.gz: e03358d98b8839578eb717b9220afdf10c6c6d9116305ddde5b33981c2d1b6508ccadf72bd450e0817942217084b9be141b78121fab9edb17301fbd221940bba
7
+ data.tar.gz: 698611d67ebbc9695f98b0172402c51c2c1aac905aa6a7b8cc93b4d8961ed497c255a881f57f5589b8b97361daa618be3e7ed45669a2decfd31953e5a1311230
@@ -39,7 +39,7 @@ module Decidim
39
39
  end
40
40
 
41
41
  def questions_for_select(questionnaire, id)
42
- questionnaire.questions.map do |question|
42
+ questionnaire.questions.not_separator.map do |question|
43
43
  [
44
44
  question.translated_body,
45
45
  question.id,
@@ -41,18 +41,15 @@ module Decidim
41
41
 
42
42
  # Public: Splits responses by step, keeping the separator.
43
43
  #
44
- # Returns an array of steps. Each step is a list of the questions in that
45
- # step, including the separator.
44
+ # Returns an array of steps. Splits responses at each separator.
45
+ # Allowing only steps with questions to be counted, excluding the separators.
46
46
  def responses_by_step
47
- @responses_by_step ||=
48
- begin
49
- steps = responses.chunk_while do |a, b|
50
- !a.question.separator? || b.question.separator?
51
- end.to_a
52
-
53
- steps = [[]] if steps == []
54
- steps
47
+ @responses_by_step ||= begin
48
+ steps = responses.slice_before { |response| response.question.separator? }.map do |group|
49
+ group.reject { |response| response.question.separator? }
55
50
  end
51
+ steps.reject(&:empty?)
52
+ end
56
53
  end
57
54
 
58
55
  def total_steps
@@ -7,7 +7,6 @@ import AutoSelectOptionsFromUrl from "src/decidim/forms/admin/auto_select_option
7
7
  import createLiveTextUpdateComponent from "src/decidim/forms/admin/live_text_update.component"
8
8
  import AutoButtonsByPositionComponent from "src/decidim/admin/auto_buttons_by_position.component"
9
9
  import AutoLabelByPositionComponent from "src/decidim/admin/auto_label_by_position.component"
10
- import createSortList from "src/decidim/admin/sort_list.component"
11
10
  import createDynamicFields from "src/decidim/admin/dynamic_fields.component"
12
11
  import createFieldDependentInputs from "src/decidim/admin/field_dependent_inputs.component"
13
12
  import initLanguageChangeSelect from "src/decidim/admin/choose_language"
@@ -99,16 +98,16 @@ export default function createEditableForm() {
99
98
  })
100
99
  };
101
100
 
102
- const createSortableList = () => {
103
- createSortList(".questionnaire-questions-list:not(.published)", {
104
- handle: ".question-divider",
105
- placeholder: '<div style="border-style: dashed; border-color: #000"></div>',
106
- forcePlaceholderSize: true,
107
- onSortUpdate: () => {
101
+ // Listen for sortupdate events from html5sortable (initialized by draggable-table.js)
102
+ const setupSortUpdateListener = () => {
103
+ const container = document.querySelector(".questionnaire-questions-list:not(.published)");
104
+ if (container && !container.dataset.sortListenerAttached) {
105
+ container.addEventListener("sortupdate", () => {
108
106
  autoLabelByPosition.run();
109
107
  autoButtonsByPosition.run();
110
- }
111
- });
108
+ });
109
+ container.dataset.sortListenerAttached = "true";
110
+ }
112
111
  };
113
112
 
114
113
  const createDynamicQuestionTitle = (fieldId) => {
@@ -386,7 +385,7 @@ export default function createEditableForm() {
386
385
  moveDownFieldButtonSelector: ".move-down-question",
387
386
  onAddField: ($field) => {
388
387
  setupInitialQuestionAttributes($field);
389
- createSortableList();
388
+ setupSortUpdateListener();
390
389
 
391
390
  autoLabelByPosition.run();
392
391
  autoButtonsByPosition.run();
@@ -422,7 +421,7 @@ export default function createEditableForm() {
422
421
  }
423
422
  });
424
423
 
425
- createSortableList();
424
+ setupSortUpdateListener();
426
425
 
427
426
  $(fieldSelector).each((idx, el) => {
428
427
  const $target = $(el);
@@ -28,17 +28,38 @@ module Decidim
28
28
  return attachments if response.attachments.any?
29
29
  return "-" if response.choices.empty?
30
30
 
31
- choices = response.choices.map do |choice|
31
+ choices = build_choices
32
+
33
+ render_choices_list(choices)
34
+ end
35
+
36
+ private
37
+
38
+ def build_choices
39
+ response.choices.map do |choice|
40
+ matrix_row_body = matrix_row_body_for(choice)
32
41
  {
33
42
  response_option_body: choice.try(:response_option).try(:translated_body),
34
- choice_body: body_or_custom_body(choice)
43
+ choice_body: body_or_custom_body(choice),
44
+ matrix_row_body:
35
45
  }
36
46
  end
47
+ end
48
+
49
+ def matrix_row_body_for(choice)
50
+ return unless response.question.matrix?
51
+ return unless choice.matrix_row&.body
37
52
 
38
- return choice(choices.first) if response.question.question_type == "single_option"
53
+ translated_attribute(choice.matrix_row.body)
54
+ end
39
55
 
56
+ def render_choices_list(choices)
40
57
  content_tag(:ul) do
41
- safe_join(choices.map { |c| choice(c) })
58
+ if response.question.question_type == "single_option"
59
+ choice(choices.first)
60
+ else
61
+ safe_join(choices.map { |c| choice(c) })
62
+ end
42
63
  end
43
64
  end
44
65
 
@@ -68,7 +89,11 @@ module Decidim
68
89
 
69
90
  def choice(choice_hash)
70
91
  content_tag :li do
71
- render_body_for choice_hash
92
+ if choice_hash[:matrix_row_body].present?
93
+ content_tag(:strong, choice_hash[:matrix_row_body]) + ": " + render_body_for(choice_hash) # rubocop:disable Style/StringConcatenation
94
+ else
95
+ render_body_for choice_hash
96
+ end
72
97
  end
73
98
  end
74
99
 
@@ -40,7 +40,7 @@
40
40
  <%= cell("decidim/announcement", t(".already_responded_warning"), callout_class: "warning" ) %>
41
41
  <% end %>
42
42
 
43
- <div class="questionnaire-questions-list flex flex-col py-6 gap-6 last:pb-0" data-draggable-table data-sort-url="#" id="questionnaire-questions-list">
43
+ <div class="questionnaire-questions-list flex flex-col py-6 gap-6 last:pb-0" data-draggable-table data-sort-url="#" data-draggable-handle=".card-divider" id="questionnaire-questions-list">
44
44
  <% @form.questions.each_with_index do |question, index| %>
45
45
  <%= fields_for "questions[questions][]", question do |question_form| %>
46
46
  <% if question.separator? %>
@@ -76,35 +76,6 @@
76
76
  <script>
77
77
  document.addEventListener("turbo:load", function () {
78
78
  window.Decidim.createEditableForm();
79
-
80
- // Function to initialize the sortable functionality
81
- function initializeSortable() {
82
- const container = document.querySelector("#questionnaire-questions-list");
83
- const questionCards = container?.querySelectorAll(".card.questionnaire-question");
84
-
85
- if (!container || !questionCards?.length) return;
86
-
87
- questionCards.forEach(card => {
88
- card.setAttribute("draggable", "true");
89
- card.setAttribute("role", "option");
90
- card.setAttribute("aria-grabbed", "false");
91
- });
92
-
93
- window.Decidim?.createSortableList?.("#questionnaire-questions-list");
94
- }
95
-
96
- // Initialize on load and when new options such as questions etc are added
97
- initializeSortable();
98
-
99
- const observer = new MutationObserver(() => {
100
- clearTimeout(observer.timer);
101
- observer.timer = setTimeout(initializeSortable, 500);
102
- });
103
-
104
- const container = document.querySelector("#questionnaire-questions-list");
105
- if (container) {
106
- observer.observe(container, { childList: true, subtree: true });
107
- }
108
79
  });
109
80
  </script>
110
81
  <% end %>
@@ -54,6 +54,7 @@ de:
54
54
  tos: Nutzungsbedingungen
55
55
  questionnaires:
56
56
  actions:
57
+ back: Zurück zu den Antworten
57
58
  publish_responses: Antworten veröffentlichen
58
59
  show: Antworten
59
60
  display_condition:
@@ -215,7 +216,7 @@ de:
215
216
  back: Zurück
216
217
  continue: Weiter
217
218
  disallowed: Sie dürfen Ihre Antworten nicht bearbeiten.
218
- submit: einreichen
219
+ submit: Absenden
219
220
  user_responses_serializer:
220
221
  body: Antwort
221
222
  completion: Abschluss
@@ -30,7 +30,7 @@ eu:
30
30
  help:
31
31
  responses:
32
32
  id: Erantzunaren identifikatzaile bakarra
33
- question: Erantzun zen galdera
33
+ question: Erantzun den galdera
34
34
  questionnaire: Erantzun zen galdetegia
35
35
  response: Galderaren erantzuna
36
36
  user: Inkesta erantzun duen parte-hartzailea
@@ -55,8 +55,8 @@ eu:
55
55
  tos: Zerbitzu-baldintzak
56
56
  questionnaires:
57
57
  actions:
58
- back: Itzuli erantzunetara
59
- publish_responses: Argitaratu erantzunak
58
+ back: Erantzunetara itzuli
59
+ publish_responses: Erantzunak argitura
60
60
  show: Erantzunak
61
61
  display_condition:
62
62
  condition_question: Galdera
@@ -72,7 +72,7 @@ eu:
72
72
  mandatory: Baldintza hau beti bete behar da, beste baldintza batzuen egoera edozein dela ere
73
73
  remove: Kendu
74
74
  response_option: Erantzuteko aukera
75
- save_warning: Gogoratu formularioa gorde behar duzula, bistaratze-baldintzak konfiguratu aurretik
75
+ save_warning: Gogoratu formularioa gorde behar duzula bistaratzeko baldintzak konfiguratu aurretik
76
76
  select_condition_question: Hautatu galdera bat
77
77
  select_condition_type: Hautatu baldintza mota bat
78
78
  select_response_option: Hautatu erantzuteko aukera
@@ -96,7 +96,7 @@ eu:
96
96
  remove: Kendu
97
97
  statement: Adierazpena
98
98
  question:
99
- add_display_condition: Gehitu bistaratzeko baldintza
99
+ add_display_condition: Bistaratzeko baldintza gehitu
100
100
  add_display_condition_info: Gorde galdetegia bistaratzeko baldintzak konfiguratzeko
101
101
  add_matrix_row: Gehitu errenkada
102
102
  add_response_option: Erantsi erantzuteko aukera
@@ -140,7 +140,7 @@ eu:
140
140
  remove: Kendu
141
141
  separator: Bereizlea
142
142
  title_and_description:
143
- collapse: Kolapsoa
143
+ collapse: Tolestu
144
144
  description: Deskribapena
145
145
  expand: Zabaldu
146
146
  remove: Kendu
@@ -196,7 +196,7 @@ eu:
196
196
  body: Galdetegi honen ezaugarri batzuk desaktibatu egingo dira. Zure esperientzia hobetzeko, gaitu JavaScript zure nabigatzailean.
197
197
  title: Javascript desaktibatuta dago
198
198
  questionnaire_not_published:
199
- body: Argitalpen hau oraindik ez da argitaratu.
199
+ body: Formulario hau ez da oraindik argitaratu.
200
200
  questionnaire_responded:
201
201
  body: Dagoeneko inkesta hau erantzun duzu.
202
202
  title: Dagoeneko erantzunda
@@ -8,14 +8,56 @@ pt-BR:
8
8
  questionnaire_question:
9
9
  mandatory: Obrigatório
10
10
  max_characters: Limite de caracteres (deixe para 0 se não houver limite)
11
+ response:
12
+ body: Resposta
13
+ choices: Escolhas
14
+ selected_choices: Escolhas selecionadas
15
+ errors:
16
+ models:
17
+ questionnaire:
18
+ request_invalid: Houve um problema ao lidar com a solicitação. Por favor, tente novamente.
19
+ response:
20
+ attributes:
21
+ add_documents:
22
+ needs_to_be_reattached: Precisa ser reanexado
23
+ body:
24
+ too_long: é muito longo
25
+ choices:
26
+ missing: não estão completos
27
+ too_many: Você pode escolher um máximo de %{count}.
11
28
  decidim:
29
+ download_your_data:
30
+ help:
31
+ responses:
32
+ id: O identificador único da resposta
33
+ question: A pergunta respondida
34
+ questionnaire: O formulário respondido
35
+ response: A resposta para a pergunta
36
+ user: O usuário que respondeu ao formulário
37
+ show:
38
+ responses: Exportação de respostas
39
+ survey_user_responses: Respostas do usuário da pesquisa
12
40
  forms:
13
41
  admin:
14
42
  models:
15
43
  components:
44
+ allow_editing_responses: Permitir que usuários registrados editem suas próprias respostas à pesquisa
45
+ allow_responses: Permitir respostas
46
+ allow_unregistered: Permitir que usuários não registrados respondam à pesquisa
47
+ allow_unregistered_help: Se ativo, nenhum login será necessário para responder à pesquisa. Isso pode levar a dados ruins ou não confiáveis e será mais vulnerável a ataques automatizados. Usar com cuidado! Lembre-se de que um usuário pode responder à mesma pesquisa várias vezes, usando diferentes navegadores ou a função "navegação privada" de seu navegador.
48
+ announcement: Anúncio
49
+ clean_after_publish: Excluir respostas ao publicar a pesquisa
16
50
  description: Descrição
51
+ ends_at: Respostas aceitas até
52
+ ends_at_help: Deixe em branco para nenhuma data específica
53
+ starts_at: Respostas aceitas de
54
+ starts_at_help: Deixe em branco para nenhuma data específica
17
55
  tos: Termos de serviço
18
56
  questionnaires:
57
+ actions:
58
+ back: Voltar para respostas
59
+ publish_responses: Publicar respostas
60
+ show: Respostas
19
61
  display_condition:
20
62
  condition_question: Questão
21
63
  condition_type: Condição
@@ -23,16 +65,26 @@ pt-BR:
23
65
  equal: Igual
24
66
  match: Incluir texto
25
67
  not_equal: Diferente
68
+ not_responded: Não respondeu
69
+ responded: Respondeu
26
70
  condition_value: Incluir texto
27
71
  display_condition: Exibir condição
28
72
  mandatory: Esta condição precisa ser sempre satisfeita independentemente do status de outras condições
29
73
  remove: Remover
74
+ response_option: Opção de resposta
30
75
  save_warning: Lembre-se de salvar o formulário antes de configurar condições de exibição
31
76
  select_condition_question: Selecione uma pergunta
32
77
  select_condition_type: Selecione um tipo de condição
78
+ select_response_option: Selecionar opção de resposta
33
79
  edit:
34
80
  save: Salvar
35
81
  title: Editar questionário
82
+ edit_questions:
83
+ add_question: Adicionar pergunta
84
+ add_separator: Adicionar separador
85
+ add_title_and_description: Adicionar título e descrição
86
+ save: Salvar
87
+ title: Perguntas
36
88
  form:
37
89
  add_question: Adicionar pergunta
38
90
  collapse: Recolher todas as questões
@@ -47,6 +99,7 @@ pt-BR:
47
99
  add_display_condition: Adicionar condição de exibição
48
100
  add_display_condition_info: Salve o formulário para configurar condições de exibição
49
101
  add_matrix_row: Adicionar linha
102
+ add_response_option: Adicionar opção de resposta
50
103
  any: Qualquer
51
104
  collapse: Recolher
52
105
  description: Descrição
@@ -54,9 +107,35 @@ pt-BR:
54
107
  question: Questão
55
108
  remove: Remover
56
109
  statement: Declaração
110
+ questions_form:
111
+ already_responded_warning: O formulário já foi respondido por alguns usuários então você não pode modificar suas perguntas.
112
+ collapse: Recolher todas as perguntas
113
+ expand: Expandir todas as perguntas
114
+ unpublished_warning: O formulário não foi publicado. Você pode modificar suas perguntas, mas ao fazê-lo apagará as respostas atuais.
115
+ update:
116
+ success: Perguntas da pesquisa salvas com sucesso.
117
+ response_option:
118
+ free_text: Texto livre
119
+ remove: Excluir
120
+ response_option: Opção de resposta
121
+ statement: Instrução
57
122
  responses:
58
123
  actions:
124
+ back: Voltar para respostas
125
+ export: Exportar
126
+ next: Próximo &rsaquo;
127
+ previous: "&lsaquo; Anterior"
59
128
  show: Mostrar respostas
129
+ empty: Ainda não há respostas
130
+ export:
131
+ response:
132
+ title: 'Resposta #%{number}'
133
+ export_response:
134
+ title: pesquisa_respostas_do_usuário_%{token}
135
+ index:
136
+ title: "Total de respostas de %{total}"
137
+ show:
138
+ title: 'Resposta #%{number}'
60
139
  separator:
61
140
  remove: Remover
62
141
  separator: Separador
@@ -71,8 +150,14 @@ pt-BR:
71
150
  invalid: Houve erros ao salvar o questionário.
72
151
  success: Formulário salvo com sucesso.
73
152
  admin_log:
153
+ question:
154
+ publish_responses: "%{user_name} publicou as respostas da pergunta %{resource_name} no espaço %{space_name}"
155
+ unpublish_responses: "%{user_name} não publicou as respostas da pergunta %{resource_name} no espaço %{space_name}"
74
156
  questionnaire:
75
157
  update: "%{user_name} atualizou o questionário %{resource_name}"
158
+ errors:
159
+ response:
160
+ body: Corpo não pode estar em branco
76
161
  images:
77
162
  dimensions: "%{width} x %{height} px"
78
163
  processors:
@@ -80,19 +165,29 @@ pt-BR:
80
165
  resize_to_fit: Esta imagem será redimensionada para caber %{dimensions}.
81
166
  question_types:
82
167
  files: Arquivos
168
+ long_response: Resposta longa
83
169
  matrix_multiple: Matriz (Múltipla opção)
84
170
  matrix_single: Matriz (opção única)
85
171
  multiple_option: Opção múltipla
172
+ short_response: Resposta curta
86
173
  single_option: Opção única
87
174
  sorting: Classificação
88
175
  title_and_description: Título e descrição
176
+ questionnaire_response_presenter:
177
+ download_attachment: Baixar anexo
89
178
  questionnaires:
90
179
  question:
91
180
  max_choices: 'Escolhas máximas: %{n}'
181
+ response:
182
+ invalid: Houve um problema ao responder o formulário.
183
+ max_choices_alert: Há muitas opções selecionadas
184
+ success: Formulário respondido com sucesso.
92
185
  show:
93
186
  current_step: Passo %{step}
187
+ empty: Nenhuma pergunta configurada para este formulário ainda.
94
188
  of_total_steps: de %{total_steps}
95
189
  questionnaire_closed:
190
+ body: O formulário está fechado e não pode ser respondido.
96
191
  title: Questionário fechado
97
192
  questionnaire_for_private_users:
98
193
  body: O questionário está disponível apenas para usuários particulares
@@ -102,9 +197,35 @@ pt-BR:
102
197
  title: JavaScript está desativado
103
198
  questionnaire_not_published:
104
199
  body: Este formulário ainda não foi publicado.
200
+ questionnaire_responded:
201
+ body: Você já respondeu a este formulário.
202
+ title: Já respondido
203
+ questionnaire_responded_edit:
204
+ body: Você já respondeu a este formulário. %{link}
205
+ edit: Edite suas respostas
206
+ response_questionnaire:
207
+ already_have_an_account?: Já tem uma conta?
208
+ are_you_new?: Usuário novo?
209
+ sign_in_description: Faça ‘login’ para participar da pesquisa
210
+ sign_up_description: Crie uma conta de participante para responder à pesquisa
211
+ title: Responda ao formulário
105
212
  tos_agreement: Ao participar você aceita seus Termos de Serviço
106
213
  step_navigation:
107
214
  show:
215
+ are_you_sure_edit_guest: Se você quiser poder editar suas respostas posteriormente, precisará fazer ‘login’ ou criar uma conta.
216
+ are_you_sure_no_edit: Esta ação não pode ser desfeita e você não poderá editar suas respostas. Tem certeza?
108
217
  back: Voltar
109
218
  continue: Continuar
219
+ disallowed: Você não tem permissão para editar suas respostas.
110
220
  submit: Enviar
221
+ user_responses_serializer:
222
+ body: Resposta
223
+ completion: Conclusão
224
+ created_at: Respondeu em
225
+ id: ID resposta
226
+ ip_hash: IP 'Hash'
227
+ question: Pergunta
228
+ registered: Registrado
229
+ session_token: Identificador do usuário
230
+ unregistered: Não registrado
231
+ user_status: '''Status'' do usuário'
@@ -124,7 +124,7 @@ ro:
124
124
  title: Formular închis
125
125
  questionnaire_for_private_users:
126
126
  body: Chestionarul este disponibil doar pentru utilizatorii privați
127
- title: Chestionar închis
127
+ title: Formular închis
128
128
  questionnaire_js_disabled:
129
129
  body: Unele dintre funcționalitățile acestui chestionar vor fi dezactivate. Pentru a îți îmbunătăți experiența, te rugăm să activezi JavaScript în browser-ul tău.
130
130
  title: JavaScript este dezactivat
@@ -42,7 +42,7 @@ sk:
42
42
  title: Formulár je uzavretý.
43
43
  questionnaire_for_private_users:
44
44
  body: Formulár je otvorený len pre súkromných používateľov
45
- title: Formulár je uzavretý
45
+ title: Formulár je uzavretý.
46
46
  tos_agreement: Účasťou súhlasíte s našimi Podmienkami použitia
47
47
  step_navigation:
48
48
  show:
@@ -12,7 +12,14 @@ module Decidim
12
12
 
13
13
  class QuestionnaireResponsePresenter < Decidim::Forms::Admin::QuestionnaireResponsePresenter
14
14
  def choice(choice_hash)
15
- render_body_for choice_hash
15
+ if choice_hash[:matrix_row_body].present?
16
+ row_text = choice_hash[:matrix_row_body]
17
+ option_text = choice_hash[:response_option_body]
18
+ custom_text = choice_hash[:choice_body].present? ? " (#{choice_hash[:choice_body]})" : ""
19
+ "#{row_text}: #{option_text}#{custom_text}"
20
+ else
21
+ render_body_for choice_hash
22
+ end
16
23
  end
17
24
 
18
25
  delegate :attachments, to: :response
@@ -25,7 +32,8 @@ module Decidim
25
32
  choices = response.choices.map do |choice|
26
33
  {
27
34
  response_option_body: choice.try(:response_option).try(:translated_body),
28
- choice_body: body_or_custom_body(choice)
35
+ choice_body: body_or_custom_body(choice),
36
+ matrix_row_body: choice.try(:matrix_row).try(:body) ? translated_attribute(choice.matrix_row.body) : nil
29
37
  }
30
38
  end
31
39
 
@@ -16,6 +16,12 @@ module Decidim
16
16
  Decidim.register_assets_path File.expand_path("app/packs", root)
17
17
  end
18
18
 
19
+ initializer "decidim_forms.data_migrate", after: "decidim_core.data_migrate" do
20
+ DataMigrate.configure do |config|
21
+ config.data_migrations_path << root.join("db/data").to_s
22
+ end
23
+ end
24
+
19
25
  initializer "decidim_forms.authorization_transfer" do
20
26
  config.to_prepare do
21
27
  Decidim::AuthorizationTransfer.register(:forms) do |transfer|
@@ -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.31.0.rc2"
7
+ "0.31.1"
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.31.0.rc2
4
+ version: 0.31.1
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: 2025-10-28 00:00:00.000000000 Z
14
+ date: 2026-01-28 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: decidim-core
@@ -19,42 +19,42 @@ dependencies:
19
19
  requirements:
20
20
  - - '='
21
21
  - !ruby/object:Gem::Version
22
- version: 0.31.0.rc2
22
+ version: 0.31.1
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.31.0.rc2
29
+ version: 0.31.1
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: decidim-admin
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
34
  - - '='
35
35
  - !ruby/object:Gem::Version
36
- version: 0.31.0.rc2
36
+ version: 0.31.1
37
37
  type: :development
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - '='
42
42
  - !ruby/object:Gem::Version
43
- version: 0.31.0.rc2
43
+ version: 0.31.1
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: decidim-dev
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
48
  - - '='
49
49
  - !ruby/object:Gem::Version
50
- version: 0.31.0.rc2
50
+ version: 0.31.1
51
51
  type: :development
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
55
  - - '='
56
56
  - !ruby/object:Gem::Version
57
- version: 0.31.0.rc2
57
+ version: 0.31.1
58
58
  description: A forms gem for decidim.
59
59
  email:
60
60
  - josepjaume@gmail.com