MINI
C:
/
xampp
/
htdocs
/
reset
/
Upload File:
files >> C:/xampp/htdocs/reset/index - html.php
<?php require_once 'config.php'; ?> <!DOCTYPE html> <html lang="id"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Manajemen Kartu</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> <link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/dataTables.bootstrap5.min.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css"> <style> :root { --primary-color: #4e73df; --secondary-color: #858796; --success-color: #1cc88a; --danger-color: #e74a3b; --warning-color: #f6c23e; } body { background-color: #f8f9fc; font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } .sidebar { background: linear-gradient(180deg, var(--primary-color) 0%, #224abe 100%); min-height: 100vh; width: 250px; position: fixed; z-index: 1000; box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.15); } .main-content { margin-left: 250px; width: calc(100% - 250px); min-height: 100vh; } .navbar-top { height: 4.375rem; box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.15); background: white; } .card { border: none; border-radius: 0.35rem; box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.1); margin-bottom: 1.5rem; transition: all 0.3s; } .card:hover { transform: translateY(-5px); } .stat-card { color: white; border-left: 0.25rem solid !important; border-left-color: inherit !important; } .status-badge { display: inline-block; padding: 0.35em 0.65em; font-size: 0.75em; font-weight: 700; line-height: 1; color: white; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: 0.25rem; } .badge-aktif { background-color: var(--success-color); } .badge-nonaktif { background-color: var(--danger-color); } .badge-masuk { background-color: var(--secondary-color); } .badge-keluar { background-color: var(--warning-color); } .table-responsive { margin-bottom: 0; border-radius: 0.35rem; box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.1); } .user-avatar { width: 40px; height: 40px; border-radius: 50%; background-color: var(--primary-color); color: white; display: flex; align-items: center; justify-content: center; font-weight: bold; } .btn-action { width: 30px; height: 30px; padding: 0; display: inline-flex; align-items: center; justify-content: center; } .reset-all-btn { position: fixed; bottom: 20px; right: 20px; z-index: 1000; } </style> </head> <body> <!-- Sidebar Navigation --> <div class="sidebar"> <div class="text-center py-4"> <h4 class="text-white fw-bold"></h4> <p class="text-white-50 small mb-0">Manajemen Kartu </p> </div> <hr class="bg-white opacity-50 mx-3"> <div class="nav flex-column px-3"> <a href="index.php" class="nav-link active text-white py-3"> <i class="bi bi-speedometer2 me-2"></i> Dashboard </a> <a href="#" class="nav-link text-white py-3"> <i class="bi bi-credit-card me-2"></i> Manajemen Kartu </a> <a href="#" class="nav-link text-white py-3"> <i class="bi bi-people me-2"></i> Data </a> <a href="#" class="nav-link text-white py-3"> <i class="bi bi-graph-up me-2"></i> Laporan </a> </div> <div class="nav flex-column px-3 mt-auto mb-3"> <a href="logout.php" class="nav-link text-white py-3"> <i class="bi bi-box-arrow-left me-2"></i> Logout </a> </div> </div> <!-- Main Content Area --> <div class="main-content"> <!-- Top Navigation Bar --> <nav class="navbar navbar-expand navbar-light navbar-top bg-white shadow mb-4"> <div class="container-fluid"> <button class="btn btn-link d-md-none rounded-circle me-3" id="sidebarToggle"> <i class="bi bi-list"></i> </button> <div class="d-flex align-items-center ms-auto"> <div class="user-avatar me-2"> <?= strtoupper(substr($_SESSION['nama_lengkap'] ?? 'A', 0, 1)) ?> </div> <span class="me-3 d-none d-lg-inline"><?= $_SESSION['nama_lengkap'] ?? 'Admin' ?></span> </div> </div> </nav> <!-- Page Content --> <div class="container-fluid px-4"> <!-- Page Heading --> <div class="d-sm-flex align-items-center justify-content-between mb-4"> <h1 class="h3 mb-0 text-gray-800">Dashboard Kartu Anggota</h1> <div class="d-none d-sm-inline-block"> <span class="badge bg-primary"> <i class="bi bi-person-fill me-1"></i> </span> </div> </div> <!-- Statistic Cards --> <div class="row"> <div class="col-xl-3 col-md-6 mb-4"> <div class="card stat-card border-left-primary bg-primary h-100 py-2"> <div class="card-body"> <div class="row no-gutters align-items-center"> <div class="col me-2"> <div class="text-xs fw-bold text-white text-uppercase mb-1"> Total Kartu</div> <div class="h5 mb-0 fw-bold text-white"><?= $stats['total_kartu'] ?? 0 ?></div> </div> <div class="col-auto"> <i class="bi bi-credit-card fs-2 opacity-75"></i> </div> </div> </div> </div> </div> <div class="col-xl-3 col-md-6 mb-4"> <div class="card stat-card border-left-success bg-success h-100 py-2"> <div class="card-body"> <div class="row no-gutters align-items-center"> <div class="col me-2"> <div class="text-xs fw-bold text-white text-uppercase mb-1"> Kartu Aktif</div> <div class="h5 mb-0 fw-bold text-white"><?= $stats['total_aktif'] ?? 0 ?></div> </div> <div class="col-auto"> <i class="bi bi-check-circle fs-2 opacity-75"></i> </div> </div> </div> </div> </div> <div class="col-xl-3 col-md-6 mb-4"> <div class="card stat-card border-left-danger bg-danger h-100 py-2"> <div class="card-body"> <div class="row no-gutters align-items-center"> <div class="col me-2"> <div class="text-xs fw-bold text-white text-uppercase mb-1"> Kartu Non-Aktif</div> <div class="h5 mb-0 fw-bold text-white"><?= $stats['total_nonaktif'] ?? 0 ?></div> </div> <div class="col-auto"> <i class="bi bi-x-circle fs-2 opacity-75"></i> </div> </div> </div> </div> </div> <div class="col-xl-3 col-md-6 mb-4"> <div class="card stat-card border-left-warning bg-warning h-100 py-2"> <div class="card-body"> <div class="row no-gutters align-items-center"> <div class="col me-2"> <div class="text-xs fw-bold text-dark text-uppercase mb-1"> Kartu Keluar</div> <div class="h5 mb-0 fw-bold text-dark"><?= $stats['total_keluar'] ?? 0 ?></div> </div> <div class="col-auto"> <i class="bi bi-box-arrow-right fs-2 opacity-75"></i> </div> </div> </div> </div> </div> </div> <!-- Card Management Table --> <div class="card shadow mb-4"> <div class="card-header py-3 d-flex flex-row align-items-center justify-content-between"> <h6 class="m-0 fw-bold text-primary">Daftar Kartu Anggota</h6> <button class="btn btn-sm btn-primary" data-bs-toggle="modal" data-bs-target="#addCardModal"> <i class="bi bi-plus-lg me-1"></i> Tambah Kartu </button> </div> <div class="card-body"> <?php if (isset($success_message)): ?> <div class="alert alert-success alert-dismissible fade show"> <i class="bi bi-check-circle"></i> <?= $success_message ?> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php elseif (isset($error_message)): ?> <div class="alert alert-danger alert-dismissible fade show"> <i class="bi bi-exclamation-triangle"></i> <?= $error_message ?> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php endif; ?> <div class="table-responsive"> <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0"> <thead> <tr> <th>No. Kartu</th> <th>Status</th> <th>Status Keluar</th> <th>Keterangan</th> <th>Aksi</th> </tr> </thead> <tbody> <tr> <td> <span class="status-badge <?= $card['is_aktif'] ? 'badge-aktif' : 'badge-nonaktif' ?>"> </span> </td> <td> <span class="status-badge <?= $card['is_keluar'] ? 'badge-keluar' : 'badge-masuk' ?>"> </span> </td> <td><?= htmlspecialchars($card['keterangan'] ?? '-') ?></td> <td> <button class="btn btn-sm btn-primary btn-action" title="Edit" data-bs-toggle="modal" data-bs-target="#editModal" data-card-id="<?= htmlspecialchars($card['nomor_card']) ?>" data-is-aktif="<?= $card['is_aktif'] ? '1' : '0' ?>" data-is-keluar="<?= $card['is_keluar'] ? '1' : '0' ?>" data-keterangan="<?= htmlspecialchars($card['keterangan'] ?? '') ?>"> <i class="bi bi-pencil"></i> </button> </td> </tbody> </table> </div> </div> </div> </div> </div> <!-- Floating Reset Button (Admin Only) --> <?php if ($_SESSION['user_role'] === 'admin'): ?> <form method="post" class="reset-all-btn"> <button type="submit" name="reset_all_active" class="btn btn-danger rounded-circle p-3 shadow-lg" title="Reset Semua Kartu Aktif" onclick="return confirm('Reset SEMUA kartu aktif?')"> <i class="bi bi-arrow-repeat fs-4"></i> </button> </form> <?php endif; ?> <!-- Edit Card Modal --> <div class="modal fade" id="editModal" tabindex="-1" aria-labelledby="editModalLabel" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="editModalLabel">Edit Data Kartu</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <form method="post"> <input type="hidden" id="editCardId" name="nomor_card"> <div class="modal-body"> <div class="mb-3"> <label class="form-label">Status Aktif</label> <div class="form-check"> <input class="form-check-input" type="radio" name="is_aktif" id="aktifTrue" value="1"> <label class="form-check-label" for="aktifTrue"> <span class="badge bg-success">AKTIF</span> </label> </div> <div class="form-check"> <input class="form-check-input" type="radio" name="is_aktif" id="aktifFalse" value="0"> <label class="form-check-label" for="aktifFalse"> <span class="badge bg-danger">NON-AKTIF</span> </label> </div> </div> <div class="mb-3"> <label class="form-label">Status Keluar</label> <div class="form-check"> <input class="form-check-input" type="radio" name="is_keluar" id="keluarTrue" value="1"> <label class="form-check-label" for="keluarTrue"> <span class="badge bg-warning">KELUAR</span> </label> </div> <div class="form-check"> <input class="form-check-input" type="radio" name="is_keluar" id="keluarFalse" value="0"> <label class="form-check-label" for="keluarFalse"> <span class="badge bg-secondary">MASUK</span> </label> </div> </div> <div class="mb-3"> <label for="editKeterangan" class="form-label">Keterangan</label> <textarea class="form-control" id="editKeterangan" name="keterangan" rows="3"></textarea> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button> <button type="submit" name="update_card" class="btn btn-primary">Simpan Perubahan</button> </div> </form> </div> </div> </div> <!-- JavaScript Libraries --> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> <script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script> <script src="https://cdn.datatables.net/1.13.6/js/dataTables.bootstrap5.min.js"></script> <script> // Initialize DataTable $(document).ready(function() { $('#dataTable').DataTable({ language: { url: 'https://cdn.datatables.net/plug-ins/1.13.6/i18n/id.json' } }); // Edit Modal Handler $('#editModal').on('show.bs.modal', function(event) { var button = $(event.relatedTarget); var cardId = button.data('card-id'); var isAktif = button.data('is-aktif'); var isKeluar = button.data('is-keluar'); var keterangan = button.data('keterangan'); var modal = $(this); modal.find('#editCardId').val(cardId); modal.find('input[name="is_aktif"][value="' + isAktif + '"]').prop('checked', true); modal.find('input[name="is_keluar"][value="' + isKeluar + '"]').prop('checked', true); modal.find('#editKeterangan').val(keterangan); }); // Toggle Sidebar $('#sidebarToggle').click(function() { $('.sidebar').toggleClass('d-none'); $('.main-content').toggleClass('full-width'); }); }); </script> </body> </html>
Copyright ©2021 || Defacer Indonesia