Esempio n. 1
0
 protected function convert_quiz_attempt($quiz, $attempt, moodle_recordset $questionsessionsrs, moodle_recordset $questionsstatesrs)
 {
     $qas = array();
     $this->logger->set_current_attempt_id($attempt->id);
     while ($qsession = $this->get_next_question_session($attempt, $questionsessionsrs)) {
         $question = $this->load_question($qsession->questionid, $quiz->id);
         $qstates = $this->get_question_states($attempt, $question, $questionsstatesrs);
         try {
             $qas[$qsession->questionid] = $this->convert_question_attempt($quiz, $attempt, $question, $qsession, $qstates);
         } catch (Exception $e) {
             notify($e->getMessage());
         }
     }
     $this->logger->set_current_attempt_id(null);
     $questionorder = array();
     foreach (explode(',', $quiz->questions) as $questionid) {
         if ($questionid == 0) {
             continue;
         }
         if (!array_key_exists($questionid, $qas)) {
             $this->logger->log_assumption("Supplying minimal open state for\n                        question {$questionid} in attempt {$attempt->id} at quiz\n                        {$attempt->quiz}, since the session was missing.", $attempt->id);
             try {
                 $question = $this->load_question($questionid, $quiz->id);
                 $qas[$questionid] = $this->supply_missing_question_attempt($quiz, $attempt, $question);
             } catch (Exception $e) {
                 notify($e->getMessage());
             }
         }
     }
     return $this->save_usage($quiz->preferredbehaviour, $attempt, $qas, $quiz->questions);
 }
 protected function convert_quiz_attempt($quiz, $attempt, moodle_recordset $questionsessionsrs, moodle_recordset $questionsstatesrs)
 {
     global $OUTPUT, $DB;
     $qas = array();
     $this->logger->set_current_attempt_id($attempt->id);
     while ($qsession = $this->get_next_question_session($attempt, $questionsessionsrs)) {
         $question = $this->load_question($qsession->questionid, $quiz->id);
         $qstates = $this->get_question_states($attempt, $question, $questionsstatesrs);
         try {
             $qas[$qsession->questionid] = $this->convert_question_attempt($quiz, $attempt, $question, $qsession, $qstates);
         } catch (Exception $e) {
             echo $OUTPUT->notification($e->getMessage());
         }
     }
     $this->logger->set_current_attempt_id(null);
     $questionorder = array();
     // For offlinequizzes we have to take the questionlist from the offline group or the attempt.
     $layout = $attempt->layout;
     $groupquestions = explode(',', $layout);
     foreach ($groupquestions as $questionid) {
         if ($questionid == 0) {
             continue;
         }
         if (!array_key_exists($questionid, $qas)) {
             $this->logger->log_assumption("Supplying minimal open state for\n                        question {$questionid} in attempt {$attempt->id} at quiz\n                        {$attempt->offlinequiz}, since the session was missing.", $attempt->id);
             try {
                 $question = $this->load_question($questionid, $quiz->id);
                 $qas[$questionid] = $this->supply_missing_question_attempt($quiz, $attempt, $question);
             } catch (Exception $e) {
                 echo $OUTPUT->notification($e->getMessage());
             }
         }
     }
     return $this->save_usage('deferredfeedback', $attempt, $qas, $layout);
 }