[ Mini Kiebo ]
Server: Windows NT AKFAR_SERVER 10.0 build 26200 (Windows 10) AMD64
Path:
D:
/
xampp
/
htdocs
/
repository_afbs
/
user
/
[
Home
]
File: my-uploads.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 (!isLoggedIn()) { header('Location: ../login.php'); exit(); } $db = new Database(); $conn = $db->getConnection(); $user_id = $_SESSION['user_id']; $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; $status = isset($_GET['status']) ? $_GET['status'] : ''; $search = isset($_GET['search']) ? $_GET['search'] : ''; $limit = 10; $offset = ($page - 1) * $limit; // Build query $query = "SELECT * FROM theses WHERE author_id = :user_id"; $countQuery = "SELECT COUNT(*) as total FROM theses WHERE author_id = :user_id"; $params = [':user_id' => $user_id]; if (!empty($status)) { $query .= " AND status = :status"; $countQuery .= " AND status = :status"; $params[':status'] = $status; } if (!empty($search)) { $query .= " AND (title LIKE :search OR keywords LIKE :search)"; $countQuery .= " AND (title LIKE :search OR keywords LIKE :search)"; $params[':search'] = "%$search%"; } $query .= " ORDER BY submitted_at DESC LIMIT :limit OFFSET :offset"; // Get total records $stmt = $conn->prepare($countQuery); foreach($params as $key => $value) { $stmt->bindValue($key, $value); } $stmt->execute(); $totalRecords = $stmt->fetch(PDO::FETCH_ASSOC)['total']; $totalPages = ceil($totalRecords / $limit); // Get theses $stmt = $conn->prepare($query); foreach($params as $key => $value) { $stmt->bindValue($key, $value); } $stmt->bindValue(':limit', $limit, PDO::PARAM_INT); $stmt->bindValue(':offset', $offset, PDO::PARAM_INT); $stmt->execute(); $theses = $stmt->fetchAll(PDO::FETCH_ASSOC); $page_title = 'My Uploads'; 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">My Uploads</h1> <div class="btn-toolbar mb-2 mb-md-0"> <a href="upload.php" class="btn btn-sm btn-primary"> <i class="fas fa-plus"></i> Upload Baru </a> </div> </div> <!-- Filter --> <div class="card mb-4"> <div class="card-body"> <form method="GET" class="row g-3"> <div class="col-md-3"> <select name="status" class="form-select"> <option value="">Semua Status</option> <option value="pending" <?php echo $status == 'pending' ? 'selected' : ''; ?>>Pending</option> <option value="approved" <?php echo $status == 'approved' ? 'selected' : ''; ?>>Approved</option> <option value="rejected" <?php echo $status == 'rejected' ? 'selected' : ''; ?>>Rejected</option> <option value="revision" <?php echo $status == 'revision' ? 'selected' : ''; ?>>Revision</option> </select> </div> <div class="col-md-7"> <input type="text" name="search" class="form-control" placeholder="Cari judul atau kata kunci..." value="<?php echo htmlspecialchars($search); ?>"> </div> <div class="col-md-2"> <button type="submit" class="btn btn-primary w-100">Filter</button> </div> </form> </div> </div> <!-- Daftar Uploads --> <?php if(count($theses) > 0): ?> <?php foreach($theses as $thesis): ?> <div class="card mb-3"> <div class="card-body"> <div class="row"> <div class="col-md-9"> <h5 class="card-title"> <a href="edit-thesis.php?id=<?php echo $thesis['id']; ?>"> <?php echo htmlspecialchars($thesis['title']); ?> </a> </h5> <div class="mb-2"> <span class="badge bg-<?php echo getStatusColor($thesis['status']); ?>"> <?php echo $thesis['status']; ?> </span> <span class="badge bg-info">Tahun: <?php echo $thesis['year']; ?></span> <span class="badge bg-secondary"> <i class="fas fa-eye"></i> <?php echo $thesis['views']; ?> </span> <span class="badge bg-success"> <i class="fas fa-download"></i> <?php echo $thesis['downloads']; ?> </span> </div> <p class="card-text"> <small class="text-muted"> Diupload: <?php echo waktuLalu($thesis['submitted_at']); ?> <?php if($thesis['approved_at']): ?> | Disetujui: <?php echo waktuLalu($thesis['approved_at']); ?> <?php endif; ?> </small> </p> <?php if(!empty($thesis['notes'])): ?> <div class="alert alert-info mt-2 mb-0 py-2"> <small> <strong>Catatan:</strong> <?php echo htmlspecialchars($thesis['notes']); ?> </small> </div> <?php endif; ?> </div> <div class="col-md-3 text-end"> <div class="btn-group-vertical"> <a href="../detail.php?id=<?php echo $thesis['id']; ?>" class="btn btn-sm btn-info" target="_blank"> <i class="fas fa-eye"></i> Lihat </a> <?php if($thesis['status'] == 'pending' || $thesis['status'] == 'revision'): ?> <a href="edit-thesis.php?id=<?php echo $thesis['id']; ?>" class="btn btn-sm btn-warning"> <i class="fas fa-edit"></i> Edit </a> <a href="delete-thesis.php?id=<?php echo $thesis['id']; ?>" class="btn btn-sm btn-danger" onclick="return confirm('Hapus tugas akhir ini?')"> <i class="fas fa-trash"></i> Hapus </a> <?php endif; ?> </div> </div> </div> </div> </div> <?php endforeach; ?> <!-- Pagination --> <?php if($totalPages > 1): ?> <nav aria-label="Page navigation" class="mt-4"> <ul class="pagination justify-content-center"> <?php for($i = 1; $i <= $totalPages; $i++): ?> <li class="page-item <?php echo $i == $page ? 'active' : ''; ?>"> <a class="page-link" href="?page=<?php echo $i; ?>&status=<?php echo $status; ?>&search=<?php echo urlencode($search); ?>"> <?php echo $i; ?> </a> </li> <?php endfor; ?> </ul> </nav> <?php endif; ?> <?php else: ?> <div class="card"> <div class="card-body text-center py-5"> <i class="fas fa-file-pdf fa-4x text-muted mb-3"></i> <h5>Belum Ada Tugas Akhir</h5> <p class="text-muted">Anda belum mengupload tugas akhir apapun.</p> <a href="upload.php" class="btn btn-primary"> <i class="fas fa-upload"></i> Upload Tugas Akhir Sekarang </a> </div> </div> <?php endif; ?> </main> </div> </div> <?php include '../templates/footer.php'; ?> <?php function getStatusColor($status) { $colors = [ 'pending' => 'warning', 'approved' => 'success', 'rejected' => 'danger', 'revision' => 'info' ]; return $colors[$status] ?? 'secondary'; } ?>