From d65aa81c2a43e5f6649cf222be0fa291ce3b8755 Mon Sep 17 00:00:00 2001 From: Tim Steiner <tsteiner2@unl.edu> Date: Fri, 18 Oct 2013 12:51:25 -0500 Subject: [PATCH] Create a unified major router as well. @1h30 --- .../modules/bulletin/models/UtilityModel.php | 13 ++++ .../modules/courses/models/UtilityModel.php | 10 +++ .../edit-action/collegeRouter.phtml | 1 - .../models/FourYearPlanModel.php | 65 ++++++++++++++++--- .../fouryearplans/models/UtilityModel.php | 17 +++++ .../ApprovalActionMajorRouterModel.php} | 45 ++++++------- .../edit-action/majorRouter.phtml | 0 library/Creq/Model/UtilityInterface.php | 10 +++ 8 files changed, 130 insertions(+), 31 deletions(-) delete mode 100644 application/modules/courses/views/scripts/approval-chain-manager/edit-action/collegeRouter.phtml rename application/modules/{courses/models/ApprovalActionCollegeRouterModel.php => requests/models/ApprovalActionMajorRouterModel.php} (76%) create mode 100644 application/modules/requests/views/scripts/approval-chain-manager/edit-action/majorRouter.phtml diff --git a/application/modules/bulletin/models/UtilityModel.php b/application/modules/bulletin/models/UtilityModel.php index 22377a12..ee74b4b3 100644 --- a/application/modules/bulletin/models/UtilityModel.php +++ b/application/modules/bulletin/models/UtilityModel.php @@ -31,6 +31,19 @@ class Bulletin_UtilityModel implements Creq_Model_UtilityInterface return $requestColleges; } + static public function getMajorsForRequests($requests) + { + $requestMajors = array(); + + $requestSections = Bulletin_SectionModel::findWithRequest($requests); + foreach ($requests as $request) { + $section = $requestSections[$request->getId()]; + $requestMajors[$request->getId()] = $section->getMajor(); + } + + return $requestMajors; + } + static public function getTextBetweenTokens($text, $start_token, $end_token) { $content_start = strpos($text, $start_token); diff --git a/application/modules/courses/models/UtilityModel.php b/application/modules/courses/models/UtilityModel.php index 83f4615a..19d40126 100644 --- a/application/modules/courses/models/UtilityModel.php +++ b/application/modules/courses/models/UtilityModel.php @@ -40,4 +40,14 @@ class Courses_UtilityModel implements Creq_Model_UtilityInterface return $requestColleges; } + + static public function getMajorsForRequests($requests) + { + $requestMajors = array(); + foreach ($requests as $request) { + $requestMajors[$request->getId()] = NULL; + } + + return $requestMajors; + } } diff --git a/application/modules/courses/views/scripts/approval-chain-manager/edit-action/collegeRouter.phtml b/application/modules/courses/views/scripts/approval-chain-manager/edit-action/collegeRouter.phtml deleted file mode 100644 index f0bcdf3e..00000000 --- a/application/modules/courses/views/scripts/approval-chain-manager/edit-action/collegeRouter.phtml +++ /dev/null @@ -1 +0,0 @@ -<!-- No options for this action --> \ No newline at end of file diff --git a/application/modules/fouryearplans/models/FourYearPlanModel.php b/application/modules/fouryearplans/models/FourYearPlanModel.php index b734a928..8fe540e1 100644 --- a/application/modules/fouryearplans/models/FourYearPlanModel.php +++ b/application/modules/fouryearplans/models/FourYearPlanModel.php @@ -913,33 +913,82 @@ class FourYearPlans_FourYearPlanModel extends Unl_Model } } + static protected $_majorCollegeMap = array(); + static protected function _getMajorCollegeMap() + { + if (!self::$_majorCollegeMap) { + $db = Zend_Registry::get('db'); + $select = new Zend_Db_Select($db); + + $select->from(array('c' => 'creqColleges'), array( + 'collegeId', + 'college' => 'name', + 'collegeLong' => 'description' + )); + $select->join(array('m' => 'creqMajors'), 'c.collegeId = m.college', array( + 'majorId', + 'major' => 'name' + )); + + foreach ($select->query()->fetchAll() as $row) { + self::$_majorCollegeMap[$row['majorId']] = $row; + } + } + return self::$_majorCollegeMap; + } + + public function getCollege() + { + $majorCollegeMap = self::_getMajorCollegeMap(); + if (!isset($majorCollegeMap[$this->_data['majorId']])) { + return NULL; + } + + return $majorCollegeMap[$this->_data['majorId']]['college']; + } + + public function getCollegeLong() + { + $majorCollegeMap = self::_getMajorCollegeMap(); + if (!isset($majorCollegeMap[$this->_data['majorId']])) { + return NULL; + } + + return $majorCollegeMap[$this->_data['majorId']]['collegeLong']; + } + public function getMajor() { if (!$this->_data['majorId'] && $this->_data['major']) { return $this->_data['major']; } - $majors = Bulletin_UtilityModel::getAllMajors(); - if (isset($majors[$this->_data['majorId']])) { - return $majors[$this->_data['majorId']]; + $majorCollegeMap = self::_getMajorCollegeMap(); + if (!isset($majorCollegeMap[$this->_data['majorId']])) { + return NULL; } - return NULL; + return $majorCollegeMap[$this->_data['majorId']]['major']; } public function setMajorId($majorId) { - $majors = Bulletin_UtilityModel::getAllMajors(); - if (!isset($majors[$majorId])) { + $majorCollegeMap = self::_getMajorCollegeMap(); + if (!isset($majorCollegeMap[$majorId])) { throw new Exception('Major not found.'); } + $this->_data['majorId'] = $majorId; } public function setMajor($major) { - $majors = Bulletin_UtilityModel::getAllMajors(); - $majorId = array_search($major, $majors); + $majorId = NULL; + foreach (self::_getMajorCollegeMap() as $item) { + if ($item['major'] == $major) { + $majorId = $item['majorId']; + } + } if (!$majorId) { throw new Exception ('The major "' . $major . '" does not exist.'); diff --git a/application/modules/fouryearplans/models/UtilityModel.php b/application/modules/fouryearplans/models/UtilityModel.php index 5d681f75..1ae3165d 100644 --- a/application/modules/fouryearplans/models/UtilityModel.php +++ b/application/modules/fouryearplans/models/UtilityModel.php @@ -33,4 +33,21 @@ class FourYearPlans_UtilityModel implements Creq_Model_UtilityInterface return $requestColleges; } + + static public function getMajorsForRequests($requests) + { + $requestMajors = array(); + + $requestParentFyps = FourYearPlans_FourYearPlanModel::findParentOfRequest($requests); + $requestCurrentFyps = FourYearPlans_FourYearPlanModel::findLatestOfRequest($requests); + foreach ($requests as $request) { + $fyp = $requestParentFyps[$request->getId()]; + if (!$fyp) { + $fyp = $requestCurrentFyps[$request->getId()]; + } + $requestMajors[$request->getId()] = $fyp->getMajor(); + } + + return $requestMajors; + } } diff --git a/application/modules/courses/models/ApprovalActionCollegeRouterModel.php b/application/modules/requests/models/ApprovalActionMajorRouterModel.php similarity index 76% rename from application/modules/courses/models/ApprovalActionCollegeRouterModel.php rename to application/modules/requests/models/ApprovalActionMajorRouterModel.php index 5f3647e8..d88cecb4 100644 --- a/application/modules/courses/models/ApprovalActionCollegeRouterModel.php +++ b/application/modules/requests/models/ApprovalActionMajorRouterModel.php @@ -1,8 +1,8 @@ <?php -class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionModel +class Requests_ApprovalActionMajorRouterModel extends Requests_ApprovalActionModel { - protected $_colleges = array(); + protected $_majors = array(); public static function find($id) { @@ -10,7 +10,7 @@ class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionMo $select = new Zend_Db_Select($db); $select->from(array('a' => 'creqApprovalActions')); - $select->join(array('d' => 'creqApprovalActionsCollegeRouter'), 'a.approvalActionId = d.approvalActionId'); + $select->join(array('d' => 'creqApprovalActionsMajorRouter'), 'a.approvalActionId = d.approvalActionId'); if (Unl_Util::isArray($id)) { $select->where('a.approvalActionId IN(?)', $id); } else { @@ -32,7 +32,7 @@ class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionMo } } - + static public function fetchNew() { $data = array( @@ -43,12 +43,12 @@ class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionMo 'participatingRoles' => array(), 'editingRoles' => array() ); - + $new = new self($data); $new->_setClean(); - - $new->_data['className'] = 'ApprovalActionCollegeRouter'; - + + $new->_data['className'] = 'ApprovalActionMajorRouter'; + return $new; } @@ -91,7 +91,7 @@ class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionMo { $db = Zend_Registry::get('db'); - $sql = 'INSERT INTO creqApprovalActionsCollegeRouter (approvalActionId) VALUES '; + $sql = 'INSERT INTO creqApprovalActionsMajorRouter (approvalActionId) VALUES '; $sqlParts = array(); foreach ($models as $model) { $sqlParts[] = $db->quoteInto('(?) ', $model->_data['approvalActionId']); @@ -102,16 +102,17 @@ class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionMo public function consider($requests) { - $requestParentCourses = Courses_CourseModel::findParentOfRequest($requests); - $requestCurrentCourses = Courses_CourseModel::findLatestOfRequest($requests); + $modulesRequests = array(); foreach ($requests as $request) { - $course = $requestParentCourses[$request->getId()]; - if (!$course) { - $course = $requestCurrentCourses[$request->getId()]; + $modulesRequests[$request->getModule()][$request->getId()] = $request; + } + foreach ($modulesRequests as $module => $moduleRequests) { + $model = ucfirst($module) . '_UtilityModel'; + foreach ($model::getMajorsForRequests($moduleRequests) as $requestId => $major) { + $moduleRequests[$requestId]->setState($major); } - $college = $course->getCollege(); - $request->setState($college); } + Requests_RequestModel::save($requests); Requests_ApprovalChainModel::advance($requests); return $requests; @@ -129,11 +130,11 @@ class Courses_ApprovalActionCollegeRouterModel extends Requests_ApprovalActionMo public function getResultStatusStrings() { - $colleges = array(); - foreach (Courses_CourseModel::getColleges() as $college) { - $colleges[$college] = $college; - } - - return $colleges; + $majors = array(); + foreach (Bulletin_UtilityModel::getAllMajors() as $major) { + $majors[$major] = $major; + } + + return $majors; } } diff --git a/application/modules/requests/views/scripts/approval-chain-manager/edit-action/majorRouter.phtml b/application/modules/requests/views/scripts/approval-chain-manager/edit-action/majorRouter.phtml new file mode 100644 index 00000000..e69de29b diff --git a/library/Creq/Model/UtilityInterface.php b/library/Creq/Model/UtilityInterface.php index ebda84a3..fbb67be0 100644 --- a/library/Creq/Model/UtilityInterface.php +++ b/library/Creq/Model/UtilityInterface.php @@ -27,4 +27,14 @@ interface Creq_Model_UtilityInterface * if not applicable. */ static public function getCollegesForRequests($requests); + + /** + * @param $requests + * @return array + * + * Given an array of requests, return an array where each key is the requestId + * and the value is the name of the major associated with the request, or NULL + * if not applicable. + */ + static public function getMajorsForRequests($requests); } -- GitLab