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, '');
}
Ejemplo n.º 2
0
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, '');
}