Repositório: conn2flow — [REDACTED]
Status: implemented-validated
Intake: req-196
Live Todo List
-
[x] Criar migração de
usuarios_perfis.pagina_inicialepaginas.layouts_users_profiles. -
[x] Organizar
usuarios-perfisem abas e implementar autocomplete AJAX de páginas ativas, com busca limitada no servidor. -
[x] Gravar e recuperar a rota inicial do perfil e usar a rota ativa após login, com fallback
dashboard/. -
[x] Implementar toggle, repetidor e gravação validada em
admin-paginasepublisher-pages, incluindo clone. -
[x] Usar componentes de recursos bilíngues para HTML,
gestor_incluir_bibliotecapara a biblioteca einterface_formulario_campospara os selects Fomantic-UI de Layout e Perfil. -
[x] Aplicar o layout do perfil no roteador e preservar o layout padrão para visitantes ou perfis sem mapeamento.
-
[x] Serializar e recuperar o mapeamento em
PaginasData.jsone manifests de páginas. -
[x] Executar sincronização, minificação, PHPUnit, Vitest e verificações de sintaxe/diff.
-
[x] Aplicar e reverter a migração Phinx em MariaDB isolado, preservando registros legados.
-
[x] Publicar no ambiente de teste
[REDACTED], inspecionar os formulários no navegador autenticado e confirmar gravação no banco. -
[x] Remover os registros temporários criados na homologação.
Contrato implementado
usuarios-perfis grava em pagina_inicial o caminho de uma página ativa do idioma atual. O campo de busca solicita ao backend resultados após dois caracteres, limita a busca a 20 páginas e não carrega todas as páginas no formulário. O login consulta novamente a rota e usa dashboard/ quando ela não existe ou está inativa; um destino local salvo na sessão tem precedência.
O mapeamento é um objeto JSON cujas chaves são IDs de layout e cujos valores são IDs de perfil. layout_id continua sendo o fallback. Ao salvar, o servidor só aceita pares ativos do idioma atual. Desligar o toggle grava NULL. O roteador usa o layout mapeado apenas quando o perfil autenticado corresponde a um par.
O compilador só emite layouts_users_profiles quando o manifest declara a propriedade. Assim, sincronizar manifests legados não apaga mapeamentos feitos no Gestor. A recuperação converte o JSON SQL em objeto e omite valores nulos.
Os componentes layout-profile-mapping e layout-profile-row pertencem aos recursos de admin-paginas e publisher-pages em pt-br e en. O autocomplete também usa um componente bilíngue de usuarios-perfis. A biblioteca paginas-layouts-perfis está registrada em gestor/config.php e os módulos a carregam com gestor_incluir_biblioteca. Os selects de Layout e Perfil são gerados por interface_formulario_campos e inicializados com Fomantic-UI.
Evidências
-
php cli/c2f.php resources:sync: exit 0, 2.924 recursos compilados, incluindo os dez componentes novos. Publicação opcional emdist/avisou quePUBLIC_PATHnão está definido. -
php cli/c2f.php assets:minify --verificar: exit 0, nenhum derivado JS desatualizado.git diff --check: exit 0. -
PHPUnit completo: 1.289 testes, 10.152 asserções, 4 ignorados, exit 0. A suíte emitiu 4 depreciações e 2 depreciações do PHPUnit.
Req196LayoutPorPerfilTest: 6 testes, 16 asserções. -
Vitest completo: 34 arquivos, 455 testes, exit 0. Inclui teste do autocomplete AJAX e testes dos repetidores dos dois CRUDs.
-
Migração Phinx 0.16.10 aplicada e revertida no MariaDB 11.8.8 isolado
conn2flow_req196_test:paginas.layouts_users_profileseraLONGTEXT NULL,usuarios_perfis.pagina_inicialeraVARCHAR NULL; registros legados permaneceram íntegros. O banco descartável foi removido. -
Teste PHP em tabelas mínimas de outro banco descartável: 11 verificações passaram para validação dos pares Layout/Perfil, destino inicial e fallbacks. O banco foi removido.
-
project:update-all [REDACTED]: exit 0 em oito estágios, incluindo sincronização do Core, recursos, CSS e minificação. O transporte cwRsync foi ajustado para converter caminhos nativosC:/...em/cygdrive/c/...; isso desbloqueou o pipeline no Windows. -
Playwright autenticado em
[REDACTED]:usuarios-perfis/adicionar/,admin-paginas/adicionar/epublisher-pages/adicionar/retornaram HTTP 200 sem erros de console. A aba Acesso e o autocomplete apareceram; busca pordashtrouxe oito sugestões e selecionoudashboard/. O formulário não continha um select com centenas de páginas. -
Playwright criou um perfil temporário pela interface; SQL confirmou
pagina_inicial=dashboard/; a edição recarregou o valor e o rótulo correto. O registro foi removido. -
Playwright acionou os toggles de ambos os CRUDs, verificou selects Fomantic-UI com 17 layouts e 7 perfis, adicionou/removeu linhas e gravou uma página temporária por CRUD. SQL confirmou
{"layout-administrativo-do-gestor-3d":"administradores"}emlayouts_users_profilesdopublisher-pages; noadmin-paginas, desligar o toggle na edição gravouNULL. -
Para uma página temporária aberta a visitantes, a rota autenticada usou o layout administrativo 3D e a rota anônima usou o layout padrão. Antes da limpeza, SQL confirmou ausência de vínculos das páginas em
paginas_301/social_postse do perfil emusuarios. Uma transação removeu os dois registros de página, o vínculopublisher_pagese o perfil; a contagem final das páginas temporárias foi zero.
Limites
O desvio pós-login foi exercitado por testes PHP com banco isolado nos casos de rota válida e fallback. Não foi feito login interativo com senha de um usuário temporário no Lab; a sessão administrativa de teste foi obtida por auth:cookie. Nenhum deploy de produção ou alteração no [REDACTED] foi feito após a orientação do usuário.
O arquivamento SDD da regra dos 10 moveu req-186.md e BATCH-190.md para archive/ e reescreveu sete links. A rotina apontou seis links relativos antigos já quebrados em backlog e arquivos históricos, sem relação com o BATCH-200.