Descrição do Problema / Contexto
Este lote de trabalho visa resolver duas frentes principais de melhoria de arquitetura e dinamicidade do sistema:
-
Desacoplamento e Parametrização de Widgets no Editor HTML: A inclusão dos scripts de widget (
*.widget.js) no preview do Editor HTML está hardcoded no arquivo globalhtml-editor-interface.js. Queremos passar a lista de scripts a incluir parametrizada a partir de cada módulo. Adicionalmente, com a eliminação doforms.widget.jsno lote anterior, os formulários no preview do editor deixaram de funcionar, pois as variáveis dinâmicas injetadas pelo backend não são expostas em conexões AJAX. Precisamos recriar oforms.widget.jsde modo que ele recupere essas variáveis via chamada AJAX dedicada e inicialize os scripts de formulário dinamicamente no iframe de preview. -
Dinamização do Mapeamento de Planos e Cadastros no Módulo Subscriptions (Projeto [REDACTED]): O mapeamento entre formulários e planos (
$formToPlane$planMapping) está hardcoded nos controladores de assinatura. Além disso, as regras para formulários de cadastro (signup) e vinculação de perfis de usuário também estão rígidas. Queremos mover essas configurações para o banco de dados, mapeando-as diretamente no CRUD de Planos de Assinatura (subscriptions-plans) com interface gráfica interativa (autocomplete de perfis de usuário e mapeamento dinâmico de campos do formulário para e-mail/senha).
Mudanças Necessárias
1. Parametrização de Scripts de Widget no Editor HTML (conn2flow)
1.1. Injeção de Parâmetros no Backend (gestor/bibliotecas/html-editor.php)
-
Modificar a função
html_editor_componente($params)para aceitar a chave'widget_js_include'em$params. -
Passar esse parâmetro para a injeção de variáveis JS
html_editorsob a chavewidget_js_include.
1.2. Leitura Dinâmica no Frontend (gestor/assets/interface/html-editor-interface.js)
-
Alterar a constante
WIDGET_SCRIPT_MODULESpara recuperar dinamicamente o valor degestor.html_editor.widget_js_include. -
Se não estiver definido, aplicar o fallback padrão contendo os 4 módulos:
{'galleries': true, 'publisher-index': true, 'menus': true, 'forms': true}.
1.3. Atualização dos Módulos Core (conn2flow)
-
Atualizar as chamadas de
html_editor_componentenos seguintes arquivos para passar o respectivo parâmetro:-
Forms (
gestor/modulos/forms/forms.php):'widget_js_include' => ['forms' => true] -
Menus (
gestor/modulos/menus/menus.php):'widget_js_include' => ['menus' => true] -
Galleries (
gestor/modulos/galleries/galleries.php):'widget_js_include' => ['galleries' => true] -
Publisher Index (
gestor/modulos/publisher-index/publisher-index.php):'widget_js_include' => ['publisher-index' => true]
-
2. Recriação do Script de Widget de Formulário (forms.widget.js & forms.widget.php)
2.1. Rota AJAX no Backend de Formulários (gestor/modulos/forms/forms.php)
-
Adicionar o caso
'forms-render-editor-html'no switch de opções AJAX de formulários. -
Criar a função
forms_ajax_render_editor_html()que lêform_idda requisição, chama a função de obtenção de dados no widget e retornaforms_js_varsno JSON de resposta.
2.2. Função de Obtenção de Configuração do Form (gestor/modulos/forms/forms.widget.php)
-
Criar a função
forms_render_editor_html($params)que extrai os esquemas de campos, componentes Fomantic/Tailwind, reCAPTCHA e redirecionamentos para oform_idsolicitado, retornando a mesma estrutura de array queformulario_controladorgera.
2.3. Controlador JavaScript do Widget (gestor/modulos/forms/forms.widget.js - [NEW])
-
Recriar o arquivo
forms.widget.js. -
No carregamento (preview iframe), varrer a página buscando
.conn2flow-formou._forms-submissions-controller. -
Para cada um, fazer uma chamada AJAX para o endpoint de formulários do admin solicitando a ação
forms-render-editor-htmlpara oform_id. -
Ao retornar com sucesso:
-
Registrar as configurações retornadas em
window.gestor.form[formId]. -
Carregar assincronamente (se não carregados) os scripts
interface.jseformulario.jspara ligar os eventos de submissão do formulário no preview.
-
3. Dinamização de Planos e Cadastro no Módulo Subscriptions ([REDACTED])
3.1. Migração de Banco de Dados ([REDACTED])
-
Criar uma nova migração Phinx (
20260710120000_add_signup_fields_to_subscriptions_plans.php) adicionando as seguintes colunas à tabelasubscriptions_plans:-
is_signup(boolean/tinyint, padrão 0) -
signup_field_email(string 100, null) -
signup_field_password(string 100, null) -
signup_field_password_confirm(string 100, null) -
signup_id_usuarios_perfis(integer, null)
-
3.2. Localizações do CRUD de Planos (gestor/modulos/subscriptions-plans/subscriptions-plans.json)
-
Adicionar chaves de variáveis de interface em
pt-breenpara os novos campos:label-is-signup,label-signup-field-email,label-signup-field-password,label-signup-field-password-confirm,label-signup-user-profile,search-profile-placeholder.
3.3. CRUD Administrativo (gestor/modulos/subscriptions-plans/subscriptions-plans.php)
-
Alterar as rotinas de inclusão e edição para salvar e carregar os 5 novos campos do banco de dados.
-
Na tela de edição, realizar a busca de perfil vinculado (
usuarios_perfis) para mandar a variável#perfil_name#ao HTML do autocomplete. -
Adicionar dois novos endpoints AJAX:
-
buscar-perfis: busca perfis de usuários (usuarios_perfis) por termo de busca via AJAX. -
buscar-form-campos: extrai campos ativos do JSON de um formulário (forms.fields_schema) e os retorna para povoar as opções de mapeamento de campos.
-
3.4. Templates HTML do CRUD (gestor/modulos/subscriptions-plans/resources/...)
-
Modificar os templates de adicionar e editar (em
pt-breen):-
Inserir checkbox para
is_signup("Plano de Cadastro"). -
Criar container condicional
.sig-signup-fields-containercontendo: -
Campo de autocomplete para buscar perfil de usuário a vincular (
data-target="perfis"). -
Três selects de mapeamento de campos: E-mail, Senha e Confirmação de Senha.
-
3.5. Javascript do CRUD (gestor/modulos/subscriptions-plans/subscriptions-plans.js)
-
Ligar escuta no checkbox
is_signuppara alternar a visibilidade do container de mapeamento de cadastro. -
Monitorar a seleção de formulário no autocomplete. Ao selecionar ou limpar, fazer requisição AJAX para
buscar-form-campose re-povoar os selects de mapeamento de campos de e-mail/senha.
3.6. Dinamização de Assinaturas e Checkout ([REDACTED])
-
subscriptions.php: Na função
subscriptions_checkout(), remover o array estático$planMappinge buscar dinamicamente oform_idna tabelasubscriptions_plansa partir do slug do plano ativo e do idioma. -
subscriptions.ajax.public.php:
-
Na função
subscriptions_ajax_forms_process(), remover o array estático$formToPlane buscar o registro correspondente ao formulário na tabelasubscriptions_plans. -
Se for um formulário de cadastro (
is_signup), recuperar dinamicamente as variáveis de email, senha e confirmação de senha configuradas para o plano. -
Na função
subscriptions_criar_usuario($dados), utilizar a colunasignup_id_usuarios_perfisconfigurada no plano para vincular o perfil correspondente ao usuário, mantendo fallback de slug se nulo.
-
Validação e Testes
-
Validação de Testes Unitários:
-
Rodar
composer testno projetoconn2flow. -
Rodar
composer testno projeto[REDACTED](caso existam testes).
-
-
Validação Manual:
-
No editor HTML de formulários do
conn2flow, checar se o formulário renderiza interativamente e responde a submissões no preview do iframe. -
Criar/editar um plano no
subscriptions-plansdo[REDACTED], habilitar "Plano de Cadastro", vincular a um perfil de usuário e associar a um formulário mapeando os campos de email/senha. Salvar e validar os dados no banco de dados. -
Efetuar fluxo de checkout no site público do
[REDACTED]para o plano criado e verificar que a conta de usuário é criada com o perfil dinamicamente atribuído.
-