Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/panahan.aplikasipos.info/
Upload File :
Current File : /home/aplikasiposinfo/www/panahan.aplikasipos.info/peserta_lomba.php

<?php
include 'panggil.php';

// Get tournament ID from URL
$tournament_id = isset($_GET['tournament_id']) ? intval($_GET['tournament_id']) : 0;

if (!$tournament_id) {
    die("ID Tournament tidak valid!");
}

// Get tournament information
$tournament_result = $conn->query("SELECT * FROM tournaments WHERE id = $tournament_id");
if (!$tournament_result || $tournament_result->num_rows == 0) {
    die("Tournament tidak ditemukan!");
}
$tournament = $tournament_result->fetch_assoc();

// Handle AJAX requests
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
    header('Content-Type: application/json');
    
    if ($_POST['action'] === 'add_participant') {
        $participant_id = $_POST['participant_id'];
        $category_id = $_POST['category_id'];
        $payment_status = $_POST['payment_status'];
        $status = $_POST['status'];
        $notes = $_POST['notes'];
        
        // Check if participant already registered
        $check_sql = "SELECT id FROM tournament_participants WHERE tournament_id = ? AND participant_id = ?";
        $check_stmt = $conn->prepare($check_sql);
        $check_stmt->bind_param("ii", $tournament_id, $participant_id);
        $check_stmt->execute();
        $check_result = $check_stmt->get_result();
        
        if ($check_result->num_rows > 0) {
            echo json_encode(['success' => false, 'message' => 'Peserta sudah terdaftar di tournament ini!']);
            exit;
        }
        
        $sql = "INSERT INTO tournament_participants (tournament_id, participant_id, category_id, payment_status, status, notes) VALUES (?, ?, ?, ?, ?, ?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("iiisss", $tournament_id, $participant_id, $category_id, $payment_status, $status, $notes);
        
        if ($stmt->execute()) {
            echo json_encode(['success' => true, 'message' => 'Peserta berhasil ditambahkan ke tournament']);
        } else {
            echo json_encode(['success' => false, 'message' => 'Gagal menambah peserta: ' . $conn->error]);
        }
        exit;
    }
    
    if ($_POST['action'] === 'update_participant') {
        $tp_id = $_POST['tp_id'];
        $category_id = $_POST['category_id'];
        $payment_status = $_POST['payment_status'];
        $status = $_POST['status'];
        $notes = $_POST['notes'];
        $seed_number = $_POST['seed_number'];
        
        $sql = "UPDATE tournament_participants SET category_id=?, payment_status=?, status=?, notes=?, seed_number=? WHERE id=?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("isssii", $category_id, $payment_status, $status, $notes, $seed_number, $tp_id);
        
        if ($stmt->execute()) {
            echo json_encode(['success' => true, 'message' => 'Data peserta berhasil diupdate']);
        } else {
            echo json_encode(['success' => false, 'message' => 'Gagal update data: ' . $conn->error]);
        }
        exit;
    }
    
    if ($_POST['action'] === 'remove_participant') {
        $tp_id = $_POST['tp_id'];
        $sql = "DELETE FROM tournament_participants WHERE id = ?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("i", $tp_id);
        
        if ($stmt->execute()) {
            echo json_encode(['success' => true, 'message' => 'Peserta berhasil dihapus dari tournament']);
        } else {
            echo json_encode(['success' => false, 'message' => 'Gagal menghapus peserta: ' . $conn->error]);
        }
        exit;
    }
    
    if ($_POST['action'] === 'get_participant') {
        $tp_id = $_POST['tp_id'];
        $sql = "SELECT tp.*, p.name as participant_name, c.name as category_name 
                FROM tournament_participants tp 
                LEFT JOIN participants p ON tp.participant_id = p.id 
                LEFT JOIN categories c ON tp.category_id = c.id 
                WHERE tp.id = ?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("i", $tp_id);
        $stmt->execute();
        $result = $stmt->get_result();
        $data = $result->fetch_assoc();
        echo json_encode($data);
        exit;
    }
}

// Get available participants (not yet registered in this tournament)
$available_participants_sql = "SELECT p.* FROM participants p 
                              WHERE p.status = 'active' 
                              AND p.id NOT IN (SELECT participant_id FROM tournament_participants WHERE tournament_id = $tournament_id)
                              ORDER BY p.name";
$available_participants = $conn->query($available_participants_sql);

// Get available categories
$categories = $conn->query("SELECT * FROM categories WHERE status = 'active' ORDER BY name");

// Get registered participants
$search = isset($_GET['q']) ? $_GET['q'] : '';
if ($search) {
    $participants_sql = "SELECT tp.*, p.name as participant_name, p.birthdate, p.gender, p.phone, 
                        c.name as category_name, YEAR(CURDATE()) - YEAR(p.birthdate) as age
                        FROM tournament_participants tp 
                        LEFT JOIN participants p ON tp.participant_id = p.id 
                        LEFT JOIN categories c ON tp.category_id = c.id 
                        WHERE tp.tournament_id = $tournament_id 
                        AND (p.name LIKE '%$search%' OR c.name LIKE '%$search%')
                        ORDER BY tp.registration_date DESC";
} else {
    $participants_sql = "SELECT tp.*, p.name as participant_name, p.birthdate, p.gender, p.phone, 
                        c.name as category_name, YEAR(CURDATE()) - YEAR(p.birthdate) as age
                        FROM tournament_participants tp 
                        LEFT JOIN participants p ON tp.participant_id = p.id 
                        LEFT JOIN categories c ON tp.category_id = c.id 
                        WHERE tp.tournament_id = $tournament_id 
                        ORDER BY tp.registration_date DESC";
}
$participants_result = $conn->query($participants_sql);
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Peserta Lomba - <?= htmlspecialchars($tournament['name']); ?></title>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
</head>
<body class="p-4">

    <div class="mb-4">
        <h5><i class="fas fa-users"></i> Peserta Lomba</h5>
        <div class="card">
            <div class="card-body">
                <h6 class="card-title"><i class="fas fa-trophy"></i> <?= htmlspecialchars($tournament['name']); ?></h6>
                <p class="card-text">
                    <strong>Tanggal:</strong> <?= date('d/m/Y', strtotime($tournament['start_date'])); ?> - <?= date('d/m/Y', strtotime($tournament['end_date'])); ?><br>
                    <strong>Lokasi:</strong> <?= htmlspecialchars($tournament['location'] ?? '-'); ?><br>
                    <strong>Status:</strong> 
                    <?php
                    $statusClass = '';
                    switch($tournament['status']) {
                        case 'draft': $statusClass = 'secondary'; break;
                        case 'registration': $statusClass = 'info'; break;
                        case 'ongoing': $statusClass = 'warning'; break;
                        case 'completed': $statusClass = 'success'; break;
                        case 'cancelled': $statusClass = 'danger'; break;
                    }
                    ?>
                    <span class="badge bg-<?= $statusClass; ?>"><?= ucfirst($tournament['status']); ?></span>
                </p>
            </div>
        </div>
    </div>

    <div class="d-flex justify-content-between mb-3">
        <div>
            <button class="btn btn-success" data-bs-toggle="modal" data-bs-target="#addParticipantModal">
                <i class="fas fa-plus"></i> Tambah Peserta
            </button>
            <a href="kegiatan.php" class="btn btn-secondary">
                <i class="fas fa-arrow-left"></i> Kembali ke Kegiatan
            </a>
        </div>
        <form class="d-flex" method="get">
            <input type="hidden" name="tournament_id" value="<?= $tournament_id; ?>">
            <input class="form-control me-2" type="search" name="q" placeholder="Cari peserta..." value="<?= htmlspecialchars($search); ?>">
            <button class="btn btn-primary" type="submit"><i class="fas fa-search"></i></button>
        </form>
    </div>

    <div class="table-responsive">
        <table class="table table-bordered table-striped">
            <thead class="table-dark">
                <tr>
                    <th style="width: 50px;">No</th>
                    <th>Nama Peserta</th>
                    <th>Umur</th>
                    <th>Gender</th>
                    <th>Kategori</th>
                    <th>Status Pembayaran</th>
                    <th>Status</th>
                    <th>Seed</th>
                    <th>Tanggal Daftar</th>
                    <th style="width: 200px;">Aksi</th>
                </tr>
            </thead>
            <tbody>
                <?php 
                $no = 1;
                while ($row = $participants_result->fetch_assoc()): 
                ?>
                <tr>
                    <td><?= $no++; ?></td>
                    <td><?= htmlspecialchars($row['participant_name']); ?></td>
                    <td><?= $row['age']; ?> tahun</td>
                    <td>
                        <span class="badge bg-<?= $row['gender'] == 'Laki-laki' ? 'primary' : 'danger'; ?>">
                            <?= $row['gender']; ?>
                        </span>
                    </td>
                    <td><?= htmlspecialchars($row['category_name']); ?></td>
                    <td>
                        <?php
                        $paymentClass = '';
                        switch($row['payment_status']) {
                            case 'pending': $paymentClass = 'warning'; break;
                            case 'paid': $paymentClass = 'success'; break;
                            case 'refunded': $paymentClass = 'secondary'; break;
                        }
                        ?>
                        <span class="badge bg-<?= $paymentClass; ?>"><?= ucfirst($row['payment_status']); ?></span>
                    </td>
                    <td>
                        <?php
                        $statusClass = '';
                        switch($row['status']) {
                            case 'registered': $statusClass = 'info'; break;
                            case 'confirmed': $statusClass = 'success'; break;
                            case 'withdrew': $statusClass = 'warning'; break;
                            case 'disqualified': $statusClass = 'danger'; break;
                        }
                        ?>
                        <span class="badge bg-<?= $statusClass; ?>"><?= ucfirst($row['status']); ?></span>
                    </td>
                    <td><?= $row['seed_number'] ?? '-'; ?></td>
                    <td><?= date('d/m/Y H:i', strtotime($row['registration_date'])); ?></td>
                    <td>
                        <button class="btn btn-sm btn-warning" onclick="editParticipant(<?= $row['id']; ?>)" title="Edit">
                            <i class="fas fa-edit"></i>
                        </button>
                        <button class="btn btn-sm btn-danger" onclick="removeParticipant(<?= $row['id']; ?>)" title="Remove">
                            <i class="fas fa-trash"></i>
                        </button>
                    </td>
                </tr>
                <?php endwhile; ?>
                
                <?php if ($participants_result->num_rows == 0): ?>
                <tr>
                    <td colspan="10" class="text-center">
                        <i class="fas fa-users fa-3x text-muted mb-3"></i><br>
                        <h6>Belum ada peserta terdaftar</h6>
                        <p class="text-muted">Klik tombol "Tambah Peserta" untuk mendaftarkan peserta baru</p>
                    </td>
                </tr>
                <?php endif; ?>
            </tbody>
        </table>
    </div>

    <!-- Add Participant Modal -->
    <div class="modal fade" id="addParticipantModal" tabindex="-1">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">Tambah Peserta ke Tournament</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <form id="addParticipantForm">
                    <div class="modal-body">
                        <input type="hidden" name="action" value="add_participant">
                        
                        <div class="mb-3">
                            <label for="participant_id" class="form-label">Pilih Peserta *</label>
                            <select class="form-control" id="participant_id" name="participant_id" required>
                                <option value="">-- Pilih Peserta --</option>
                                <?php while ($participant = $available_participants->fetch_assoc()): ?>
                                <option value="<?= $participant['id']; ?>">
                                    <?= htmlspecialchars($participant['name']); ?> 
                                    (<?= $participant['gender']; ?>, 
                                    <?= (date('Y') - date('Y', strtotime($participant['birthdate']))); ?> tahun)
                                </option>
                                <?php endwhile; ?>
                            </select>
                        </div>

                        <div class="mb-3">
                            <label for="category_id" class="form-label">Kategori *</label>
                            <select class="form-control" id="category_id" name="category_id" required>
                                <option value="">-- Pilih Kategori --</option>
                                <?php while ($category = $categories->fetch_assoc()): ?>
                                <option value="<?= $category['id']; ?>">
                                    <?= htmlspecialchars($category['name']); ?>
                                    (<?= $category['min_age']; ?>-<?= $category['max_age']; ?> tahun)
                                </option>
                                <?php endwhile; ?>
                            </select>
                        </div>

                        <div class="row">
                            <div class="col-md-6">
                                <div class="mb-3">
                                    <label for="payment_status" class="form-label">Status Pembayaran</label>
                                    <select class="form-control" id="payment_status" name="payment_status">
                                        <option value="pending">Pending</option>
                                        <option value="paid">Paid</option>
                                        <option value="refunded">Refunded</option>
                                    </select>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="mb-3">
                                    <label for="status" class="form-label">Status Peserta</label>
                                    <select class="form-control" id="status" name="status">
                                        <option value="registered">Registered</option>
                                        <option value="confirmed">Confirmed</option>
                                        <option value="withdrew">Withdrew</option>
                                        <option value="disqualified">Disqualified</option>
                                    </select>
                                </div>
                            </div>
                        </div>

                        <div class="mb-3">
                            <label for="notes" class="form-label">Catatan</label>
                            <textarea class="form-control" id="notes" name="notes" rows="2"></textarea>
                        </div>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
                        <button type="submit" class="btn btn-success">Tambah Peserta</button>
                    </div>
                </form>
            </div>
        </div>
    </div>

    <!-- Edit Participant Modal -->
    <div class="modal fade" id="editParticipantModal" tabindex="-1">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">Edit Peserta Tournament</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <form id="editParticipantForm">
                    <div class="modal-body">
                        <input type="hidden" name="action" value="update_participant">
                        <input type="hidden" id="edit_tp_id" name="tp_id">
                        
                        <div class="mb-3">
                            <label class="form-label">Nama Peserta</label>
                            <input type="text" class="form-control" id="edit_participant_name" readonly>
                        </div>

                        <div class="mb-3">
                            <label for="edit_category_id" class="form-label">Kategori *</label>
                            <select class="form-control" id="edit_category_id" name="category_id" required>
                                <?php 
                                // Reset categories result
                                $categories = $conn->query("SELECT * FROM categories WHERE status = 'active' ORDER BY name");
                                while ($category = $categories->fetch_assoc()): 
                                ?>
                                <option value="<?= $category['id']; ?>">
                                    <?= htmlspecialchars($category['name']); ?>
                                    (<?= $category['min_age']; ?>-<?= $category['max_age']; ?> tahun)
                                </option>
                                <?php endwhile; ?>
                            </select>
                        </div>

                        <div class="row">
                            <div class="col-md-6">
                                <div class="mb-3">
                                    <label for="edit_payment_status" class="form-label">Status Pembayaran</label>
                                    <select class="form-control" id="edit_payment_status" name="payment_status">
                                        <option value="pending">Pending</option>
                                        <option value="paid">Paid</option>
                                        <option value="refunded">Refunded</option>
                                    </select>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <div class="mb-3">
                                    <label for="edit_status" class="form-label">Status Peserta</label>
                                    <select class="form-control" id="edit_status" name="status">
                                        <option value="registered">Registered</option>
                                        <option value="confirmed">Confirmed</option>
                                        <option value="withdrew">Withdrew</option>
                                        <option value="disqualified">Disqualified</option>
                                    </select>
                                </div>
                            </div>
                        </div>

                        <div class="row">
                            <div class="col-md-6">
                                <div class="mb-3">
                                    <label for="edit_seed_number" class="form-label">Seed Number</label>
                                    <input type="number" class="form-control" id="edit_seed_number" name="seed_number" min="1">
                                </div>
                            </div>
                        </div>

                        <div class="mb-3">
                            <label for="edit_notes" class="form-label">Catatan</label>
                            <textarea class="form-control" id="edit_notes" name="notes" rows="2"></textarea>
                        </div>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
                        <button type="submit" class="btn btn-warning">Update</button>
                    </div>
                </form>
            </div>
        </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    
    <script>
        function editParticipant(tpId) {
            $.post('', {action: 'get_participant', tp_id: tpId}, function(response) {
                const data = JSON.parse(response);
                
                document.getElementById('edit_tp_id').value = data.id;
                document.getElementById('edit_participant_name').value = data.participant_name;
                document.getElementById('edit_category_id').value = data.category_id;
                document.getElementById('edit_payment_status').value = data.payment_status;
                document.getElementById('edit_status').value = data.status;
                document.getElementById('edit_seed_number').value = data.seed_number || '';
                document.getElementById('edit_notes').value = data.notes || '';
                
                $('#editParticipantModal').modal('show');
            });
        }

        function removeParticipant(tpId) {
            if (confirm('Yakin ingin menghapus peserta ini dari tournament?')) {
                $.post('', {action: 'remove_participant', tp_id: tpId}, function(response) {
                    const result = JSON.parse(response);
                    if (result.success) {
                        alert(result.message);
                        location.reload();
                    } else {
                        alert(result.message);
                    }
                });
            }
        }

        document.getElementById('addParticipantForm').addEventListener('submit', function(e) {
            e.preventDefault();
            
            const formData = new FormData(this);
            
            $.ajax({
                url: '',
                method: 'POST',
                data: formData,
                processData: false,
                contentType: false,
                success: function(response) {
                    const result = JSON.parse(response);
                    if (result.success) {
                        alert(result.message);
                        $('#addParticipantModal').modal('hide');
                        location.reload();
                    } else {
                        alert(result.message);
                    }
                },
                error: function() {
                    alert('Terjadi kesalahan saat memproses data');
                }
            });
        });

        document.getElementById('editParticipantForm').addEventListener('submit', function(e) {
            e.preventDefault();
            
            const formData = new FormData(this);
            
            $.ajax({
                url: '',
                method: 'POST',
                data: formData,
                processData: false,
                contentType: false,
                success: function(response) {
                    const result = JSON.parse(response);
                    if (result.success) {
                        alert(result.message);
                        $('#editParticipantModal').modal('hide');
                        location.reload();
                    } else {
                        alert(result.message);
                    }
                },
                error: function() {
                    alert('Terjadi kesalahan saat memproses data');
                }
            });
        });
    </script>

</body>
</html>

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]