<?php /** * PublicViewController * * @author * @version */ class Courses_PublicViewController extends App_Controller_Action { /** * The default action - show the home page */ public function allCoursesAction() { $this->_disableLayoutAndView(); $courses = Courses_CourseModel::findAllActive(); $courses->orderBy('getCourseCode'); $dom = new DOMDocument('1.0', 'UTF-8'); $dom->formatOutput = true; $root = $dom->createElement('courses'); $dom->appendChild($root); foreach ($courses as $course) { $courseNode = $dom->createElement('course'); $courseNode->appendChild($dom->createElement('title', htmlspecialchars($course->getTitle()))); $crosslistings = $course->getCrosslistings(); if (count($crosslistings) > 0) { $courseCodesNode = $dom->createElement('courseCodes'); $courseNode->appendChild($courseCodesNode); foreach ($crosslistings as $crosslisting) { $courseCodeNode = $dom->createElement('courseCode'); $courseCodesNode->appendChild($courseCodeNode); $courseCodeNode->setAttribute('type', $crosslisting['type']); $courseCodeNode->appendChild($dom->createElement('subject', $crosslisting['subject'])); $courseCodeNode->appendChild($dom->createElement('courseNumber', $crosslisting['courseNumber'])); if ($crosslisting['courseLetter']) { $courseCodeNode->appendChild($dom->createElement('courseLetter', $crosslisting['courseLetter'])); } } } else { continue; } $courseNode->appendChild($dom->createElement('gradingType', htmlspecialchars($course->getGradingType(), null, 'UTF-8'))); $courseNode->appendChild($dom->createElement('dfRemoval', htmlspecialchars($course->getDfRemoval(), null, 'UTF-8'))); $courseNode->appendChild($dom->createElement('effectiveSemester', htmlspecialchars($course->getEffectiveSemester(), null, 'UTF-8'))); if ($node = $this->_getNodeFromHtmlFragment($dom, 'prerequisite', $course->getPrerequisite())) { $courseNode->appendChild($node); } if ($node = $this->_getNodeFromHtmlFragment($dom, 'notes', $course->getNotes())) { $courseNode->appendChild($node); } if ($node = $this->_getNodeFromHtmlFragment($dom, 'description', $course->getDescription())) { $courseNode->appendChild($node); } if (count($course->getCampuses()) > 0) { $campusesNode = $dom->createElement('campuses'); $courseNode->appendChild($campusesNode); foreach ($course->getCampuses() as $campus) { $campusesNode->appendChild($dom->createElement('campus', $campus)); } } if (count($course->getDeliveryMethods()) > 0) { $deliveryMethodsNode = $dom->createElement('deliveryMethods'); $courseNode->appendChild($deliveryMethodsNode); foreach ($course->getDeliveryMethods() as $deliveryMethod) { $deliveryMethodsNode->appendChild($dom->createElement('deliveryMethod', $deliveryMethod)); } } if (count($course->getTermsOffered()) > 0) { $termsOfferedNode = $dom->createElement('termsOffered'); $courseNode->appendChild($termsOfferedNode); foreach ($course->getTermsOffered() as $term) { $termsOfferedNode->appendChild($dom->createElement('term', $term)); } } $activities = $course->getActivities(); if (count($crosslistings) > 0) { $activitiesNode = $dom->createElement('activities'); $courseNode->appendChild($activitiesNode); foreach ($activities as $activity) { $activityNode = $dom->createElement('activity'); $activitiesNode->appendChild($activityNode); $activityNode->appendChild($dom->createElement('type', $activity['type'])); if ($activity['hours']) { $activityNode->appendChild($dom->createElement('hours', $activity['hours'])); } } } $credits = $course->getCredits(); if (count($credits) > 0) { $creditsNode = $dom->createElement('credits'); $courseNode->appendChild($creditsNode); foreach ($credits as $credit) { $creditNode = $dom->createElement('credit', $credit['hours']); $creditsNode->appendChild($creditNode); $creditNode->setAttribute('type', $credit['description']); } } $gradTieIn = $course->getGradTieIn(); if ($gradTieIn['credits']) { $courseNode->appendChild($dom->createElement('gradCredits', htmlspecialchars($gradTieIn['credits'], null, 'UTF-8'))); } if ($node = $this->_getNodeFromHtmlFragment($dom, 'gradNotes', $gradTieIn['notes'])) { $courseNode->appendChild($node); } if ($node = $this->_getNodeFromHtmlFragment($dom, 'gradPrerequisites', $gradTieIn['prerequisites'])) { $courseNode->appendChild($node); } $root->appendChild($courseNode); } header('Content-type: text/xml'); $dom->normalize(); echo $dom->saveXML(); } protected function _getNodeFromHtmlFragment($dom, $nodeName, $fragment) { $fragment = trim($fragment); if (!$fragment) { return null; } $node = new DOMDocument('1.0', 'UTF-8'); $fragment = '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/></head><body>' . $fragment . '</body>'; $node = DOMDocument::loadHTML(strtr($fragment, array('&' => '&'))); if (!$node->documentElement) { return null; } $node = $dom->importNode($node->documentElement, true); if (count($node->childNodes->item(1)->childNodes) == 1 && $node->childNodes->item(1)->childNodes->item(0)->nodeName == 'p') { $realNode = $node->childNodes->item(1)->childNodes->item(0); } else { $realNode = $node->childNodes->item(1); } $newNode = $dom->createElement($nodeName); while ($realNode->hasChildNodes()) { $newNode->appendChild($realNode->childNodes->item(0)); } return $newNode; } /** * This action syncronizes the qreqCourses.currentGeneration field with data from creqCourseGenerations * */ public function testAction() { $this->_disableLayoutAndView(); //header('Content-type: text/plain'); $db = Zend_Registry::get('db'); $sql = 'SELECT * FROM creqCourseGenerations'; $data = $db->query($sql)->fetchAll(); $courses = array(); foreach ($data as $row) { $courseId = $row['course']; $generationId = $row['courseGenerationId']; $courses[$courseId][$generationId] = $row; } $multipleLatestCount = 0; $courseLatest = array(); foreach ($courses as $courseId => $course) { $parent = null; $parentIds = array(); foreach ($course as $generation) { if ($generation['parent']) { $parentIds[] = $generation['parent']; } } $latestCount = 0; foreach ($course as $generation) { if (!in_array($generation['courseGenerationId'], $parentIds)) { $latest = $generation; $latestCount++; } } if ($latestCount > 1) { echo $courseId . ': Multiple Latest! Skipping.' . PHP_EOL; $multipleLatestCount++; continue; } if ($latestCount == 0) { echo $courseId . ': No Latest! Skipping.' . PHP_EOL; continue; } while ($latest['parent'] && $latest['type'] != 'official') { $latest = $course[$latest['parent']]; } if ($latest['type'] != 'official') { $latestId = null; } else { $latestId = $latest['courseGenerationId']; } $courseLatest[$courseId] = $latestId; } echo 'Multiple Latest Count: ' . $multipleLatestCount . PHP_EOL; foreach ($courseLatest as $courseId => $latestId) { $data = array('currentGeneration' => $latestId); $where = 'courseId = ' . $courseId; $db->update('creqCourses', $data, $where); } } public function searchAction() { $this->view->activityTypes = array( 1 => 'Lec - Lecture', 2 => 'Lab - Lab', 3 => 'Quz - Quiz', 4 => 'Rct - Recitation', 5 => 'Stu - Studio', 6 => 'Fld - Field', 7 => 'Ind - Independent Study', 8 => 'Psi - Personalized System of Instruction' ); $in = $this->_getAllParams(); $criteria = $in; $criteria['title'] = $criteria['courseTitle']; $courses = Courses_CourseModel::findWithCriteria($criteria); $data = new Unl_Model_Collection('Unl_Model_Array'); foreach ($courses as $requestId => $course) { $aceOutcomes = $course->getAceOutcomes(); if (!$aceOutcomes) { $aceOutcomes = array('-'); } foreach ($aceOutcomes as $aceOutcome) { $data[] = new Unl_Model_Array(array( 'slo' => substr($aceOutcome['slo'], 3), 'courseCode' => $course->getCourseCode(), 'college' => $course->getCollege(), 'title' => $course->getTitle(), 'courseId' => $course->getCourseId(), )); } } $session = new Zend_Session_Namespace(__CLASS__); $sortBy = $session->sortBy; if (!Unl_Util::isArray($sortBy)) { $sortBy = array(); } if ($in['sort']) { if (($key = array_search($in['sort'], $sortBy)) !== FALSE) { unset($sortBy[$key]); } $sortBy[] = $in['sort']; } $session->sortBy = $sortBy; foreach ($sortBy as $sortKey) { $data->orderBy('get' . $sortKey); } $this->view->data = $data; $this->view->criteria = $criteria; $this->view->hasSearched = isset($criteria['college']); $hierarchy = Courses_CourseModel::getSubjectDepartmentCollegeHierarchy(); $colleges = array(); $departments = array(); $departmentsSerial = array(); $subjects = array(); $subjectsSerial = array(); foreach ($hierarchy as $collegeId => $college) { $colleges[$collegeId] = $college['name']; foreach ($college['departments'] as $departmentId => $department) { $departments[$college['name']][$departmentId] = $department['name']; $departmentsSerial[$departmentId] = $department['name']; foreach ($department['subjects'] as $subjectCode => $subjectName) { $subjects[$department['name']][$subjectCode] = $subjectCode . ' - ' . $subjectName; $subjectsSerial[$subjectCode] = $subjectCode . ' - ' . $subjectName; } } } $this->view->colleges = $colleges; $this->view->departments = $departments; $this->view->departmentsSerial = $departmentsSerial; $this->view->subjects = $subjects; $this->view->subjectsSerial = $subjectsSerial; } public function viewAction() { $in = $this->_getAllParams(); $id = $in['id']; if ($id) { $course = Courses_CourseModel::findByCourseId($id); } $this->view->course = $course; } }