Path : /home/vishqocm/pcib.in/admin/includes/
File Upload :
Current File : /home/vishqocm/pcib.in/admin/includes/sql_updates.php

<?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>";
?>