HEX
Server: LiteSpeed
System: Linux cp01.bhostbrasil.com.br 5.14.0-611.16.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Dec 22 03:40:39 EST 2025 x86_64
User: onlyfibr (1083)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: /home/onlyfibr/public_html/cadastro/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>