diff --git a/application/modules/courses/controllers/EditController.php b/application/modules/courses/controllers/EditController.php index 034c5b45959a5d2d3c44029d957ce3a8cd94ebfd..d700e1cbbbfd1e375fafc0d7d82bee86624b53a6 100644 --- a/application/modules/courses/controllers/EditController.php +++ b/application/modules/courses/controllers/EditController.php @@ -194,6 +194,12 @@ class Courses_EditController extends App_Controller_Action $savedRequests = RegistryModel::findByNamespaceAndKey($user->getId(), 'savedRequests')->getData(); $request = $savedRequests[$id]['request']; $course = $savedRequests[$id]['course']; + if ($this->_isSavedRequestStale($request, $course)) { + $controllerSession = new Zend_Session_Namespace(__CLASS__); + $controllerSession->errorMessage = 'Unfortunately another request modifying this course has been submitted since you saved your request. You will need to create a new request to continue.'; + $this->_redirect('/courses/edit/error'); + exit; + } $parentCourse = $savedRequests[$id]['parentCourse']; $session->currentSavedRequestId = $id; } else { @@ -252,6 +258,12 @@ class Courses_EditController extends App_Controller_Action } + public function errorAction() + { + $session = new Zend_Session_Namespace(__CLASS__); + $this->view->message = $session->errorMessage; + } + protected function _saveForLater() { $in = $this->_getAllParams(); @@ -319,7 +331,7 @@ class Courses_EditController extends App_Controller_Action if ($crosslisting['subject'] == $subject && $crosslisting['courseNumber'] == $courseNumber && $crosslisting['courseLetter'] == $courseLetter) { - return true; + return true; } } @@ -336,6 +348,23 @@ class Courses_EditController extends App_Controller_Action return true; } + protected function _isSavedRequestStale(Requests_RequestModel $request, Courses_CourseModel $course) + { + $parentCourse = Courses_CourseModel::findByCourseId($course->getCourseId()); + if ($parentCourse->getId() != $course->getParentId()) { + return true; + } + + $otherRequests = Courses_CourseModel::findActiveRequestByCourseCode($parentCourse->getSubject(), + $parentCourse->getCourseNumber(), + $parentCourse->getCourseLetter()); + if (count($otherRequests) > 0) { + return true; + } + + return false; + } + public function isCourseCodeAvailableAction() { $in = $this->_getAllParams(); diff --git a/application/modules/courses/models/CourseModel.php b/application/modules/courses/models/CourseModel.php index 9b295fe04a7279fdb2cc84cb16ef4fdadd9c42a1..6856c91273ed2f1fbb4072b3810ebd8212ed2382 100644 --- a/application/modules/courses/models/CourseModel.php +++ b/application/modules/courses/models/CourseModel.php @@ -2587,6 +2587,11 @@ class Courses_CourseModel extends Unl_Model { return $this->_data['course']; } + + public function getParentId() + { + return $this->_data['parent']; + } public function isValid() { diff --git a/application/modules/courses/views/scripts/edit/error.phtml b/application/modules/courses/views/scripts/edit/error.phtml new file mode 100644 index 0000000000000000000000000000000000000000..8e134924dd0be9343ed9c012b8c232ad873007ec --- /dev/null +++ b/application/modules/courses/views/scripts/edit/error.phtml @@ -0,0 +1,3 @@ +<div style="color: #f00; font-weight: bold; font-size: 24px; line-height: normal; padding-bottom: 1em;"> + <?php echo $this->message; ?> +</div> \ No newline at end of file