function QuizController::resume in Quiz 8.6
Same name and namespace in other branches
- 8.5 src/Controller/QuizController.php \Drupal\quiz\Controller\QuizController::resume()
 - 6.x src/Controller/QuizController.php \Drupal\quiz\Controller\QuizController::resume()
 
Resume a quiz.
Search the database for an in progress attempt, and put it back into the session if allowed.
Return value
1 call to QuizController::resume()
- QuizController::take in src/
Controller/ QuizController.php  - Take the quiz.
 
File
- src/
Controller/ QuizController.php, line 155  
Class
Namespace
Drupal\quiz\ControllerCode
function resume($quiz) {
  $user = \Drupal::currentUser();
  // Make sure we use the same revision of the quiz throughout the quiz taking
  // session.
  $result_id = !empty($_SESSION['quiz'][$quiz
    ->id()]['result_id']) ? $_SESSION['quiz'][$quiz
    ->id()]['result_id'] : NULL;
  if ($result_id && ($quiz_result = QuizResult::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
      ->get('allow_resume')
      ->getString() && $user
      ->isAuthenticated()) {
      if ($quiz_result = $quiz
        ->getResumeableResult($user)) {
        // Put the result in the user's session.
        $_SESSION['quiz'][$quiz
          ->id()]['result_id'] = $quiz_result
          ->id();
        $_SESSION['quiz'][$quiz
          ->id()]['current'] = 1;
        // Now advance the user to after the last answered question.
        $prev = NULL;
        foreach ($quiz_result
          ->getLayout() as $qra) {
          if ($prev) {
            if ($qra
              ->get('answer_timestamp')
              ->isEmpty() && !$prev
              ->get('answer_timestamp')
              ->isEmpty()) {
              // This question has not been answered, but the previous
              // question has.
              $_SESSION['quiz'][$quiz
                ->id()]['current'] = $qra
                ->get('number')
                ->getString();
            }
          }
          $prev = clone $qra;
        }
        // Mark this quiz as being resumed from the database.
        $quiz_result->resume = TRUE;
        return $quiz_result;
      }
    }
  }
  return FALSE;
}