diff --git a/application/modules/courses/models/CourseModel.php b/application/modules/courses/models/CourseModel.php index b75d0fe7b60f6020b516c30014d7d6e2b0fc3471..bd06fce75f70a38c0a349e02f9d09e87a4112a13 100644 --- a/application/modules/courses/models/CourseModel.php +++ b/application/modules/courses/models/CourseModel.php @@ -3572,5 +3572,78 @@ class Courses_CourseModel extends Unl_Model $summary = ucfirst($summary); return $summary; } + + static public function updateCourseNumber($subject, $originalCourseNumber, $originalCourseLetter, $newCourseNumber, $newCourseLetter) + { + if (Zend_Auth::getInstance()->hasIdentity()) { + $requestOwner = Auth_UserModel::findCurrentUser(); + } else { + $requestOwner = Auth_UserModel::findByUsername('bglenn2'); + } + + $relatedCourses = self::getRelatedCourses($subject, $originalCourseNumber, $originalCourseLetter); + $newRequests = new Unl_Model_Collection('Requests_RequestModel'); + $newCourses = new Unl_Model_Collection('Courses_CourseModel'); + + foreach ($relatedCourses as $relatedCourse) { + $justification = 'The course code ' . $subject . ' ' . $originalCourseNumber . $originalCourseLetter + . ' has been changed to ' . $subject . ' ' . $newCourseNumber . $newCourseLetter . '.'; + $existingRequests = Courses_CourseModel::findActiveRequestByCourseCode($relatedCourse->getSubject(), $relatedCourse->getCourseNumber(), $relatedCourse->getCourseLetter()); + if (count($existingRequests) > 0) { + $request = $existingRequests->pop(); + if ($request->getType() == 'RemoveCourse') { + // We don't really need to updated remove course requests. + continue; + } + $relatedCourse = Courses_CourseModel::findLatestOfRequest($request); + $request->setJustification($request->getJustification() . '<br />' . PHP_EOL . '<br />' . PHP_EOL . $justification); + } else { + $request = Requests_RequestModel::fetchNew(); + $request->setType('AdminEdit'); + $request->setModule('courses'); + $request->setJustification($justification); + $request->setOwner($requestOwner); + $newRequests[] = $request; + } + Requests_RequestModel::save($request); + + $newCourse = clone $relatedCourse; + $newCourse->setRequest($request); + $newCourse->updateCourseNumberReference($subject, $originalCourseNumber . $originalCourseLetter, $newCourseNumber . $newCourseLetter); + $newCourses[] = $newCourse; + } + + Courses_CourseModel::save($newCourses); + Requests_ApprovalChainModel::consider($newRequests); + } + + /** + * Updates all references a subject's course number to a different course number. + * This will potentially change the description, notes, and prerequisite fields. + * + * @param string $subject + * @param string $originalCourseNumber + * @param string $newCourseNumber + */ + public function updateCourseNumberReference($subject, $originalCourseNumber, $newCourseNumber) { + $this->setDescription( + UNL_UndergraduateBulletin_EPUB_Utilities::updateCourseNumber( + $this->getDescription(), + $subject, $originalCourseNumber, $newCourseNumber + ) + ); + $this->setNotes( + UNL_UndergraduateBulletin_EPUB_Utilities::updateCourseNumber( + $this->getNotes(), + $subject, $originalCourseNumber, $newCourseNumber + ) + ); + $this->setPrerequisite( + UNL_UndergraduateBulletin_EPUB_Utilities::updateCourseNumber( + $this->getPrerequisite(), + $subject, $originalCourseNumber, $newCourseNumber + ) + ); + } }