You are here

function _quiz_cleanup_after_jumping in Quiz 7.4

Same name and namespace in other branches
  1. 8.4 quiz.module \_quiz_cleanup_after_jumping()
  2. 6.4 quiz.module \_quiz_cleanup_after_jumping()
  3. 7 quiz.module \_quiz_cleanup_after_jumping()

Clean up result data when the user jumps forward in a quiz

When jumping in a quiz we might be skipping lots of questions. We need to update the result data according to this...

Parameters

object $quiz: The quiz node we want to clean up results for

int $rid: Result id for the result we want to clean up

1 call to _quiz_cleanup_after_jumping()
quiz_jump_to in ./quiz.module
Set the current session to jump to a specific question number

File

./quiz.module, line 3892
Quiz Module

Code

function _quiz_cleanup_after_jumping($quiz, $rid) {
  foreach ($_SESSION['quiz_' . $quiz->nid]['previous_quiz_questions'] as $previous_question) {

    // tried db_merge() instead of separate SELECT and INSERT query
    // but it marks all the questions as skipped.
    $condition = array(
      ':rid' => $rid,
      ':nid' => $previous_question['nid'],
      ':vid' => $previous_question['vid'],
    );
    $duplicate = db_query('SELECT * FROM {quiz_node_results_answers} WHERE result_id = :rid AND question_nid = :nid AND question_vid = :vid', $condition)
      ->fetchAssoc();
    if (empty($duplicate)) {
      db_insert('quiz_node_results_answers')
        ->fields(array(
        'result_id' => $rid,
        'question_nid' => $previous_question['nid'],
        'question_vid' => $previous_question['vid'],
        'is_skipped' => 1,
        'answer_timestamp' => REQUEST_TIME,
        'number' => $previous_question['number'],
        'tid' => isset($previous_question['tid']) ? $previous_question['tid'] : 0,
      ))
        ->execute();
    }
  }
}