Estrutura real do módulo
Estrutura confirmada no ZIP. Observação: este painel é uma área reduzida (cliente/profissional) e possui apenas 3 módulos no menu.
sistema/painel_cliente/
├─ .htaccess
├─ index.php
├─ verificar.php
├─ logout.php
├─ editar-perfil.php
├─ css/
├─ js/
├─ img/
├─ images/
├─ fonts/
├─ DataTables/
├─ paginas/
│ ├─ agendamentos.php
│ ├─ planos.php
│ ├─ receber.php
│ ├─ agendamentos/
│ │ └─ listar.php
│ ├─ planos/
│ │ └─ listar.php
│ └─ receber/
│ └─ listar.php
└─ rel/
├─ comprovante_class.php
├─ comprovante_html.php
├─ recibo.php
└─ recibo_html.php
Padrão BarberBot: páginas “wrapper” (
paginas/<modulo>.php) cuidam do layout e carregam
o conteúdo via paginas/<modulo>/listar.php (AJAX).
Rotas e navegação (.htaccess + pag)
O arquivo .htaccess reescreve rotas amigáveis para index.php?pag=....
Regras encontradas:
RewriteRule ^agendamentos$ index.php?pag=agendamentos [L] RewriteRule ^planos$ index.php?pag=planos [L] RewriteRule ^receber$ index.php?pag=receber [L] RewriteRule ^whatsapp$ index.php?pag=whatsapp [L] RewriteRule ^comanda$ index.php?pag=comanda [L] RewriteRule ^usuarios$ index.php?pag=usuarios [L] RewriteRule ^funcionarios$ index.php?pag=funcionarios [L]
Ponto de atenção: o
.htaccess inclui rotas para whatsapp, comanda, usuarios e funcionarios,
mas não existem wrappers correspondentes em paginas/ neste pacote. Se acessar essas rotas, o include do módulo falha.
Recomendação: manter apenas as rotas realmente suportadas (agendamentos, planos, receber), ou criar os módulos.
Segurança e sessão
verificar.phpbloqueia acesso quando$_SESSION['id']não existe.- Existe um segundo check de sessão:
$_SESSION['aut_token_505052022']deve bater com um token fixo (hard-coded no arquivo). logout.phpencerra a sessão e redireciona para../acesso.php.
Recomendação de segurança: evitar token hard-coded em arquivo público.
Use token gerado por usuário/sessão, ou mova o valor para ambiente/config (fora do repositório) e regenere o token se o sistema for exposto.
index.php (layout + router)
- Carrega
../conexao.phpe executarequire_once("verificar.php"). - Tenta carregar
security.phpse existir (neste pacote não vem incluso). - Define o módulo pelo parâmetro
pag(padrão:agendamentos). - Inclui o conteúdo com:
require_once("paginas/".$pag.".php").
Ponto crítico: o valor de
pag não possui allowlist no código atual.
Por segurança, implemente allowlist (ex.: ['agendamentos','planos','receber']) e ignore qualquer outra entrada.
AJAX (padrão do painel)
O padrão geral de carregamento é:
paginas/<modulo>.php define var pag = "..." e o JS chama paginas/<pag>/listar.php,
renderizando o HTML dentro do elemento #listar.
Contratos de retorno (strings)
- Exclusão padrão: retorno exatamente
Excluído com Sucesso - Alteração de status: retorno exatamente
Alterado com Sucesso - Salvar padrão: retorno exatamente
Salvo com Sucesso
Importante: neste painel, os módulos atuais quase não usam os endpoints genéricos (
salvar.php, excluir.php, mudar-status.php)
dentro de paginas/<modulo>/. Se você criar novos módulos e quiser reaproveitar js/ajax.js, implemente esses endpoints seguindo os contratos.
Módulos existentes (paginas/)
1) Agendamentos
- Wrapper:
paginas/agendamentos.php - Listagem:
paginas/agendamentos/listar.php - Cancelamento: o wrapper implementa
function excluirAgd(id)e chamaajax/excluir.phpvia POST. - DataTables: tabela com
id="tabela", sem ordenação e comstateSave.
2) Planos (Assinaturas)
- Wrapper:
paginas/planos.php - Listagem:
paginas/planos/listar.php - Consulta pagamento PIX: chama
../../../../pagamentos/consultar_pagamento.phpquando háref_pixe o status ainda não é pago. - Baixa automática: tenta chamar
aprovar_plano.php(via cURL).
Pendência detectada:
aprovar_plano.php não existe neste pacote do painel_cliente.
Sem esse endpoint, a baixa automática não acontece (dependência externa / arquivo ausente).
3) Receber (Contas do cliente)
- Wrapper:
paginas/receber.php - Listagem:
paginas/receber/listar.php - Anexos: link aponta para
../painel/img/contas/<arquivo>(depende do painel admin existir nesse caminho). - Link de pagamento: rota
../../conta/<id>.
Perfil (editar-perfil.php)
editar-perfil.phprecebe POST e faz UPDATE na tabelaclientesusando PDO parametrizado.- O front costuma validar sucesso pelo texto retornado (ex.:
Editado com Sucesso).
Pontos críticos de manutenção:
- O arquivo aceita
idvia POST e não compara com$_SESSION['id']. Recomendado: validar que o cliente só edita o próprio perfil. - A senha é sempre atualizada: se
senhavier vazia, o sistema grava um hash de string vazia. Recomendado: só atualizar senha se vier preenchida.
Relatórios e comprovantes (rel/)
O diretório rel/ contém páginas HTML/PHP de recibos e comprovantes (alguns com classe/geração).
Arquivos presentes:
comprovante_class.phpcomprovante_html.phprecibo.phprecibo_html.php
Dica: verifique dependências de geração (ex.: bibliotecas PDF, caminhos absolutos e permissões de leitura de imagens)
antes de mover o painel para outro servidor/pasta.
Bibliotecas e assets
CSS carregado pelo index.php
- css/bootstrap.min.css - css/animate.css - css/style.css - css/colors/blue.css - css/custom.css - css/sidebar-nav.min.css - css/metisMenu.min.css - css/Monthly.css - css/select2.min.css - DataTables/datatables.min.css
JS carregado pelo index.php
- js/jquery.min.js - js/bootstrap.min.js - js/metisMenu.min.js - js/jquery.slimscroll.js - js/waves.js - js/custom.min.js - js/select2.min.js - js/chart.min.js - js/Monthly.js - js/ajax.js - DataTables/datatables.min.js - js/jquery.mask.min.js
Externo (CDN)
Scripts:
- https://unpkg.com/lucide@latest
Links:
- //fonts.googleapis.com/css?family=Poppins:300,400,500,600,700
Bibliotecas identificadas: Bootstrap, jQuery, DataTables, Select2, MetisMenu, SlimScroll, Waves, Chart.js, jQuery Mask e plugin Monthly (calendário).
Checklist para o próximo dev
- Login: garantir
$_SESSION['id']+ token de sessão (aut_token_505052022) corretos no fluxo de autenticação. - Allowlist do router: travar
pagem uma lista segura antes dorequire_once. - Rotas: revisar
.htaccesse remover rotas sem módulo (ou criar os módulos faltantes). - Planos: providenciar o endpoint externo
aprovar_plano.php(ausente no pacote). - Perfil: validar ID do POST contra a sessão + não atualizar senha quando vazia.
- Dependências: confirmar caminho de
ajax/excluir.php,pagamentos/consultar_pagamento.phpe anexos em../painel/img/contas/.