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); }