Skip to content
Snippets Groups Projects
Select Git revision
  • 3dfe1a7f4f44e93b0d93fe47fca4b682975b854c
  • master default
  • disable-new-requests
  • fix-bulletin-view-missing-notes-error
  • add-missing-queue-managers
  • projects-task-53
  • projects-task-51
  • projects-task-43
  • projects-task-24
  • projects-task-31
  • projects-task-32
  • projects-task-8
  • project-setup-docs
  • projects-task-28
  • projects-task-27
  • projects-task-9
  • projects-task-7
  • mass-update-course-codes-in-sections
  • wdn-four
  • learning-outcomes
  • additional-bulletin-pages
  • svn-redesign
  • svn-popups
  • svn-trunk
  • svn-performance
  • svn-tim
26 results

TestformController.php

Blame
  • PublicViewController.php 8.25 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('&' => '&amp;')));
            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);
    		}
    		
    		
    	}
    }