[ Mini Kiebo ]
Server: Windows NT AKFAR_SERVER 10.0 build 26200 (Windows 10) AMD64
Path:
D:
/
xampp
/
htdocs
/
repository_afbs
/
dosen
/
[
Home
]
File: dashboard.php
<?php session_start(); require_once '../includes/config.php'; require_once '../includes/database.php'; require_once '../includes/functions.php'; require_once '../includes/auth.php'; if (!isDosen()) { header('Location: ../login.php'); exit(); } $db = new Database(); $conn = $db->getConnection(); $user_id = $_SESSION['user_id']; // Ambil data dosen $query_dosen = "SELECT * FROM users WHERE id = :id"; $stmt_dosen = $conn->prepare($query_dosen); $stmt_dosen->bindParam(':id', $user_id); $stmt_dosen->execute(); $dosen = $stmt_dosen->fetch(PDO::FETCH_ASSOC); // Statistik untuk review $stats = [ 'pending_reviews' => getPendingReviews($conn, $user_id), 'total_reviewed' => getTotalReviewed($conn, $user_id), 'theses_as_supervisor' => getThesesAsSupervisor($conn, $user_id), 'theses_as_examiner' => getThesesAsExaminer($conn, $user_id) ]; // Daftar thesis yang perlu direview $pending_theses = getPendingThesesForReview($conn, $user_id, 10); $page_title = 'Dashboard Dosen'; include '../templates/header.php'; include '../templates/dosen-navbar.php'; ?> <div class="container-fluid"> <div class="row"> <?php include '../templates/dosen-sidebar.php'; ?> <main class="col-md-9 ms-sm-auto col-lg-10 px-md-4"> <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom"> <h1 class="h2">Dashboard Dosen</h1> <div class="btn-toolbar mb-2 mb-md-0"> <span class="text-muted"> Selamat datang, <strong><?php echo htmlspecialchars($dosen['full_name']); ?></strong> </span> </div> </div> <!-- Statistik Cards --> <div class="row mb-4"> <div class="col-md-3"> <div class="card text-white bg-warning"> <div class="card-body"> <div class="d-flex justify-content-between align-items-center"> <div> <h6 class="card-title">Perlu Direview</h6> <h2 class="mb-0"><?php echo $stats['pending_reviews']; ?></h2> </div> <i class="fas fa-clock fa-3x opacity-50"></i> </div> </div> </div> </div> <div class="col-md-3"> <div class="card text-white bg-success"> <div class="card-body"> <div class="d-flex justify-content-between align-items-center"> <div> <h6 class="card-title">Sudah Direview</h6> <h2 class="mb-0"><?php echo $stats['total_reviewed']; ?></h2> </div> <i class="fas fa-check-circle fa-3x opacity-50"></i> </div> </div> </div> </div> <div class="col-md-3"> <div class="card text-white bg-primary"> <div class="card-body"> <div class="d-flex justify-content-between align-items-center"> <div> <h6 class="card-title">Sebagai Pembimbing</h6> <h2 class="mb-0"><?php echo $stats['theses_as_supervisor']; ?></h2> </div> <i class="fas fa-chalkboard-teacher fa-3x opacity-50"></i> </div> </div> </div> </div> <div class="col-md-3"> <div class="card text-white bg-info"> <div class="card-body"> <div class="d-flex justify-content-between align-items-center"> <div> <h6 class="card-title">Sebagai Penguji</h6> <h2 class="mb-0"><?php echo $stats['theses_as_examiner']; ?></h2> </div> <i class="fas fa-gavel fa-3x opacity-50"></i> </div> </div> </div> </div> </div> <!-- Daftar Thesis Perlu Review --> <div class="card"> <div class="card-header d-flex justify-content-between align-items-center"> <h5 class="mb-0">Tugas Akhir yang Perlu Direview</h5> <a href="review-theses.php" class="btn btn-sm btn-primary">Lihat Semua</a> </div> <div class="card-body"> <?php if(count($pending_theses) > 0): ?> <div class="table-responsive"> <table class="table table-hover"> <thead> <tr> <th>Judul</th> <th>Penulis</th> <th>NIM</th> <th>Tahun</th> <th>Peran</th> <th>Diupload</th> <th>Aksi</th> </tr> </thead> <tbody> <?php foreach($pending_theses as $thesis): ?> <tr> <td> <a href="thesis-review.php?id=<?php echo $thesis['id']; ?>"> <?php echo htmlspecialchars(substr($thesis['title'], 0, 60)) . '...'; ?> </a> </td> <td><?php echo htmlspecialchars($thesis['authors']); ?></td> <td><?php echo $thesis['nim']; ?></td> <td><?php echo $thesis['year']; ?></td> <td> <?php if($thesis['supervisor1'] == $dosen['full_name'] || $thesis['supervisor2'] == $dosen['full_name']): ?> <span class="badge bg-primary">Pembimbing</span> <?php endif; ?> <?php if($thesis['examiner1'] == $dosen['full_name'] || $thesis['examiner2'] == $dosen['full_name']): ?> <span class="badge bg-info">Penguji</span> <?php endif; ?> </td> <td><?php echo waktuLalu($thesis['submitted_at']); ?></td> <td> <a href="thesis-review.php?id=<?php echo $thesis['id']; ?>" class="btn btn-sm btn-success"> <i class="fas fa-check-circle"></i> Review </a> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> <?php else: ?> <div class="text-center py-4"> <i class="fas fa-check-circle fa-3x text-success mb-3"></i> <p class="text-muted">Tidak ada tugas akhir yang perlu direview saat ini.</p> </div> <?php endif; ?> </div> </div> </main> </div> </div> <?php include '../templates/footer.php'; ?> <?php function getPendingReviews($conn, $dosen_id) { // Dapatkan nama dosen $query_dosen = "SELECT full_name FROM users WHERE id = :id"; $stmt_dosen = $conn->prepare($query_dosen); $stmt_dosen->bindParam(':id', $dosen_id); $stmt_dosen->execute(); $dosen = $stmt_dosen->fetch(PDO::FETCH_ASSOC); $nama_dosen = $dosen['full_name']; $query = "SELECT COUNT(*) as total FROM theses WHERE status = 'pending' AND (supervisor1 = :nama1 OR supervisor2 = :nama2 OR examiner1 = :nama3 OR examiner2 = :nama4)"; $stmt = $conn->prepare($query); $stmt->bindParam(':nama1', $nama_dosen); $stmt->bindParam(':nama2', $nama_dosen); $stmt->bindParam(':nama3', $nama_dosen); $stmt->bindParam(':nama4', $nama_dosen); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC)['total']; } function getTotalReviewed($conn, $dosen_id) { $query_dosen = "SELECT full_name FROM users WHERE id = :id"; $stmt_dosen = $conn->prepare($query_dosen); $stmt_dosen->bindParam(':id', $dosen_id); $stmt_dosen->execute(); $dosen = $stmt_dosen->fetch(PDO::FETCH_ASSOC); $nama_dosen = $dosen['full_name']; $query = "SELECT COUNT(*) as total FROM theses WHERE status != 'pending' AND (supervisor1 = :nama1 OR supervisor2 = :nama2 OR examiner1 = :nama3 OR examiner2 = :nama4)"; $stmt = $conn->prepare($query); $stmt->bindParam(':nama1', $nama_dosen); $stmt->bindParam(':nama2', $nama_dosen); $stmt->bindParam(':nama3', $nama_dosen); $stmt->bindParam(':nama4', $nama_dosen); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC)['total']; } function getThesesAsSupervisor($conn, $dosen_id) { $query_dosen = "SELECT full_name FROM users WHERE id = :id"; $stmt_dosen = $conn->prepare($query_dosen); $stmt_dosen->bindParam(':id', $dosen_id); $stmt_dosen->execute(); $dosen = $stmt_dosen->fetch(PDO::FETCH_ASSOC); $nama_dosen = $dosen['full_name']; $query = "SELECT COUNT(*) as total FROM theses WHERE (supervisor1 = :nama1 OR supervisor2 = :nama2)"; $stmt = $conn->prepare($query); $stmt->bindParam(':nama1', $nama_dosen); $stmt->bindParam(':nama2', $nama_dosen); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC)['total']; } function getThesesAsExaminer($conn, $dosen_id) { $query_dosen = "SELECT full_name FROM users WHERE id = :id"; $stmt_dosen = $conn->prepare($query_dosen); $stmt_dosen->bindParam(':id', $dosen_id); $stmt_dosen->execute(); $dosen = $stmt_dosen->fetch(PDO::FETCH_ASSOC); $nama_dosen = $dosen['full_name']; $query = "SELECT COUNT(*) as total FROM theses WHERE (examiner1 = :nama1 OR examiner2 = :nama2)"; $stmt = $conn->prepare($query); $stmt->bindParam(':nama1', $nama_dosen); $stmt->bindParam(':nama2', $nama_dosen); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC)['total']; } function getPendingThesesForReview($conn, $dosen_id, $limit) { $query_dosen = "SELECT full_name FROM users WHERE id = :id"; $stmt_dosen = $conn->prepare($query_dosen); $stmt_dosen->bindParam(':id', $dosen_id); $stmt_dosen->execute(); $dosen = $stmt_dosen->fetch(PDO::FETCH_ASSOC); $nama_dosen = $dosen['full_name']; $query = "SELECT t.*, u.nim FROM theses t JOIN users u ON t.author_id = u.id WHERE t.status = 'pending' AND (t.supervisor1 = :nama1 OR t.supervisor2 = :nama2 OR t.examiner1 = :nama3 OR t.examiner2 = :nama4) ORDER BY t.submitted_at ASC LIMIT :limit"; $stmt = $conn->prepare($query); $stmt->bindParam(':nama1', $nama_dosen); $stmt->bindParam(':nama2', $nama_dosen); $stmt->bindParam(':nama3', $nama_dosen); $stmt->bindParam(':nama4', $nama_dosen); $stmt->bindParam(':limit', $limit, PDO::PARAM_INT); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC); } ?>