/** * Get penalty for an interaction and a paper. * * @param \UJM\ExoBundle\Entity\Question $question * @param int $paperID * * @return float */ private function getPenaltyPaper($question, $paperID) { $em = $this->doctrine->getManager(); $penalty = 0; $hints = $question->getHints(); foreach ($hints as $hint) { $lhp = $em->getRepository('UJMExoBundle:LinkHintPaper')->getLHP($hint->getId(), $paperID); if (count($lhp) > 0) { $signe = substr($hint->getPenalty(), 0, 1); if ($signe === '-') { $penalty += substr($hint->getPenalty(), 1); } else { $penalty += $hint->getPenalty(); } } } return $penalty; }
/** * Exports a question in a JSON-encodable format. * * @param Question $question * @param bool $withSolution * @param bool $forPaperList * * @return \stdClass * * @throws \Exception if the question type export is not implemented */ public function exportQuestion(Question $question, $withSolution = true, $forPaperList = false) { $handler = $this->handlerCollector->getHandlerForInteractionType($question->getType()); $rm = $this->rm; $data = new \stdClass(); $data->id = $question->getId(); $data->type = $handler->getQuestionMimeType(); $data->title = $question->getTitle(); $data->description = $question->getDescription(); $data->invite = $question->getInvite(); $data->supplementary = $question->getSupplementary(); $data->specification = $question->getSpecification(); $data->objects = array_map(function ($object) use($rm) { $resourceObjectData = new \stdClass(); $resourceObjectData->id = (string) $object->getResourceNode()->getId(); $resourceObjectData->type = $object->getResourceNode()->getResourceType()->getName(); switch ($object->getResourceNode()->getResourceType()->getName()) { case 'text': if ($rm->getResourceFromNode($object->getResourceNode())->getRevisions()[0]) { $resourceObjectData->data = $rm->getResourceFromNode($object->getResourceNode())->getRevisions()[0]->getContent(); } default: $resourceObjectData->url = $this->router->generate('claro_resource_open', ['resourceType' => $object->getResourceNode()->getResourceType()->getName(), 'node' => $object->getResourceNode()->getId()]); } return $resourceObjectData; }, $question->getObjects()->toArray()); if (count($question->getHints()) > 0) { $data->hints = array_map(function ($hint) use($withSolution) { return $this->hintManager->exportHint($hint, $withSolution); }, $question->getHints()->toArray()); } if ($withSolution && $question->getFeedback()) { $data->feedback = $question->getFeedback(); } $handler->convertInteractionDetails($question, $data, $withSolution, $forPaperList); return $data; }