diff --git a/application/modules/bulletin/models/UtilityModel.php b/application/modules/bulletin/models/UtilityModel.php index 22377a1288c13f51458c660a0a8497447fafd4f6..ee74b4b3e4aadd634f5ce733c27c666966be9143 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 83f4615ac667bd7b61b5914bd22cd22b56a87bff..19d40126f0355947e07938630ae136e9574c1e29 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 f0bcdf3e9a3b1a6740d2d784d65d6289c36759c7..0000000000000000000000000000000000000000 --- 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 b734a92819d547f3261f365af3bd8b01c0506bb2..8fe540e116ac3214474d13cea8510abd94a8c0e9 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 5d681f758f4b37bd63db3e7d48043f4b6fbcf7f6..1ae3165d97ffbafee72376232fcbe4a61ed8c9a0 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 5f3647e80acfb46d8b086bba7b1ead1a72256df4..d88cecb466009535bd6bd625bd7fb91a790bfc59 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/library/Creq/Model/UtilityInterface.php b/library/Creq/Model/UtilityInterface.php index ebda84a3b7ab6e12fa0d618f11b7aa69b4892e3c..fbb67be01ac1fd4455bbd73d9579a771538c09e0 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); }