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(); } }
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'); }
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; }
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."); } }
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."); } } }
public function executeShowStudents(sfWebRequest $request) { $course = CoursePeer::retrieveByPK($request->getParameter('id')); return $this->renderPartial('course_students', array('course' => $course)); }
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'); }
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'); }