private function endCorrection(Request $request, Dropzone $dropzone, Correction $correction, $admin) { $em = $this->getDoctrine()->getManager(); $edit = false; if ($correction->getFinished() === true) { $edit = true; } $drop = $correction->getDrop(); $correction->setEndDate(new \DateTime()); $correction->setFinished(true); $totalGrade = $this->get('icap.manager.correction_manager')->calculateCorrectionTotalGrade($dropzone, $correction); $correction->setTotalGrade($totalGrade); $em->persist($correction); $em->flush(); $event = null; if ($edit == true) { $event = new LogCorrectionUpdateEvent($dropzone, $correction->getDrop(), $correction); } else { $event = new LogCorrectionEndEvent($dropzone, $correction->getDrop(), $correction); } $this->dispatch($event); $request->getSession()->getFlashBag()->add('success', $this->get('translator')->trans('Your correction has been saved', array(), 'icap_dropzone')); // check if the drop owner can now access to his grade. $this->checkUserGradeAvailableByDrop($drop); if ($admin === true) { return $this->redirect($this->generateUrl('icap_dropzone_drops_detail', array('resourceId' => $dropzone->getId(), 'dropId' => $correction->getDrop()->getId()))); } else { return $this->redirect($this->generateUrl('icap_dropzone_open', array('resourceId' => $dropzone->getId()))); } }