function game_question_shortanswer_question($game, $allowspaces, $use_repetitions) { global $DB; if ($game->questioncategoryid == 0) { print_error(get_string('must_select_questioncategory', 'game')); } $select = 'category=' . $game->questioncategoryid; if ($game->subcategories) { $cats = question_categorylist($game->questioncategoryid); if (strpos($cats, ',') > 0) { $select = 'category in (' . $cats . ')'; } } $select .= " AND qtype='shortanswer'"; $table = '{question} q'; $fields = 'q.id'; if (($id = game_question_selectrandom($game, $table, $select, $fields, $use_repetitions)) == false) { return false; } $select = "q.id={$id} AND qa.question={$id}" . " AND q.hidden=0 AND qtype='shortanswer'"; $table = "{question} q,{question_answers} qa"; $fields = "qa.id as answerid, q.id, q.questiontext as questiontext, " . "qa.answer as answertext, q.id as questionid, " . "0 as glossaryentryid, '' as attachment"; //Maybe there are more answers to one question. I use as correct the one with bigger fraction $sql = "SELECT {$fields} FROM {$table} WHERE {$select} ORDER BY fraction DESC"; if (($recs = $DB->get_records_sql($sql, null, 0, 1)) == false) { return false; } foreach ($recs as $rec) { return $rec; } }
function game_millionaire_selectquestion(&$aanswer, $game, $attempt, &$millionaire, &$query, $context) { global $DB, $USER; if ($game->sourcemodule != 'quiz' and $game->sourcemodule != 'question') { print_error(get_string('millionaire_sourcemodule_must_quiz_question', 'game', get_string('modulename', 'quiz')) . ' ' . get_string('modulename', $attempt->sourcemodule)); } if ($millionaire->queryid != 0) { game_millionaire_loadquestions($game, $millionaire, $query, $aanswer, $context); return; } if ($game->sourcemodule == 'quiz') { if ($game->quizid == 0) { print_error(get_string('must_select_quiz', 'game')); } if (game_get_moodle_version() < '02.07') { $select = "qtype='multichoice' AND quiz='{$game->quizid}' AND qmo.questionid=q.id" . " AND qqi.question=q.id"; $table = "{quiz_question_instances} qqi,{question} q, {qtype_multichoice_options} qmo"; $order = ''; } else { $select = "qtype='multichoice' AND qs.quizid='{$game->quizid}' AND qmo.questionid=q.id" . " AND qs.questionid=q.id"; $table = "{quiz_slots} qs,{question} q, {qtype_multichoice_options} qmo"; $order = 'qs.page,qs.slot'; } } else { if ($game->questioncategoryid == 0) { print_error(get_string('must_select_questioncategory', 'game')); } // Include subcategories. $select = 'category=' . $game->questioncategoryid; if ($game->subcategories) { $cats = question_categorylist($game->questioncategoryid); if (count($cats)) { $select = 'q.category in (' . implode(',', $cats) . ')'; } } $select .= " AND qtype='multichoice' AND qmo.single=1 AND qmo.questionid=q.id"; $table = '{question} q, {qtype_multichoice_options} qmo'; } $select .= ' AND hidden=0'; if ($game->shuffle or $game->quizid == 0) { $questionid = game_question_selectrandom($game, $table, $select, 'q.id as id', true); } else { $questionid = game_millionaire_select_serial_question($game, $table, $select, 'q.id as id', $millionaire->level, $order); } if ($questionid == 0) { print_error(get_string('no_questions', 'game')); } $q = $DB->get_record('question', array('id' => $questionid), 'id,questiontext'); $recs = $DB->get_records('question_answers', array('question' => $questionid)); if ($recs === false) { print_error(get_string('no_questions', 'game')); } $correct = 0; $ids = array(); foreach ($recs as $rec) { $aanswer[] = game_filterquestion_answer(str_replace('\\"', '"', $rec->answer), $rec->id, $context->id, $game->course); $ids[] = $rec->id; if ($rec->fraction == 1) { $correct = $rec->id; } } $count = count($aanswer); for ($i = 1; $i <= $count; $i++) { $sel = mt_rand(0, $count - 1); $temp = array_splice($aanswer, $sel, 1); $aanswer[] = $temp[0]; $temp = array_splice($ids, $sel, 1); $ids[] = $temp[0]; } $query = new StdClass(); $query->attemptid = $attempt->id; $query->gamekind = $game->gamekind; $query->gameid = $game->id; $query->userid = $USER->id; $query->sourcemodule = $game->sourcemodule; $query->glossaryentryid = 0; $query->questionid = $questionid; $query->questiontext = addslashes($q->questiontext); $query->answertext = implode(',', $ids); $query->correct = array_search($correct, $ids) + 1; if (!($query->id = $DB->insert_record('game_queries', $query))) { print_error('error inserting to game_queries'); } $updrec = new StdClass(); $updrec->id = $millionaire->id; $updrec->queryid = $query->id; if (!($newid = $DB->update_record('game_millionaire', $updrec))) { print_error('error updating in game_millionaire'); } $score = $millionaire->level / 15; game_updateattempts($game, $attempt, $score, 0); game_update_queries($game, $attempt, $query, $score, ''); }
function game_millionaire_SelectQuestion(&$aAnswer, $game, $attempt, &$millionaire, &$query) { global $CFG, $USER; if ($game->sourcemodule != 'quiz' and $game->sourcemodule != 'question') { error(get_string('millionaire_sourcemodule_must_quiz_question', 'game', get_string('modulename', 'quiz')) . ' ' . get_string('modulename', $attempt->sourcemodule)); } if ($millionaire->queryid != 0) { game_millionaire_loadquestions($millionaire, $query, $aAnswer); return; } if ($game->sourcemodule == 'quiz') { if ($game->quizid == 0) { error(get_string('must_select_quiz', 'game')); } $select = "qtype='multichoice' AND quiz='{$game->quizid}' " . " AND {$CFG->prefix}quiz_question_instances.question={$CFG->prefix}question.id"; $table = "question,{$CFG->prefix}quiz_question_instances"; } else { if ($game->questioncategoryid == 0) { error(get_string('must_select_questioncategory', 'game')); } //include subcategories $select = 'category=' . $game->questioncategoryid; if ($game->subcategories) { $cats = question_categorylist($game->questioncategoryid); if (strpos($cats, ',') > 0) { $select = 'category in (' . $cats . ')'; } } $select .= " AND qtype='multichoice'"; $table = "question"; } $select .= " AND {$CFG->prefix}question.hidden=0"; if ($game->shuffle or $game->quizid == 0) { $questionid = game_question_selectrandom($game, $table, $select, "{$CFG->prefix}question.id as id"); } else { $questionid = game_millionaire_select_serial_question($game, $table, $select, "{$CFG->prefix}question.id as id", $millionaire->level); } if ($questionid == 0) { error(get_string('millionaire_nowords', 'game')); } $q = get_record_select('question', "id={$questionid}", 'id,questiontext'); $recs = get_records_select('question_answers', "question={$questionid}"); if ($recs === false) { error(get_string('millionaire_no_questions', 'game')); } $correct = 0; $ids = array(); foreach ($recs as $rec) { $aAnswer[] = $rec->answer; $ids[] = $rec->id; if ($rec->fraction == 1) { $correct = $rec->id; } } $count = count($aAnswer); for ($i = 1; $i <= $count; $i++) { $sel = mt_rand(0, $count - 1); $temp = array_splice($aAnswer, $sel, 1); $aAnswer[] = $temp[0]; $temp = array_splice($ids, $sel, 1); $ids[] = $temp[0]; } $query = new StdClass(); $query->attemptid = $attempt->id; $query->gamekind = $game->gamekind; $query->gameid = $game->id; $query->userid = $USER->id; $query->sourcemodule = $game->sourcemodule; $query->questionid = $questionid; $query->questiontext = addslashes($q->questiontext); $query->answertext = implode(',', $ids); $query->correct = array_search($correct, $ids) + 1; if (!($query->id = insert_record('game_queries', $query))) { print_object($query); error('error inserting to game_queries'); } $updrec->id = $millionaire->id; $updrec->queryid = $query->id; if (!($newid = update_record('game_millionaire', $updrec))) { error('error updating in game_millionaire'); } $score = $millionaire->level / 15; game_updateattempts($game, $attempt, $score, 0); game_update_queries($game, $attempt, $query, $score, ''); }
function game_question_shortanswer_question($game, $allowspaces, $use_repetitions) { global $CFG; if ($game->questioncategoryid == 0) { error(get_string('must_select_questioncategory', 'game')); } $select = $CFG->prefix . 'question.category=' . $game->questioncategoryid; if ($game->subcategories) { $cats = question_categorylist($game->questioncategoryid); if (strpos($cats, ',') > 0) { $select = $CFG->prefix . 'question.category in (' . $cats . ')'; } } $select .= " AND qtype='shortanswer'"; $table = "question"; $fields = "{$CFG->prefix}question.id"; if (($id = game_question_selectrandom($game, $table, $select, $fields, $use_repetitions)) == false) { return false; } $select = "q.id={$id} AND qa.question={$id}" . " AND q.hidden=0 AND qtype='shortanswer'"; $table = "question q,{$CFG->prefix}question_answers qa"; $fields = "qa.id as answerid, q.id, q.questiontext as questiontext, " . "qa.answer as answertext, q.id as questionid, " . "0 as glossaryentryid, '' as attachment"; //Maybe there are more answers to one question. I use as correct the one with bigger fraction $recs = get_records_select($table, $select, 'fraction DESC', $fields); if ($recs == false) { return false; } foreach ($recs as $rec) { return $rec; } }