protected function doSave($con = null)
 {
     $con = is_null($con) ? $this->getConnection() : $con;
     $course = $this->getObject();
     $from_course = CoursePeer::retrieveByPK($this->values['course_id']);
     try {
         $con->beginTransaction();
         foreach ($from_course->getStudents() as $student) {
             foreach ($course->getCourseSubjects() as $course_subject) {
                 $course_subject_student = new CourseSubjectStudent();
                 $course_subject_student->setCourseSubjectId($course_subject->getId());
                 $course_subject_student->setStudentId($student->getId());
                 $course_subject_student->save($con);
             }
         }
         $con->commit();
     } catch (Exception $e) {
         throw $e;
         $con->rollBack();
     }
 }
Пример #2
0
 public function executeUpdateCourseSubjectStudents(sfWebRequest $request, $con = null)
 {
     if (!$request->isMethod("POST")) {
         $this->redirect($this->referer_module . '/index');
     }
     $this->course = CoursePeer::retrieveByPK($request->getParameter('id'));
     $this->course_subjects = $this->course->getCourseSubjects();
     $this->forms = $this->getForms($this->course_subjects);
     $this->handleSelectedTab($request);
     $valid = count($this->forms);
     foreach ($this->forms as $form) {
         $form->bind($request->getParameter($form->getName()));
         if ($form->isValid()) {
             $valid--;
         }
     }
     if (is_null($con)) {
         $con = Propel::getConnection(DivisionPeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
     }
     $con->beginTransaction();
     try {
         if ($valid == 0) {
             foreach ($this->forms as $form) {
                 $form->save($con);
             }
             $this->getUser()->setFlash('notice', 'Los alumnos se guardaron satisfactoriamente.');
         } else {
             $this->getUser()->setFlash('error', 'Ocurrieron errores al intentar guardar los alumnos. Por favor, intente nuevamente la operación.');
         }
         $con->commit();
     } catch (Exception $e) {
         $con->rollBack();
         $this->getUser()->setFlash('error', $e->getMessage() . 'hjgjh');
     }
     $this->setTemplate('courseSubjectStudent');
 }
Пример #3
0
 public function executeExam(sfWebRequest $request)
 {
     $this->buildSubmenu($request);
     $id = $request->getParameter("id");
     $conn = Propel::getConnection();
     $this->courseObj = CoursePeer::retrieveByPK($id, $conn);
     if (!is_object($this->courseObj)) {
         $this->forward404();
     }
     if ($request->hasParameter("year") && trim($request->getParameter("year")) != "") {
         $this->year = $request->getParameter("year");
         $results = ExamPeer::getExamsForYearAndCourseId($id, $this->year, $conn);
         if (count($results) == 0) {
             $this->forward404();
         }
         $examArr = array();
         $testArr = array();
         $quizArr = array();
         $psetArr = array();
         foreach ($results as $exam) {
             switch ($exam->getType()) {
                 case EnumItemPeer::EXAM:
                     $examArr[] = array("descr" => $exam->getDescr(), "path" => $exam->getFilePath());
                     break;
                 case EnumItemPeer::TEST:
                     $testArr[] = array("descr" => $exam->getDescr(), "path" => $exam->getFilePath());
                     break;
                 case EnumItemPeer::QUIZ:
                     $quizArr[] = array("descr" => $exam->getDescr(), "path" => $exam->getFilePath());
                     break;
                 case EnumItemPeer::PROBLEM_SET:
                     $psetArr[] = array("descr" => $exam->getDescr(), "path" => $exam->getFilePath());
                     break;
             }
         }
         if (count($examArr) != 0) {
             $this->examArr = $examArr;
         }
         if (count($testArr) != 0) {
             $this->testArr = $testArr;
         }
         if (count($quizArr) != 0) {
             $this->quizArr = $quizArr;
         }
         if (count($psetArr) != 0) {
             $this->psetArr = $psetArr;
         }
     } else {
         $this->forward404();
     }
 }
 /**
  * Start browsing the directory and register files
  *
  * @return       Exception code = 400 if directory non-existent
  *               An array containing list of non-imported files if successful
  */
 public function doImport()
 {
     if (!file_exists($this->_dir)) {
         throw new Exception("directory non-existent", 400);
     }
     $errArr = array();
     $handler = opendir($this->_dir);
     // TODO: does not do recrusive listing, do we need that?
     while (false !== ($file = readdir($handler))) {
         if ($file != '.' && $file != '..') {
             $err = false;
             $pos = strrpos($file, '.');
             $fileName = strtoupper(substr($file, 0, $pos));
             $token = strtok($fileName, '_');
             $counter = 0;
             while (false !== $token) {
                 switch ($counter) {
                     case 0:
                         if (strlen($token) != 7) {
                             $err = true;
                         }
                         $rawCourseCode = $token;
                         break;
                     case 1:
                         if ($token != substr($this->_year, 0, 4)) {
                             $err = true;
                         }
                         break;
                     case 2:
                         if ($token != "EXAM") {
                             if (substr($token, 0, 5) == "EXAM(") {
                                 // name could have the following syntax: AER205S_2009_EXAM(2).pdf
                                 $count = strtok($token, '(');
                                 $count = strtok('(');
                                 $count = strtok($count, ')');
                                 if ($count === false || !is_numeric($count)) {
                                     $err = true;
                                 }
                             } else {
                                 $err = true;
                             }
                         }
                         break;
                 }
                 $token = strtok("_");
                 $counter++;
             }
             if ($counter != 3 || $err) {
                 $err = true;
             } else {
                 // assume course code is 7 chars in length with the last char being either S, F or Y
                 $part1 = substr($rawCourseCode, 0, 6);
                 //e.g. AER205
                 $part2 = substr($rawCourseCode, 6, 1);
                 //e.g. F
                 switch ($part2) {
                     case "F":
                     case "S":
                         $courseCode = $part1 . "H1";
                         $descr = $part1 . " " . $this->_year . " Official Exam" . (isset($count) ? ' (' . $count . ')' : '');
                         break;
                     case "Y":
                         $courseCode = $part1 . "Y1";
                         $descr = $part1 . " " . $this->_year . " Official Exam" . (isset($count) ? ' (' . $count . ')' : '');
                         break;
                     default:
                         $err = true;
                         break;
                 }
                 if (!$err) {
                     $conn = Propel::getConnection();
                     // check if we have exam of this descr already
                     $examArr = ExamPeer::getExamsForYearAndCourseId($courseCode, $this->_year, $conn);
                     foreach ($examArr as $ex) {
                         if ($ex->getType() == EnumItemPeer::EXAM && $ex->getDescr() == $descr) {
                             $err = true;
                             break;
                         }
                     }
                     if (!$err) {
                         // first check if course exists
                         $course = CoursePeer::retrieveByPK($courseCode, $conn);
                         if (!isset($course)) {
                             $course = new Course();
                             //$course->setDeptId(substr($courseCode, 0, 3));
                             $course->setDescr($courseCode);
                             $course->setIsEng(1);
                             $course->setId($courseCode);
                             $dept = DepartmentPeer::retrieveByPK(substr($courseCode, 0, 3), $conn);
                             if (!isset($dept)) {
                                 $dept = new Department();
                                 $dept->setId(substr($courseCode, 0, 3));
                                 $dept->setDescr(substr($courseCode, 0, 3));
                                 $dept->save($conn);
                             }
                             $course->setDepartment($dept);
                             $course->save($conn);
                         }
                         // register exam
                         $exam = new Exam();
                         $exam->setType(EnumItemPeer::EXAM);
                         $exam->setDescr($descr);
                         $exam->setCourseId($courseCode);
                         $exam->setFilePath($this->_dir . $file);
                         $exam->setYear($this->_year);
                         $exam->save();
                     }
                 }
             }
             if ($err) {
                 $errArr[] = $file;
             }
         }
     }
     closedir($handler);
     return $errArr;
 }
Пример #5
0
 public function canIndexCourseStudentMark($course)
 {
     if (!$course) {
         $course = CoursePeer::retrieveByPK(sfContext::getInstance()->getRequest()->getParameter("id"));
         return true;
         //Because is an extraordinary course, is not be in a division, and the preceptors are related to a course by a division.
         //So, we show all the extraordinary courses to a preceptor
     }
     if ($this->isPreceptor()) {
         return $course->canBeStudentMarksEditedByPreceptorUser($this->getGuardUser());
     } elseif ($this->isTeacher()) {
         return $course->canBeStudentMarksEditedByTeacherUser($this->getGuardUser());
     }
     return true;
 }
 public function saveToDatabase()
 {
     if (isset($this->_infoArr) && isset($this->_mappingArr)) {
         $err = "";
         $conn = Propel::getConnection();
         $dt = date("Y-m-d, H:i:s");
         $len = count($this->_infoArr);
         for ($i = 0; $i < $len; $i++) {
             $course = CoursePeer::retrieveByPK($this->_infoArr[$i]["courseCode"]);
             if (!isset($course)) {
                 // new course found, save to db
                 $course = new Course();
                 $course->setDescr($this->_infoArr[$i]["courseName"]);
                 $course->setIsEng(1);
                 $course->setDeptId(substr($this->_infoArr[$i]["courseCode"], 0, 3));
                 $course->setId($this->_infoArr[$i]["courseCode"]);
                 $course->save($conn);
             } elseif ($course->getDescr() == $course->getId()) {
                 // exam importer registers course description as course id
                 // if we encounter this situation, amend it with the proper description
                 $course->setDescr($this->_infoArr[$i]["courseName"]);
                 $course->save($conn);
             }
             try {
                 $instr = InstructorPeer::findInstructorByName($this->_infoArr[$i]["instrFirstName"], $this->_infoArr[$i]["instrLastName"], $conn);
             } catch (Exception $e) {
                 if ($e->getCode() == 1) {
                     // no instructor found
                     $instr = new Instructor();
                     $instr->setFirstName($this->_infoArr[$i]["instrFirstName"]);
                     $instr->setLastName($this->_infoArr[$i]["instrLastName"]);
                     $instr->setDeptId($course->getDeptId());
                     $instr->save($conn);
                 } else {
                     // TODO: big problem, duplicate instructors found
                     // log error and move on
                     continue;
                 }
             }
             // create CourseInstructorAssociation if it doesn't exist
             try {
                 $assoc = CourseInstructorAssociationPeer::findForYearAndInstructorIdAndCourseId($this->_year, $course->getId(), $instr->getId(), $conn);
             } catch (Exception $e) {
                 if ($e->getCode() == 1) {
                     // create new object
                     $assoc = new CourseInstructorAssociation();
                     $assoc->setYear($this->_year);
                     $assoc->setCourseId($course->getId());
                     $assoc->setInstructorId($instr->getId());
                     $assoc->save($conn);
                 } else {
                     // TODO: big problem, duplicate assocs found
                     // log error and move on
                     continue;
                 }
             }
             // we can now save the real rating data
             $ratingArr = $this->_ratingArr[$i];
             foreach ($ratingArr as $fieldId => $data) {
                 foreach ($data as $rating => $number) {
                     $ratingObj = new AutoCourseRating();
                     $ratingObj->setFieldId($fieldId);
                     $ratingObj->setRating($rating);
                     $ratingObj->setNumber($number);
                     $ratingObj->setImportDt($dt);
                     $ratingObj->setCourseInsId($assoc->getId());
                     $ratingObj->save();
                 }
             }
         }
     } else {
         throw new Exception("readCsv method has not been called.");
     }
 }
Пример #7
0
 public function executeCourseSubjectStudentsRegularity(sfWebRequest $request)
 {
     $this->course = CoursePeer::retrieveByPK($request->getParameter('id'));
     if (empty($this->course)) {
         $this->redirect('@division_course');
     }
     $form_name = SchoolBehaviourFactory::getInstance()->getFormFactory()->getCourseSubjectStudentsRegularityForm();
     $this->form = new $form_name();
     $this->form->setCourse($this->course);
     if ($request->isMethod("post")) {
         $this->form->bind($request->getParameter($this->form->getName()), $request->getFiles($this->form->getName()));
         if ($this->form->isValid()) {
             $this->form->save();
             $this->getUser()->setFlash("notice", "All students states have been saved successfully.");
         }
     }
 }
Пример #8
0
 public function executeShowStudents(sfWebRequest $request)
 {
     $course = CoursePeer::retrieveByPK($request->getParameter('id'));
     return $this->renderPartial('course_students', array('course' => $course));
 }
Пример #9
0
 public function executeRevertCalificateNonNumericalMark(sfWebRequest $request)
 {
     $this->course = CoursePeer::retrieveByPK($this->getRequest()->getParameter("id"));
     $this->course_subject = $this->course->getCourseSubject();
     $this->form = new RevertCourseSubjectNonNumericalCalificationsForm($this->course_subject);
     $this->back_url = $this->getUser()->getAttribute('referer_module');
 }
Пример #10
0
 public function executeUpdateCourseConfiguration(sfWebRequest $request, $con = null)
 {
     if (!$request->isMethod("post")) {
         $this->redirect('commission/index');
     }
     $this->course = CoursePeer::retrieveByPK($request->getParameter('id'));
     $this->course_subjects = $this->course->getCourseSubjects();
     $this->forms = $this->getCourseSubjectConfigurationForms($this->course_subjects);
     foreach ($this->forms as $form) {
         $form->bind($request->getParameter($form->getName()));
         if ($form->isValid()) {
             $form->save($con);
             $this->getUser()->setFlash('notice', 'The item was updated successfully.');
         } else {
             $this->getUser()->setFlash('error', 'The item has not been saved due to some errors.');
         }
     }
     if ($this->isValidForm($this->forms, $request)) {
         $this->forms = $this->getCourseSubjectConfigurationForms($this->course_subjects);
     }
     $is_bimester_attendance_subject = true;
     foreach ($this->course_subjects as $course_subject) {
         /* @var $course_subject CourseSubject */
         $is_bimester_attendance_subject = $is_bimester_attendance_subject && $course_subject->getCourseType() == CourseType::BIMESTER && $course_subject->hasAttendanceForSubject();
     }
     $this->is_bimester = $is_bimester_attendance_subject && count($course_subject->getCourseSubjectConfigurations()) > 0;
     $this->getUser()->setAttribute('course_subjects', $this->course_subjects);
     $this->setTemplate('courseConfiguration');
 }