function quiz_take_quiz in Quiz 7.5
Same name and namespace in other branches
- 8.4 quiz.module \quiz_take_quiz()
- 5.2 quiz.module \quiz_take_quiz()
- 5 quiz.module \quiz_take_quiz()
- 6.6 quiz.module \quiz_take_quiz()
- 6.2 quiz.module \quiz_take_quiz()
- 6.3 quiz.module \quiz_take_quiz()
- 6.4 quiz.module \quiz_take_quiz()
- 6.5 quiz.module \quiz_take_quiz()
- 7.6 quiz.module \quiz_take_quiz()
- 7 quiz.module \quiz_take_quiz()
- 7.4 quiz.module \quiz_take_quiz()
Find a resumable result for this quiz and the current user.
Parameters
$quiz: The quiz node.
Return value
QuizResult Active quiz result.
Related topics
3 calls to quiz_take_quiz()
- quiz_quiztake_pane_content_type_render in plugins/
content_types/ quiztake_pane.inc - Run-time rendering of the body of the block (content type).
- quiz_take_page in ./
quiz.module - Page to either resume a quiz or display a start quiz form.
- quiz_view in ./
quiz.module - Implements hook_view().
File
- ./
quiz.module, line 1840 - quiz.module Main file for the Quiz module.
Code
function quiz_take_quiz($quiz) {
global $user;
// Make sure we use the same revision of the quiz throughout the quiz taking
// session.
$result_id = !empty($_SESSION['quiz'][$quiz->nid]['result_id']) ? $_SESSION['quiz'][$quiz->nid]['result_id'] : NULL;
if ($result_id && ($quiz_result = quiz_result_load($result_id))) {
return $quiz_result;
}
else {
// User doesn't have attempt in session. If we allow resuming we can load it
// from the database.
if ($quiz->allow_resume && !user_is_anonymous()) {
if ($result_id = _quiz_active_result_id($user->uid, $quiz->nid, $quiz->vid)) {
// Put the result in the user's session.
$_SESSION['quiz'][$quiz->nid]['result_id'] = $result_id;
$_SESSION['quiz'][$quiz->nid]['current'] = 1;
// Now advance the user to after the last answered question.
$quiz_result = quiz_result_load($result_id);
// Layout has already been ordered.
$prev = NULL;
foreach ($quiz_result
->getLayout() as $question) {
$qra = entity_load_single('quiz_result_answer', $question['result_answer_id']);
if ($prev) {
if (!$qra->answer_timestamp && $prev->answer_timestamp) {
// This question has not been answered, but the previous
// question has.
$_SESSION['quiz'][$quiz->nid]['current'] = $question['number'];
}
}
$prev = clone $qra;
}
// Resume a quiz from the database.
$quiz_result->resume = 1;
return $quiz_result;
}
}
}
return FALSE;
}