Anons79 Mini Shell

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

<?php
// Aktifkan error reporting untuk debugging
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Mulai session jika belum
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

// Include file koneksi database
try {
    include 'panggil.php';
} catch (Exception $e) {
    die("Error koneksi database: " . $e->getMessage());
}

// Ambil ID kegiatan dari URL atau ambil kegiatan pertama yang tersedia
$kegiatan_id = isset($_GET['kegiatan_id']) ? intval($_GET['kegiatan_id']) : null;

// Jika tidak ada kegiatan_id, ambil kegiatan pertama yang tersedia
if (!$kegiatan_id) {
    try {
        $queryFirstKegiatan = "SELECT id FROM kegiatan WHERE id =".$_GET['id'];
        $resultFirstKegiatan = $conn->query($queryFirstKegiatan);
        if ($resultFirstKegiatan && $resultFirstKegiatan->num_rows > 0) {
            $firstKegiatan = $resultFirstKegiatan->fetch_assoc();
            $kegiatan_id = $firstKegiatan['id'];
        }
    } catch (Exception $e) {
        die("Error mengambil kegiatan: " . $e->getMessage());
    }
}

// Jika masih tidak ada kegiatan
if (!$kegiatan_id) {
    die("Tidak ada kegiatan yang tersedia. Silakan buat kegiatan terlebih dahulu.");
}

// Ambil data kegiatan dan kategorinya
$kegiatanData = [];
try {
    $query = "
        SELECT 
            k.id as kegiatan_id,
            k.nama_kegiatan,
            c.id as category_id,
            c.name as category_name,
            c.min_age,
            c.max_age,
            c.gender
        FROM kegiatan k
        LEFT JOIN kegiatan_kategori kk ON k.id = kk.kegiatan_id
        LEFT JOIN categories c ON kk.category_id = c.id
        WHERE k.id = ? AND c.status = 'active'
        ORDER BY c.min_age ASC, c.name ASC
    ";
    
    $stmt = $conn->prepare($query);
    $stmt->bind_param("i", $kegiatan_id);
    $stmt->execute();
    $result = $stmt->get_result();
    
    while ($row = $result->fetch_assoc()) {
        if (empty($kegiatanData)) {
            $kegiatanData['kegiatan_id'] = $row['kegiatan_id'];
            $kegiatanData['nama_kegiatan'] = $row['nama_kegiatan'];
            $kegiatanData['kategori'] = [];
        }
        if ($row['category_id']) {
            $kegiatanData['kategori'][] = [
                'id' => $row['category_id'],
                'name' => $row['category_name'],
                'min_age' => $row['min_age'],
                'max_age' => $row['max_age'],
                'gender' => $row['gender']
            ];
        }
    }
    $stmt->close();
    
    // Jika kegiatan tidak ditemukan
    if (empty($kegiatanData)) {
        die("Kegiatan tidak ditemukan.");
    }
    
    // Jika kegiatan tidak memiliki kategori
    if (empty($kegiatanData['kategori'])) {
        die("Kegiatan '{$kegiatanData['nama_kegiatan']}' belum memiliki kategori. Silakan tambahkan kategori terlebih dahulu.");
    }
    
} catch (Exception $e) {
    die("Error mengambil data kegiatan: " . $e->getMessage());
}

// Proses insert data
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $nama_peserta = trim($_POST['nama_peserta']);
    $tanggal_lahir = $_POST['tanggal_lahir'];
    // $jenis_kelamin = $_POST['jenis_kelamin'];
    // $asal_kota = trim($_POST['asal_kota']);
    // $nama_club = trim($_POST['nama_club']);
    // $sekolah = trim($_POST['sekolah']);
    // $kelas = trim($_POST['kelas']);
    // $nomor_hp = trim($_POST['nomor_hp']);
    $category_ids = isset($_POST['category_ids']) ? $_POST['category_ids'] : [];

    // Validasi
    $errors = [];
    
    if (empty($nama_peserta)) {
        $errors[] = "Nama peserta wajib diisi";
    }
    
    if (empty($tanggal_lahir)) {
        $errors[] = "Tanggal lahir wajib diisi";
    }
    
    // if (empty($jenis_kelamin)) {
    //     $errors[] = "Jenis kelamin wajib dipilih";
    // }
    
    // if (empty($nomor_hp)) {
    //     $errors[] = "Nomor HP wajib diisi";
    // }
    
    if (empty($category_ids)) {
        $errors[] = "Minimal pilih satu kategori";
    }
    
    // Validasi upload file
    $bukti_pembayaran = '';
    if (isset($_FILES['bukti_pembayaran']) && $_FILES['bukti_pembayaran']['error'] === UPLOAD_ERR_OK) {
        $allowed_types = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'application/pdf'];
        $max_size = 5 * 1024 * 1024; // 5MB
        
        $file_type = $_FILES['bukti_pembayaran']['type'];
        $file_size = $_FILES['bukti_pembayaran']['size'];
        $file_tmp = $_FILES['bukti_pembayaran']['tmp_name'];
        $file_name = $_FILES['bukti_pembayaran']['name'];
        
        // Validasi tipe file
        if (!in_array($file_type, $allowed_types)) {
            $errors[] = "Tipe file tidak diizinkan. Hanya JPG, PNG, GIF, dan PDF yang diperbolehkan";
        }
        
        // Validasi ukuran file
        if ($file_size > $max_size) {
            $errors[] = "Ukuran file terlalu besar. Maksimal 5MB";
        }
        
        if (empty($errors)) {
            // Create uploads directory if not exists
            $upload_dir = 'uploads/pembayaran/';
            if (!file_exists($upload_dir)) {
                mkdir($upload_dir, 0755, true);
            }
            
            // Generate unique filename
            $file_extension = pathinfo($file_name, PATHINFO_EXTENSION);
            $unique_name = date('YmdHis') . '_' . uniqid() . '.' . $file_extension;
            $upload_path = $upload_dir . $unique_name;
            
            // Move uploaded file
            if (move_uploaded_file($file_tmp, $upload_path)) {
                $bukti_pembayaran = $unique_name;
            } else {
                $errors[] = "Gagal mengupload file bukti pembayaran";
            }
        }
    }
    
    // Validasi umur dan gender sesuai kategori yang dipilih
    if (!empty($tanggal_lahir) && !empty($category_ids) && !empty($jenis_kelamin)) {
        $birth_date = new DateTime($tanggal_lahir);
        $current_date = new DateTime();
        $age = $current_date->diff($birth_date)->y;
        
        $invalidCategories = [];
        foreach ($category_ids as $category_id) {
            // Cari kategori yang dipilih
            foreach ($kegiatanData['kategori'] as $kategori) {
                if ($kategori['id'] == $category_id) {
                    // Validasi umur
                    if ($age < $kategori['min_age'] || $age > $kategori['max_age']) {
                        $invalidCategories[] = $kategori['name'] . " (umur {$kategori['min_age']}-{$kategori['max_age']} tahun)";
                    }
                    
                    // Validasi gender
                    if ($kategori['gender'] !== 'Campuran' && $kategori['gender'] !== $jenis_kelamin) {
                        $invalidCategories[] = $kategori['name'] . " (khusus {$kategori['gender']})";
                    }
                    
                    break;
                }
            }
        }
        
        if (!empty($invalidCategories)) {
            $errors[] = "Kategori tidak sesuai: " . implode(', ', $invalidCategories);
        }
    }

    if (empty($errors)) {
        try {
            // Loop untuk setiap kategori yang dipilih
            $successCount = 0;
            $selectedCategoryNames = [];
            
            foreach ($category_ids as $category_id) {
                // Ambil nama kategori untuk pesan sukses
                foreach ($kegiatanData['kategori'] as $kategori) {
                    if ($kategori['id'] == $category_id) {
                        $selectedCategoryNames[] = $kategori['name'];
                        break;
                    }
                }
                
                // Insert dengan kolom bukti_pembayaran
                $stmt = $conn->prepare("INSERT INTO peserta (nama_peserta, tanggal_lahir, jenis_kelamin, asal_kota, nama_club, sekolah, kelas, nomor_hp, bukti_pembayaran, category_id, kegiatan_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

                $stmt->bind_param("sssssssssii", 
                    $nama_peserta, 
                    $tanggal_lahir, 
                    $jenis_kelamin, 
                    $asal_kota, 
                    $nama_club, 
                    $sekolah, 
                    $kelas, 
                    $nomor_hp,
                    $bukti_pembayaran,
                    $category_id,
                    $kegiatan_id
                );
                
                if ($stmt->execute()) {
                    $successCount++;
                }
                
                $stmt->close();
            }
            
            if ($successCount > 0) {
                $categoryList = implode(', ', $selectedCategoryNames);
                $_SESSION['success'] = "Data peserta berhasil didaftarkan untuk {$successCount} kategori ({$categoryList}) pada kegiatan " . $kegiatanData['nama_kegiatan'] . "!";
                header("Location: " . $_SERVER['PHP_SELF'] . "?kegiatan_id=" . $kegiatan_id);
                exit;
            } else {
                $errors[] = "Gagal menyimpan data";
            }
            
        } catch (Exception $e) {
            $errors[] = "Error: " . $e->getMessage();
        }
    }
    
    $_SESSION['errors'] = $errors;
}
?>

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Form Pendaftaran Peserta - <?= htmlspecialchars($kegiatanData['nama_kegiatan']) ?></title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            padding: 20px;
        }

        .container {
            max-width: 800px;
            margin: 0 auto;
            background: white;
            border-radius: 15px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
            overflow: hidden;
        }

        .header {
            background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
            color: white;
            padding: 30px;
            text-align: center;
        }

        .header h1 {
            font-size: 28px;
            margin-bottom: 10px;
            font-weight: 600;
        }

        .header p {
            font-size: 16px;
            opacity: 0.9;
        }

        .kegiatan-info {
            background: rgba(255, 255, 255, 0.1);
            padding: 15px;
            border-radius: 8px;
            margin-top: 15px;
        }

        .kegiatan-info h3 {
            font-size: 20px;
            margin-bottom: 8px;
        }

        .form-container {
            padding: 40px;
        }

        .alert {
            padding: 15px;
            margin-bottom: 20px;
            border: 1px solid transparent;
            border-radius: 8px;
        }

        .alert-success {
            color: #155724;
            background-color: #d4edda;
            border-color: #c3e6cb;
        }

        .alert-danger {
            color: #721c24;
            background-color: #f8d7da;
            border-color: #f5c6cb;
        }

        .form-grid {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 25px;
        }

        .form-group {
            margin-bottom: 25px;
        }

        .form-group.full-width {
            grid-column: 1 / -1;
        }

        .form-group label {
            display: block;
            margin-bottom: 8px;
            font-weight: 600;
            color: #333;
            font-size: 14px;
        }

        .required {
            color: #e74c3c;
        }

        .form-control {
            width: 100%;
            padding: 12px 15px;
            border: 2px solid #e1e8ed;
            border-radius: 8px;
            font-size: 14px;
            transition: all 0.3s ease;
            background-color: #f8f9fa;
        }

        .form-control:focus {
            outline: none;
            border-color: #4facfe;
            background-color: white;
            transform: translateY(-2px);
            box-shadow: 0 4px 12px rgba(79, 172, 254, 0.2);
        }

        .form-control:hover {
            border-color: #b8c6db;
        }

        .file-input-container {
            position: relative;
            display: inline-block;
            width: 100%;
        }

        .file-input {
            width: 100%;
            padding: 12px 15px;
            border: 2px dashed #e1e8ed;
            border-radius: 8px;
            background-color: #f8f9fa;
            transition: all 0.3s ease;
            cursor: pointer;
            text-align: center;
            font-size: 14px;
            color: #666;
        }

        .file-input:hover {
            border-color: #4facfe;
            background-color: rgba(79, 172, 254, 0.1);
        }

        .file-input input[type="file"] {
            position: absolute;
            width: 100%;
            height: 100%;
            opacity: 0;
            cursor: pointer;
        }

        .file-info {
            margin-top: 8px;
            font-size: 12px;
            color: #666;
            text-align: center;
        }

        .file-preview {
            margin-top: 10px;
            padding: 10px;
            background: #e8f4f8;
            border-radius: 6px;
            font-size: 14px;
            color: #333;
            display: none;
        }

        .checkbox-group {
            border: 2px solid #e1e8ed;
            border-radius: 8px;
            padding: 15px;
            background-color: #f8f9fa;
            max-height: 300px;
            overflow-y: auto;
        }

        .checkbox-item {
            display: flex;
            align-items: flex-start;
            margin-bottom: 15px;
            padding: 12px;
            background-color: white;
            border-radius: 8px;
            border: 1px solid #e9ecef;
            transition: all 0.3s ease;
        }

        .checkbox-item:hover {
            border-color: #4facfe;
            box-shadow: 0 2px 8px rgba(79, 172, 254, 0.1);
        }

        .checkbox-item:last-child {
            margin-bottom: 0;
        }

        .checkbox-item input[type="checkbox"] {
            margin-right: 12px;
            margin-top: 3px;
            transform: scale(1.2);
            accent-color: #4facfe;
        }

        .checkbox-label {
            flex: 1;
            cursor: pointer;
        }

        .checkbox-label .category-name {
            font-weight: 600;
            color: #333;
            font-size: 15px;
            display: block;
            margin-bottom: 4px;
        }

        .checkbox-label .age-info {
            font-size: 12px;
            color: #666;
            font-style: italic;
            margin-bottom: 2px;
        }

        .checkbox-label .gender-info {
            font-size: 12px;
            color: #007bff;
            font-weight: 500;
        }

        .checkbox-item.disabled {
            opacity: 0.5;
            background-color: #f5f5f5;
        }

        .checkbox-item.disabled input[type="checkbox"] {
            cursor: not-allowed;
        }

        .radio-group {
            display: flex;
            gap: 20px;
            margin-top: 8px;
        }

        .radio-item {
            display: flex;
            align-items: center;
            gap: 8px;
        }

        .radio-item input[type="radio"] {
            width: 18px;
            height: 18px;
            accent-color: #4facfe;
        }

        .radio-item label {
            margin-bottom: 0;
            font-weight: normal;
            cursor: pointer;
        }

        .btn-container {
            display: flex;
            gap: 15px;
            justify-content: center;
            margin-top: 30px;
            padding-top: 30px;
            border-top: 2px solid #f1f3f4;
        }

        .btn {
            padding: 12px 30px;
            border: none;
            border-radius: 8px;
            font-size: 16px;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.3s ease;
            min-width: 120px;
        }

        .btn-primary {
            background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
            color: white;
        }

        .btn-primary:hover {
            transform: translateY(-2px);
            box-shadow: 0 8px 20px rgba(79, 172, 254, 0.4);
        }

        .btn-secondary {
            background: #6c757d;
            color: white;
        }

        .btn-secondary:hover {
            background: #5a6268;
            transform: translateY(-2px);
        }

        .back-link {
            display: inline-block;
            margin-bottom: 20px;
            color: #4facfe;
            text-decoration: none;
            font-weight: 600;
        }

        .back-link:hover {
            text-decoration: underline;
        }

        .category-info {
            background: #e3f2fd;
            padding: 15px;
            border-radius: 8px;
            margin-top: 10px;
            font-size: 14px;
            color: #1976d2;
        }

        .age-warning {
            background: #fff3cd;
            color: #856404;
            padding: 10px;
            border-radius: 6px;
            margin-top: 10px;
            font-size: 13px;
        }

        @media (max-width: 768px) {
            .form-grid {
                grid-template-columns: 1fr;
                gap: 20px;
            }
            
            .form-container {
                padding: 25px;
            }
            
            .header {
                padding: 20px;
            }
            
            .radio-group {
                flex-direction: column;
                gap: 10px;
            }
            
            .checkbox-group {
                max-height: 250px;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1>Form Pendaftaran Peserta</h1>
            <p>Silakan lengkapi data diri Anda dengan benar</p>
            
            <div class="kegiatan-info">
                <h3><?= htmlspecialchars($kegiatanData['nama_kegiatan']) ?></h3>
                <p>Kategori yang tersedia: <?= count($kegiatanData['kategori']) ?> kategori</p>
            </div>
        </div>

        <div class="form-container">
            <a href="kegiatan.view.php" class="back-link">← Kembali Ke Kegiatan</a>

            <?php if (isset($_SESSION['success'])): ?>
                <div class="alert alert-success">
                    <?= $_SESSION['success']; ?>
                    <?php unset($_SESSION['success']); ?>
                </div>
            <?php endif; ?>

            <?php if (isset($_SESSION['errors']) && !empty($_SESSION['errors'])): ?>
                <div class="alert alert-danger">
                    <ul style="margin: 0; padding-left: 20px;">
                        <?php foreach ($_SESSION['errors'] as $error): ?>
                            <li><?= $error; ?></li>
                        <?php endforeach; ?>
                    </ul>
                    <?php unset($_SESSION['errors']); ?>
                </div>
            <?php endif; ?>

            <form method="POST" action="" enctype="multipart/form-data">
                <input type="hidden" name="kegiatan_id" value="<?= $kegiatan_id ?>">
                
                <div class="form-grid">
                    <div class="form-group">
                        <label for="nama_peserta">Nama Peserta <span class="required">*</span></label>
                        <input type="text" 
                               id="nama_peserta" 
                               name="nama_peserta" 
                               class="form-control" 
                               value="<?= isset($_POST['nama_peserta']) ? htmlspecialchars($_POST['nama_peserta']) : ''; ?>"
                               required>
                    </div>

                    <div class="form-group">
                        <label for="tanggal_lahir">Tanggal Lahir <span class="required">*</span></label>
                        <input type="date" 
                               id="tanggal_lahir" 
                               name="tanggal_lahir" 
                               class="form-control"
                               value="<?= isset($_POST['tanggal_lahir']) ? $_POST['tanggal_lahir'] : ''; ?>"
                               onchange="updateKategoriOptions()"
                               required>
                    </div>

                    <!-- <div class="form-group">
                        <label>Jenis Kelamin <span class="required">*</span></label>
                        <div class="radio-group">
                            <div class="radio-item">
                                <input type="radio" 
                                       id="laki_laki" 
                                       name="jenis_kelamin" 
                                       value="Laki-laki"
                                       onchange="updateKategoriOptions()"
                                       <?= (isset($_POST['jenis_kelamin']) && $_POST['jenis_kelamin'] == 'Laki-laki') ? 'checked' : ''; ?>
                                       >
                                <label for="laki_laki">Laki-laki</label>
                            </div>
                            <div class="radio-item">
                                <input type="radio" 
                                       id="perempuan" 
                                       name="jenis_kelamin" 
                                       value="Perempuan"
                                       onchange="updateKategoriOptions()"
                                       <?= (isset($_POST['jenis_kelamin']) && $_POST['jenis_kelamin'] == 'Perempuan') ? 'checked' : ''; ?>
                                       >
                                <label for="perempuan">Perempuan</label>
                            </div>
                        </div>
                    </div>

                    <div class="form-group">
                        <label for="nomor_hp">Nomor HP <span class="required">*</span></label>
                        <input type="tel" 
                               id="nomor_hp" 
                               name="nomor_hp" 
                               class="form-control" 
                               placeholder="08xxxxxxxxxx"
                               value="<?= isset($_POST['nomor_hp']) ? htmlspecialchars($_POST['nomor_hp']) : ''; ?>"
                               >
                    </div> -->

                    <!-- <div class="form-group full-width">
                        <label for="bukti_pembayaran">Bukti Pembayaran</label>
                        <div class="file-input-container">
                            <div class="file-input" onclick="document.getElementById('bukti_pembayaran').click()">
                                <input type="file" 
                                       id="bukti_pembayaran" 
                                       name="bukti_pembayaran" 
                                       accept=".jpg,.jpeg,.png,.gif,.pdf"
                                       onchange="previewFile()">
                                <span id="file-text">📁 Klik untuk memilih file bukti pembayaran</span>
                            </div>
                            <div class="file-info">
                                Format: JPG, PNG, GIF, PDF | Maksimal: 5MB
                            </div>
                            <div id="file-preview" class="file-preview"></div>
                        </div>
                    </div> -->

                    <div class="form-group full-width">
                        <label>Kategori yang Diikuti <span class="required">*</span></label>
                        <div class="checkbox-group" id="kategori-group">
                            <?php 
                            $selectedCategories = isset($_POST['category_ids']) ? $_POST['category_ids'] : [];
                            ?>
                            <?php foreach ($kegiatanData['kategori'] as $kategori): ?>
                                <div class="checkbox-item" 
                                     data-min-age="<?= $kategori['min_age'] ?>"
                                     data-max-age="<?= $kategori['max_age'] ?>"
                                     data-gender="<?= $kategori['gender'] ?>">
                                    <input type="checkbox" 
                                           name="category_ids[]" 
                                           value="<?= $kategori['id'] ?>" 
                                           id="category_<?= $kategori['id'] ?>"
                                           <?= in_array($kategori['id'], $selectedCategories) ? 'checked' : ''; ?>>
                                    <label for="category_<?= $kategori['id'] ?>" class="checkbox-label">
                                        <span class="category-name"><?= htmlspecialchars($kategori['name']) ?></span>
                                        <div class="age-info">Umur: <?= $kategori['min_age'] ?>-<?= $kategori['max_age'] ?> tahun (Lahir <?= date("Y") - $kategori['max_age'] ?> – <?= date("Y") - $kategori['min_age'] ?>)</div>
                                        <div class="gender-info"><?= $kategori['gender'] == 'Campuran' ? 'Putra & Putri' : 'Khusus ' . $kategori['gender'] ?></div>
                                    </label>
                                </div>
                            <?php endforeach; ?>
                        </div>
                        <div class="category-info" id="category-info">
                            <strong>Info:</strong> Anda dapat memilih beberapa kategori sekaligus. Pilih tanggal lahir dan jenis kelamin terlebih dahulu untuk melihat kategori yang sesuai.
                        </div>
                    </div>
                    <!-- 
                    <div class="form-group">
                        <label for="asal_kota">Asal Kota</label>
                        <input type="text" 
                               id="asal_kota" 
                               name="asal_kota" 
                               class="form-control"
                               value="<?= isset($_POST['asal_kota']) ? htmlspecialchars($_POST['asal_kota']) : ''; ?>">
                    </div>

                    <div class="form-group">
                        <label for="nama_club">Nama Club</label>
                        <input type="text" 
                               id="nama_club" 
                               name="nama_club" 
                               class="form-control"
                               value="<?= isset($_POST['nama_club']) ? htmlspecialchars($_POST['nama_club']) : ''; ?>">
                    </div>

                    <div class="form-group">
                        <label for="sekolah">Sekolah</label>
                        <input type="text" 
                               id="sekolah" 
                               name="sekolah" 
                               class="form-control"
                               value="<?= isset($_POST['sekolah']) ? htmlspecialchars($_POST['sekolah']) : ''; ?>">
                    </div>

                    <div class="form-group">
                        <label for="kelas">Kelas</label>
                        <input type="text" 
                               id="kelas" 
                               name="kelas" 
                               class="form-control" 
                               placeholder="Contoh: XII IPA 1"
                               value="<?= isset($_POST['kelas']) ? htmlspecialchars($_POST['kelas']) : ''; ?>">
                    </div> -->
                </div>

                <div class="btn-container">
                    <button type="button" class="btn btn-secondary" onclick="resetForm()">Reset</button>
                    <button type="submit" class="btn btn-primary">Daftar</button>
                </div>
            </form>
        </div>
    </div>

    <script>
        function resetForm() {
            if (confirm('Yakin ingin mengosongkan semua field?')) {
                document.querySelector('form').reset();
                document.getElementById('file-text').textContent = '📁 Klik untuk memilih file bukti pembayaran';
                document.getElementById('file-preview').style.display = 'none';
                updateKategoriOptions();
            }
        }

        // Preview file yang dipilih
        function previewFile() {
            const fileInput = document.getElementById('bukti_pembayaran');
            const fileText = document.getElementById('file-text');
            const filePreview = document.getElementById('file-preview');
            
            if (fileInput.files && fileInput.files[0]) {
                const file = fileInput.files[0];
                const fileName = file.name;
                const fileSize = (file.size / 1024 / 1024).toFixed(2); // Convert to MB
                
                fileText.innerHTML = `✅ ${fileName}`;
                filePreview.innerHTML = `
                    <strong>File dipilih:</strong><br>
                    📄 Nama: ${fileName}<br>
                    📊 Ukuran: ${fileSize} MB<br>
                    📅 Tipe: ${file.type}
                `;
                filePreview.style.display = 'block';
            } else {
                fileText.textContent = '📁 Klik untuk memilih file bukti pembayaran';
                filePreview.style.display = 'none';
            }
        }

        // Auto format nomor HP
        document.getElementById('nomor_hp').addEventListener('input', function(e) {
            let value = e.target.value.replace(/\D/g, '');
            if (value.startsWith('0')) {
                e.target.value = value;
            } else if (value.startsWith('62')) {
                e.target.value = '0' + value.substring(2);
            }
        });

        // Update kategori options berdasarkan umur dan gender
        function updateKategoriOptions() {
            const tanggalLahir = document.getElementById('tanggal_lahir').value;
            const jenisKelamin = document.querySelector('input[name="jenis_kelamin"]:checked');
            const checkboxItems = document.querySelectorAll('.checkbox-item');
            const categoryInfo = document.getElementById('category-info');
            
            if (!tanggalLahir || !jenisKelamin) {
                // Reset semua opsi
                checkboxItems.forEach(item => {
                    item.classList.remove('disabled');
                    const checkbox = item.querySelector('input[type="checkbox"]');
                    checkbox.disabled = false;
                });
                categoryInfo.innerHTML = '<strong>Info:</strong> Anda dapat memilih beberapa kategori sekaligus. Pilih tanggal lahir dan jenis kelamin terlebih dahulu untuk melihat kategori yang sesuai.';
                return;
            }

            // Hitung umur
            const birthDate = new Date(tanggalLahir);
            const currentDate = new Date();
            const age = Math.floor((currentDate - birthDate) / (365.25 * 24 * 60 * 60 * 1000));

            const selectedGender = jenisKelamin.value;
            let availableCategories = 0;
            let availableCategoryNames = [];

            // Filter checkbox berdasarkan umur dan gender
            checkboxItems.forEach(item => {
                const minAge = parseInt(item.getAttribute('data-min-age'));
                const maxAge = parseInt(item.getAttribute('data-max-age'));
                const categoryGender = item.getAttribute('data-gender');
                const checkbox = item.querySelector('input[type="checkbox"]');
                const categoryName = item.querySelector('.category-name').textContent;

                // Check age and gender compatibility
                const ageMatch = age >= minAge && age <= maxAge;
                const genderMatch = categoryGender === 'Campuran' || categoryGender === selectedGender;

                if (ageMatch && genderMatch) {
                    item.classList.remove('disabled');
                    checkbox.disabled = false;
                    availableCategories++;
                    availableCategoryNames.push(categoryName);
                } else {
                    item.classList.add('disabled');
                    checkbox.disabled = true;
                    checkbox.checked = false; // Uncheck jika tidak sesuai
                }
            });

            // Update info kategori
            let infoHtml = `<strong>Umur Anda: ${age} tahun | Jenis Kelamin: ${selectedGender}</strong><br>`;
            if (availableCategories > 0) {
                infoHtml += `Kategori yang sesuai: ${availableCategories} kategori`;
                if (availableCategories <= 3) {
                    infoHtml += ` (${availableCategoryNames.join(', ')})`;
                }
                if (availableCategories > 1) {
                    infoHtml += '<br><em>Anda dapat memilih beberapa kategori sekaligus.</em>';
                }
            } else {
                infoHtml += '<span style="color: #dc3545;">Tidak ada kategori yang sesuai dengan kriteria Anda</span>';
            }

            categoryInfo.innerHTML = infoHtml;
        }

        // Validasi form sebelum submit
        document.querySelector('form').addEventListener('submit', function(e) {
            const checkedCategories = document.querySelectorAll('input[name="category_ids[]"]:checked');
            if (checkedCategories.length === 0) {
                e.preventDefault();
                alert('Pilih minimal satu kategori!');
                return false;
            }
        });

        // Panggil fungsi saat halaman dimuat jika ada data
        document.addEventListener('DOMContentLoaded', function() {
            const tanggalLahir = document.getElementById('tanggal_lahir').value;
            const jenisKelamin = document.querySelector('input[name="jenis_kelamin"]:checked');
            if (tanggalLahir && jenisKelamin) {
                updateKategoriOptions();
            }
        });
    </script>
</body>
</html>

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