plugin/exo/Manager/AttemptManager.php
public function useHint(Paper $paper, $questionId, $hintId, $clientIp)
    {
        $question = $paper->getQuestion($questionId);

        if (empty($question)) {
            throw new \LogicException("Question {$questionId} and paper {$paper->getId()} are not related");
        }

        $hint = null;

        foreach ($question['hints'] as $questionHint) {
            if ($hintId === $questionHint['id']) {
                $hint = $questionHint;
                break;
            }
        }

        if (empty($hint)) {
            // Hint is not related to a question of the current attempt
            throw new \LogicException("Hint {$hintId} and paper {$paper->getId()} are not related");
        }

        // Retrieve or create the answer for the question
        $answer = $paper->getAnswer($question['id']);

        if (empty($answer)) {
            $answer = new Answer();
            $answer->setTries(0); // Using an hint is not a try. This will be updated when user will submit his answer
            $answer->setQuestionId($question['id']);
            $answer->setIp($clientIp);

            // Link the new answer to the paper
            $paper->addAnswer($answer);
        }

        $answer->addUsedHint($hintId);

        // Calculate new answer score
        $decodedQuestion = $this->itemSerializer->deserialize($question, new Item());
        $score = $this->itemManager->calculateScore($decodedQuestion, $answer);
        $answer->setScore($score);

        $this->om->persist($answer);
        $this->om->flush();

        return $hint;
    }
public function useHint(Paper $paper, $questionId, $hintId, $clientIp)
    {
        $question = $paper->getQuestion($questionId);

        if (empty($question)) {
            throw new \LogicException("Question {$questionId} and paper {$paper->getId()} are not related");
        }

        $hint = null;

        foreach ($question['hints'] as $questionHint) {
            if ($hintId === $questionHint['id']) {
                $hint = $questionHint;
                break;
            }
        }

        if (empty($hint)) {
            // Hint is not related to a question of the current attempt
            throw new \LogicException("Hint {$hintId} and paper {$paper->getId()} are not related");
        }

        // Retrieve or create the answer for the question
        $answer = $paper->getAnswer($question['id']);

        if (empty($answer)) {
            $answer = new Answer();
            $answer->setTries(0); // Using an hint is not a try. This will be updated when user will submit his answer
            $answer->setQuestionId($question['id']);
            $answer->setIp($clientIp);

            // Link the new answer to the paper
            $paper->addAnswer($answer);
        }

        $answer->addUsedHint($hintId);

        // Calculate new answer score
        $decodedQuestion = $this->itemSerializer->deserialize($question, new Item());
        $score = $this->itemManager->calculateScore($decodedQuestion, $answer);
        $answer->setScore($score);

        $this->om->persist($answer);
        $this->om->flush();

        return $hint;
    }
public function useHint ( Paper $ paper , $ questionId , $ hintId , $ clientIp ) { $ question = $ paper -> getQuestion ( $ questionId ) ; if ( empty ( $ question ) ) { throw new \ LogicException ( "Question {$questionId} and paper {$paper->getId()} are not related" ) ; } $ hint = null ; foreach ( $ question [ 'hints' ] as $ questionHint ) { if ( $ hintId === $ questionHint [ 'id' ] ) { $ hint = $ questionHint ; break ; } } if ( empty ( $ hint ) ) { // Hint is not related to a question of the current attempt throw new \ LogicException ( "Hint {$hintId} and paper {$paper->getId()} are not related" ) ; } // Retrieve or create the answer for the question $ answer = $ paper -> getAnswer ( $ question [ 'id' ] ) ; if ( empty ( $ answer ) ) { $ answer = new Answer ( ) ; $ answer -> setTries ( 0 ) ; // Using an hint is not a try. This will be updated when user will submit his answer $ answer -> setQuestionId ( $ question [ 'id' ] ) ; $ answer -> setIp ( $ clientIp ) ; // Link the new answer to the paper $ paper -> addAnswer ( $ answer ) ; } $ answer -> addUsedHint ( $ hintId ) ; // Calculate new answer score $ decodedQuestion = $ this -> itemSerializer -> deserialize ( $ question , new Item ( ) ) ; $ score = $ this -> itemManager -> calculateScore ( $ decodedQuestion , $ answer ) ; $ answer -> setScore ( $ score ) ; $ this -> om -> persist ( $ answer ) ; $ this -> om -> flush ( ) ; return $ hint ; }
Flags an hint has used in the user paper and returns the hint content.

@param Paper  $paper
@param string $questionId
@param string $hintId
@param string $clientIp

@return mixed
Flags an hint has used in the user paper and returns the hint content .