Skip to content
Snippets Groups Projects
Select Git revision
  • 9aea82817e8fe63338c88b565d690f25255d8de1
  • 3.9 default
  • develop
  • 6.0
  • 5.0
  • 4.0
  • scrutinizer-patch-4
  • scrutinizer-patch-3
  • scrutinizer-patch-2
  • scrutinizer-patch-1
  • 3.7
  • 3.8
  • 3.6
  • 3.9_backported
  • 3.8_backported
  • 3.7_backported
  • 3.5
  • 3.6_backported
  • 3.5_backported
  • 3.4
  • 3.3_backported
  • 6.0.4
  • 6.0.3
  • 5.0.7
  • 6.0.2
  • 6.0.1
  • 5.0.6
  • 6.0.0
  • 5.0.5
  • 6.0.0-rc
  • 5.0.4
  • 6.0.0-beta
  • 5.0.3
  • 4.0.6
  • 5.0.2
  • 5.0.1
  • 4.0.5
  • 5.0.0
  • 4.0.4
  • 5.0.0-rc2
  • 5.0.0-rc1
41 results

lib_head.js

Blame
  • EditController.php 14.56 KiB
    <?php
    
    class Courses_EditController extends App_Controller_Action
    {
    	public function indexAction()
        {
        	$in = $this->_getAllParams();
            $session = new Zend_Session_Namespace('Edit Request ' . $in['id']);
            $course = $session->course;
            $request = $session->request;
            
            $this->view->course = $course;
            $this->view->parentCourse = $session->parentCourse;
            $this->view->request = $request;
            $this->view->errors = $session->errors;
            $this->view->formSessionId = $in['id'];
            
            $layout = Zend_Layout::getMvcInstance();
        }
    
        public function editPostAction()
        {
            $filter = array(
                'subject'      => array('Alpha', 'StringToUpper'),
                'courseNumber' => array('Digits'),
                'courseLetter' => array('Alpha', 'StringToUpper')
            );
            $validator = array();
            $options = array('escapeFilter' => 'StringTrim');
            $in = new Zend_Filter_Input($filter, $validator, $this->getRequest()->getParams(), $options);
            $rawIn = $this->getRequest()->getParams();
    
            $session = new Zend_Session_Namespace('Edit Request ' . $rawIn['id']);
            $course = $session->course;
            $request = $session->request;
            
            $errors = array();
    
            if (!in_array($request->getType(), array('RemoveCourse', 'AddACEToCourse', 'RemoveACEFromCourse', 'ChangeACE'))) {
                $course->setCourseCode($in->subject, $in->courseNumber, $in->courseLetter);
    	        $course->setTitle($in->title);
    	        if (Unl_Util::isArray($in->crosslistings)) {
    		        foreach ($in->crosslistings as $id => $crosslisting) {
    
                        $filter = array(
                            'subject'      => array('Alpha', 'StringToUpper'),
                            'courseNumber' => array('Digits'),
                            'courseLetter' => array('Alpha', 'StringToUpper')
                        );
                        $validator = array();
                        $crosslisting = new Zend_Filter_Input($filter, $validator, $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($rawIn['prerequisite']);
    	        $course->setGradingType($in->gradingType);
    	        $course->setDfRemoval($in->dfRemoval);
    	        $course->setDeliveryMethods($in->deliveryMethods);
    	        $course->setCampuses($in->campuses);
    	        $course->setNotes($rawIn['notes']);
    	        $course->setDescription($rawIn['description']);
    	        if ($in->gradTieIn['credits'] || $in->gradTieIn['prerequisites'] || $in->gradTieIn['notes']) {
    	        	$course->setGradTieIn($in->gradTieIn['credits'], $rawIn['gradTieIn']['prerequisites'], $rawIn['gradTieIn']['notes']);
    	        } else {
    	            $course->removeGradTieIn();
    	        }
            }
    
            if (in_array($request->getType(), array('NewCourseWithACE', 'AddACEToCourse', 'AddACEAndChangeCourse', 'ChangeACE'))) {
            	foreach ($rawIn['ace']['outcomes'] as $name => $aceOutcome) {
            		if ($aceOutcome['enabled']) {
            			$course->setAceOutcome($name, $aceOutcome['justification'], $aceOutcome['studentWork'], $aceOutcome['assesmentPlan']);
            		} else {
            			$course->removeAceOutcome($name);
            		}
            	}
    
            	foreach ($rawIn['ace']['reinforcements'] as $name => $aceReinforcement) {
            		if ($aceReinforcement['enabled']) {
            			$course->setAceReinforcement($name, $aceReinforcement['description']);
            		} else {
            			$course->removeAceReinforcement($name);
            		}
            	}
            }
    
            $request->setJustification($rawIn['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];
    	            $fileExtension = array_pop(explode('.', $title));
    	            if (!in_array($fileExtension, array('rtf', 'pdf', 'odt', 'doc'))) {
    	            	continue;
    	            }
    	            $mimeType = $_FILES['request']['type'][$fileType];
    	            $content = file_get_contents($_FILES['request']['tmp_name'][$fileType]);
    	            $request->setFile($fileType, $title, $mimeType, $content);
    	        }
            }
            */
    
            if (Unl_Util::isArray($in->files)) {
    	        foreach ($in->files as $fileId => $file) {
    	        	if ($file['delete'] == 'yes') {
    	        		$request->removeFileById($fileId);
    	        	}
    	        }
            }
            
            if (Unl_Util::isArray($_FILES['files']['name'])) {
    	        foreach ($_FILES['files']['name'] as $fileType => $files) {
    	        	foreach ($files as $fileId => $title) {
    		        	if ($_FILES['files']['error'][$fileType][$fileId] !== 0) {
    		        		continue;
    		        	}
    		        	
    			        $title = $_FILES['files']['name'][$fileType][$fileId];
    			        $fileExtension = array_pop(explode('.', $title));
    			        if (!in_array($fileExtension, array('rtf', 'pdf', 'odt', 'doc', 'docx'))) {
    			            continue;
    			        }
    			        $mimeType = $_FILES['files']['type'][$fileType][$fileId];
    			        $content = file_get_contents($_FILES['files']['tmp_name'][$fileType][$fileId]);
    			        
    			        $request->addFile($fileType, $title, $mimeType, $content);
    	        	}
    	        }
            }
    
            $session->course = $course;
            $session->request = $request;
            $session->errors = $errors;
    
            if (count($errors) > 0) {
                $this->_redirect('/courses/edit/index/id/' . $rawIn['id']);
            } else {
                $this->_redirect('/courses/view/index/type/session/id/' . $rawIn['id']);
            }
        }
    
        public function loadAction()
        {
        	$in = $this->getRequest()->getParams();
        	
            $tempId = hash('md5', uniqid());
            $session = new Zend_Session_Namespace('Edit Request ' . $tempId);
            
        	if ($in['sessionId'] !== null) {
        		$id = $in['sessionId'];
                $user = Auth_UserModel::findCurrentUser();
        		$savedRequests = RegistryModel::findByNamespaceAndKey($user->getId(), 'savedRequests')->getData();
                $request = $savedRequests[$id]['request'];
                $course = $savedRequests[$id]['course'];
                if ($this->_isSavedRequestStale($request, $course)) {
                    $controllerSession = new Zend_Session_Namespace(__CLASS__);
                    $controllerSession->errorMessage = 'Unfortunately another request modifying this course has been submitted since you saved your request.  You will need to create a new request to continue.';
                    $this->_redirect('/courses/edit/error');
                    exit;
                }
                $parentCourse = $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/index/id/' . $tempId);
        }
    
        public function submitPostAction()
        {
        	$in = $this->getRequest()->getParams();
    
        	$session = new Zend_Session_Namespace('Edit Request ' . $in['id']);
        	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/index/id/' . $in['id']);
            }
        
            if ($in['submitType'] == 'Abandon Changes') {
                $this->_redirect('/requests');
            }
        
            if ($in['submitType'] == 'Cancel Request') {
                $this->_redirect('/requests');
            }
    
            if ($in['submitType'] == 'Save Changes') {
            	$this->_saveRequest();
                $this->_redirect('/requests/view/index/id/' . $session->request->getId());
            }
    
            if ($in['submitType'] == 'Submit') {
                set_time_limit(5);
            	$this->_saveRequest();
            	$this->_startApproval();
            	$this->_redirect('/requests');
            }
    
        }
    
        public function errorAction()
        {
            $session = new Zend_Session_Namespace(__CLASS__);
            $this->view->message = $session->errorMessage;
        }
        
        protected function _saveForLater()
        {
        	$in = $this->_getAllParams();
        	$session = new Zend_Session_Namespace('Edit Request ' . $in['id']);
        	$user = Auth_UserModel::findCurrentUser();
        	$savedRequestRegistry = RegistryModel::findByNamespaceAndKey($user->getId(), 'savedRequests');
        	$savedRequests = $savedRequestRegistry->getData();
        	
        	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;
        	}
    
        	$savedRequestRegistry->setData($savedRequests);
        	$collection = new Unl_Model_Collection('RegistryModel');
        	$collection[] = $savedRequestRegistry;
        	RegistryModel::save($collection);
        }
    
        protected function _saveRequest()
        {
        	$in = $this->_getAllParams();
        	$session = new Zend_Session_Namespace('Edit Request ' . $in['id']);
        
            if ($session->currentSavedRequestId !== null) {
                $id = $session->currentSavedRequestId;
                $user = Auth_UserModel::findCurrentUser();
                
    	        $savedRequestRegistry = RegistryModel::findByNamespaceAndKey($user->getId(), 'savedRequests');
    	        $savedRequests = $savedRequestRegistry->getData();
    	        unset($savedRequests[$id]);
    	        $savedRequestRegistry->setData($savedRequests);
    	        $collection = new Unl_Model_Collection('RegistryModel');
    	        $collection[] = $savedRequestRegistry;
    	        RegistryModel::save($collection);
                unset($session->currentSavedRequestId);
            }
            
        	Requests_RequestModel::save($session->request);
        	$session->course->setRequest($session->request);
        	Courses_CourseModel::save($session->course);
        }
    
        protected function _startApproval()
        {
            $in = $this->_getAllParams();
            $session = new Zend_Session_Namespace('Edit Request ' . $in['id']);
        	Requests_ApprovalChainModel::consider($session->request);
        }
        
        protected function _courseCodeIsAvailable(Courses_CourseModel $course, $subject, $courseNumber, $courseLetter = '')
        {
            foreach ($course->getCrosslistings() as $crosslisting) {
                if ($crosslisting['subject'] == $subject &&
                    $crosslisting['courseNumber'] == $courseNumber &&
                    $crosslisting['courseLetter'] == $courseLetter) {
                    return true;
                }
            }
            
            $course = Courses_CourseModel::findByCourseCode($subject, $courseNumber, $courseLetter);
            if ($course) {
                return false;
            }
            
            $activeRequests = Courses_CourseModel::findActiveRequestByCourseCode($subject, $courseNumber, $courseLetter);
            if (count($activeRequests) > 0) {
                return false;
            }
            
            return true;
        }
        
        protected function _isSavedRequestStale(Requests_RequestModel $request, Courses_CourseModel $course)
        {
            if (!$course->getCourseId()) {
                return false;
            }
    
            $parentCourse = Courses_CourseModel::findByCourseId($course->getCourseId());
            if ($parentCourse->getId() != $course->getParentId()) {
                return true;
            }
            
            $otherRequests = Courses_CourseModel::findActiveRequestByCourseCode($parentCourse->getSubject(),
                                                                                $parentCourse->getCourseNumber(),
                                                                                $parentCourse->getCourseLetter());
            if (count($otherRequests) > 0) {
                return true;
            }
    
            return false;
        }
        
        public function isCourseCodeAvailableAction()
        {
            $in = $this->_getAllParams();
            
            $session = new Zend_Session_Namespace('Edit Request ' . $in['id']);
            $course = $session->course;
            
            $available = $this->_courseCodeIsAvailable($course, $in['subject'], $in['courseNumber'], $in['courseLetter']);
            
            $dom = new DOMDocument();
            $root = $dom->createElement('response');
            $dom->appendChild($root);
            if ($available) {
                $responseNode = $dom->createElement('true');
            } else {
                $responseNode = $dom->createElement('false');
            }
            $root->appendChild($responseNode);
            
            header('Content-type: text/xml');
            echo $dom->saveXML();
            
            exit;
        }
    }