Skip to content
Snippets Groups Projects
EditController.php 7.57 KiB
Newer Older
<?php

class Courses_EditController extends App_Controller_Action
{
	public function indexAction()
    {
        $session = new Zend_Session_Namespace('Edit Request');
        $course = $session->course;
        $request = $session->request;

        $this->view->course = $course;
        $this->view->request = $request;
    }

    public function editPostAction()
    {
        $in = $this->getRequest()->getParams();
        //print_r($_FILES); exit;

        $session = new Zend_Session_Namespace('Edit Request');
        $course = $session->course;
        $request = $session->request;

        //print_r($course); exit;

        if (!in_array($request->getType(), array('RemoveCourse', 'AddACEToCourse', 'RemoveACEFromCourse'))) {

	        $course->setCourseCode($in['subject'], $in['courseNumber'], $in['courseLetter']);
	        $course->setTitle($in['title']);
	        if (Unl_Util::isArray($in['crosslistings'])) {
		        foreach ($in['crosslistings'] as $id => $crosslisting) {
		        	if ($crosslisting['delete'] == 'yes') {
		        		$course->removeCrosslisting($id);
		        	} else if ($crosslisting['action'] == 'edit') {
		        	    $course->editCrosslisting($id, $crosslisting['type'], $crosslisting['subject'], $crosslisting['courseNumber'], $crosslisting['courseLetter']);
		        	} else {
		        		$course->addCrosslisting($crosslisting['type'], $crosslisting['subject'], $crosslisting['courseNumber'], $crosslisting['courseLetter']);
		        	}
		        }
	        }

	        foreach ($in['credits'] as $type => $credit) {
	        	if ($type == Courses_CourseModel::CREDIT_TYPE_SINGLE) {
	        		$credit = explode(',', $credit);
	        		foreach($credit as $key => $hours) {
	        			$credit[$key] = trim($hours);
	        		}
	        	}
	        	$course->setCredit($type, $credit);
	        }

	        $course->setTermsOffered($in['termsOffered']);

	        if (Unl_Util::isArray($in['activities'])) {
		        foreach ($in['activities'] as $activity) {
		        	if ($activity['delete'] == 'yes') {
		        		$course->removeActivity($activity['type']);
		        	} else {
		        	    $course->setActivity($activity['type'], $activity['hours']);
		        	}
		        }
	        }

	        $course->setPrerequisite($in['prerequisite']);
	        $course->setGradingType($in['gradingType']);
	        $course->setDfRemoval($in['dfRemoval']);
	        $course->setDeliveryMethods($in['deliveryMethods']);
	        $course->setCampuses($in['campuses']);
	        $course->setNotes($in['notes']);
	        $course->setDescription($in['description']);
	        if ($in['gradTieIn']['credits'] || $in['gradTieIn']['prerequisites'] || $in['gradTieIn']['notes']) {
	        	$course->setGradTieIn($in['gradTieIn']['credits'], $in['gradTieIn']['prerequisites'], $in['gradTieIn']['notes']);
	        } else {
	            $course->removeGradTieIn();
	        }
        }

        if (in_array($request->getType(), array('NewCourseWithACE', 'AddACEToCourse', 'AddACEAndChangeCourse'))) {
        	foreach ($in['ace']['outcomes'] as $name => $aceOutcome) {
        		if ($aceOutcome['enabled']) {
        			$course->setAceOutcome($name, $aceOutcome['justification'], $aceOutcome['studentWork'], $aceOutcome['assesmentPlan']);
        		} else {
        			$course->removeAceOutcome($name);
        		}
        	}

        	foreach ($in['ace']['reinforcements'] as $name => $aceReinforcement) {
        		if ($aceReinforcement['enabled']) {
        			$course->setAceReinforcement($name, $aceReinforcement['description']);
        		} else {
        			$course->removeAceReinforcement($name);
        		}
        	}
        }

        $request->setJustification($in['request']['justification']);

        $fileTypes = array(
            Requests_RequestModel::FILE_TYPE_SYLLABUS,
            Requests_RequestModel::FILE_TYPE_CROSSLIST_MEMO,
            Requests_RequestModel::FILE_TYPE_OTHER,
            Requests_RequestModel::FILE_TYPE_IS_NARRATIVE
        );

        foreach ($fileTypes as $fileType) {
        	if ($in['removeFiles'][$fileType] == 'yes') {
        		$request->removeFile($fileType);
        	}
	        if ($_FILES['request']['error'][$fileType] === 0) {
	            $title = $_FILES['request']['name'][$fileType];
	            $mimeType = $_FILES['request']['type'][$fileType];
	            $content = file_get_contents($_FILES['request']['tmp_name'][$fileType]);
	            $request->setFile($fileType, $title, $mimeType, $content);
	        }
        }

        $session->course = $course;
        $session->request = $request;

        $this->_redirect('/courses/view/index/id/session');
    }

    public function loadAction()
    {
    	$in = $this->getRequest()->getParams();
    	$session = new Zend_Session_Namespace('Edit Request');
    	if ($in['sessionId'] !== null) {
    		$id = $in['sessionId'];
            $request = $session->savedRequests[$id]['request'];
            $course = $session->savedRequests[$id]['course'];
            $parentCourse = $session->savedRequests[$id]['parentCourse'];
            $session->currentSavedRequestId = $id;
    	} else {
    		$id = $in['id'];
    		$request = Requests_RequestModel::find($id);
    		$course = Courses_CourseModel::findLatestOfRequest($request);
    		$course = clone $course;
    		$parentCourse = Courses_CourseModel::findParentOfRequest($request);
    		unset($session->currentSavedRequestId);
    	}

    	$session->request = $request;
    	$session->course = $course;
    	$session->parentCourse = $parentCourse;

    	$this->_redirect('/courses/edit');
    }

    public function submitPostAction()
    {
    	$in = $this->getRequest()->getParams();

    	$session = new Zend_Session_Namespace('Edit Request');
    	if ($in['effectiveSemester']) {
            $session->course->setEffectiveSemester($in['effectiveSemester']);
    	}

        if ($in['submitType'] == 'Save for Later Submission') {
            $this->_saveForLater();
            $this->_redirect('/requests');
        }

        if ($in['submitType'] == 'Return to Edit') {
            $this->_redirect('/courses/edit');
        }

        if ($in['submitType'] == 'Abandon Changes') {
            $this->_redirect('/requests');
        }

        if ($in['submitType'] == 'Save Changes') {
        	$this->_saveRequest();
            $this->_redirect('/requests');
        }

        if ($in['submitType'] == 'Submit') {
            set_time_limit(5);
        	$this->_saveRequest();
        	$this->_startApproval();
        	$this->_redirect('/requests');
        }

    }

    protected function _saveForLater()
    {
    	$session = new Zend_Session_Namespace('Edit Request');
    	$savedRequests = $session->savedRequests;
    	if (!Unl_Util::isArray($savedRequests)) {
    		$savedRequests = array();
    	}
    	$newSavedRequest = array(
            'request'      => $session->request,
            'course'       => $session->course,
            'parentCourse' => $session->parentCourse
    	);

    	if ($session->currentSavedRequestId !== null) {
    		$id = $session->currentSavedRequestId;
    		$savedRequests[$id] = $newSavedRequest;
    	} else {
    		$savedRequests[] = $newSavedRequest;
    	}

    	$session->savedRequests = $savedRequests;
    }

    protected function _saveRequest()
    {
    	$session = new Zend_Session_Namespace('Edit Request');
    	Requests_RequestModel::save($session->request);
    	$session->course->setRequest($session->request);
    	Courses_CourseModel::save($session->course);
    }

    protected function _startApproval()
    {
        $session = new Zend_Session_Namespace('Edit Request');
    	Requests_ApprovalChainModel::consider($session->request);
    }
}