/** * @Route( * "/{resourceId}/recalculate/score/{correctionId}", * name="icap_dropzone_recalculate_score", * requirements={"resourceId" = "\d+", "correctionId" = "\d+"} * ) * @ParamConverter("dropzone", class="IcapDropzoneBundle:Dropzone", options={"id" = "resourceId"}) * @ParamConverter("correction", class="IcapDropzoneBundle:Correction", options={"id" = "correctionId"}) * @Template() */ public function recalculateScoreAction(Dropzone $dropzone, Correction $correction) { $this->get('icap.manager.dropzone_voter')->isAllowToOpen($dropzone); $this->get('icap.manager.dropzone_voter')->isAllowToEdit($dropzone); if (!$dropzone->getPeerReview()) { throw new AccessDeniedException(); } $oldTotalGrade = $correction->getTotalGrade(); $totalGrade = $this->get('icap.manager.correction_manager')->calculateCorrectionTotalGrade($dropzone, $correction); $correction->setTotalGrade($totalGrade); $em = $this->getDoctrine()->getManager(); $em->persist($correction); $em->flush(); if ($oldTotalGrade != $totalGrade) { $event = new LogCorrectionUpdateEvent($dropzone, $correction->getDrop(), $correction); $this->dispatch($event); } return $this->redirect($this->generateUrl('icap_dropzone_drops_detail', array('resourceId' => $dropzone->getId(), 'dropId' => $correction->getDrop()->getId()))); }