HEX
Server: LiteSpeed
System: Linux cms560.hostnegar.com 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: ngbycoco (1137)
PHP: 8.2.29
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open, mail
Upload Files
File: /home/ngbycoco/public_html/wp-content/bo/admin.php
<?php
require_once __DIR__ . '/config.php';

// ============================================================
// ADMIN CHECK
// ============================================================
$tg = isset($_GET['tg']) ? (int)$_GET['tg'] : 0;
if ($tg != ADMIN_ID) {
    die('โ›” Access Denied');
}

if (!isset($pdo)) {
    die('Error: Database connection not established');
}

try {
    $stmt = $pdo->query("SELECT COUNT(*) FROM users");
    $totalUsers = $stmt->fetchColumn();

    $stmt = $pdo->query("SELECT * FROM users ORDER BY id DESC LIMIT 20");
    $users = $stmt->fetchAll();

    $stmt = $pdo->query("SELECT * FROM shop_requests WHERE status = 'pending'");
    $shopReqs = $stmt->fetchAll();

    $stmt = $pdo->query("SELECT * FROM withdraw_requests WHERE status = 'pending'");
    $withdrawReqs = $stmt->fetchAll();

    $stmt = $pdo->query("SELECT * FROM settings LIMIT 1");
    $settings = $stmt->fetch();
    
    $gameActive = $settings && $settings['game_started'] && time() < strtotime($settings['game_end']);

} catch (PDOException $e) {
    die('Database error: ' . $e->getMessage());
}

// ============================================================
// POST HANDLER
// ============================================================
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    try {
        $type = isset($_POST['type']) ? $_POST['type'] : '';
        $id = isset($_POST['id']) ? (int)$_POST['id'] : 0;
        $action = isset($_POST['action']) ? $_POST['action'] : '';

        if ($type == 'shop') {
            $stmt = $pdo->prepare("UPDATE shop_requests SET status = ? WHERE id = ?");
            $stmt->execute([$action == 'approve' ? 'approved' : 'rejected', $id]);
            
            if ($action == 'approve') {
                $req = $pdo->prepare("SELECT * FROM shop_requests WHERE id = ?");
                $req->execute([$id]);
                $r = $req->fetch();
                if ($r) {
                    $boostVal = $r['boost'] == '2x' ? 2 : 4;
                    $stmt = $pdo->prepare("UPDATE users SET boost = ?, boost_expiry = DATETIME('now', '+30 days') WHERE telegram_id = ?");
                    $stmt->execute([$boostVal, $r['telegram_id']]);
                }
            }
            header('Location: ?tg=' . ADMIN_ID);
            exit;
        }

        if ($type == 'withdraw') {
            $stmt = $pdo->prepare("UPDATE withdraw_requests SET status = ? WHERE id = ?");
            $stmt->execute([$action == 'process' ? 'processed' : 'failed', $id]);
            header('Location: ?tg=' . ADMIN_ID);
            exit;
        }

        if (isset($_POST['start_game'])) {
            $stmt = $pdo->query("SELECT * FROM settings LIMIT 1");
            $settings = $stmt->fetch();
            
            if (!$settings) {
                $stmt = $pdo->prepare("INSERT INTO settings (game_started, game_end) VALUES (?, ?)");
                $stmt->execute([date('Y-m-d H:i:s'), date('Y-m-d H:i:s', strtotime('+30 days'))]);
            } else {
                $stmt = $pdo->prepare("UPDATE settings SET game_started = ?, game_end = ?");
                $stmt->execute([date('Y-m-d H:i:s'), date('Y-m-d H:i:s', strtotime('+30 days'))]);
            }
            header('Location: ?tg=' . ADMIN_ID);
            exit;
        }
    } catch (PDOException $e) {
        die('Error processing request: ' . $e->getMessage());
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Admin Panel</title>
    <style>
        *{margin:0;padding:0;box-sizing:border-box}
        body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:#0a0618;color:#e0d6ff;padding:16px;min-height:100vh}
        .container{max-width:800px;margin:0 auto}
        h1{color:#a78bfa;font-size:24px;margin-bottom:20px;font-weight:700}
        h2{color:#d4c8ff;font-size:18px;margin:20px 0 12px 0;font-weight:600}
        .grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-bottom:20px}
        .card{background:rgba(120,80,200,0.06);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid rgba(160,120,255,0.08);border-radius:14px;padding:16px 18px}
        .card .num{font-size:28px;font-weight:700;color:#a78bfa}
        .card .label{font-size:13px;color:#6b5b8a;margin-top:4px}
        .card-item{background:rgba(120,80,200,0.04);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(160,120,255,0.06);border-radius:12px;padding:14px 16px;margin-bottom:10px}
        .flex{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px}
        .flex-row{display:flex;gap:8px;flex-wrap:wrap}
        .text-muted{color:#6b5b8a;font-size:13px}
        .text-small{font-size:12px;color:#4a3a6a}
        .badge{background:rgba(160,120,255,0.10);color:#a78bfa;padding:2px 10px;border-radius:12px;font-size:12px}
        .btn{padding:6px 16px;border:none;border-radius:8px;font-weight:600;font-size:13px;cursor:pointer;transition:opacity 0.2s}
        .btn:active{opacity:0.7}
        .btn-success{background:linear-gradient(135deg,#7c3aed,#6d28d9);color:#fff}
        .btn-danger{background:#cc3333;color:#fff}
        .btn-primary{background:linear-gradient(135deg,#7c3aed,#6d28d9);color:#fff}
        .status-pending{color:#fbbf24}
        .game-status{display:inline-block;padding:4px 14px;border-radius:20px;font-size:13px;font-weight:600}
        .game-active{background:rgba(52,211,153,0.15);color:#34d399}
        .game-inactive{background:rgba(251,191,36,0.15);color:#fbbf24}
        .divider{border-top:1px solid rgba(160,120,255,0.06);margin:20px 0}
        .wallet-address{word-break:break-all;font-size:13px;color:#a78bfa}
    </style>
</head>
<body>
<div class="container">
    <h1>โœฆ TonTastic Admin</h1>

    <div class="grid">
        <div class="card">
            <div class="num"><?= $totalUsers ?? 0 ?></div>
            <div class="label">Total Users</div>
        </div>
        <div class="card">
            <div class="num"><?= count($shopReqs ?? []) ?></div>
            <div class="label">Pending Shop</div>
        </div>
        <div class="card">
            <div class="num"><?= count($withdrawReqs ?? []) ?></div>
            <div class="label">Pending Withdrawals</div>
        </div>
        <div class="card">
            <div class="num">
                <span class="game-status <?= ($gameActive ?? false) ? 'game-active' : 'game-inactive' ?>">
                    <?= ($gameActive ?? false) ? '๐ŸŸข Active' : '๐Ÿ”ด Inactive' ?>
                </span>
            </div>
            <div class="label">Game Status</div>
        </div>
    </div>

    <div class="card-item">
        <div class="flex">
            <div>
                <strong>Game Control</strong>
                <div class="text-muted" style="font-size:13px;">
                    <?php if (isset($settings) && $settings && $settings['game_started']): ?>
                        Started: <?= $settings['game_started'] ?><br>
                        Ends: <?= $settings['game_end'] ?>
                    <?php else: ?>
                        Game not started yet
                    <?php endif; ?>
                </div>
            </div>
            <form method="POST">
                <button type="submit" name="start_game" class="btn btn-primary" <?= ($gameActive ?? false) ? 'disabled' : '' ?>>
                    ๐Ÿš€ Start Game
                </button>
            </form>
        </div>
    </div>

    <div class="divider"></div>

    <h2>๐Ÿ›’ Shop Requests (<?= count($shopReqs ?? []) ?>)</h2>
    <?php if (empty($shopReqs)): ?>
        <div class="card-item text-muted">โœ… No pending shop requests</div>
    <?php else: ?>
        <?php foreach ($shopReqs as $r): ?>
        <div class="card-item">
            <div class="flex">
                <div>
                    <strong><?= htmlspecialchars($r['username'] ?? 'Unknown') ?></strong>
                    <span class="badge"><?= $r['boost'] ?></span>
                    <span class="text-muted" style="font-size:12px;">ID: <?= $r['telegram_id'] ?></span>
                </div>
                <span style="color:#a78bfa;font-weight:600;"><?= $r['amount'] ?> TON</span>
            </div>
            <div class="flex" style="margin-top:6px;">
                <span class="text-small"><?= $r['created_at'] ?></span>
                <span class="status-pending">โณ Pending</span>
            </div>
            <form method="POST" class="flex-row" style="margin-top:10px;">
                <input type="hidden" name="id" value="<?= $r['id'] ?>">
                <input type="hidden" name="type" value="shop">
                <button type="submit" name="action" value="approve" class="btn btn-success">โœ… Approve</button>
                <button type="submit" name="action" value="reject" class="btn btn-danger">โŒ Reject</button>
            </form>
        </div>
        <?php endforeach; ?>
    <?php endif; ?>

    <div class="divider"></div>

    <h2>๐Ÿ’ธ Withdrawal Requests (<?= count($withdrawReqs ?? []) ?>)</h2>
    <?php if (empty($withdrawReqs)): ?>
        <div class="card-item text-muted">โœ… No pending withdrawal requests</div>
    <?php else: ?>
        <?php foreach ($withdrawReqs as $r): ?>
        <div class="card-item">
            <div class="flex">
                <div>
                    <strong><?= htmlspecialchars($r['username'] ?? 'Unknown') ?></strong>
                    <span class="text-muted" style="font-size:12px;">ID: <?= $r['telegram_id'] ?></span>
                </div>
                <span style="color:#a78bfa;font-weight:600;"><?= $r['amount'] ?> TON</span>
            </div>
            <div class="wallet-address" style="margin:4px 0;">๐Ÿ“ค <?= $r['wallet'] ?></div>
            <div class="flex" style="margin-top:4px;">
                <span class="text-small">Fee: <?= $r['fee'] ?> TON</span>
                <span class="text-small"><?= $r['created_at'] ?></span>
                <span class="status-pending">โณ Pending</span>
            </div>
            <form method="POST" class="flex-row" style="margin-top:10px;">
                <input type="hidden" name="id" value="<?= $r['id'] ?>">
                <input type="hidden" name="type" value="withdraw">
                <button type="submit" name="action" value="process" class="btn btn-success">โœ… Process</button>
                <button type="submit" name="action" value="fail" class="btn btn-danger">โŒ Fail</button>
            </form>
        </div>
        <?php endforeach; ?>
    <?php endif; ?>

    <div class="divider"></div>

    <h2>๐Ÿ‘ค Recent Users</h2>
    <?php if (empty($users)): ?>
        <div class="card-item text-muted">No users yet</div>
    <?php else: ?>
        <?php foreach ($users as $u): ?>
        <div class="card-item">
            <div class="flex">
                <div>
                    <strong><?= htmlspecialchars($u['username'] ?? 'Unknown') ?></strong>
                    <span class="text-muted" style="font-size:12px;">ID: <?= $u['telegram_id'] ?></span>
                </div>
                <div style="text-align:right;">
                    <div style="color:#a78bfa;"><?= number_format($u['balance'], 2) ?> TTC</div>
                    <div class="text-small">Boost: <?= $u['boost'] ?>ร—</div>
                </div>
            </div>
            <div class="flex" style="margin-top:4px;">
                <span class="text-small">Code: <?= $u['referral_code'] ?? '-' ?></span>
                <span class="text-small">Joined: <?= $u['created_at'] ?></span>
            </div>
        </div>
        <?php endforeach; ?>
    <?php endif; ?>

    <div style="margin-top:20px;text-align:center;font-size:12px;color:#4a3a6a;border-top:1px solid rgba(160,120,255,0.06);padding-top:16px;">
        Admin ID: <?= ADMIN_ID ?> ยท Wallet: <?= ADMIN_WALLET ?>
    </div>
</div>
</body>
</html>