Skip to content
Snippets Groups Projects
Select Git revision
  • c45445b053799e874cac7b0d7de7453262129db9
  • 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

doxygen.php

Blame
  • RequestController.php 35.67 KiB
    <?php
    
    class RequestController extends Nmc_Controller_Action
    {
    
        public function init()
        {
            $this->_registerPlugin(new Application_Controller_Action_Plugin_Authorize());
        }
    
        public function indexAction()
        {
            return $this->SearchAction();
        }
    
        public function searchAction()
        {
            $in = $this->_getAllParams();
            if($in[0] != '' && $in[1] != '') {
                return $this->searchResultsAction();
            }
    
            $out = new Application_View();
            $out->page = 'request/search';
            $out->addCssFile('/ooss/request/edit_wrapper');
            $out->tagline = 'Course Search';
            echo $out->render('unlModernWrapper.xhtml');
        }
    
        public function searchResultsAction()
        {
            $in = $this->_getAllParams();
    
            $subject = Zend_Filter_Alpha::filter($in[0]);
            $courseNumber = Zend_Filter_Digits::filter($in[1]);
            $courseLetter = Zend_Filter_Alpha::filter($in[2]);
    
            $subject = strtoupper($subject);
            $courseNumber = strtoupper($courseNumber);
            $courseLetter = strtoupper($courseLetter);
    
            $course = CourseCrosslistings::fetchBySubjectNumberLetter(
                $subject, $courseNumber, $courseLetter
            );
            $requestedCourse = CourseCrosslistings::fetchBySubjectNumberLetter(
                $subject, $courseNumber, $courseLetter, false
            );
    
            $out = new Application_View();
            $out->subject = $subject;
            $out->courseNumber = $courseNumber;
            $out->courseLetter = $courseLetter;
    
            if(!$course) {
                // course not found
                $out->page = 'request/create_new_course_ask';
                Nmc_Registry_Session::getInstance()->erase('course');
            } else {
                // course found
    
                Nmc_Registry_Session::getInstance()->erase('course');
                $out->page = 'request/course_found';
                $parentCourse = $course->getParentCourse();
    
                $course = clone $parentCourse;
    
                if ($course->subject != $subject ||
                    $course->courseNumber != $courseNumber ||
                    $course->courseLetter != $courseLetter)
                {
                    $out->crosslisting = true;
                    $out->homeSubject = $course->subject;
                    $out->homeCourseLetter = $course->courseLetter;
                    $out->homeCourseNumber = $course->courseNumber;
                } else {
                    $out->crosslisting = false;
                }
    
                Nmc_Registry_Session::getInstance()->course = $course;
            }
    
            if ($requestedCourse) {
                $out->currentPendingRequest = true;
            } else {
                $out->currentPendingRequest = false;
            }
    
            $out->tagline = 'Course Search Results';
            echo $out->render('unlModernWrapper.xhtml');
        }
    
        public function createAction()
        {
            $in = $this->_getAllParams();
    
            $type = Zend_Filter_Alnum::filter($in[0]);
            $subject = Zend_Filter_Alpha::filter($in[1]);
            $courseNumber = Zend_Filter_Digits::filter($in[2]);
            $courseLetter = Zend_Filter_Alpha::filter($in[3]);
    
            $request = Requests::getInstance()->fetchNew();
            $request->owner = Nmc_User::getInstance()->getUser();
            $request->type = RequestTypes::getInstance()->stringToType($type);
    
            $course = Nmc_Registry_Session::getInstance()->course;
            if(!$course) {
                $course = CourseGenerations::getInstance()->fetchNew();
                $course->subject = $subject;
                $course->courseNumber = $courseNumber;
                $course->courseLetter = $courseLetter;
            }
    
            $course->request = $request;
            $course->type = 'proposed';
    
            //print_r($course);
    
            Nmc_Registry_Session::getInstance()->request = $request;
            Nmc_Registry_Session::getInstance()->course = $course;
    
            $out = new Application_View();
            if ($request->type->name == 'RemoveCourse') {
                $out->location = '/Request/SupportiveMaterial';
            } else {
                $out->location = '/Request/CourseID';
            }
            echo $out->render('unlModernWrapper.xhtml');
        }
    
        public function loadAction()
        {
            $in = $this->getRequest();
            $requestId = $in->getParam(0);
            $user = Nmc_User::getInstance()->getUser();
    
            Nmc_Registry_Session::getInstance()->savedRequestIndex = -1;
    
            if (strtolower($requestId) == 'saved') {
                $requestId = $in->getParam(1);
                $requestId = Zend_Filter_Int::filter($requestId);
    
                Nmc_Registry_Session::getInstance()->savedRequestIndex = $requestId;
    
                $savedCourses = Registry::getInstance()->getValue($user->getId(), 'savedCourses');
                $savedCourses = unserialize($savedCourses);
                $course = $savedCourses[$requestId];
    
                $savedRequests = Registry::getInstance()->getValue($user->getId(), 'savedRequests');
                $savedRequests = unserialize($savedRequests);
                $request = $savedRequests[$requestId];
    
                $course->request = $request;
    
            } else {
                $requestId = Zend_Filter_Int::filter($requestId);
                $request = Requests::getInstance()->findOne($requestId);
                $course = $request->getCourseGeneration();
                $course = clone $course;
            }
    
            Nmc_Registry_Session::getInstance()->course = $course;
            Nmc_Registry_Session::getInstance()->request = $request;
    
            $out = new Application_View();
            $out->location = '/Request/Edit';
            $out->render('unlModernWrapper.xhtml');
        }
    
        public function deleteSavedAction()
        {
            $in = $this->getRequest();
            $savedRequestIndex = $in->getParam(0);
            $savedRequestIndex = Zend_Filter_Int::filter($savedRequestIndex);
            $user = Nmc_User::getInstance()->getUser();
    
            if (is_int($savedRequestIndex) && $savedRequestIndex >= 0) {
                $savedCourses = Registry::getInstance()->getValue($user->getId(), 'savedCourses');
                $savedCourses = unserialize($savedCourses);
                unset($savedCourses[$savedRequestIndex]);
    
                $savedRequests = Registry::getInstance()->getValue($user->getId(), 'savedRequests');
                $savedRequests = unserialize($savedRequests);
                unset($savedRequests[$savedRequestIndex]);
    
                $savedCourses = serialize($savedCourses);
                Registry::getInstance()->setValue($user->getId(), 'savedCourses', $savedCourses);
    
                $savedRequests = serialize($savedRequests);
                Registry::getInstance()->setValue($user->getId(), 'savedRequests', $savedRequests);
            }
    
            $view = new Application_View();
            $view->location = '/Home';
            $out = $this->getResponse();
            $out->setBody($view->render('unlModernWrapper.xhtml'));
        }
    
        public function getFileAction()
        {
            $in = $this->getRequest();
            $fileId = $in->getParam(0);
            $file = Files::getInstance()->findOne($fileId);
            if ($file) {
                header('Content-type: ' . $file->mimeType);
                header('Content-disposition: attachment; filename=' . $file->title);
                echo $file->data;
            }
        }
    
        public function viewAction()
        {
            $in = $this->getRequest();
            $requestId = $in->getParam(0);
            $request = Requests::getInstance()->findOne($requestId);
    
            $proposedGeneration = $request->getCourseGeneration();
            $currentGeneration = $proposedGeneration;
            while ($currentGeneration && $currentGeneration->type != 'official') {
                $currentGeneration = $currentGeneration->getParentGeneration();
            }
    
            if ($request->type->name != 'ChangeCourse') {
                $currentGeneration = null;
            }
    
            $comments = RequestComments::getInstance()->fetchWithRequest($request);
    
            $user = Nmc_User::getInstance()->getUser();
            $time = new Zend_Date();
            RequestViewTimes::getInstance()->setViewTimeForUserAndRequest($user, $request, $time);
    
            $requestOrder = Nmc_Registry_Session::getInstance('requests')->order;
            $currentRequestIndex = array_search($request->getPrimaryKey(), $requestOrder);
            if ($currentRequestIndex !== false) {
                $nextRequestId = $requestOrder[$currentRequestIndex+1];
                $prevRequestId = $requestOrder[$currentRequestIndex-1];
    
                if ($currentRequestIndex == 0) {
                    $prevRequestId = -1;
                } else if ($currentRequestIndex == count($requestOrder)) {
                    $nextRequestId = -1;
                }
            } else {
                $nextRequestId = -1;
                $prevRequestId = -1;
            }
    
            $roles = array();
            if ($request->getCurrentAction()) {
                $roles = ApprovalBodyRoleQueues::getInstance()->fetchByRequestAndAction(
                    $request, $request->getCurrentAction()
                );
            }
    
            $canEdit = false;
            foreach ($roles as $role) {
                if ($role->canEdit == 'yes') {
                    $canEdit = true;
                    break;
                }
            }
    
            $view = new Application_View();
            $view->selectedCommentTab = Nmc_Registry_Session::getInstance('comments')->selectedTab;
            $view->page = 'request/view';
            $view->request = $request;
            $view->currentGeneration = $currentGeneration;
            $view->proposedGeneration = $proposedGeneration;
            $view->comments = $comments;
            $view->nextRequestId = $nextRequestId;
            $view->prevRequestId = $prevRequestId;
            $view->tagline = 'View Request';
            $view->addHelperPath(APPLICATION_PATH . '/library/View/Helper', 'Application_View_Helper');
            $view->canEdit = $canEdit;
    
            $out = $this->getResponse();
            $out->setBody($view->render('unlModernWrapper.xhtml'));
        }
    
        public function setCommentTabAction()
        {
            $in = $this->getRequest();
            $tab = $in->getParam(0);
            Nmc_Registry_Session::getInstance('comments')->selectedTab = $tab;
        }
    
        public function addCommentAction()
        {
            $in = $this->getRequest();
            $requestId = $in->getParam(0);
            $request = Requests::getInstance()->findOne($requestId);
            if ($request) {
                $comment = RequestComments::getInstance()->fetchNew();
                $comment->comment = $in->getPost('comment');
                $comment->visibility = $in->getPost('visibility');
                $comment->user = Nmc_User::getInstance()->getUser();
                $comment->request = $request;
                $comment->save();
            }
    
            $view = new Application_View();
            $view->location = '/Request/View/' . $requestId;
            $view->tagline = 'Processing...';
    
            $out = $this->getResponse();
            $out->setBody($view->render('unlModernWrapper.xhtml'));
        }
    
        public function updateAction() {
    
            $errors = array();
    
            $course = Nmc_Registry_Session::getInstance()->course;
            $request = Nmc_Registry_Session::getInstance()->request;
    
    
    
            $submit = Zend_Filter_Alpha::filter($_POST['submitType']);
    
            if(is_array($_POST['request'])) {
            foreach($_POST['request'] as $key => $val) {
                if(!is_array($val) && $val != '') {
                    //echo '$request->' . $key . ' = ' . $val . "<br />\n";
                    $request->$key = $val;
                }
            } }
    
            $filesToRemove = null;
            if(array_key_exists('removeFiles', $_POST)) {
                $filesToRemove = $_POST['removeFiles'];
                unset($_POST['removeFiles']);
            }
    
            unset($_POST['request']);
    
            unset($_POST['submitType']);
            unset($_POST['p_subject']);
            unset($_POST['p_course_number']);
    
    
    
    
    
    
            /*
            foreach($_POST as $key => $val) {
                if(!is_array($val) && $key != 'courseId' && $val != '') {
                    //echo '$course->' . $key . ' = ' . $val . "<br />\n";
                    $course->$key = $val;
                }
            }
    
            foreach($_POST as $key => $val) {
                if($key == 'credits') {
                    foreach($course->credits as $key => $credit) {
                        unset($course->credits[$key]);
                    }
                    foreach($val as $type => $hours) {
                        if($type == 1) {
                            foreach(explode(' ', $hours) as $singeValue) {
                                if(Zend_Filter_Digits::filter($hours) != '') {
                                    $newAttribute = CourseCredits::getInstance()->fetchNew();
                                    $newAttribute->type = $type;
                                    $newAttribute->hours = $singeValue;
                                    $course->credits[] = $newAttribute;
                                }
                            }
                            continue;
                        }
                        if(Zend_Filter_Digits::filter($hours) != '') {
                            $newAttribute = CourseCredits::getInstance()->fetchNew();
                            $newAttribute->type = $type;
                            $newAttribute->hours = $hours;
                            $course->credits[] = $newAttribute;
                        }
                    }
                } else if(in_array($key, array('termsOffered','deliveryMethods','campuses'))) {
                    $course->$key = $val;
                } else if($key == 'gradTieIn') {
                    if(!$course->gradTieIn instanceof CourseGradTieIn) {
                        $course->gradTieIn = CourseGradTieIns::getInstance()->fetchNew();
                    }
                    foreach($val as $key2 => $val2) {
                        $course->gradTieIn->$key2 = $val2;
                    }
                } else if(is_array($val)) {
                    $array = $course->$key;
                    foreach($val as $key2 => $val2) {
                        //either create or grab the current attribute
                        if($key2 < 0) {
                            $attributeTable = call_user_func(array('Course' . $key, 'getInstance'));
                            $currentAttribute = $attributeTable->fetchNew();
                            $array[] = $currentAttribute;
                        } else {
                            $currentAttribute = $array[$key2];
                        }
                        //delete it if marked for deletion, otherwise unset the delete field
                        if($val2['delete'] == 'yes') {
                            unset($array[$key2]);
                            continue;
                        } else {
                            unset($val2['delete']);
                        }
    
                        //loop over each attribute and set
                        foreach($val2 as $key3 => $val3) {
                            if($val3 == '') {
                                $val3 = null;
                            }
                            //echo '$course->' . $key . '[' . $key2 . ']->' . $key3 . ' = ' . $val3 . "<br />\n";
                            $currentAttribute->$key3 = $val3;
                        }
                        //save changes
                    }
                }
            }
            */
    
    
    
    
    
    
            foreach($_POST as $key => $val) {
                if(!is_array($val) && $key != 'courseId' /*&& $val != ''*/) {
                    //echo '$course->' . $key . ' = ' . $val . "<br />\n";
                    $course->$key = $val;
                }
            }
    
            foreach($_POST as $key => $val) {
                if($key == 'credits') {
                    $credits = $course->credits;
                    foreach($credits as $key => $credit) {
                        unset($credits[$key]);
                    }
                    foreach($val as $type => $hours) {
                        if($type == 1) {
                            foreach(explode(' ', $hours) as $singeValue) {
                                if(Zend_Filter_Digits::filter($hours) != '') {
                                    $newAttribute = CourseCredits::getInstance()->fetchNew();
                                    $newAttribute->type = $type;
                                    $newAttribute->hours = $singeValue;
                                    $credits[] = $newAttribute;
                                }
                            }
                            continue;
                        }
                        if(Zend_Filter_Digits::filter($hours) != '') {
                            $newAttribute = CourseCredits::getInstance()->fetchNew();
                            $newAttribute->type = $type;
                            $newAttribute->hours = $hours;
                            $credits[] = $newAttribute;
                        }
                    }
                } else if(in_array($key, array('termsOffered','deliveryMethods','campuses'))) {
                    $course->$key = $val;
                    //echo '$course->' . $key . ' = '; print_r($val); echo "<br />\n";
                } else if($key == 'gradTieIn') {
                    if(!$course->gradTieIn instanceof CourseGradTieIn) {
                        $course->gradTieIn = CourseGradTieIns::getInstance()->fetchNew();
                    }
                    foreach($val as $key2 => $val2) {
                        $course->gradTieIn->$key2 = $val2;
                    }
                } else if(is_array($val)) {
                    $array = $course->$key;
                    foreach($array as $key2 => $row) {
                        unset($array[$key2]);
                    }
                    foreach($val as $key2 => $val2) {
                        if($val2['delete'] == 'yes') {
                            continue;
                        }
                        $attributeTable = call_user_func(array('Course' . $key, 'getInstance'));
                        $currentAttribute = $attributeTable->fetchNew();
                        unset($val2['delete']);
    
                        //loop over each attribute and set
                        foreach($val2 as $key3 => $val3) {
                            if($val3 == '') {
                                $val3 = null;
                            }
                            //echo '$currentAttribute->' . $key3 . ' = ' . $val3 . "<br />\n";
                            $currentAttribute->$key3 = $val3;
                        }
                        $array[] = $currentAttribute;
                        //save changes
                    }
                    //print_r($array);
                }
            }
    
    
    
    
    
    
    
    
            if(is_array($_FILES['request'])) {
                $newRequestFiles = array();
                foreach($_FILES['request'] as $fieldName => $values) {
                    foreach($values as $key => $value) {
                        $newRequestFiles[$key][$fieldName] = $value;
                    }
                }
    
                foreach($newRequestFiles as $key => $file) {
                    if($file['error'] != 0) {
                        unset($newRequestFiles[$key]);
                        $errors[] = 'request[' . $key . ']';
                    }
                }
    
    
                $fileTypes = array(RequestFile::CROSSLIST_MEMO_TYPE,
                                   RequestFile::IS_NARRATIVE_TYPE,
                                   RequestFile::SYLLABUS_TYPE,
                                   RequestFile::OTHER_TYPE);
                foreach($fileTypes as $fileType) {
                    if(is_array($newRequestFiles[$fileType])) {
                        $inFile = $newRequestFiles[$fileType];
                        $file = RequestFiles::getInstance()->fetchNew();
    
                        $file->title = $inFile['name'];
                        $file->data = file_get_contents($inFile['tmp_name']);
                        $file->mimeType = $inFile['type'];
    
                        $request->setFileByType($fileType, $file);
                    }
                }
            }
    
            if (is_array($filesToRemove)) {
                foreach ($filesToRemove as $fileType => $doRemove) {
                    if ($doRemove == 'yes') {
                        $request->removeFileByType($fileType);
                    }
                }
            }
    
            switch ($submit) {
                case 'Submit':
                case 'SaveChanges':
                    return $this->_submitRequestAction();
                    break;
    
                case 'SaveforLaterSubmission':
                    return $this->_saveUnfinishedRequest();
                    break;
    
                case 'Cancel':
                case 'CancelRequest':
                case 'AbandonChanges':
                    return $this->_cancelRequest();
                    break;
    
                default:
                    break;
            }
    
            $out = new Application_View();
    
            $requestFormOrder = array('CourseID',
                                      'CreditHours',
                                      'TimeLocation',
                                      'NotesDescription',
                                      'GraduateTieIn',
                                      'SupportiveMaterial',
                                      'Preview');
    
            $currentForm = $_SERVER['HTTP_REFERER'];
            $currentForm = explode('/', $currentForm);
            while($currentForm[count($currentForm) - 1] == '') {
                array_pop($currentForm);
            }
            $currentForm = array_pop($currentForm);
    
            $currentFormIndex = array_search(strtolower($currentForm),
                                             array_map("strtolower", $requestFormOrder));
    
            if ($submit == 'ReturntoEdit') {
                $nextForm = 'Edit';
            } else if($currentFormIndex === false) {
                // if the current form page is something unexpected
                $nextForm = 'Preview';
            } else if($currentFormIndex < count($requestFormOrder) - 1) {
                $nextForm = $requestFormOrder[$currentFormIndex + 1];
            } else {
                $nextForm = $requestFormOrder[$currentFormIndex];
            }
    
            if($currentFormIndex > 0) {
                $prevForm = $requestFormOrder[$currentFormIndex - 1];
            } else {
                $prevForm = $requestFormOrder[$currentFormIndex];
            }
    
            if (in_array($submit, $requestFormOrder)) {
                $targetForm = $submit;
            } else if($submit == 'Prev') {
                $targetForm = $prevForm;
            } else {
                $targetForm = $nextForm;
            }
    
            $out->location = '/Request/' . $targetForm . '/';
            echo $out->render('unlModernWrapper.xhtml');
        }
    
        public function saveAction() {
            try {
                $course = clone Nmc_Registry_Session::getInstance()->course;
                $course->save();
            } catch(Exception $e) {
                print_r($e);
                throw $e;
            }
        }
    
        public function courseIdAction()
        {
            $course = Nmc_Registry_Session::getInstance()->course;
            $request = Nmc_Registry_Session::getInstance()->request;
            $view = new Application_View();
    
            $view->addSidebarModule('requestProgress');
            $view->addSidebarModule('bulletinPreview');
            $view->page = 'request/edit_wrapper';
            $view->requestPage = 'course_id';
            $view->addCssFile('/ooss/request/course_id');
            $view->addJsFile('/tinymce/jscripts/tiny_mce/tiny_mce.js');
            $view->addJsFile('/javascript/mce.js');
            $view->addJsFile('/javascript/request/courseId.js');
    
            $view->course = $course;
            $view->request = $request;
            $view->tagline = 'Edit Request';
    
            $out = $this->getResponse();
            $out->setHeader('Content-type', 'application/xhtml+xml; charset=UTF-8');
            $out->setBody($view->render('unlModernWrapper.xhtml'));
        }
    
        public function creditHoursAction()
        {
            $out = new Application_View();
            $out->addSidebarModule('requestProgress');
            $out->addSidebarModule('bulletinPreview');
    
            $out->page = 'request/edit_wrapper';
            $out->requestPage = 'credit_hours';
            $out->addCssFile('/ooss/request/credit_hours');
            $out->addJsFile('/tinymce/jscripts/tiny_mce/tiny_mce.js');
            $out->addJsFile('/javascript/mce.js');
    
            $course = Nmc_Registry_Session::getInstance()->course;
            $request = Nmc_Registry_Session::getInstance()->request;
            $out->course = $course;
            $out->request = $request;
            $out->tagline = 'Edit Request';
    
            $creditsSingleValues = array();
            foreach($course->credits as $credit) {
                if($credit->type == 1) {
                    $creditsSingleValues[] = $credit->hours;
                } else if($credit->type == 2) {
                    $out->creditsRangeMin = $credit->hours;
                } else if($credit->type == 3) {
                    $out->creditsRangeMax = $credit->hours;
                } else if($credit->type == 4) {
                    $out->creditsMaxPerSemester = $credit->hours;
                } else if($credit->type == 5) {
                    $out->creditsMaxPerDegree = $credit->hours;
                }
            }
            $out->creditsSingleValues = implode(' ', $creditsSingleValues);
    
            echo $out->render('unlModernWrapper.xhtml');
        }
    
        public function timeLocationAction()
        {
            $out = new Application_View();
            $out->addSidebarModule('requestProgress');
            $out->addSidebarModule('bulletinPreview');
    
            $out->page = 'request/edit_wrapper';
            $out->requestPage = 'time_location';
            $out->addCssFile('/ooss/request/time_location');
            $out->addJsFile('/javascript/request/time_location.js');
    
            $course = Nmc_Registry_Session::getInstance()->course;
            $request = Nmc_Registry_Session::getInstance()->request;
            $out->course = $course;
            $out->request = $request;
            $out->tagline = 'Edit Request';
    
            echo $out->render('unlModernWrapper.xhtml');
        }
    
        public function notesDescriptionAction()
        {
            $out = new Application_View();
            $out->addSidebarModule('requestProgress');
            $out->addSidebarModule('bulletinPreview');
    
            $out->page = 'request/edit_wrapper';
            $out->requestPage = 'notes_description';
            $out->addCssFile('/ooss/request/nodes_description');
            $out->addJsFile('/tinymce/jscripts/tiny_mce/tiny_mce.js');
            $out->addJsFile('/javascript/mce.js');
    
            $course = Nmc_Registry_Session::getInstance()->course;
            $request = Nmc_Registry_Session::getInstance()->request;
    
            $out->course = $course;
            $out->request = $request;
            $out->tagline = 'Edit Request';
    
            echo $out->render('unlModernWrapper.xhtml');
        }
    
        public function graduateTieInAction()
        {
            $out = new Application_View();
            $out->addSidebarModule('requestProgress');
            $out->addSidebarModule('bulletinPreview');
    
            $out->page = 'request/edit_wrapper';
            $out->requestPage = 'graduate_tie_in';
            $out->addCssFile('/ooss/request/graduate_tie_in');
            $out->addJsFile('/tinymce/jscripts/tiny_mce/tiny_mce.js');
            $out->addJsFile('/javascript/mce.js');
    
            $course = Nmc_Registry_Session::getInstance()->course;
            $request = Nmc_Registry_Session::getInstance()->request;
    
            $hasGradTieIn = false;
            foreach($course->crosslistings as $crosslisting) {
                if($crosslisting->type == 'grad tie-in') {
                    $hasGradTieIn = true;
                }
            }
    
            $out->hasGradTieIn = $hasGradTieIn;
            $out->course = $course;
            $out->request = $request;
            $out->tagline = 'Edit Request';
    
            echo $out->render('unlModernWrapper.xhtml');
        }
    
        public function supportiveMaterialAction()
        {
            $out = new Application_View();
            $out->addSidebarModule('requestProgress');
            $out->addSidebarModule('bulletinPreview');
    
            $out->page = 'request/edit_wrapper';
            $out->requestPage = 'supportive_material';
            $out->addCssFile('/ooss/request/supportave_material');
            $out->addJsFile('/tinymce/jscripts/tiny_mce/tiny_mce.js');
            $out->addJsFile('/javascript/mce.js');
    
            $course = Nmc_Registry_Session::getInstance()->course;
            $out->course = $course;
            $request = Nmc_Registry_Session::getInstance()->request;
            $out->request = $request;
            $out->tagline = 'Edit Request';
    
            echo $out->render('unlModernWrapper.xhtml');
        }
    
        public function additionalInformationAction()
        {
            $out = new Application_View();
            $out->addSidebarModule('requestProgress');
            $out->addSidebarModule('bulletinPreview');
    
            $out->page = 'request/edit_wrapper';
            $out->requestPage = 'additional_information';
            $out->addCssFile('/ooss/request/additional_information');
    
            $course = Nmc_Registry_Session::getInstance()->course;
            $request = Nmc_Registry_Session::getInstance()->request;
            $out->course = $course;
            $out->request = $request;
            $out->tagline = 'Edit Request';
    
            echo $out->render('unlModernWrapper.xhtml');
        }
    
        public function submitRequestAction()
        {
            $course = Nmc_Registry_Session::getInstance()->course;
            $request = Nmc_Registry_Session::getInstance()->request;
    
            $out = new Application_View();
            $out->addSidebarModule('requestProgress');
            $out->addSidebarModule('bulletinPreview');
            $out->course = $course;
            $out->request = $request;
            $out->terms = $this->_getFutureTerms();
            $out->page = 'request/edit_wrapper';
            $out->tagline = 'Edit Request';
            $out->requestPage = 'submit';
            $out->addCssFile('/ooss/request/submit');
    
            echo $out->render('unlModernWrapper.xhtml');
        }
    
        public function editAction()
        {
            $in = $this->getRequest();
    
            $course = Nmc_Registry_Session::getInstance()->course;
            $request = Nmc_Registry_Session::getInstance()->request;
    
            $view = new Application_View();
            $view->addSidebarModule('bulletinPreview');
            $view->addCssFile('/ooss/request/fullEdit');
            $view->addJsFile('/javascript/request/fullEdit.js');
            $view->addJsFile('/tinymce/jscripts/tiny_mce/tiny_mce.js');
            $view->addJsFile('/javascript/mce.js');
            $view->page = 'request/fullEdit';
            $view->course = $course;
            $view->request = $request;
            $view->tagline = 'Edit Request';
    
            $creditsSingleValues = array();
            foreach($course->credits as $credit) {
                if($credit->type == 1) {
                    $creditsSingleValues[] = $credit->hours;
                } else if($credit->type == 2) {
                    $view->creditsRangeMin = $credit->hours;
                } else if($credit->type == 3) {
                    $view->creditsRangeMax = $credit->hours;
                } else if($credit->type == 4) {
                    $view->creditsMaxPerSemester = $credit->hours;
                } else if($credit->type == 5) {
                    $view->creditsMaxPerDegree = $credit->hours;
                }
            }
            $view->creditsSingleValues = implode(' ', $creditsSingleValues);
    
            $out = $this->getResponse();
            $out->setBody($view->render('unlModernWrapper.xhtml'));
        }
    
        public function previewAction()
        {
    
            $course = Nmc_Registry_Session::getInstance()->course;
            $request = Nmc_Registry_Session::getInstance()->request;
    
            $proposedGeneration = $course;
            $currentGeneration = $proposedGeneration;
            while ($currentGeneration && $currentGeneration->type != 'official') {
                $currentGeneration = $currentGeneration->getParentGeneration();
            }
    
            if ($request->type->name != 'ChangeCourse') {
                $currentGeneration = null;
            }
    
            $out = new Application_View();
            //$out->addSidebarModule('requestProgress');
            $out->addSidebarModule('bulletinPreview');
            $out->course = $course;
            $out->request = $request;
            $out->currentGeneration = $currentGeneration;
            $out->proposedGeneration = $proposedGeneration;
            $out->terms = $this->_getFutureTerms();
            $out->page = 'request/view';
            $out->tagline = 'Preview Request';
            $out->addCssFile('/ooss/request/submit');
    
            $out->preview = true;
            if ($request instanceof Request && $request->getPrimaryKey() > 0) {
                $out->initialRequest = false;
            } else {
                $out->initialRequest = true;
            }
    
            echo $out->render('unlModernWrapper.xhtml');
        }
    
        protected function _submitRequestAction()
        {
            try {
    
                $course = Nmc_Registry_Session::getInstance()->course;
                $request = Nmc_Registry_Session::getInstance()->request;
                $user = Nmc_User::getInstance()->getUser();
    
    
                if (!$request->getPrimaryKey()) {
                    $newRequest = true;
                } else {
                    $newRequest = false;
                }
    
                $course->save();
                $request->save();
    
                $request->consider();
    
                Nmc_Registry_Session::getInstance()->erase('course');
                Nmc_Registry_Session::getInstance()->erase('request');
    
                $savedRequestIndex = Nmc_Registry_Session::getInstance()->savedRequestIndex;
                if (is_int($savedRequestIndex) && $savedRequestIndex >= 0) {
                    $savedCourses = Registry::getInstance()->getValue($user->getId(), 'savedCourses');
                    $savedCourses = unserialize($savedCourses);
                    unset($savedCourses[$savedRequestIndex]);
    
                    $savedRequests = Registry::getInstance()->getValue($user->getId(), 'savedRequests');
                    $savedRequests = unserialize($savedRequests);
                    unset($savedRequests[$savedRequestIndex]);
    
                    $savedCourses = serialize($savedCourses);
                    Registry::getInstance()->setValue($user->getId(), 'savedCourses', $savedCourses);
    
                    $savedRequests = serialize($savedRequests);
                    Registry::getInstance()->setValue($user->getId(), 'savedRequests', $savedRequests);
                }
    
                $out = new Application_View();
                if ($newRequest) {
                    $out->location = '/Home';
                } else {
                    $out->location = '/Request/View/' . $request->getPrimaryKey();
                }
                echo $out->render('unlModernWrapper.xhtml');
            } catch(Exception $e) {
                throw $e;
            }
        }
    
        protected function _cancelRequest()
        {
            Nmc_Registry_Session::getInstance()->erase('course');
            Nmc_Registry_Session::getInstance()->erase('request');
    
            $view = new Application_View();
            $view->location = '/home';
            echo $view->render('unlModernWrapper.xhtml');
        }
    
        protected function _saveUnfinishedRequest()
        {
            $user = Nmc_User::getInstance()->getUser();
            $course = Nmc_Registry_Session::getInstance()->course;
            $request = Nmc_Registry_Session::getInstance()->request;
    
            $savedCourses = Registry::getInstance()->getValue($user->getId(), 'savedCourses');
            $savedCourses = unserialize($savedCourses);
    
            $savedRequests = Registry::getInstance()->getValue($user->getId(), 'savedRequests');
            $savedRequests = unserialize($savedRequests);
    
            if (!is_array($savedCourses)) {
                $savedCourses = array();
            }
            if (!is_array($savedRequests)) {
                $savedRequests = array();
            }
    
            $savedRequestIndex = Nmc_Registry_Session::getInstance()->savedRequestIndex;
            if (is_int($savedRequestIndex) && $savedRequestIndex >= 0) {
                $savedCourses[$savedRequestIndex] = $course;
                $savedRequests[$savedRequestIndex] = $request;
            } else {
                $savedCourses[] = $course;
                $savedRequests[] = $request;
            }
    
            $savedCourses = serialize($savedCourses);
            Registry::getInstance()->setValue($user->getId(), 'savedCourses', $savedCourses);
    
            $savedRequests = serialize($savedRequests);
            Registry::getInstance()->setValue($user->getId(), 'savedRequests', $savedRequests);
    
            Nmc_Registry_Session::getInstance()->erase('course');
            Nmc_Registry_Session::getInstance()->erase('request');
    
            $view = new Application_View();
            $view->location = '/home';
            echo $view->render('unlModernWrapper.xhtml');
        }
    
        protected function _getFutureTerms()
        {
            $now = new Zend_Date();
            $month = $now->get(Zend_Date::MONTH);
            $thisYear = $now->get(Zend_Date::YEAR);
            $nextYear = $thisYear + 1;
    
            $terms = array();
            if ($month < 3) {
                $terms[$thisYear . '3'] = 'Summer ' . $thisYear;
            }
            if ($month < 8) {
                $terms[$nextYear . '1'] = 'Fall ' . $thisYear;
            }
            for ($year = $nextYear; $year < $thisYear + 5; $year++) {
                $terms[$year . '2'] = 'Spring ' . $year;
                $terms[$year . '3'] = 'Summer ' . $year;
                $terms[($year + 1) . '1'] = 'Fall ' . ($year + 1);
            }
    
            return $terms;
        }
    }