<?php
/**
* SQL Updates for Enhanced Course Management System
*
* This file contains SQL updates required for the enhanced features:
* 1. Course duration tracking with separate value and unit
* 2. Enrollment completion date calculation
* 3. Certificate generation system updates
*/
// Connect to database
require_once '../../includes/db_connect.php';
// Database update function
function executeSQL($conn, $sql, $description) {
echo "<p>Attempting: $description... ";
if ($conn->query($sql) === TRUE) {
echo "<span style='color:green'>SUCCESS</span></p>";
return true;
} else {
echo "<span style='color:red'>FAILED:</span> " . $conn->error . "</p>";
return false;
}
}
// Start updates
echo "<h2>Database Update for Enhanced Course Management</h2>";
echo "<div style='font-family: monospace; background: #f5f5f5; padding: 15px; border: 1px solid #ddd;'>";
// Update 1: Add duration_value and duration_unit to courses table
$sql1 = "ALTER TABLE courses
ADD COLUMN duration_value INT DEFAULT 1 AFTER duration,
ADD COLUMN duration_unit VARCHAR(20) DEFAULT 'months' AFTER duration_value,
ADD COLUMN auto_complete TINYINT(1) DEFAULT 1 AFTER certificate";
executeSQL($conn, $sql1, "Adding duration value and unit fields to courses table");
// Update 2: Add completed_by to enrollments table
$sql2 = "ALTER TABLE enrollments
ADD COLUMN completed_by INT NULL AFTER verified_by,
ADD COLUMN expected_completion_date DATE NULL AFTER enrollment_date,
ADD COLUMN admin_notes TEXT NULL AFTER notes";
executeSQL($conn, $sql2, "Adding completion tracking fields to enrollments table");
// Update 3: Populate duration_value and duration_unit from existing duration field
$sql3 = "UPDATE courses
SET duration_value = CAST(SUBSTRING_INDEX(duration, ' ', 1) AS UNSIGNED),
duration_unit = SUBSTRING_INDEX(duration, ' ', -1)
WHERE duration IS NOT NULL AND duration != ''";
executeSQL($conn, $sql3, "Populating duration value and unit from existing data");
// Update 4: Create a trigger to auto-calculate expected completion date
$sql4 = "
CREATE TRIGGER calculate_completion_date
BEFORE INSERT ON enrollments
FOR EACH ROW
BEGIN
DECLARE course_duration INT;
DECLARE course_unit VARCHAR(20);
-- Get the course duration details
SELECT duration_value, duration_unit INTO course_duration, course_unit
FROM courses
WHERE id = NEW.course_id;
-- Calculate expected completion date based on duration unit
IF course_unit = 'days' THEN
SET NEW.expected_completion_date = DATE_ADD(NEW.enrollment_date, INTERVAL course_duration DAY);
ELSEIF course_unit = 'weeks' THEN
SET NEW.expected_completion_date = DATE_ADD(NEW.enrollment_date, INTERVAL course_duration WEEK);
ELSEIF course_unit = 'months' THEN
SET NEW.expected_completion_date = DATE_ADD(NEW.enrollment_date, INTERVAL course_duration MONTH);
ELSE
-- Default to months if unit is not recognized
SET NEW.expected_completion_date = DATE_ADD(NEW.enrollment_date, INTERVAL course_duration MONTH);
END IF;
END;
";
executeSQL($conn, $sql4, "Creating trigger for automatic completion date calculation");
// Update existing enrollments with expected completion dates
$sql5 = "
UPDATE enrollments e
JOIN courses c ON e.course_id = c.id
SET e.expected_completion_date =
CASE
WHEN c.duration_unit = 'days' THEN DATE_ADD(e.enrollment_date, INTERVAL c.duration_value DAY)
WHEN c.duration_unit = 'weeks' THEN DATE_ADD(e.enrollment_date, INTERVAL c.duration_value WEEK)
WHEN c.duration_unit = 'months' THEN DATE_ADD(e.enrollment_date, INTERVAL c.duration_value MONTH)
ELSE DATE_ADD(e.enrollment_date, INTERVAL c.duration_value MONTH)
END
WHERE e.expected_completion_date IS NULL;
";
executeSQL($conn, $sql5, "Updating existing enrollments with expected completion dates");
echo "</div>";
echo "<p>Database update completed. <a href='../courses.php'>Return to Courses</a></p>";
?>