<?php
// Set up error reporting for debugging
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Manual database connection
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "popularcomputer";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("<h1>Connection failed: " . $conn->connect_error . "</h1>");
}
echo "<h1>Fixing Enrollment Numbers to Consistent Format</h1>";
// Include the enrollment functions file to use the proper generation function
require_once 'enroll/includes/enrollment_functions.php';
// Get enrollments with the old "CXXX-UID-YYYY-RANDOM" format
// We'll look for patterns that match C###-##-####-#### (old format) but not ####-C###-#### (new format)
$enrollments_query = $conn->query("SELECT e.id, e.user_id, e.course_id, e.enrollment_number, c.course_code
FROM enrollments e
LEFT JOIN courses c ON e.course_id = c.id
WHERE e.enrollment_number IS NOT NULL
AND (
e.enrollment_number REGEXP '^C[0-9]+-[0-9]+-[0-9]+-[A-Z0-9]+$'
OR e.enrollment_number NOT REGEXP '^[0-9]{4}-[A-Z0-9]+-[0-9]{4}$'
)");
if ($enrollments_query && $enrollments_query->num_rows > 0) {
echo "<p>Found " . $enrollments_query->num_rows . " enrollment records to update</p>";
$updated_count = 0;
$year = date('Y');
// Track sequence numbers by course code and year
$sequence_tracker = [];
while ($enrollment = $enrollments_query->fetch_assoc()) {
$enrollment_id = $enrollment['id'];
$course_id = $enrollment['course_id'];
$old_number = $enrollment['enrollment_number'];
echo "<p>Processing enrollment ID $enrollment_id with old number: $old_number</p>";
// Generate a standardized enrollment number
if (function_exists('generate_enrollment_number')) {
// Use the existing function if available
$enrollment_number = generate_enrollment_number($conn, $course_id);
} else {
// Fallback to manual generation
// Get course code
$course_code = !empty($enrollment['course_code']) ? $enrollment['course_code'] : 'C' . sprintf('%03d', $course_id);
// Get or initialize sequence for this course code and year
$course_year_key = $year . '-' . $course_code;
if (!isset($sequence_tracker[$course_year_key])) {
// Find the highest existing sequence number for this course code
$seq_query = $conn->query("SELECT enrollment_number FROM enrollments
WHERE enrollment_number LIKE '$course_year_key-%'
ORDER BY enrollment_number DESC LIMIT 1");
if ($seq_query && $seq_query->num_rows > 0) {
$seq_row = $seq_query->fetch_assoc();
$parts = explode('-', $seq_row['enrollment_number']);
$sequence_tracker[$course_year_key] = intval(end($parts)) + 1;
} else {
$sequence_tracker[$course_year_key] = 1;
}
}
// Format the enrollment number: YEAR-COURSE_CODE-SEQUENCE
$enrollment_number = sprintf('%s-%s-%04d', $year, $course_code, $sequence_tracker[$course_year_key]);
// Increment sequence for next use
$sequence_tracker[$course_year_key]++;
}
// Update the enrollment with the fixed enrollment number
if ($conn->query("UPDATE enrollments SET enrollment_number = '$enrollment_number' WHERE id = $enrollment_id")) {
$updated_count++;
echo "<p>Updated enrollment ID $enrollment_id from '$old_number' to '$enrollment_number'</p>";
} else {
echo "<p class='text-danger'>Error updating enrollment ID $enrollment_id: " . $conn->error . "</p>";
}
}
if ($updated_count > 0) {
echo "<h2>Successfully updated $updated_count enrollment records to the standard format.</h2>";
}
} else {
echo "<p>No enrollment records found that need updating.</p>";
}
// Show some sample enrollment numbers after update
$sample_query = $conn->query("SELECT id, enrollment_number FROM enrollments WHERE enrollment_number IS NOT NULL LIMIT 5");
if ($sample_query && $sample_query->num_rows > 0) {
echo "<h3>Sample enrollment numbers after update:</h3>";
echo "<ul>";
while ($row = $sample_query->fetch_assoc()) {
echo "<li>ID " . $row['id'] . ": " . $row['enrollment_number'] . "</li>";
}
echo "</ul>";
}
echo "<p>Process completed. <a href='enroll/enrollment_success.php?application_id=17'>Return to enrollment page</a></p>";
// Close the connection
$conn->close();
?>