From 8e44c840d5abe95961d4679e50ecde8be67b43b9 Mon Sep 17 00:00:00 2001 From: Tim Steiner <tsteiner2@unl.edu> Date: Fri, 23 Oct 2009 19:54:09 +0000 Subject: [PATCH] Check for "stale" saved requests before allowing a user to edit them. --- .../courses/controllers/EditController.php | 31 ++++++++++++++++++- .../modules/courses/models/CourseModel.php | 5 +++ .../courses/views/scripts/edit/error.phtml | 3 ++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 application/modules/courses/views/scripts/edit/error.phtml diff --git a/application/modules/courses/controllers/EditController.php b/application/modules/courses/controllers/EditController.php index 034c5b45..d700e1cb 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 9b295fe0..6856c912 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 00000000..8e134924 --- /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 -- GitLab