<?php
require_once '../config/db.php';
require_once '../includes/functions.php';
session_start();
// Redirect if not logged in
if (!isset($_SESSION['user_id'])) {
header("Location: ../login.php?redirect=enroll/document_upload.php");
exit();
}
$user_id = $_SESSION['user_id'];
// Get required documents from the system
$required_documents = [
'id_proof' => 'Government Issued ID',
'address_proof' => 'Proof of Address',
'qualification_certificate' => 'Qualification Certificate',
'passport_photo' => 'Passport Size Photo'
];
// Get user's uploaded documents
$stmt = $conn->prepare("SELECT document_type, file_path, status, upload_date, admin_notes FROM student_documents WHERE user_id = ?");
$stmt->bind_param("i", $user_id);
$stmt->execute();
$result = $stmt->get_result();
$uploaded_documents = [];
while ($row = $result->fetch_assoc()) {
$uploaded_documents[$row['document_type']] = $row;
}
// Get application status
$stmt = $conn->prepare("SELECT id, status FROM enrollment_applications WHERE user_id = ? ORDER BY application_date DESC LIMIT 1");
$stmt->bind_param("i", $user_id);
$stmt->execute();
$application_result = $stmt->get_result();
$application = $application_result->fetch_assoc();
$application_id = $application ? $application['id'] : null;
$application_status = $application ? $application['status'] : 'not_started';
// Count document statistics
$total_documents = count($required_documents);
$verified_documents = 0;
$pending_documents = 0;
$rejected_documents = 0;
foreach ($required_documents as $doc_type => $doc_name) {
if (isset($uploaded_documents[$doc_type])) {
if ($uploaded_documents[$doc_type]['status'] == 'verified') {
$verified_documents++;
} elseif ($uploaded_documents[$doc_type]['status'] == 'pending') {
$pending_documents++;
} elseif ($uploaded_documents[$doc_type]['status'] == 'rejected') {
$rejected_documents++;
}
}
}
$verification_progress = $total_documents > 0 ? ($verified_documents / $total_documents) * 100 : 0;
// Get the page title
$page_title = "Document Upload";
include '../includes/header.php';
include '../includes/navbar.php';
?>
<div class="container py-5 document-upload-section">
<div class="row mb-4">
<div class="col-md-8">
<h1>Document Upload</h1>
<p class="lead">Please upload all required documents for enrollment verification.</p>
</div>
<div class="col-md-4 text-end">
<div class="card">
<div class="card-body">
<h5 class="card-title">Application Status</h5>
<div class="text-center mb-3">
<span id="application-status-badge" class="badge fs-6 px-3 py-2
<?php echo getStatusBadgeClass($application_status); ?>">
<?php echo getStatusLabel($application_status); ?>
</span>
</div>
<div class="progress mb-2" style="height: 20px;">
<div id="documents-progress-bar" class="progress-bar bg-success progress-bar-striped"
role="progressbar" style="width: <?php echo $verification_progress; ?>%;"
aria-valuenow="<?php echo $verification_progress; ?>" aria-valuemin="0"
aria-valuemax="100"><?php echo round($verification_progress); ?>%</div>
</div>
<div class="d-flex justify-content-between small text-muted mb-3">
<span>Verified: <span id="verified-docs-count"><?php echo $verified_documents; ?></span>/
<span id="total-docs-count"><?php echo $total_documents; ?></span></span>
<span>Pending: <?php echo $pending_documents; ?></span>
<span>Rejected: <?php echo $rejected_documents; ?></span>
</div>
<?php if ($application_status == 'payment_pending'): ?>
<a href="payment.php" class="btn btn-primary btn-block">Proceed to Payment</a>
<?php endif; ?>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="alert alert-info">
<i class="fas fa-info-circle"></i>
<strong>Important:</strong> All documents must be verified before proceeding to the next step.
<ul class="mb-0 mt-2">
<li>Acceptable file formats: PDF, JPG, PNG</li>
<li>Maximum file size: 5MB per document</li>
<li>Documents must be clear and legible</li>
<li>All information must match your application details</li>
</ul>
</div>
</div>
</div>
<div class="row mt-4">
<?php foreach ($required_documents as $doc_type => $doc_name): ?>
<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"><?php echo $doc_name; ?></h5>
<?php if (isset($uploaded_documents[$doc_type])): ?>
<?php
$status = $uploaded_documents[$doc_type]['status'];
$badge_class = '';
$badge_text = '';
switch ($status) {
case 'pending':
$badge_class = 'bg-warning';
$badge_text = 'Pending';
break;
case 'verified':
$badge_class = 'bg-success';
$badge_text = 'Verified';
break;
case 'rejected':
$badge_class = 'bg-danger';
$badge_text = 'Rejected';
break;
}
?>
<span id="<?php echo $doc_type; ?>-status" class="badge <?php echo $badge_class; ?>"><?php echo $badge_text; ?></span>
<?php else: ?>
<span id="<?php echo $doc_type; ?>-status" class="badge bg-secondary">Not Uploaded</span>
<?php endif; ?>
</div>
<div class="card-body">
<?php if (isset($uploaded_documents[$doc_type])): ?>
<p class="mb-1">Uploaded: <span id="<?php echo $doc_type; ?>-date"><?php echo date('M d, Y', strtotime($uploaded_documents[$doc_type]['upload_date'])); ?></span></p>
<?php if ($uploaded_documents[$doc_type]['status'] == 'rejected' && !empty($uploaded_documents[$doc_type]['admin_notes'])): ?>
<div class="alert alert-danger mt-2">
<strong>Rejection Reason:</strong> <?php echo htmlspecialchars($uploaded_documents[$doc_type]['admin_notes']); ?>
</div>
<?php endif; ?>
<div class="mt-3 d-flex">
<button class="btn btn-sm btn-primary view-document-btn me-2"
data-document-url="<?php echo htmlspecialchars($uploaded_documents[$doc_type]['file_path']); ?>"
data-document-type="<?php echo $doc_type; ?>">
<i class="fas fa-eye"></i> View Document
</button>
<?php if ($uploaded_documents[$doc_type]['status'] != 'verified'): ?>
<button class="btn btn-sm btn-outline-secondary"
data-bs-toggle="collapse"
data-bs-target="#reupload-<?php echo $doc_type; ?>"
aria-expanded="false">
<i class="fas fa-upload"></i> Re-upload
</button>
<?php endif; ?>
</div>
<?php if ($uploaded_documents[$doc_type]['status'] != 'verified'): ?>
<div class="collapse mt-3" id="reupload-<?php echo $doc_type; ?>">
<form class="document-upload-form" action="ajax/upload_document.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="document_type" value="<?php echo $doc_type; ?>">
<input type="hidden" name="application_id" value="<?php echo $application_id; ?>">
<div class="mb-3">
<input type="file" class="form-control form-control-sm" name="document_file" required>
</div>
<div class="upload-progress-container d-none">
<div class="progress" style="height: 10px;">
<div class="progress-bar progress-bar-striped progress-bar-animated"
role="progressbar" style="width: 0%" aria-valuenow="0"
aria-valuemin="0" aria-valuemax="100"></div>
</div>
</div>
<button type="submit" class="btn btn-sm btn-primary">
<i class="fas fa-upload"></i> Upload Document
</button>
</form>
<div class="upload-message mt-2"></div>
</div>
<?php endif; ?>
<?php else: ?>
<p>Please upload your <?php echo strtolower($doc_name); ?> document.</p>
<form class="document-upload-form" action="ajax/upload_document.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="document_type" value="<?php echo $doc_type; ?>">
<input type="hidden" name="application_id" value="<?php echo $application_id; ?>">
<div class="mb-3">
<input type="file" class="form-control" name="document_file" required>
</div>
<div class="upload-progress-container d-none">
<div class="progress" style="height: 10px;">
<div class="progress-bar progress-bar-striped progress-bar-animated"
role="progressbar" style="width: 0%" aria-valuenow="0"
aria-valuemin="0" aria-valuemax="100"></div>
</div>
</div>
<button type="submit" class="btn btn-primary">
<i class="fas fa-upload"></i> Upload Document
</button>
</form>
<div class="upload-message mt-2"></div>
<?php endif; ?>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
<!-- Document Preview Modal -->
<div class="modal fade" id="documentPreviewModal" tabindex="-1" aria-labelledby="documentPreviewModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="documentPreviewModalLabel">Document Preview</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body" id="documentPreviewContent">
<!-- Content will be loaded dynamically -->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<?php
// Helper functions
function getStatusBadgeClass($status) {
switch ($status) {
case 'pending':
return 'bg-warning';
case 'document_review':
return 'bg-info';
case 'payment_pending':
return 'bg-primary';
case 'payment_verified':
return 'bg-success';
case 'rejected':
return 'bg-danger';
default:
return 'bg-secondary';
}
}
function getStatusLabel($status) {
switch ($status) {
case 'pending':
return 'Documents Pending';
case 'document_review':
return 'Documents Under Review';
case 'payment_pending':
return 'Payment Pending';
case 'payment_verified':
return 'Enrollment Active';
case 'rejected':
return 'Application Rejected';
case 'not_started':
return 'Not Started';
default:
return 'Unknown Status';
}
}
include '../includes/footer.php';
?>
<script src="../assets/js/document-upload.js"></script>