-
Tim Steiner authoredTim Steiner authored
PublicViewController.php 10.00 KiB
<?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->colleges = Courses_CourseModel::getCollegeNames();
$this->view->departments = Courses_CourseModel::getDepartments();
$this->view->subjects = Courses_CourseModel::getSubjectsFull();
}
public function resultsAction()
{
$criteria = $this->_getAllParams();
$in = $criteria;
$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;
}
public function viewAction()
{
$in = $this->_getAllParams();
$id = $in['id'];
if ($id) {
$course = Courses_CourseModel::findByCourseId($id);
}
$this->view->course = $course;
}
}