[ Mini Kiebo ]
Server: Windows NT AKFAR_SERVER 10.0 build 26200 (Windows 10) AMD64
Path:
D:
/
xampp
/
htdocs
/
repository_afbs
/
user
/
[
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'; // Cek login if (!isLoggedIn()) { header('Location: ../login.php'); exit(); } $db = new Database(); $conn = $db->getConnection(); $user_id = $_SESSION['user_id']; // Ambil data user $query_user = "SELECT * FROM users WHERE id = :id"; $stmt_user = $conn->prepare($query_user); $stmt_user->bindParam(':id', $user_id); $stmt_user->execute(); $user = $stmt_user->fetch(PDO::FETCH_ASSOC); // Ambil statistik user $stats = [ 'total_uploads' => getTotalUserUploads($conn, $user_id), 'pending_uploads' => getUserUploadsByStatus($conn, $user_id, 'pending'), 'approved_uploads' => getUserUploadsByStatus($conn, $user_id, 'approved'), 'total_downloads' => getUserTotalDownloads($conn, $user_id), 'total_views' => getUserTotalViews($conn, $user_id) ]; // Ambil riwayat upload terbaru $recent_uploads = getUserRecentUploads($conn, $user_id, 5); // Ambil riwayat download terbaru $recent_downloads = getUserRecentDownloads($conn, $user_id, 5); $page_title = 'Dashboard Mahasiswa'; include '../templates/header.php'; include '../templates/user-navbar.php'; ?> <div class="container-fluid"> <div class="row"> <?php include '../templates/user-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</h1> <div class="btn-toolbar mb-2 mb-md-0"> <span class="text-muted"> Selamat datang, <strong><?php echo htmlspecialchars($user['full_name']); ?></strong> </span> </div> </div> <!-- Welcome Card --> <div class="row mb-4"> <div class="col-md-12"> <div class="card bg-primary text-white"> <div class="card-body"> <div class="row align-items-center"> <div class="col-md-8"> <h4 class="card-title">Halo, <?php echo htmlspecialchars($user['full_name']); ?>!</h4> <p class="card-text"> Selamat datang di Repository Akademi Farmasi Bumi Siliwangi. Anda dapat mengupload tugas akhir, melihat status upload, dan mengelola dokumen Anda di sini. </p> <a href="upload.php" class="btn btn-light"> <i class="fas fa-upload"></i> Upload Tugas Akhir Baru </a> </div> <div class="col-md-4 text-end"> <i class="fas fa-graduation-cap fa-5x opacity-50"></i> </div> </div> </div> </div> </div> </div> <!-- Statistik Cards --> <div class="row mb-4"> <div class="col-md-3"> <div class="card border-primary"> <div class="card-body"> <div class="d-flex justify-content-between align-items-center"> <div> <h6 class="text-muted mb-2">Total Upload</h6> <h3 class="mb-0 text-primary"><?php echo $stats['total_uploads']; ?></h3> </div> <div class="bg-primary rounded-circle p-3"> <i class="fas fa-file-pdf text-white"></i> </div> </div> <small class="text-muted"> Approved: <?php echo $stats['approved_uploads']; ?> | Pending: <?php echo $stats['pending_uploads']; ?> </small> </div> </div> </div> <div class="col-md-3"> <div class="card border-success"> <div class="card-body"> <div class="d-flex justify-content-between align-items-center"> <div> <h6 class="text-muted mb-2">Total Downloads</h6> <h3 class="mb-0 text-success"><?php echo $stats['total_downloads']; ?></h3> </div> <div class="bg-success rounded-circle p-3"> <i class="fas fa-download text-white"></i> </div> </div> </div> </div> </div> <div class="col-md-3"> <div class="card border-info"> <div class="card-body"> <div class="d-flex justify-content-between align-items-center"> <div> <h6 class="text-muted mb-2">Total Views</h6> <h3 class="mb-0 text-info"><?php echo $stats['total_views']; ?></h3> </div> <div class="bg-info rounded-circle p-3"> <i class="fas fa-eye text-white"></i> </div> </div> </div> </div> </div> <div class="col-md-3"> <div class="card border-warning"> <div class="card-body"> <div class="d-flex justify-content-between align-items-center"> <div> <h6 class="text-muted mb-2">Akun</h6> <p class="mb-0"> <small>NIM: <?php echo $user['nim'] ?? '-'; ?></small><br> <small>Role: <?php echo $user['role']; ?></small> </p> </div> <div class="bg-warning rounded-circle p-3"> <i class="fas fa-user text-white"></i> </div> </div> </div> </div> </div> </div> <div class="row"> <!-- Recent Uploads --> <div class="col-md-6 mb-4"> <div class="card h-100"> <div class="card-header d-flex justify-content-between align-items-center"> <h5 class="mb-0">Upload Terbaru</h5> <a href="my-uploads.php" class="btn btn-sm btn-primary">Lihat Semua</a> </div> <div class="card-body"> <?php if(count($recent_uploads) > 0): ?> <div class="list-group"> <?php foreach($recent_uploads as $upload): ?> <a href="edit-thesis.php?id=<?php echo $upload['id']; ?>" class="list-group-item list-group-item-action"> <div class="d-flex w-100 justify-content-between"> <h6 class="mb-1"><?php echo htmlspecialchars(substr($upload['title'], 0, 50)) . '...'; ?></h6> <small><?php echo waktuLalu($upload['submitted_at']); ?></small> </div> <p class="mb-1"> <span class="badge bg-<?php echo getStatusColor($upload['status']); ?>"> <?php echo $upload['status']; ?> </span> <span class="badge bg-info"> <i class="fas fa-eye"></i> <?php echo $upload['views']; ?> </span> <span class="badge bg-success"> <i class="fas fa-download"></i> <?php echo $upload['downloads']; ?> </span> </p> </a> <?php endforeach; ?> </div> <?php else: ?> <div class="text-center py-4"> <i class="fas fa-file-pdf fa-3x text-muted mb-3"></i> <p class="text-muted">Belum ada tugas akhir yang diupload</p> <a href="upload.php" class="btn btn-primary"> <i class="fas fa-upload"></i> Upload Sekarang </a> </div> <?php endif; ?> </div> </div> </div> <!-- Recent Downloads --> <div class="col-md-6 mb-4"> <div class="card h-100"> <div class="card-header d-flex justify-content-between align-items-center"> <h5 class="mb-0">Riwayat Download</h5> <a href="download-history.php" class="btn btn-sm btn-primary">Lihat Semua</a> </div> <div class="card-body"> <?php if(count($recent_downloads) > 0): ?> <div class="list-group"> <?php foreach($recent_downloads as $download): ?> <div class="list-group-item"> <div class="d-flex w-100 justify-content-between"> <h6 class="mb-1"> <a href="../detail.php?id=<?php echo $download['thesis_id']; ?>" target="_blank"> <?php echo htmlspecialchars(substr($download['title'], 0, 50)) . '...'; ?> </a> </h6> <small><?php echo waktuLalu($download['downloaded_at']); ?></small> </div> <p class="mb-1"> <small class="text-muted"> Oleh: <?php echo htmlspecialchars($download['authors']); ?> </small> </p> </div> <?php endforeach; ?> </div> <?php else: ?> <div class="text-center py-4"> <i class="fas fa-download fa-3x text-muted mb-3"></i> <p class="text-muted">Belum ada riwayat download</p> <a href="../index.php" class="btn btn-primary"> <i class="fas fa-search"></i> Cari Tugas Akhir </a> </div> <?php endif; ?> </div> </div> </div> </div> <!-- Quick Actions --> <div class="row"> <div class="col-md-12"> <div class="card"> <div class="card-header"> <h5 class="mb-0">Aksi Cepat</h5> </div> <div class="card-body"> <div class="row"> <div class="col-md-3 mb-3"> <a href="upload.php" class="btn btn-outline-primary w-100 py-3"> <i class="fas fa-upload fa-2x mb-2"></i><br> Upload Tugas Akhir </a> </div> <div class="col-md-3 mb-3"> <a href="my-uploads.php" class="btn btn-outline-success w-100 py-3"> <i class="fas fa-file-pdf fa-2x mb-2"></i><br> My Uploads </a> </div> <div class="col-md-3 mb-3"> <a href="profile.php" class="btn btn-outline-info w-100 py-3"> <i class="fas fa-user-cog fa-2x mb-2"></i><br> Edit Profil </a> </div> <div class="col-md-3 mb-3"> <a href="../index.php" class="btn btn-outline-secondary w-100 py-3"> <i class="fas fa-search fa-2x mb-2"></i><br> Cari Repository </a> </div> </div> </div> </div> </div> </div> </main> </div> </div> <?php include '../templates/footer.php'; ?> <?php function getTotalUserUploads($conn, $user_id) { $query = "SELECT COUNT(*) as total FROM theses WHERE author_id = :user_id"; $stmt = $conn->prepare($query); $stmt->bindParam(':user_id', $user_id); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC)['total']; } function getUserUploadsByStatus($conn, $user_id, $status) { $query = "SELECT COUNT(*) as total FROM theses WHERE author_id = :user_id AND status = :status"; $stmt = $conn->prepare($query); $stmt->bindParam(':user_id', $user_id); $stmt->bindParam(':status', $status); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC)['total']; } function getUserTotalDownloads($conn, $user_id) { $query = "SELECT COUNT(*) as total FROM downloads_log WHERE user_id = :user_id"; $stmt = $conn->prepare($query); $stmt->bindParam(':user_id', $user_id); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC)['total']; } function getUserTotalViews($conn, $user_id) { $query = "SELECT SUM(views) as total FROM theses WHERE author_id = :user_id"; $stmt = $conn->prepare($query); $stmt->bindParam(':user_id', $user_id); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC)['total'] ?? 0; } function getUserRecentUploads($conn, $user_id, $limit) { $query = "SELECT id, title, status, views, downloads, submitted_at FROM theses WHERE author_id = :user_id ORDER BY submitted_at DESC LIMIT :limit"; $stmt = $conn->prepare($query); $stmt->bindParam(':user_id', $user_id); $stmt->bindParam(':limit', $limit, PDO::PARAM_INT); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC); } function getUserRecentDownloads($conn, $user_id, $limit) { $query = "SELECT d.*, t.title, t.authors FROM downloads_log d JOIN theses t ON d.thesis_id = t.id WHERE d.user_id = :user_id ORDER BY d.downloaded_at DESC LIMIT :limit"; $stmt = $conn->prepare($query); $stmt->bindParam(':user_id', $user_id); $stmt->bindParam(':limit', $limit, PDO::PARAM_INT); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC); } function getStatusColor($status) { $colors = [ 'pending' => 'warning', 'approved' => 'success', 'rejected' => 'danger', 'revision' => 'info' ]; return $colors[$status] ?? 'secondary'; } ?>