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.
- enap_designsystem/blocks/__init__.py +6 -0
- enap_designsystem/blocks/form.py +243 -2
- enap_designsystem/blocks/html_blocks.py +316 -6
- enap_designsystem/blocks/semana_inovacao.py +1 -0
- enap_designsystem/context_processors.py +30 -6
- enap_designsystem/migrations/0395_formulariopage_enable_scoring_and_more.py +106 -0
- enap_designsystem/migrations/0396_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51263 -0
- enap_designsystem/migrations/0397_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51718 -0
- enap_designsystem/migrations/0398_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51718 -0
- enap_designsystem/migrations/0399_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51718 -0
- enap_designsystem/migrations/0400_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +51718 -0
- enap_designsystem/migrations/0401_alter_areaaluno_body_alter_cursoeadpage_curso_and_more.py +52692 -0
- enap_designsystem/migrations/0402_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +52082 -0
- enap_designsystem/migrations/0403_alter_areaaluno_body_alter_enapcomponentes_body_and_more.py +52802 -0
- enap_designsystem/migrations/0404_sistemavotacaopage_conteudo_pagina.py +253 -0
- enap_designsystem/migrations/0405_sistemavotacaopage_exigir_recaptcha_and_more.py +41 -0
- enap_designsystem/models.py +94 -46
- enap_designsystem/settings.py +4 -0
- enap_designsystem/templates/enap_designsystem/blocks/apresentacao_simple_block.html +1 -1
- enap_designsystem/templates/enap_designsystem/blocks/cards_titles.html +309 -0
- enap_designsystem/templates/enap_designsystem/blocks/clientes_block.html +1 -1
- enap_designsystem/templates/enap_designsystem/blocks/cpnu_dashboard_block.html +5 -0
- enap_designsystem/templates/enap_designsystem/blocks/logos_simple_block.html +329 -0
- enap_designsystem/templates/enap_designsystem/blocks/numeros_block.html +195 -0
- enap_designsystem/templates/enap_designsystem/blocks/page/pagenoticias_block.html +6 -0
- enap_designsystem/templates/enap_designsystem/blocks/recaptcha.html +146 -126
- enap_designsystem/templates/enap_designsystem/form_templates/formulario_page.html +1 -0
- enap_designsystem/templates/enap_designsystem/sistema_votacao_page.html +583 -543
- enap_designsystem/views.py +1 -1
- enap_designsystem/wagtail_hooks.py +390 -9
- {wagtail_enap_designsystem-1.2.1.129.dist-info → wagtail_enap_designsystem-1.2.1.131.dist-info}/METADATA +1 -1
- {wagtail_enap_designsystem-1.2.1.129.dist-info → wagtail_enap_designsystem-1.2.1.131.dist-info}/RECORD +35 -21
- {wagtail_enap_designsystem-1.2.1.129.dist-info → wagtail_enap_designsystem-1.2.1.131.dist-info}/WHEEL +0 -0
- {wagtail_enap_designsystem-1.2.1.129.dist-info → wagtail_enap_designsystem-1.2.1.131.dist-info}/licenses/LICENSE +0 -0
- {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
|
+
]
|
enap_designsystem/models.py
CHANGED
|
@@ -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
|
-
|
|
4794
|
-
|
|
4795
|
-
|
|
4796
|
-
|
|
4797
|
-
|
|
4798
|
-
|
|
4799
|
-
|
|
4800
|
-
|
|
4801
|
-
|
|
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
|
-
|
|
4876
|
-
|
|
4877
|
-
|
|
4878
|
-
|
|
4879
|
-
|
|
4880
|
-
|
|
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
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
4900
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4953
|
-
|
|
4954
|
-
|
|
4955
|
-
|
|
4956
|
-
|
|
4957
|
-
|
|
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
|
enap_designsystem/settings.py
CHANGED
|
@@ -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 == '
|
|
28
|
+
{% if card_block.block_type == 'card_apresentacao' %}
|
|
29
29
|
<div class="secao-cartao">
|
|
30
30
|
<!-- Ícone -->
|
|
31
31
|
{% if card_block.value.icone %}
|