File: /home/onlyfibr/public_html/assinar/admin/gerenciar_precadastros.php
<?php
session_start(); // Usado para feedback pós-redirect e talvez CSRF
// Removida dependência direta do $pdo aqui, mas config/functions ainda são necessários para API
require_once '../config.php'; // Constantes API (BASE_URL, APP_TOKEN, APP_NAME)
require_once '../functions.php'; // postApiJson(), getAPI(), cleanCpfCnpj()
$pageTitleAdmin = 'Gerenciar Pré-Cadastros';
// Define o caminho para o arquivo de headers
$caminho_header = 'includes/header_admin.php'; // <<< Caminho para o Footer Admin
// Verifica se o arquivo existe no caminho especificado
if (file_exists($caminho_header)) {
// Se o arquivo existir, inclui ele (apenas uma vez)
require_once $caminho_header;
} else {
echo "Págica Header ainda não existe!"; // Exemplo de comentário HTML para debug
}
// --- Variáveis e Filtros ---
$lista_cadastros = [];
$filtro_status = $_GET['status'] ?? 'pendente';
$filtro_busca = trim($_GET['busca'] ?? '');
// Mapeamentos (adapte se ENUM mudou)
$status_validos = ['pendente' => 'Pendente', 'em_analise' => 'Em Análise', /*...*/ 'processado_sucesso' => 'API OK', 'processado_erro' => 'API Erro', 'fechado' => 'Fechado'];
// --- PROCESSAR AÇÕES POST (Excluir, Mudar Status) ---
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $pdo) {
$id_acao = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT);
$acao = $_POST['action'];
if ($id_acao) {
try {
if ($acao === 'delete' && isset($_POST['confirm_delete'])) {
// Excluir
$sqlDelete = "DELETE FROM precadastros WHERE id = :id";
$stmtDelete = $pdo->prepare($sqlDelete);
$stmtDelete->bindParam(':id', $id_acao, PDO::PARAM_INT);
$stmtDelete->execute();
if ($stmtDelete->rowCount() > 0) {
$mensagem_sucesso_acao = "Pré-cadastro #$id_acao excluído.";
} else {
$mensagem_erro_acao = "Pré-cadastro #$id_acao não encontrado para exclusão.";
}
// Log...
} elseif ($acao === 'update_status' && isset($_POST['novo_status'])) {
// Atualizar Status
$novo_status = $_POST['novo_status'];
if (array_key_exists($novo_status, $status_validos)) { // Valida status
$sqlUpdate = "UPDATE precadastros SET status_processamento = :status WHERE id = :id";
$stmtUpdate = $pdo->prepare($sqlUpdate);
$stmtUpdate->bindParam(':status', $novo_status); // Nome do ENUM no MySQL
$stmtUpdate->bindParam(':id', $id_acao, PDO::PARAM_INT);
$stmtUpdate->execute();
if ($stmtUpdate->rowCount() > 0) {
$mensagem_sucesso_acao = "Status do pré-cadastro #$id_acao atualizado.";
} else {
$mensagem_erro_acao = "Pré-cadastro #$id_acao não encontrado ou status já era o selecionado.";
}
// Log...
} else {
$mensagem_erro_acao = "Status inválido selecionado.";
}
}
} catch (\PDOException $e) {
$mensagem_erro_acao = "Erro ao processar ação: " . $e->getMessage();
error_log("Erro Ação Admin Precadastro ID $id_acao: " . $e->getMessage());
}
}
}
// --- Busca Cadastros no Banco de Dados (MySQL) ---
if ($pdo) {
try {
$sql = "SELECT id, data_envio, tipo, nome, cpf_cnpj, email, celular, cidade, estado,
plano_id_selecionado, status_processamento, observacao
FROM precadastros "; // <<< Tabela correta
// Filtros (WHERE clause similar ao PGSQL, LIKE funciona bem no MySQL)
$params = [];
$where = [];
$where[] = " tipo = :tipo ";
$params[':tipo'] = 'precadastro';
if (!empty($filtro_status) && $filtro_status !== 'todos') {
$where[] = " status_processamento = :status ";
$params[':status'] = $filtro_status;
}
if (!empty($filtro_busca)) {
$where[] = " (nome LIKE :busca OR cpf_cnpj LIKE :busca OR email LIKE :busca)";
$params[':busca'] = '%' . $filtro_busca . '%';
}
if (!empty($where)) {
$sql .= " WHERE " . implode(" AND ", $where);
}
$sql .= " ORDER BY data_envio DESC";
// Paginação futura...
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$lista_cadastros = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (\PDOException $e) { /* ... tratamento erro busca ... */
}
}
// Função de formatação de status (pode ir para functions.php)
if (!function_exists('formatarStatusProcessamentoAdmin')) {
function formatarStatusProcessamentoAdmin($status)
{
global $status_validos; // Pega o array definido acima
return htmlspecialchars($status_validos[$status] ?? ucfirst($status));
}
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pré-Cadastro de Novo Assinante</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom CSS -->
<link href="../css/style.css" rel="stylesheet">
<!-- Inclui Google Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<!-- Biblioteca jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h1 class="page-title">Gerenciar Pré-Cadastros</h1>
<?php if (!empty($mensagem_erro_acao)): ?> <div class="alert alert-danger"><?php echo $mensagem_erro_acao; ?></div> <?php endif; ?>
<?php if (!empty($mensagem_sucesso_acao)): ?> <div class="alert alert-success"><?php echo $mensagem_sucesso_acao; ?></div> <?php endif; ?>
<?php if (!empty($mensagem_erro)): ?> <div class="alert alert-warning"><?php echo $mensagem_erro; ?></div> <?php endif; ?>
<?php // Formulário de Filtro (igual antes, mas aponta para este arquivo)
?>
<form method="get" action="gerenciar_precadastros.php" class="row g-3 ...">...</form>
<?php // Tabela de Pré-Cadastros
?>
<div class="table-responsive">
<table class="table_cadastros">
<thead> Cadastros e Assinaturas<th>Ações</th>
</thead>
<tbody>
<?php if (empty($lista_cadastros)): ?> ... Nenhuma encontrada ... <?php endif; ?>
<?php foreach ($lista_cadastros as $cadastro): ?>
<tr>
<td><?php echo $cadastro['id']; ?></td>
<td><?php echo date('d/m/Y H:i', strtotime($cadastro['data_envio'])); // Formata data MySQL
?></td>
<td><?php echo htmlspecialchars($cadastro['nome']); ?></td>
<?php // ... outras colunas ...
?>
<td><?php echo formatarStatusProcessamentoAdmin($cadastro['status_processamento']); ?></td>
<td>
<?php // Formulário para Atualizar Status
?>
<form method="post" action="" style="display:inline-block;" class="me-1">
<input type="hidden" name="action" value="update_status">
<input type="hidden" name="id" value="<?php echo $cadastro['id']; ?>">
<select name="novo_status" class="form-select form-select-sm d-inline-block w-auto" onchange="this.form.submit()">
<option value="">Mudar para...</option>
<?php foreach ($status_validos as $enum_val => $texto): ?>
<?php if ($enum_val != $cadastro['status_processamento']): // Não mostra o status atual como opção
?>
<option value="<?php echo $enum_val; ?>"><?php echo htmlspecialchars($texto); ?></option>
<?php endif; ?>
<?php endforeach; ?>
</select>
<?php // Botão submit oculto ou pode usar JS para submeter onchange
?>
<noscript><button type="submit" class="btn btn-sm btn-warning">OK</button></noscript>
</form>
<?php // Botão Detalhes (Placeholder)
?>
<button type="button" class="btn btn-sm btn-info" onclick="alert('Ver detalhes ID <?php echo $cadastro['id']; ?>');">Detalhes</button>
<?php // Formulário para Excluir
?>
<form method="post" action="" style="display:inline-block;" onsubmit="return confirm('Confirmar exclusão do pré-cadastro #<?php echo $cadastro['id']; ?>?');">
<input type="hidden" name="action" value="delete">
<input type="hidden" name="id" value="<?php echo $cadastro['id']; ?>">
<input type="hidden" name="confirm_delete" value="1">
<button type="submit" class="btn btn-sm btn-danger">Excluir</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div> <?php // Fecha o .form-wrapper
?>
<!-- Bootstrap JS pode ser útil para validação ou outros componentes -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<!-- Custom JS -->
<script src="js/custom.js"></script>
<?php
// Define o caminho para o arquivo de rodapé
$caminho_rodape = 'includes/footer_admin.php'; // <<< Caminho para o Footer Admin
// Verifica se o arquivo existe no caminho especificado
if (file_exists($caminho_rodape)) {
// Se o arquivo existir, inclui ele (apenas uma vez)
require_once $caminho_rodape;
} else {
echo "Págica Footer ainda não existe!"; // Exemplo de comentário HTML para debug
}
?>
</body>
</html>