function quiz_store_question_result in Quiz 7.6
Same name and namespace in other branches
- 8.4 quiz.module \quiz_store_question_result()
- 5.2 quiz.module \quiz_store_question_result()
- 6.6 quiz.module \quiz_store_question_result()
- 6.2 quiz.module \quiz_store_question_result()
- 6.3 quiz.module \quiz_store_question_result()
- 6.4 quiz.module \quiz_store_question_result()
- 6.5 quiz.module \quiz_store_question_result()
- 7 quiz.module \quiz_store_question_result()
- 7.4 quiz.module \quiz_store_question_result()
- 7.5 quiz.module \quiz_store_question_result()
Store a quiz question result.
Parameters
$quiz: The quiz node
$result: Object with data about the result for a question.
$options: Array with options that affect the behavior of this function. ['set_msg'] - Sets a message if the last question was skipped.
Related topics
2 calls to quiz_store_question_result()
- quiz_end_scoring in ./
quiz.module - Score a completed quiz.
- quiz_question_answering_form_submit in question_types/
quiz_question/ quiz_question.module - Submit handler for the question answering form.
File
- ./
quiz.module, line 1897 - quiz.module Main file for the Quiz module.
Code
function quiz_store_question_result($quiz, $result, $options) {
if (!isset($result->score)) {
$result->score = $result->is_correct ? 1 : 0;
}
// Points are stored pre-scaled in the quiz_node_results_answers table. We get the scale.
if ($quiz->randomization < 2) {
$scale = db_query("SELECT (max_score / (\n SELECT max_score\n FROM {quiz_question_properties}\n WHERE nid = :nid AND vid = :vid\n )) as scale\n FROM {quiz_node_relationship}\n WHERE parent_nid = :parent_nid\n AND parent_vid = :parent_vid\n AND child_nid = :child_nid\n AND child_vid = :child_vid\n ", array(
':nid' => $result->nid,
':vid' => $result->vid,
':parent_nid' => $quiz->nid,
':parent_vid' => $quiz->vid,
':child_nid' => $result->nid,
':child_vid' => $result->vid,
))
->fetchField();
}
elseif ($quiz->randomization == 2) {
$scale = db_query("SELECT (max_score_for_random / (\n SELECT max_score\n FROM {quiz_question_properties}\n WHERE nid = :question_nid AND vid = :question_vid\n )) as scale\n FROM {quiz_node_properties}\n WHERE vid = :quiz_vid\n ", array(
':question_nid' => $result->nid,
':question_vid' => $result->vid,
':quiz_vid' => $quiz->vid,
))
->fetchField();
}
elseif ($quiz->randomization == 3) {
if (isset($options['question_data']['tid'])) {
$result->tid = $options['question_data']['tid'];
}
$scale = db_query("SELECT (max_score / (\n SELECT max_score\n FROM {quiz_question_properties}\n WHERE nid = :nid AND vid = :vid\n )) as scale\n FROM {quiz_terms}\n WHERE vid = :vid\n AND tid = :tid\n ", array(
':nid' => $result->nid,
':vid' => $result->vid,
':vid' => $quiz->vid,
':tid' => $result->tid,
))
->fetchField();
}
$points = round($result->score * $scale);
// Insert result data, or update existing data.
$result_answer_id = db_query("SELECT result_answer_id\n FROM {quiz_node_results_answers}\n WHERE question_nid = :question_nid\n AND question_vid = :question_vid\n AND result_id = :result_id", array(
':question_nid' => $result->nid,
':question_vid' => $result->vid,
':result_id' => $result->result_id,
))
->fetchField();
$entity = (object) array(
'result_answer_id' => $result_answer_id,
'question_nid' => $result->nid,
'question_vid' => $result->vid,
'result_id' => $result->result_id,
'is_correct' => (int) $result->is_correct,
'points_awarded' => $points,
'answer_timestamp' => REQUEST_TIME,
'is_skipped' => (int) $result->is_skipped,
'is_doubtful' => (int) $result->is_doubtful,
'number' => $options['question_data']['number'],
'tid' => $quiz->randomization == 3 && $result->tid ? $result->tid : NULL,
);
entity_save('quiz_result_answer', $entity);
}