/** * @Route("/semester/update/{id}", name="semester_update") */ public function updateAction($id, Request $request) { //there is an error - Warning: mysqli::prepare(): Couldn't fetch mysqli occurring - check // $results = Semester_results::updateGpa($id); // // // foreach ($results as $result) { // $result->save(); // } // return $this->redirectToRoute('semester_home'); //With doctrine $results = $this->getDoctrine()->getRepository('AppBundle:Semester_results')->findBy(array('semId' => $id)); $students = $this->getDoctrine()->getRepository('AppBundle:Student')->findAll(); $modules = $this->getDoctrine()->getRepository('AppBundle:Module')->findBy(array('semId' => $id)); $moduleCodes = array(); $moduleCredits = array(); $moduleIsGpa = array(); //array to keep GPA/non-GPA foreach ($modules as $obj) { array_push($moduleCodes, $obj->getCode()); $moduleCredits[$obj->getCode()] = $obj->getCredits(); $moduleIsGpa[$obj->getCode()] = $obj->getGpa(); } $gradeObjects = $this->getDoctrine()->getRepository('AppBundle:Grade')->findAll(); $grades = array(); foreach ($gradeObjects as $obj) { $grades[$obj->getGrade()] = $obj->getMark(); } $em = $this->getDoctrine()->getManager(); foreach ($students as $student) { $gs = $student->getGrades(); $totalMarks = 0.0; $totalCredits = 0.0; foreach ($gs as $g) { //echo $g->getMCode(); $code = $g->getMCode(); if (in_array($code, $moduleCodes) && $moduleIsGpa[$code]) { $totalMarks += $grades[$g->getGrade()] * $moduleCredits[$code]; $totalCredits += $moduleCredits[$g->getMCode()]; } } $result = $this->getDoctrine()->getRepository('AppBundle:Semester_results')->findOneBy(array('semId' => $id, 'stuId' => $student->getId())); if ($result == null) { $result = new Semester_results(); $result->setSemId($id); $result->setStuId($student->getId()); } if ($totalCredits > 0) { $result->setGPA($totalMarks / $totalCredits); } else { $result->setGPA(0); } $result->setSemCredits($totalCredits); $em->persist($result); $em->flush(); } $results = $this->getDoctrine()->getRepository('AppBundle:Semester_results')->findBy(array('semId' => $id), array('gPA' => 'DESC')); $rank = 1; $lastGpa = 5.0; // // set ranks // foreach ($results as $result) { // if ($result->getGpa() == $lastGpa) { // $rank--; // } // $result->setRank($rank); // $rank++; // $lastGpa = $result->getGpa(); // $em->persist($result); // $em->flush(); // } //to catch equal ranks $lastRank = 0; // set ranks foreach ($results as $result) { if ($result->getGpa() == $lastGpa) { $result->setRank($lastRank); } else { $result->setRank($rank); $lastRank = $rank; } $rank++; $lastGpa = $result->getGpa(); $em->persist($result); $em->flush(); } return $this->redirectToRoute('semester_home'); }
public static function getSemesterResults($stuId) { $con = Connection::getConnectionObject()->getConnection(); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $results = array(); //Make an empty array $stmt = $con->prepare('SELECT semester_results.id, semester_results.sem_id, semester_results.stu_id, semester_results.GPA, semester_results.rank FROM semester_results WHERE stu_id = ?'); $stmt->bind_param("s", $stuId); $stmt->execute(); $stmt->bind_result($id, $semId, $stuId, $gPA, $rank); while ($stmt->fetch()) { $result = new Semester_results(); $result->id = $id; $result->setSemId($semId); $result->setStuId($stuId); $result->setGPA($gPA); $result->setRank($rank); array_push($results, $result); //Push one by one } $stmt->close(); return $results; }