Descrição do Problema / Contexto
Este lote de trabalho visa expandir e robustecer o módulo de Formulários (forms) nas seguintes frentes:
-
Novos Tipos de Campos: Adicionar os tipos nativos HTML5 mais comuns ao construtor e renderizador:
-
password: Renderiza<input type="password">(segurança ao preencher senhas). -
date: Renderiza<input type="date">(calendário nativo). -
url: Renderiza<input type="url">(links com validação automática). -
hidden: Renderiza<input type="hidden">(campos ocultos com valor padrão).
-
-
Melhoria Progressiva de Interface no Frontend (
formulario.js): Em vez de forçar o uso de componentes visuais específicos (o que quebraria páginas públicas que utilizam Tailwind CSS em vez de Fomantic-UI), utilizaremos uma abordagem de Melhoria Progressiva (Progressive Enhancement):-
Baseline/Universal: Elementos nativos do HTML5 (
<input type="date">,<select>com estilo CSS do framework ativo) e funcionalidade Vanilla JS (alternador de senha universal). -
Enhanced (Fomantic-UI): Se a página carregar Fomantic-UI (
$.fn.calendarou$.fn.dropdown), os campos de data e selects ganham a interface avançada e o autocomplete nativo.
-
-
Limites e Configurações via Campo "Opções" (
options): Reaproveitar o campo "Opções" (options) do construtor de campos para configurar limites e diretivas de validação por tipo de dados, evitando a adição de novas colunas ao banco de dados:-
Para
textetextarea(Tamanho): Suportar as diretivas de tamanho de caracteresmin:Xemax:Y(ex:min:3\nmax:100). -
Para
number(Limites Numéricos): Suportar limite numérico de valoresmin:X,max:Ye incrementostep:Z(ex:min:18\nmax:100\nstep:1oumin:0\nmax:10\nstep:0.5). -
Para
date(Limites de Calendário): Suportar limites de data no formato ISOmin:YYYY-MM-DDemax:YYYY-MM-DD(ex:min:2026-01-01\nmax:2026-12-31). -
Para
hidden(Valor Padrão): O texto digitado nas opções representará o valor constante e padrão enviado pelo campo oculto.
-
Mudanças Necessárias
1. Interface Administrativa do Construtor de Formulários (conn2flow)
1.1. Modificação do JavaScript do Construtor (gestor/modulos/forms/forms.js)
-
Dropdown de Tipos: Na função
buildFieldRow, adicionar as opções:-
<option value="password">Password</option> -
<option value="date">Date</option> -
<option value="url">URL</option> -
<option value="hidden">Hidden</option>
-
-
Visibilidade e Placeholders da Caixa de Opções:
-
Habilitar a exibição da textarea de opções (
.forms-field-options) se o tipo forselect,radio,checkbox,hidden,text,textarea,numberoudate. -
Definir placeholders dinâmicos baseados no tipo de campo selecionado:
-
Se
hidden:'Valor padrão do campo'(en:'Default field value'). -
Se
textoutextarea:'min:3\nmax:100'(en:'min:3\nmax:100'). -
Se
number:'min:18\nmax:100\nstep:1'(en:'min:18\nmax:100\nstep:1'). -
Se
date:'min:2026-01-01\nmax:2026-12-31'(en:'min:2026-01-01\nmax:2026-12-31'). -
Se
select/radio/checkbox: manter o placeholder de lista padrão (valor:Rótulo).
-
-
Validação Estática: Rodar
node --checkno arquivo para garantir integridade.
2. Renderização do Widget Público (forms.widget.php em conn2flow)
2.1. Renderização de Inputs e Placeholders
-
Na função
forms_widget_render_field($template, $field):-
Identificar os novos tipos (
password,date,url,hidden) e direcioná-los para o bloco de inputs simples (type !== 'select' && type !== 'textarea' && type !== 'radio' && type !== 'checkbox'). -
Para o tipo
hidden, obter o valor padrão cadastrado nas opções e substituí-lo no placeholder[[item#value]]. Para os demais inputs, inicializar[[item#value]]como vazio. -
Para os tipos
text,textarea,numberedate, extrair os limites das opções (ex: linhas contendomin:X,max:Y,step:Z): -
text/textarea: Adicionar atributosminlength="X"emaxlength="Y". -
number: Adicionar atributosmin="X",max="Y"estep="Z". -
date: Adicionar atributosmin="YYYY-MM-DD"emax="YYYY-MM-DD". -
Mascaramento e Toggle de Senha (Vanilla): Se o tipo for
password, envelopar o input em uma estrutura que inclua o botão de alternar visibilidade com a classe.forms-password-togglecontendo o ícone<i class="eye link icon"></i>(compatível com Fomantic e com CSS customizado Vanilla).
-
3. Validações e Processamento no Backend (formulario.php em conn2flow)
3.1. Validações de Comprimento e Formato
-
Na biblioteca
gestor/bibliotecas/formulario.php:-
Limites Universais: Adicionar
passwordeurlna lista de campos limitados a254caracteres. -
Validação de URL: Se o tipo de campo for
urle estiver preenchido, validar usandofilter_var($value, FILTER_VALIDATE_URL). Se inválido, disparar erro (análogo a e-mail inválido). -
Validações Customizadas via Opções:
-
Parsear o campo
optionspara encontrar padrõesmin:X,max:Yestep:Z. -
Se
textoutextarea: Validar o comprimento de caracteres. Se menor queminou maior quemax, retornar erro correspondente. -
Se
number: Validar o valor numérico. Se$value < minou$value > max, retornar erro correspondente (ex:"O campo {label} deve ter valor entre X e Y."). -
Se
date: Validar a data. Se$value < minou$value > max, retornar erro correspondente (ex:"O campo {label} deve ter uma data entre X e Y.").
-
4. Validações e Interface no Frontend (formulario.js em conn2flow)
4.1. Melhoria Progressiva de Componentes (Fomantic-UI / Tailwind)
-
Ao inicializar o formulário (
initFormController):-
Date Picker: Verificar se a biblioteca do calendário Fomantic está disponível (
typeof $.fn.calendar !== 'undefined'). Em caso positivo, inicializar o date picker sobre elementos.forms-date-pickerformatando a saída para ISOYYYY-MM-DD. Caso contrário, manter o comportamento nativo do navegador para<input type="date">. -
Dropdowns: Se
typeof $.fn.dropdown !== 'undefined', inicializar dropdowns interativos nos selects com a classe.ui.dropdown. Caso contrário, manter<select>nativo. -
Password Toggle (Vanilla): Ligar um event listener genérico no formulário para escutar cliques em
.forms-password-toggle. Quando clicado, buscar o input de senha adjacente e inverter o atributotypeentrepasswordetext, alternando a classe do ícone de olho (eye/eye slash).
-
4.2. Validações Customizadas no Cliente
-
Parsear propriedades
min,maxestepe impedir a submissão do formulário caso as regras de limite (comprimento, valor numérico ou data) sejam violadas, exibindo mensagens apropriadas na interface.
Validação e Testes
-
Verificação Estática:
-
Executar
node --checknos arquivos JS ephp -lnos arquivos PHP modificados.
-
-
Execução de Testes Unitários:
-
Rodar
composer teste confirmar aprovação total (sem regressões).
-
-
Validação Manual:
-
Criar formulário com os novos tipos e limites:
-
Campo
textcommin:5\nmax:15. -
Campo
numbercommin:18\nmax:120\nstep:1. -
Campo
datecommin:2026-06-01\nmax:2026-06-30. -
Campo
hiddencom valor padrão.
-
-
Abrir o formulário em ambiente com Tailwind CSS e outro com Fomantic-UI:
-
Validar que o comportamento de calendário, dropdown e alternador de senha são funcionais em ambos.
-
Tentar submeter valores menores ou maiores que os limites configurados e checar se o sistema barra e exibe as mensagens de erro correspondentes (tamanho, limite de valores ou faixa de datas) tanto no frontend quanto no backend.
-
-