From f32d05d81a584ada25ea18ea9d74335ee04860d4 Mon Sep 17 00:00:00 2001 From: NathanRusso Date: Thu, 3 Sep 2026 20:04:03 -0400 Subject: [PATCH 1/4] I updated the dump process to handle 3 new course fields: Prerequisites, Typically Offered, and Contact Hours. --- tools/processDump.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tools/processDump.php b/tools/processDump.php index 1277d2f..405e7ab 100644 --- a/tools/processDump.php +++ b/tools/processDump.php @@ -102,6 +102,9 @@ `acad_career` varchar(4) NOT NULL, `instruction_mode` varchar(2) NOT NULL, `course_descrlong` text NOT NULL, + `prereqs` text NOT NULL, + `typ_offr` text NOT NULL, + `ctc_hrs` text NOT NULL, PRIMARY KEY (`crse_id`,`crse_offer_nbr`,`strm`,`session_code`,`class_section`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; ENE; @@ -112,7 +115,7 @@ $parser->halt(["Error: Failed to create temporary class table", mysqli_error($dbConn)]); } -$parser->fileToTempTable("classes", $classFile, 24, $classSize, "procClassArray"); +$parser->fileToTempTable("classes", $classFile, 27, $classSize, "procClassArray"); fclose($classFile); // Build a temporary table for the meeting patterns @@ -266,9 +269,8 @@ $failures++; } $departmentsProc = mysqli_affected_rows($dbConn); - // Grab each COURSE from the classes table -$courseQuery = "SELECT strm, subject, units, acad_org, catalog_nbr, descr, course_descrlong,"; +$courseQuery = "SELECT strm, subject, units, acad_org, catalog_nbr, descr, course_descrlong, prereqs, typ_offr, ctc_hrs"; $courseQuery .= " crse_id, crse_offer_nbr, session_code"; $courseQuery .= " FROM classes WHERE strm < 20130 GROUP BY crse_id, strm, session_code"; $parser->debug("... Updating courses\n0%", false); @@ -298,10 +300,13 @@ // Escape the necessary fields $row['descr'] = mysqli_real_escape_string($dbConn, $row['descr']); $row['course_descrlong'] = mysqli_real_escape_string($dbConn, $row['course_descrlong']); + $row['prereqs'] = mysqli_real_escape_string($dbConn, $row['prereqs']); + $row['typ_offr'] = mysqli_real_escape_string($dbConn, $row['typ_offr']); + $row['ctc_hrs'] = mysqli_real_escape_string($dbConn, $row['ctc_hrs']); // Insert or update the course @$courseId = $parser->insertOrUpdateCourse($row['qtr'], $row['acad_org'], $row['subject'], $row['catalog_nbr'], - (int)$row['units'], $row['descr'], $row['course_descrlong']); + (int)$row['units'], $row['descr'], $row['course_descrlong'], $row['prereqs'], $row['typ_offr'], $row['ctc_hrs']); if (!is_numeric($courseId)) { echo(" *** Error: Failed to update {$row['qtr']} {$row['subject']}-{$row['catalog_nbr']}\n"); echo(" "); From 89e152d05898f3e8946beef2d70cdc43611675f3 Mon Sep 17 00:00:00 2001 From: NathanRusso Date: Thu, 3 Sep 2026 20:25:05 -0400 Subject: [PATCH 2/4] I added the new column to the CREATE TABLE statement. --- schema/tables/courses.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/schema/tables/courses.sql b/schema/tables/courses.sql index 288af60..9c4371d 100644 --- a/schema/tables/courses.sql +++ b/schema/tables/courses.sql @@ -15,7 +15,10 @@ CREATE TABLE courses ( `course` VARCHAR(4) NOT NULL, `credits` TINYINT(2) UNSIGNED NOT NULL DEFAULT 0, `title` VARCHAR(50) NOT NULL, - `description` TEXT NOT NULL + `description` TEXT NOT NULL, + `prerequisites` TEXT NOT NULL, + `typically_offered` TEXT NOT NULL, + `contact_hours` TEXT NOT NULL )ENGINE=InnoDb; -- INDEXING ---------------------------------------------------------------- From f87acfcc850f8f41d9ab579e8042918ccf8053d8 Mon Sep 17 00:00:00 2001 From: NathanRusso Date: Thu, 3 Sep 2026 20:55:01 -0400 Subject: [PATCH 3/4] Updated the insertOrUpdateCourse code. --- schema/migrationScripts/f_4charcourses.sql | 11 +++++++---- schema/procedures/InsertOrUpdateCourse.sql | 11 +++++++---- tools/Parser.php | 23 ++++++++++++---------- 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/schema/migrationScripts/f_4charcourses.sql b/schema/migrationScripts/f_4charcourses.sql index 047147b..429431e 100644 --- a/schema/migrationScripts/f_4charcourses.sql +++ b/schema/migrationScripts/f_4charcourses.sql @@ -19,7 +19,10 @@ CREATE PROCEDURE InsertOrUpdateCourse( IN p_course VARCHAR(4), IN p_credits INT, IN p_title VARCHAR(50), - IN p_description TEXT + IN p_description TEXT, + IN p_prerequisites TEXT, + IN p_typically_offered TEXT, + IN p_contact_hours TEXT, ) BEGIN -- Determine if the course already exists @@ -52,13 +55,13 @@ CREATE PROCEDURE InsertOrUpdateCourse( IF recordFound > 0 THEN -- Course exists, so update it UPDATE courses AS c - SET c.title = p_title, c.description = p_description, c.credits = p_credits + SET c.title = p_title, c.description = p_description, c.credits = p_credits, c.prerequisites = p_prerequisites, c.typically_offered = p_typically_offered, c.contact_hours = p_contact_hours WHERE c.department = v_department AND course = p_course AND quarter = p_quarter; SELECT "updated" AS action; ELSE -- Course doesn't exist, so insert it - INSERT INTO courses (quarter, department, course, title, description, credits) - VALUES(p_quarter, v_department, p_course, p_title, p_description, p_credits); + INSERT INTO courses (quarter, department, course, title, description, credits, prerequisites, typically_offered, contact_hours) + VALUES(p_quarter, v_department, p_course, p_title, p_description, p_credits, p_prerequisites, p_typically_offered, p_contact_hours); SELECT "inserted" AS action; END IF; diff --git a/schema/procedures/InsertOrUpdateCourse.sql b/schema/procedures/InsertOrUpdateCourse.sql index b9d78d5..82f4790 100644 --- a/schema/procedures/InsertOrUpdateCourse.sql +++ b/schema/procedures/InsertOrUpdateCourse.sql @@ -7,7 +7,10 @@ CREATE PROCEDURE InsertOrUpdateCourse( IN p_course VARCHAR(4), IN p_credits INT, IN p_title VARCHAR(50), - IN p_description TEXT + IN p_description TEXT, + IN p_prerequisites TEXT, + IN p_typically_offered TEXT, + IN p_contact_hours TEXT, ) BEGIN -- Determine if the course already exists @@ -40,13 +43,13 @@ BEGIN IF recordFound > 0 THEN -- Course exists, so update it UPDATE courses AS c - SET c.title = p_title, c.description = p_description, c.credits = p_credits + SET c.title = p_title, c.description = p_description, c.credits = p_credits, c.prerequisites = p_prerequisites, c.typically_offered = p_typically_offered, c.contact_hours = p_contact_hours WHERE c.department = v_department AND course = p_course AND quarter = p_quarter; SELECT "updated" AS action; ELSE -- Course doesn't exist, so insert it - INSERT INTO courses (quarter, department, course, title, description, credits) - VALUES(p_quarter, v_department, p_course, p_title, p_description, p_credits); + INSERT INTO courses (quarter, department, course, title, description, credits, prerequisites, typically_offered, contact_hours) + VALUES(p_quarter, v_department, p_course, p_title, p_description, p_credits, p_prerequisites, p_typically_offered, p_contact_hours); SELECT "inserted" AS action; END IF; diff --git a/tools/Parser.php b/tools/Parser.php index 8ac19b8..6602a13 100644 --- a/tools/Parser.php +++ b/tools/Parser.php @@ -86,28 +86,31 @@ function halt($messages) { /** * Inserts or updates a course. This function calls the stored procedure for * inserting or updating a course. - * @param $quarter int The term that the course is in - * @param $departCode string The code of the department - * @param $classCode string The code for the class - * @param $course string The number of the course - * @param $credits int The credits the course offers - * @param $title string The title of the course - * @param $description string The description for the course + * @param $quarter int The term that the course is in + * @param $departCode string The code of the department + * @param $classCode string The code for the class + * @param $course string The number of the course + * @param $credits int The credits the course offers + * @param $title string The title of the course + * @param $description string The description for the course + * @param $prerequisites string The prerequisites for the course + * @param $typicallyOffered string The typically offered semester for the course + * @param $contactHours string The contact hours for the course * @return mixed String of error message returned on failure. * Integer of course ID returned on success */ - function insertOrUpdateCourse(int $quarter, string $departCode, string $classCode, string $course, int $credits, string $title, string $description) { + function insertOrUpdateCourse(int $quarter, string $departCode, string $classCode, string $course, int $credits, string $title, string $description, string $prerequisites, string $typicallyOffered, string $contactHours) { global $coursesUpdated, $coursesAdded; // Call the stored proc // TODO: Refactor out department ID number (0000) - $query = "CALL InsertOrUpdateCourse({$quarter}, 0000, '{$classCode}', '{$course}', {$credits}, '{$title}', '{$description}')"; + $query = "CALL InsertOrUpdateCourse({$quarter}, 0000, '{$classCode}', '{$course}', {$credits}, '{$title}', '{$description}', '{$prerequisites}', '{$typicallyOffered}', '{$contactHours})"; $success = mysqli_multi_query($this->dbConn, $query); // Catch errors or return the id if (!$success) { // If the class code errors out, try the department code // TODO: Refactor out department ID number (0000) - $query = "CALL InsertOrUpdateCourse({$quarter}, 0000, '{$departCode}', '{$course}', {$credits}, '{$title}', '{$description}')"; + $query = "CALL InsertOrUpdateCourse({$quarter}, 0000, '{$departCode}', '{$course}', {$credits}, '{$title}', '{$description}', '{$prerequisites}', '{$typicallyOffered}', '{$contactHours})"; $success = mysqli_multi_query($this->dbConn, $query); if (!$success) { return mysqli_error($this->dbConn); From d3727524d2794f0d4a5bd8f1eae209f05947ed13 Mon Sep 17 00:00:00 2001 From: NathanRusso Date: Thu, 3 Sep 2026 20:57:08 -0400 Subject: [PATCH 4/4] Fixed syntax errors. --- schema/migrationScripts/f_4charcourses.sql | 2 +- schema/procedures/InsertOrUpdateCourse.sql | 2 +- tools/Parser.php | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/schema/migrationScripts/f_4charcourses.sql b/schema/migrationScripts/f_4charcourses.sql index 429431e..794b8bc 100644 --- a/schema/migrationScripts/f_4charcourses.sql +++ b/schema/migrationScripts/f_4charcourses.sql @@ -22,7 +22,7 @@ CREATE PROCEDURE InsertOrUpdateCourse( IN p_description TEXT, IN p_prerequisites TEXT, IN p_typically_offered TEXT, - IN p_contact_hours TEXT, + IN p_contact_hours TEXT ) BEGIN -- Determine if the course already exists diff --git a/schema/procedures/InsertOrUpdateCourse.sql b/schema/procedures/InsertOrUpdateCourse.sql index 82f4790..ff4c1ec 100644 --- a/schema/procedures/InsertOrUpdateCourse.sql +++ b/schema/procedures/InsertOrUpdateCourse.sql @@ -10,7 +10,7 @@ CREATE PROCEDURE InsertOrUpdateCourse( IN p_description TEXT, IN p_prerequisites TEXT, IN p_typically_offered TEXT, - IN p_contact_hours TEXT, + IN p_contact_hours TEXT ) BEGIN -- Determine if the course already exists diff --git a/tools/Parser.php b/tools/Parser.php index 6602a13..6ab3bb1 100644 --- a/tools/Parser.php +++ b/tools/Parser.php @@ -103,14 +103,14 @@ function insertOrUpdateCourse(int $quarter, string $departCode, string $classCod global $coursesUpdated, $coursesAdded; // Call the stored proc // TODO: Refactor out department ID number (0000) - $query = "CALL InsertOrUpdateCourse({$quarter}, 0000, '{$classCode}', '{$course}', {$credits}, '{$title}', '{$description}', '{$prerequisites}', '{$typicallyOffered}', '{$contactHours})"; + $query = "CALL InsertOrUpdateCourse({$quarter}, 0000, '{$classCode}', '{$course}', {$credits}, '{$title}', '{$description}', '{$prerequisites}', '{$typicallyOffered}', '{$contactHours}')"; $success = mysqli_multi_query($this->dbConn, $query); // Catch errors or return the id if (!$success) { // If the class code errors out, try the department code // TODO: Refactor out department ID number (0000) - $query = "CALL InsertOrUpdateCourse({$quarter}, 0000, '{$departCode}', '{$course}', {$credits}, '{$title}', '{$description}', '{$prerequisites}', '{$typicallyOffered}', '{$contactHours})"; + $query = "CALL InsertOrUpdateCourse({$quarter}, 0000, '{$departCode}', '{$course}', {$credits}, '{$title}', '{$description}', '{$prerequisites}', '{$typicallyOffered}', '{$contactHours}')"; $success = mysqli_multi_query($this->dbConn, $query); if (!$success) { return mysqli_error($this->dbConn);