wagtail-enap-designsystem 1.2.1.129__py3-none-any.whl → 1.2.1.131__py3-none-any.whl

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.

Potentially problematic release.


This version of wagtail-enap-designsystem might be problematic. Click here for more details.

Files changed (35) hide show
  1. enap_designsystem/blocks/__init__.py +6 -0
  2. enap_designsystem/blocks/form.py +243 -2
  3. enap_designsystem/blocks/html_blocks.py +316 -6
  4. enap_designsystem/blocks/semana_inovacao.py +1 -0
  5. enap_designsystem/context_processors.py +30 -6
  6. enap_designsystem/migrations/0395_formulariopage_enable_scoring_and_more.py +106 -0
  7. enap_designsystem/migrations/0396_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51263 -0
  8. enap_designsystem/migrations/0397_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51718 -0
  9. enap_designsystem/migrations/0398_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51718 -0
  10. enap_designsystem/migrations/0399_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51718 -0
  11. enap_designsystem/migrations/0400_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51718 -0
  12. enap_designsystem/migrations/0401_alter_areaaluno_body_alter_cursoeadpage_curso_and_more.py +52692 -0
  13. enap_designsystem/migrations/0402_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +52082 -0
  14. enap_designsystem/migrations/0403_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +52802 -0
  15. enap_designsystem/migrations/0404_sistemavotacaopage_conteudo_pagina.py +253 -0
  16. enap_designsystem/migrations/0405_sistemavotacaopage_exigir_recaptcha_and_more.py +41 -0
  17. enap_designsystem/models.py +94 -46
  18. enap_designsystem/settings.py +4 -0
  19. enap_designsystem/templates/enap_designsystem/blocks/apresentacao_simple_block.html +1 -1
  20. enap_designsystem/templates/enap_designsystem/blocks/cards_titles.html +309 -0
  21. enap_designsystem/templates/enap_designsystem/blocks/clientes_block.html +1 -1
  22. enap_designsystem/templates/enap_designsystem/blocks/cpnu_dashboard_block.html +5 -0
  23. enap_designsystem/templates/enap_designsystem/blocks/logos_simple_block.html +329 -0
  24. enap_designsystem/templates/enap_designsystem/blocks/numeros_block.html +195 -0
  25. enap_designsystem/templates/enap_designsystem/blocks/page/pagenoticias_block.html +6 -0
  26. enap_designsystem/templates/enap_designsystem/blocks/recaptcha.html +146 -126
  27. enap_designsystem/templates/enap_designsystem/form_templates/formulario_page.html +1 -0
  28. enap_designsystem/templates/enap_designsystem/sistema_votacao_page.html +583 -543
  29. enap_designsystem/views.py +1 -1
  30. enap_designsystem/wagtail_hooks.py +390 -9
  31. {wagtail_enap_designsystem-1.2.1.129.dist-info → wagtail_enap_designsystem-1.2.1.131.dist-info}/METADATA +1 -1
  32. {wagtail_enap_designsystem-1.2.1.129.dist-info → wagtail_enap_designsystem-1.2.1.131.dist-info}/RECORD +35 -21
  33. {wagtail_enap_designsystem-1.2.1.129.dist-info → wagtail_enap_designsystem-1.2.1.131.dist-info}/WHEEL +0 -0
  34. {wagtail_enap_designsystem-1.2.1.129.dist-info → wagtail_enap_designsystem-1.2.1.131.dist-info}/licenses/LICENSE +0 -0
  35. {wagtail_enap_designsystem-1.2.1.129.dist-info → wagtail_enap_designsystem-1.2.1.131.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,253 @@
1
+ # Generated by Django 5.1.6 on 2025-09-09 13:58
2
+
3
+ import wagtail.fields
4
+ from django.db import migrations
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ (
11
+ "enap_designsystem",
12
+ "0403_alter_areaaluno_body_alter_enapcomponentes_body_and_more",
13
+ ),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.AddField(
18
+ model_name="sistemavotacaopage",
19
+ name="conteudo_pagina",
20
+ field=wagtail.fields.StreamField(
21
+ [("secao_apresentacao", 10)],
22
+ blank=True,
23
+ block_lookup={
24
+ 0: (
25
+ "wagtail.blocks.ChoiceBlock",
26
+ [],
27
+ {
28
+ "choices": [
29
+ ("#FFFFFF", "Branco (#FFFFFF)"),
30
+ ("#F8F9FA", "Cinza Claro (#F8F9FA)"),
31
+ ("#000000", "Preto (#000000)"),
32
+ ("enap-green", "Verde ENAP"),
33
+ ("enap-link", "Verde Link ENAP"),
34
+ ("gnova-purple", "Roxo Gnova"),
35
+ ("gnova-light", "Roxo Claro Gnova"),
36
+ ("blue", "Azul"),
37
+ ("green", "Verde"),
38
+ ("red", "Vermelho"),
39
+ ("orange", "Laranja"),
40
+ ("purple", "Roxo"),
41
+ ("indigo", "Índigo"),
42
+ ("emerald", "Esmeralda"),
43
+ ("#132929", "Verde Musgo Escuro"),
44
+ ("#F5F7FA", "Azul Enap"),
45
+ ("#FCFCFC", "Cinza Enap"),
46
+ ("#3A8A9C", "Azul Petróleo"),
47
+ ("#25552A", "Verde Floresta Escuro"),
48
+ ("#818C27", "Verde Oliva"),
49
+ ("#FF7A1B", "Laranja Vibrante"),
50
+ ("#FFEB31", "Amarelo Canário"),
51
+ ("#FFF0D9", "Creme Suave"),
52
+ ("#DB8C3F", "Dourado Queimado"),
53
+ ("#990005", "Vermelho Bordô"),
54
+ ("#EA1821", "Vermelho Cereja"),
55
+ ("#F8F9FA", "Cinza Muito Claro"),
56
+ ("#BAC946", "Verdinho"),
57
+ ],
58
+ "help_text": "Cor de fundo da seção",
59
+ },
60
+ ),
61
+ 1: (
62
+ "wagtail.blocks.ChoiceBlock",
63
+ [],
64
+ {
65
+ "choices": [
66
+ ("direita", "Imagem à Direita"),
67
+ ("esquerda", "Imagem à Esquerda"),
68
+ ],
69
+ "help_text": "Posição da imagem em relação ao texto",
70
+ },
71
+ ),
72
+ 2: (
73
+ "wagtail.blocks.CharBlock",
74
+ (),
75
+ {"help_text": "Título principal da seção", "max_length": 200},
76
+ ),
77
+ 3: (
78
+ "wagtail.blocks.ChoiceBlock",
79
+ [],
80
+ {
81
+ "choices": [
82
+ ("enap-green", "Verde ENAP"),
83
+ ("enap-link", "Verde Link ENAP"),
84
+ ("gnova-purple", "Roxo Gnova"),
85
+ ("gnova-light", "Roxo Claro Gnova"),
86
+ ("blue", "Azul"),
87
+ ("green", "Verde"),
88
+ ("red", "Vermelho"),
89
+ ("orange", "Laranja"),
90
+ ("purple", "Roxo"),
91
+ ("indigo", "Índigo"),
92
+ ("emerald", "Esmeralda"),
93
+ ("#FFFFFF", "Branco (#FFFFFF)"),
94
+ ("#132929", "Verde Musgo Escuro"),
95
+ ("#3A8A9C", "Azul Petróleo"),
96
+ ("#25552A", "Verde Floresta Escuro"),
97
+ ("#818C27", "Verde Oliva"),
98
+ ("#FF7A1B", "Laranja Vibrante"),
99
+ ("#FFEB31", "Amarelo Canário"),
100
+ ("#FFF0D9", "Creme Suave"),
101
+ ("#DB8C3F", "Dourado Queimado"),
102
+ ("#990005", "Vermelho Bordô"),
103
+ ("#EA1821", "Vermelho Cereja"),
104
+ ("#BAC946", "Verdinho"),
105
+ ],
106
+ "help_text": "Cor do título principal",
107
+ "required": False,
108
+ },
109
+ ),
110
+ 4: (
111
+ "wagtail.blocks.RichTextBlock",
112
+ (),
113
+ {
114
+ "features": [
115
+ "bold",
116
+ "italic",
117
+ "link",
118
+ "ul",
119
+ "ol",
120
+ "h3",
121
+ "h4",
122
+ "hr",
123
+ "blockquote",
124
+ ],
125
+ "help_text": "Subtítulo da seção (opcional)",
126
+ "required": False,
127
+ },
128
+ ),
129
+ 5: (
130
+ "wagtail.blocks.ChoiceBlock",
131
+ [],
132
+ {
133
+ "choices": [
134
+ ("enap-green", "Verde ENAP"),
135
+ ("#FFF0D9", "Creme Suave"),
136
+ ("enap-link", "Verde Link ENAP"),
137
+ ("gnova-purple", "Roxo Gnova"),
138
+ ("gnova-light", "Roxo Claro Gnova"),
139
+ ("blue", "Azul"),
140
+ ("green", "Verde"),
141
+ ("red", "Vermelho"),
142
+ ("orange", "Laranja"),
143
+ ("purple", "Roxo"),
144
+ ("indigo", "Índigo"),
145
+ ("emerald", "Esmeralda"),
146
+ ("#FFFFFF", "Branco (#FFFFFF)"),
147
+ ("#132929", "Verde Musgo Escuro"),
148
+ ("#00777D", "Enap"),
149
+ ("#58606E", "Enap Cinza"),
150
+ ("#AFF0ED", "Enap Azul"),
151
+ ("#25552A", "Verde Floresta Escuro"),
152
+ ("#818C27", "Verde Oliva"),
153
+ ("#DB8C3F", "Dourado Queimado"),
154
+ ("#990005", "Vermelho Bordô"),
155
+ ("#000000", "Preto"),
156
+ ("#2F2F2F", "Cinza Escuro"),
157
+ ("#4A4A4A", "Cinza Médio"),
158
+ ("#383674", "Roxo ENAP"),
159
+ ("#BAC946", "Verdinho"),
160
+ ],
161
+ "help_text": "Cor do subtítulo",
162
+ },
163
+ ),
164
+ 6: (
165
+ "wagtail.images.blocks.ImageChooserBlock",
166
+ (),
167
+ {"help_text": "Imagem que aparecerá em formato circular"},
168
+ ),
169
+ 7: (
170
+ "wagtail.blocks.CharBlock",
171
+ (),
172
+ {
173
+ "default": "Imagem ilustrativa",
174
+ "help_text": "Texto alternativo da imagem",
175
+ "max_length": 100,
176
+ },
177
+ ),
178
+ 8: (
179
+ "wagtail.blocks.RichTextBlock",
180
+ (),
181
+ {
182
+ "features": [
183
+ "bold",
184
+ "italic",
185
+ "link",
186
+ "ol",
187
+ "ul",
188
+ "hr",
189
+ "document-link",
190
+ ],
191
+ "help_text": "Conteúdo principal em rich text",
192
+ "required": False,
193
+ },
194
+ ),
195
+ 9: (
196
+ "wagtail.blocks.ChoiceBlock",
197
+ [],
198
+ {
199
+ "choices": [
200
+ ("enap-green", "Verde ENAP"),
201
+ ("#FFF0D9", "Creme Suave"),
202
+ ("enap-link", "Verde Link ENAP"),
203
+ ("gnova-purple", "Roxo Gnova"),
204
+ ("gnova-light", "Roxo Claro Gnova"),
205
+ ("blue", "Azul"),
206
+ ("green", "Verde"),
207
+ ("red", "Vermelho"),
208
+ ("orange", "Laranja"),
209
+ ("purple", "Roxo"),
210
+ ("indigo", "Índigo"),
211
+ ("emerald", "Esmeralda"),
212
+ ("#FFFFFF", "Branco (#FFFFFF)"),
213
+ ("#132929", "Verde Musgo Escuro"),
214
+ ("#00777D", "Enap"),
215
+ ("#58606E", "Enap Cinza"),
216
+ ("#AFF0ED", "Enap Azul"),
217
+ ("#25552A", "Verde Floresta Escuro"),
218
+ ("#818C27", "Verde Oliva"),
219
+ ("#DB8C3F", "Dourado Queimado"),
220
+ ("#990005", "Vermelho Bordô"),
221
+ ("#000000", "Preto"),
222
+ ("#2F2F2F", "Cinza Escuro"),
223
+ ("#4A4A4A", "Cinza Médio"),
224
+ ("#383674", "Roxo ENAP"),
225
+ ("#BAC946", "Verdinho"),
226
+ ],
227
+ "help_text": "Cor do texto do conteúdo",
228
+ },
229
+ ),
230
+ 10: (
231
+ "wagtail.blocks.StructBlock",
232
+ [
233
+ [
234
+ ("cor_fundo", 0),
235
+ ("posicao_imagem", 1),
236
+ ("titulo", 2),
237
+ ("cor_titulo", 3),
238
+ ("subtitulo", 4),
239
+ ("cor_subtitulo", 5),
240
+ ("imagem_circular", 6),
241
+ ("alt_imagem", 7),
242
+ ("conteudo", 8),
243
+ ("cor_texto", 9),
244
+ ]
245
+ ],
246
+ {},
247
+ ),
248
+ },
249
+ help_text="Adicione seções de conteúdo para a página",
250
+ verbose_name="Conteúdo da Página",
251
+ ),
252
+ ),
253
+ ]
@@ -0,0 +1,41 @@
1
+ # Generated by Django 5.1.6 on 2025-09-09 20:42
2
+
3
+ import wagtail.fields
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ("enap_designsystem", "0404_sistemavotacaopage_conteudo_pagina"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AddField(
15
+ model_name="sistemavotacaopage",
16
+ name="exigir_recaptcha",
17
+ field=models.BooleanField(
18
+ default=True,
19
+ help_text="Marque para exigir verificação reCAPTCHA antes de mostrar votação",
20
+ verbose_name="Exigir reCAPTCHA",
21
+ ),
22
+ ),
23
+ migrations.AddField(
24
+ model_name="sistemavotacaopage",
25
+ name="texto_pos_recaptcha",
26
+ field=wagtail.fields.RichTextField(
27
+ blank=True,
28
+ help_text="Mensagem exibida após verificação bem-sucedida (opcional)",
29
+ verbose_name="Texto após verificação",
30
+ ),
31
+ ),
32
+ migrations.AddField(
33
+ model_name="sistemavotacaopage",
34
+ name="texto_pre_recaptcha",
35
+ field=wagtail.fields.RichTextField(
36
+ default="<p>Para acessar o sistema de votação, confirme que você não é um robô:</p>",
37
+ help_text="Mensagem exibida antes da verificação do reCAPTCHA",
38
+ verbose_name="Texto antes do reCAPTCHA",
39
+ ),
40
+ ),
41
+ ]
@@ -4775,6 +4775,7 @@ class VotoRegistrado(models.Model):
4775
4775
  super().save(*args, **kwargs)
4776
4776
 
4777
4777
 
4778
+
4778
4779
  class SistemaVotacaoPage(Page):
4779
4780
  """
4780
4781
  Página principal do sistema de votação
@@ -4790,15 +4791,15 @@ class SistemaVotacaoPage(Page):
4790
4791
  )
4791
4792
 
4792
4793
  background_image_fundo = StreamField(
4793
- [('background_image_stream', ImageChooserBlock(
4794
- label="Imagem de Fundo",
4795
- help_text="Selecione uma imagem de fundo para o formulário"
4796
- ))],
4797
- verbose_name="Imagem de Fundo",
4798
- use_json_field=True,
4799
- max_num=1,
4800
- blank=True,
4801
- help_text="Adicione uma imagem de fundo para o formulário"
4794
+ [('background_image_stream', ImageChooserBlock(
4795
+ label="Imagem de Fundo",
4796
+ help_text="Selecione uma imagem de fundo para o formulário"
4797
+ ))],
4798
+ verbose_name="Imagem de Fundo",
4799
+ use_json_field=True,
4800
+ max_num=1,
4801
+ blank=True,
4802
+ help_text="Adicione uma imagem de fundo para o formulário"
4802
4803
  )
4803
4804
 
4804
4805
  subtitulo = models.CharField(
@@ -4814,6 +4815,25 @@ class SistemaVotacaoPage(Page):
4814
4815
  help_text="Texto adicional no topo da página (opcional)"
4815
4816
  )
4816
4817
 
4818
+ # Campos para reCAPTCHA
4819
+ texto_pre_recaptcha = RichTextField(
4820
+ default="<p>Para acessar o sistema de votação, confirme que você não é um robô:</p>",
4821
+ verbose_name="Texto antes do reCAPTCHA",
4822
+ help_text="Mensagem exibida antes da verificação do reCAPTCHA"
4823
+ )
4824
+
4825
+ texto_pos_recaptcha = RichTextField(
4826
+ blank=True,
4827
+ verbose_name="Texto após verificação",
4828
+ help_text="Mensagem exibida após verificação bem-sucedida (opcional)"
4829
+ )
4830
+
4831
+ exigir_recaptcha = models.BooleanField(
4832
+ default=True,
4833
+ verbose_name="Exigir reCAPTCHA",
4834
+ help_text="Marque para exigir verificação reCAPTCHA antes de mostrar votação"
4835
+ )
4836
+
4817
4837
  imagem_fundo = StreamField([
4818
4838
  ("image", ImageChooserBlock(
4819
4839
  required=False,
@@ -4824,6 +4844,15 @@ class SistemaVotacaoPage(Page):
4824
4844
  use_json_field=True,
4825
4845
  verbose_name="Imagem de Fundo",
4826
4846
  )
4847
+
4848
+ conteudo_pagina = StreamField([
4849
+ ('secao_apresentacao', SecaoApresentacaoBlock()),
4850
+ ],
4851
+ blank=True,
4852
+ use_json_field=True,
4853
+ verbose_name="Conteúdo da Página",
4854
+ help_text="Adicione seções de conteúdo para a página"
4855
+ )
4827
4856
 
4828
4857
  mostrar_progresso = models.BooleanField(
4829
4858
  default=True,
@@ -4850,7 +4879,6 @@ class SistemaVotacaoPage(Page):
4850
4879
  verbose_name="Ordenação dos Projetos"
4851
4880
  )
4852
4881
 
4853
- # Meta configurações
4854
4882
  votacao_ativa = models.BooleanField(
4855
4883
  default=True,
4856
4884
  verbose_name="Votação Ativa",
@@ -4872,13 +4900,13 @@ class SistemaVotacaoPage(Page):
4872
4900
  )
4873
4901
 
4874
4902
  configuracoes_votacao = StreamField([
4875
- ('recaptcha', RecaptchaBlock()),
4876
- ],
4877
- blank=True,
4878
- use_json_field=True,
4879
- verbose_name="Configurações e Elementos da Votação",
4880
- help_text="Adicione reCAPTCHA para a página de votação"
4881
- )
4903
+ ('recaptcha', RecaptchaBlock()),
4904
+ ],
4905
+ blank=True,
4906
+ use_json_field=True,
4907
+ verbose_name="Configurações e Elementos da Votação",
4908
+ help_text="Adicione reCAPTCHA para a página de votação"
4909
+ )
4882
4910
 
4883
4911
  footer = models.ForeignKey(
4884
4912
  "EnapFooterSnippet",
@@ -4887,20 +4915,26 @@ class SistemaVotacaoPage(Page):
4887
4915
  on_delete=models.SET_NULL,
4888
4916
  related_name="+",
4889
4917
  )
4890
-
4891
4918
 
4892
4919
  content_panels = Page.content_panels + [
4893
-
4894
4920
  MultiFieldPanel([
4895
4921
  FieldPanel('subtitulo'),
4896
4922
  FieldPanel('descricao_header'),
4897
- FieldPanel('imagem_fundo'),
4898
- FieldPanel('navbar'),
4899
- FieldPanel('footer'),
4900
- FieldPanel('background_image_fundo'),
4923
+ FieldPanel('imagem_fundo'),
4924
+ FieldPanel('navbar'),
4925
+ FieldPanel('footer'),
4926
+ FieldPanel('background_image_fundo'),
4901
4927
  ], heading="Conteúdo do Header"),
4902
4928
 
4903
- FieldPanel('configuracoes_votacao'),
4929
+ # Nova seção para reCAPTCHA
4930
+ MultiFieldPanel([
4931
+ FieldPanel('exigir_recaptcha'),
4932
+ FieldPanel('texto_pre_recaptcha'),
4933
+ FieldPanel('texto_pos_recaptcha'),
4934
+ ], heading="Configurações do reCAPTCHA"),
4935
+
4936
+ FieldPanel('conteudo_pagina'),
4937
+ FieldPanel('configuracoes_votacao'),
4904
4938
 
4905
4939
  MultiFieldPanel([
4906
4940
  FieldPanel('mostrar_progresso'),
@@ -4920,16 +4954,29 @@ class SistemaVotacaoPage(Page):
4920
4954
 
4921
4955
  def get_context(self, request):
4922
4956
  context = super().get_context(request)
4923
-
4924
- # Buscar categorias ativas
4957
+
4958
+ # Adicionar configuração do reCAPTCHA ao contexto
4959
+ context.update({
4960
+ 'exigir_recaptcha': self.exigir_recaptcha,
4961
+ 'recaptcha_config': {
4962
+ 'tema': 'light',
4963
+ 'tamanho': 'normal',
4964
+ 'css_classes': 'text-center my-4'
4965
+ }
4966
+ })
4967
+
4968
+ # SEMPRE carregar dados de votação (sem verificação de reCAPTCHA)
4969
+ print("✅ Carregando dados de votação...")
4970
+
4971
+ # Buscar categorias ativas
4925
4972
  categorias = CategoriaVotacao.objects.filter(ativo=True).order_by('ordem')
4926
-
4927
- # Buscar projetos por categoria
4973
+
4974
+ # Buscar projetos por categoria
4928
4975
  projetos_por_categoria = {}
4929
4976
  for categoria in categorias:
4930
4977
  projetos = categoria.projetos.filter(ativo=True)
4931
-
4932
- # Aplicar ordenação
4978
+
4979
+ # Aplicar ordenação
4933
4980
  if self.ordenacao_projetos == 'votos_desc':
4934
4981
  projetos = sorted(projetos, key=lambda p: p.total_votos, reverse=True)
4935
4982
  elif self.ordenacao_projetos == 'votos_asc':
@@ -4940,36 +4987,37 @@ class SistemaVotacaoPage(Page):
4940
4987
  projetos = projetos.order_by('-created_at')
4941
4988
  else: # 'ordem'
4942
4989
  projetos = projetos.order_by('ordem', 'titulo')
4943
-
4990
+
4944
4991
  projetos_por_categoria[categoria] = projetos
4945
-
4946
- # Estatísticas gerais
4992
+
4993
+ # Estatísticas gerais
4947
4994
  total_categorias = categorias.count()
4948
4995
  total_projetos = ProjetoVotacao.objects.filter(ativo=True).count()
4949
4996
  total_votos = VotoRegistrado.objects.count()
4950
-
4997
+
4998
+ # Adicionar todos os dados ao contexto
4951
4999
  context.update({
4952
- 'categorias': categorias,
4953
- 'projetos_por_categoria': projetos_por_categoria,
4954
- 'total_categorias': total_categorias,
4955
- 'total_projetos': total_projetos,
4956
- 'total_votos': total_votos,
4957
- 'votacao_ativa': self.is_votacao_ativa(),
4958
- })
4959
-
5000
+ 'categorias': categorias,
5001
+ 'projetos_por_categoria': projetos_por_categoria,
5002
+ 'total_categorias': total_categorias,
5003
+ 'total_projetos': total_projetos,
5004
+ 'total_votos': total_votos,
5005
+ })
5006
+
5007
+ context['votacao_ativa'] = self.is_votacao_ativa()
4960
5008
  return context
4961
5009
 
4962
5010
  def is_votacao_ativa(self):
4963
5011
  """Verifica se a votação está ativa baseado nas configurações"""
4964
5012
  if not self.votacao_ativa:
4965
5013
  return False
4966
-
5014
+
5015
+ from django.utils import timezone
4967
5016
  now = timezone.now()
4968
-
5017
+
4969
5018
  if self.data_inicio and now < self.data_inicio:
4970
5019
  return False
4971
-
5020
+
4972
5021
  if self.data_fim and now > self.data_fim:
4973
5022
  return False
4974
-
4975
5023
  return True
@@ -2,6 +2,9 @@ import os
2
2
 
3
3
  BASE_DIR = os.path.dirname(os.path.abspath(__file__))
4
4
 
5
+ RECAPTCHA_PUBLIC_KEY = "6Lf_9MMrAAAAAOAsVXk8F5scxr6vsZJzC2jJnGHb"
6
+ RECAPTCHA_PRIVATE_KEY = "6Lf_9MMrAAAAAJqd_uA1_ekq3F-bD24KRhBcfKCF"
7
+
5
8
  WAGTAIL_404_TEMPLATE = '404.html'
6
9
 
7
10
  STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
@@ -18,6 +21,7 @@ TEMPLATES = [
18
21
  "django.contrib.auth.context_processors.auth",
19
22
  "django.contrib.messages.context_processors.messages",
20
23
  "enap_designsystem.context_processors.navbar_context",
24
+ "enap_designsystem.context_processors.recaptcha_context",
21
25
  ],
22
26
  },
23
27
  },
@@ -25,7 +25,7 @@
25
25
  {% if value.cards %}
26
26
  <div class="secao-cartoes {{ value.grid_tipo }}">
27
27
  {% for card_block in value.cards %}
28
- {% if card_block.block_type == 'card' %}
28
+ {% if card_block.block_type == 'card_apresentacao' %}
29
29
  <div class="secao-cartao">
30
30
  <!-- Ícone -->
31
31
  {% if card_block.value.icone %}