<?php
// Start output buffering
ob_start();
// Include necessary files
require_once 'config.php';
require_once 'includes/certificate_lib.php';
// Start session if not already started
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
$pageTitle = "Certificate Verification";
include_once('includes/header.php');
// Initialize certificate verifier
$certificateVerifier = new CertificateVerifier();
// Initialize variables
$verification_code = $_GET['code'] ?? '';
$certificate_number = $_GET['number'] ?? '';
$verification_result = null;
$certificate_data = null;
$error_message = '';
// Process verification request
if (!empty($verification_code) || !empty($certificate_number)) {
// Get certificate from database
$query = '';
$param_type = '';
$param_value = '';
if (!empty($verification_code)) {
$query = "SELECT e.*,
CONCAT(u.first_name, ' ', u.last_name) AS student_name,
u.email AS student_email,
c.title AS course_title,
c.duration AS course_duration
FROM enrollments e
INNER JOIN users u ON e.user_id = u.id
INNER JOIN courses c ON e.course_id = c.id
WHERE e.verification_code = ?";
$param_type = "s";
$param_value = $verification_code;
} else {
$query = "SELECT e.*,
CONCAT(u.first_name, ' ', u.last_name) AS student_name,
u.email AS student_email,
c.title AS course_title,
c.duration AS course_duration
FROM enrollments e
INNER JOIN users u ON e.user_id = u.id
INNER JOIN courses c ON e.course_id = c.id
WHERE e.certificate_number = ?";
$param_type = "s";
$param_value = $certificate_number;
}
$stmt = $conn->prepare($query);
$stmt->bind_param($param_type, $param_value);
$stmt->execute();
$result = $stmt->get_result();
if ($result && $result->num_rows > 0) {
$certificate_data = $result->fetch_assoc();
// Prepare certificate meta for verification
$certificate_meta = json_decode($certificate_data['certificate_meta'], true);
if (!empty($certificate_meta)) {
// Create signed data to verify
$signedData = [
'data' => $certificate_meta,
'hash' => md5(json_encode($certificate_meta) . $certificateVerifier->generator->getSecretKey()),
'issued_at' => $certificate_data['certificate_issue_date']
];
// Verify certificate
if (!empty($verification_code)) {
$verification_result = $certificateVerifier->verifyByCode($verification_code, $signedData);
} else {
$verification_result = $certificateVerifier->verifyByCertificateNumber($certificate_number, $signedData);
}
} else {
// If no meta data, use a simpler verification
$verification_result = true;
}
} else {
$error_message = "Certificate not found";
}
}
// Get institute details
$institute_query = "SELECT * FROM site_settings WHERE setting_key IN ('site_name', 'site_logo', 'contact_email', 'contact_phone')";
$institute_result = $conn->query($institute_query);
$institute = [];
if ($institute_result->num_rows > 0) {
while ($row = $institute_result->fetch_assoc()) {
$institute[$row['setting_key']] = $row['setting_value'];
}
}
// Set institute defaults if not found
if (!isset($institute['site_name'])) {
$institute['site_name'] = 'Popular Computer Institute';
}
if (!isset($institute['site_logo'])) {
$institute['site_logo'] = 'assets/img/logo.png';
}
?>
<div class="container mt-5 mb-5">
<div class="row justify-content-center">
<div class="col-md-10">
<div class="card shadow">
<div class="card-header bg-primary text-white">
<h4 class="m-0">Certificate Verification</h4>
</div>
<div class="card-body">
<?php if ($verification_result === null): ?>
<div class="text-center mb-4">
<img src="assets/img/verification-icon.png" alt="Verification" class="img-fluid" style="max-height: 150px;">
<h5 class="mt-3">Verify the authenticity of a certificate</h5>
<p class="text-muted">Enter the verification code or certificate number to verify a certificate issued by <?php echo $institute['site_name']; ?></p>
</div>
<?php if (!empty($error_message)): ?>
<div class="alert alert-danger">
<?php echo $error_message; ?>
</div>
<?php endif; ?>
<div class="row justify-content-center">
<div class="col-md-8">
<form method="get" action="" class="mb-4">
<div class="form-group mb-3">
<label for="code">Verification Code</label>
<input type="text" class="form-control" id="code" name="code" placeholder="Enter verification code (e.g. ABC12345)">
</div>
<button type="submit" class="btn btn-primary btn-block">Verify Certificate</button>
</form>
<div class="text-center my-3">
<span class="text-muted">OR</span>
</div>
<form method="get" action="">
<div class="form-group mb-3">
<label for="number">Certificate Number</label>
<input type="text" class="form-control" id="number" name="number" placeholder="Enter certificate number (e.g. CERT-20230101-0001)">
</div>
<button type="submit" class="btn btn-secondary btn-block">Verify Certificate</button>
</form>
</div>
</div>
<?php else: ?>
<?php if ($verification_result): ?>
<!-- Valid Certificate -->
<div class="text-center mb-4">
<img src="assets/img/verified-icon.png" alt="Verified" class="img-fluid" style="max-height: 120px;">
<h5 class="text-success mt-3">Certificate Verified Successfully</h5>
<p>This certificate is authentic and was issued by <?php echo $institute['site_name']; ?>.</p>
</div>
<div class="card mb-4">
<div class="card-header bg-light">
<h5 class="mb-0">Certificate Details</h5>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<p><strong>Certificate Number:</strong><br> <?php echo $certificate_data['certificate_number']; ?></p>
<p><strong>Student Name:</strong><br> <?php echo $certificate_data['student_name']; ?></p>
<p><strong>Course Title:</strong><br> <?php echo $certificate_data['course_title']; ?></p>
</div>
<div class="col-md-6">
<p><strong>Issue Date:</strong><br> <?php echo date('F d, Y', strtotime($certificate_data['certificate_issue_date'])); ?></p>
<p><strong>Verification Code:</strong><br> <?php echo $certificate_data['verification_code']; ?></p>
<p><strong>Course Duration:</strong><br> <?php echo $certificate_data['course_duration']; ?></p>
</div>
</div>
</div>
</div>
<div class="text-center">
<a href="student/view_certificate.php?number=<?php echo $certificate_data['certificate_number']; ?>" target="_blank" class="btn btn-primary">
<i class="fas fa-eye mr-2"></i> View Certificate
</a>
</div>
<?php else: ?>
<!-- Invalid Certificate -->
<div class="text-center mb-4">
<img src="assets/img/invalid-icon.png" alt="Invalid" class="img-fluid" style="max-height: 120px;">
<h5 class="text-danger mt-3">Invalid Certificate</h5>
<p>The certificate information could not be verified. It may be invalid, tampered with, or not exist in our records.</p>
</div>
<div class="alert alert-warning">
<p><strong>Possible reasons:</strong></p>
<ul>
<li>The verification code or certificate number was entered incorrectly</li>
<li>The certificate is not authentic or has been tampered with</li>
<li>There was a technical issue with the verification process</li>
</ul>
</div>
<div class="text-center mt-4">
<a href="verify.php" class="btn btn-primary">Try Again</a>
<a href="contact.php" class="btn btn-secondary ml-2">Contact Support</a>
</div>
<?php endif; ?>
<?php endif; ?>
</div>
</div>
</div>
</div>
</div>
<?php include_once('includes/footer.php'); ?>